Commit c8d61d1b authored by Imre Deak's avatar Imre Deak Committed by Tony Lindgren

[PATCH] ARM: OMAP: FB support for OMAP2

included in this FB patch:
- OMAP2 support with overlay, colorkey handling
- the palmte patch posted by Romain Goyet. The palette loading is
  changed a bit, so that it works ok with other platforms as well.
- registering the FB device through plat-omap/devices.c instead of doing
  it from the driver itself. Boards have to specify the OMAP_TAG_LCD
  config in the related board-*.c with in order to have FB support.
- pixel clock divider calculation based on the panel->pixel_clock
  instead of the wired panel->pcd
- support for external controllers both on SOSSI (OMAP1) and
  RFBI (OMAP2), kudos to Juha for this
- removal of the OMAP1 2D gfx stuff, it didn't really improve the
  performance:(
- double buffering IOCTL API, as this can be done in a more standard
  way through FBIOPUT_VSCREENINFO
- update of the affected omap_*_defconfigs
- minor formatting changes and typo fixes

Still TODO:
- OMAP2 Rotation, scaling of video planes
- OMAP2 digit-out (aka tv-out)
- moving the frame buffer to an alternative locating (onchip SRAM)

I tested it with H2 and H4 but it might break on other OMAP1 boards as
there were changes also in the old parts.
parent c6358b2c
#
# Automatically generated make config: don't edit
# Linux kernel version: 2.6.9-rc3-omap1
# Mon Oct 4 10:15:30 2004
# Linux kernel version: 2.6.14-rc4-omap1
# Tue Oct 18 17:57:57 2005
#
CONFIG_ARM=y
CONFIG_MMU=y
CONFIG_UID16=y
CONFIG_RWSEM_GENERIC_SPINLOCK=y
CONFIG_GENERIC_IOMAP=y
CONFIG_GENERIC_CALIBRATE_DELAY=y
#
# Code maturity level options
......@@ -15,33 +15,40 @@ CONFIG_GENERIC_IOMAP=y
CONFIG_EXPERIMENTAL=y
CONFIG_CLEAN_COMPILE=y
CONFIG_BROKEN_ON_SMP=y
CONFIG_INIT_ENV_ARG_LIMIT=32
#
# General setup
#
CONFIG_LOCALVERSION=""
CONFIG_LOCALVERSION_AUTO=y
CONFIG_SWAP=y
CONFIG_SYSVIPC=y
# CONFIG_POSIX_MQUEUE is not set
# CONFIG_BSD_PROCESS_ACCT is not set
CONFIG_SYSCTL=y
# CONFIG_AUDIT is not set
CONFIG_LOG_BUF_SHIFT=14
# CONFIG_HOTPLUG is not set
CONFIG_KOBJECT_UEVENT=y
# CONFIG_IKCONFIG is not set
CONFIG_INITRAMFS_SOURCE=""
# CONFIG_EMBEDDED is not set
CONFIG_KALLSYMS=y
# CONFIG_KALLSYMS_ALL is not set
# CONFIG_KALLSYMS_EXTRA_PASS is not set
CONFIG_PRINTK=y
CONFIG_BUG=y
CONFIG_BASE_FULL=y
CONFIG_FUTEX=y
CONFIG_EPOLL=y
CONFIG_IOSCHED_NOOP=y
CONFIG_IOSCHED_AS=y
CONFIG_IOSCHED_DEADLINE=y
CONFIG_IOSCHED_CFQ=y
CONFIG_CC_OPTIMIZE_FOR_SIZE=y
CONFIG_SHMEM=y
CONFIG_CC_ALIGN_FUNCTIONS=0
CONFIG_CC_ALIGN_LABELS=0
CONFIG_CC_ALIGN_LOOPS=0
CONFIG_CC_ALIGN_JUMPS=0
# CONFIG_TINY_SHMEM is not set
CONFIG_BASE_SMALL=0
#
# Loadable module support
......@@ -51,6 +58,7 @@ CONFIG_MODULE_UNLOAD=y
# CONFIG_MODULE_FORCE_UNLOAD is not set
CONFIG_OBSOLETE_MODPARM=y
# CONFIG_MODVERSIONS is not set
# CONFIG_MODULE_SRCVERSION_ALL is not set
# CONFIG_KMOD is not set
#
......@@ -74,12 +82,35 @@ CONFIG_OBSOLETE_MODPARM=y
# CONFIG_ARCH_SHARK is not set
# CONFIG_ARCH_LH7A40X is not set
CONFIG_ARCH_OMAP=y
# CONFIG_ARCH_VERSATILE_PB is not set
# CONFIG_ARCH_VERSATILE is not set
# CONFIG_ARCH_IMX is not set
# CONFIG_ARCH_H720X is not set
# CONFIG_ARCH_AAEC2000 is not set
#
# TI OMAP Implementations
#
CONFIG_ARCH_OMAP_OTG=y
CONFIG_ARCH_OMAP1=y
# CONFIG_ARCH_OMAP2 is not set
#
# OMAP Feature Selections
#
# CONFIG_OMAP_RESET_CLOCKS is not set
CONFIG_OMAP_BOOT_TAG=y
# CONFIG_OMAP_BOOT_REASON is not set
# CONFIG_OMAP_GPIO_SWITCH is not set
CONFIG_OMAP_MUX=y
CONFIG_OMAP_MUX_DEBUG=y
CONFIG_OMAP_MUX_WARNINGS=y
CONFIG_OMAP_MPU_TIMER=y
# CONFIG_OMAP_32K_TIMER is not set
# CONFIG_OMAP_DM_TIMER is not set
CONFIG_OMAP_LL_DEBUG_UART1=y
# CONFIG_OMAP_LL_DEBUG_UART2 is not set
# CONFIG_OMAP_LL_DEBUG_UART3 is not set
CONFIG_OMAP_SERIAL_WAKE=y
#
# OMAP Core Type
......@@ -87,7 +118,6 @@ CONFIG_ARCH_OMAP=y
# CONFIG_ARCH_OMAP730 is not set
# CONFIG_ARCH_OMAP15XX is not set
CONFIG_ARCH_OMAP16XX=y
CONFIG_ARCH_OMAP_OTG=y
#
# OMAP Board Type
......@@ -95,21 +125,14 @@ CONFIG_ARCH_OMAP_OTG=y
# CONFIG_MACH_OMAP_INNOVATOR is not set
CONFIG_MACH_OMAP_H2=y
# CONFIG_MACH_OMAP_H3 is not set
# CONFIG_MACH_OMAP_H4 is not set
# CONFIG_MACH_OMAP_OSK is not set
# CONFIG_MACH_OMAP_GENERIC is not set
#
# OMAP Feature Selections
# OMAP CPU Speed
#
CONFIG_OMAP_BOOT_TAG=y
# CONFIG_OMAP_BOOT_REASON is not set
CONFIG_OMAP_MUX=y
CONFIG_OMAP_MUX_DEBUG=y
CONFIG_OMAP_MUX_WARNINGS=y
CONFIG_OMAP_LL_DEBUG_UART1=y
# CONFIG_OMAP_LL_DEBUG_UART2 is not set
# CONFIG_OMAP_LL_DEBUG_UART3 is not set
# CONFIG_OMAP_CLOCKS_SET_BY_BOOTLOADER is not set
# CONFIG_OMAP_ARM_216MHZ is not set
# CONFIG_OMAP_ARM_192MHZ is not set
# CONFIG_OMAP_ARM_168MHZ is not set
# CONFIG_OMAP_ARM_120MHZ is not set
......@@ -124,6 +147,7 @@ CONFIG_CPU_32=y
CONFIG_CPU_ARM926T=y
CONFIG_CPU_32v5=y
CONFIG_CPU_ABRT_EV5TJ=y
CONFIG_CPU_CACHE_VIVT=y
CONFIG_CPU_COPY_V4WB=y
CONFIG_CPU_TLB_V4WBI=y
......@@ -137,42 +161,150 @@ CONFIG_ARM_THUMB=y
# CONFIG_CPU_CACHE_ROUND_ROBIN is not set
#
# General setup
# Bus support
#
CONFIG_ISA_DMA_API=y
#
# PCCARD (PCMCIA/CardBus) support
#
# CONFIG_PCCARD is not set
#
# Kernel Features
#
# CONFIG_PREEMPT is not set
# CONFIG_NO_IDLE_HZ is not set
# CONFIG_ARCH_DISCONTIGMEM_ENABLE is not set
CONFIG_SELECT_MEMORY_MODEL=y
CONFIG_FLATMEM_MANUAL=y
# CONFIG_DISCONTIGMEM_MANUAL is not set
# CONFIG_SPARSEMEM_MANUAL is not set
CONFIG_FLATMEM=y
CONFIG_FLAT_NODE_MEM_MAP=y
# CONFIG_SPARSEMEM_STATIC is not set
CONFIG_LEDS=y
# CONFIG_LEDS_TIMER is not set
# CONFIG_LEDS_CPU is not set
CONFIG_ALIGNMENT_TRAP=y
#
# Boot options
#
# CONFIG_ZBOOT_ROM is not set
CONFIG_ZBOOT_ROM_TEXT=0x0
CONFIG_ZBOOT_ROM_BSS=0x0
CONFIG_CMDLINE="mem=32M console=ttyS0,115200n8 root=/dev/ram0 rw initrd=0x10600000,8M ramdisk_size=8192"
# CONFIG_XIP_KERNEL is not set
#
# CPU Frequency scaling
#
# CONFIG_CPU_FREQ is not set
#
# Floating point emulation
#
#
# At least one math emulation must be selected
# At least one emulation must be selected
#
CONFIG_FPE_NWFPE=y
# CONFIG_FPE_NWFPE_XP is not set
# CONFIG_FPE_FASTFPE is not set
# CONFIG_VFP is not set
#
# Userspace binary formats
#
CONFIG_BINFMT_ELF=y
CONFIG_BINFMT_AOUT=y
# CONFIG_BINFMT_MISC is not set
# CONFIG_ARTHUR is not set
#
# Generic Driver Options
# Power management options
#
CONFIG_STANDALONE=y
CONFIG_PREVENT_FIRMWARE_BUILD=y
CONFIG_DEBUG_DRIVER=y
# CONFIG_PM is not set
# CONFIG_PREEMPT is not set
# CONFIG_ARTHUR is not set
CONFIG_CMDLINE="mem=32M console=ttyS0,115200n8 root=/dev/ram0 rw initrd=0x10600000,8M ramdisk_size=8192"
CONFIG_LEDS=y
# CONFIG_LEDS_TIMER is not set
# CONFIG_LEDS_CPU is not set
CONFIG_ALIGNMENT_TRAP=y
#
# Parallel port support
# Networking
#
# CONFIG_PARPORT is not set
CONFIG_NET=y
#
# Networking options
#
CONFIG_PACKET=y
# CONFIG_PACKET_MMAP is not set
CONFIG_UNIX=y
# CONFIG_NET_KEY is not set
CONFIG_INET=y
# CONFIG_IP_MULTICAST is not set
# CONFIG_IP_ADVANCED_ROUTER is not set
CONFIG_IP_FIB_HASH=y
CONFIG_IP_PNP=y
CONFIG_IP_PNP_DHCP=y
CONFIG_IP_PNP_BOOTP=y
# CONFIG_IP_PNP_RARP is not set
# CONFIG_NET_IPIP is not set
# CONFIG_NET_IPGRE is not set
# CONFIG_ARPD is not set
# CONFIG_SYN_COOKIES is not set
# CONFIG_INET_AH is not set
# CONFIG_INET_ESP is not set
# CONFIG_INET_IPCOMP is not set
# CONFIG_INET_TUNNEL is not set
CONFIG_INET_DIAG=y
CONFIG_INET_TCP_DIAG=y
# CONFIG_TCP_CONG_ADVANCED is not set
CONFIG_TCP_CONG_BIC=y
# CONFIG_IPV6 is not set
# CONFIG_NETFILTER is not set
#
# DCCP Configuration (EXPERIMENTAL)
#
# CONFIG_IP_DCCP is not set
#
# SCTP Configuration (EXPERIMENTAL)
#
# CONFIG_IP_SCTP is not set
# CONFIG_ATM is not set
# CONFIG_BRIDGE is not set
# CONFIG_VLAN_8021Q is not set
# CONFIG_DECNET is not set
# CONFIG_LLC2 is not set
# CONFIG_IPX is not set
# CONFIG_ATALK is not set
# CONFIG_X25 is not set
# CONFIG_LAPB is not set
# CONFIG_NET_DIVERT is not set
# CONFIG_ECONET is not set
# CONFIG_WAN_ROUTER is not set
# CONFIG_NET_SCHED is not set
# CONFIG_NET_CLS_ROUTE is not set
#
# Network testing
#
# CONFIG_NET_PKTGEN is not set
# CONFIG_HAMRADIO is not set
# CONFIG_IRDA is not set
# CONFIG_BT is not set
# CONFIG_IEEE80211 is not set
#
# Device Drivers
#
#
# Generic Driver Options
#
CONFIG_STANDALONE=y
CONFIG_PREVENT_FIRMWARE_BUILD=y
# CONFIG_FW_LOADER is not set
CONFIG_DEBUG_DRIVER=y
#
# Memory Technology Devices (MTD)
......@@ -180,8 +312,8 @@ CONFIG_ALIGNMENT_TRAP=y
CONFIG_MTD=y
CONFIG_MTD_DEBUG=y
CONFIG_MTD_DEBUG_VERBOSE=3
CONFIG_MTD_PARTITIONS=y
# CONFIG_MTD_CONCAT is not set
CONFIG_MTD_PARTITIONS=y
# CONFIG_MTD_REDBOOT_PARTS is not set
CONFIG_MTD_CMDLINE_PARTS=y
# CONFIG_MTD_AFS_PARTS is not set
......@@ -219,6 +351,7 @@ CONFIG_MTD_CFI_UTIL=y
# CONFIG_MTD_RAM is not set
# CONFIG_MTD_ROM is not set
# CONFIG_MTD_ABSENT is not set
# CONFIG_MTD_XIP is not set
#
# Mapping drivers for chip access
......@@ -227,16 +360,17 @@ CONFIG_MTD_CFI_UTIL=y
# CONFIG_MTD_PHYSMAP is not set
# CONFIG_MTD_ARM_INTEGRATOR is not set
# CONFIG_MTD_EDB7312 is not set
# CONFIG_MTD_OMAP_NORv2 is not set
# CONFIG_MTD_OMAP_NOR is not set
# CONFIG_MTD_PLATRAM is not set
#
# Self-contained MTD device drivers
#
# CONFIG_MTD_SLRAM is not set
# CONFIG_MTD_PHRAM is not set
# CONFIG_MTD_OMAP_NOR is not set
# CONFIG_MTD_MTDRAM is not set
# CONFIG_MTD_BLKMTD is not set
# CONFIG_MTD_BLOCK2MTD is not set
#
# Disk-On-Chip Device Drivers
......@@ -250,6 +384,11 @@ CONFIG_MTD_CFI_UTIL=y
#
# CONFIG_MTD_NAND is not set
#
# Parallel port support
#
# CONFIG_PARPORT is not set
#
# Plug and Play support
#
......@@ -257,98 +396,71 @@ CONFIG_MTD_CFI_UTIL=y
#
# Block devices
#
# CONFIG_BLK_DEV_FD is not set
# CONFIG_BLK_DEV_COW_COMMON is not set
CONFIG_BLK_DEV_LOOP=y
# CONFIG_BLK_DEV_CRYPTOLOOP is not set
# CONFIG_BLK_DEV_NBD is not set
# CONFIG_BLK_DEV_UB is not set
CONFIG_BLK_DEV_RAM=y
CONFIG_BLK_DEV_RAM_COUNT=16
CONFIG_BLK_DEV_RAM_SIZE=8192
CONFIG_BLK_DEV_INITRD=y
# CONFIG_CDROM_PKTCDVD is not set
#
# Multi-device support (RAID and LVM)
# IO Schedulers
#
# CONFIG_MD is not set
CONFIG_IOSCHED_NOOP=y
CONFIG_IOSCHED_AS=y
CONFIG_IOSCHED_DEADLINE=y
CONFIG_IOSCHED_CFQ=y
# CONFIG_ATA_OVER_ETH is not set
#
# Networking support
# SCSI device support
#
CONFIG_NET=y
# CONFIG_RAID_ATTRS is not set
# CONFIG_SCSI is not set
#
# Networking options
# Multi-device support (RAID and LVM)
#
CONFIG_PACKET=y
# CONFIG_PACKET_MMAP is not set
# CONFIG_NETLINK_DEV is not set
CONFIG_UNIX=y
# CONFIG_NET_KEY is not set
CONFIG_INET=y
# CONFIG_IP_MULTICAST is not set
# CONFIG_IP_ADVANCED_ROUTER is not set
CONFIG_IP_PNP=y
CONFIG_IP_PNP_DHCP=y
CONFIG_IP_PNP_BOOTP=y
# CONFIG_IP_PNP_RARP is not set
# CONFIG_NET_IPIP is not set
# CONFIG_NET_IPGRE is not set
# CONFIG_ARPD is not set
# CONFIG_SYN_COOKIES is not set
# CONFIG_INET_AH is not set
# CONFIG_INET_ESP is not set
# CONFIG_INET_IPCOMP is not set
# CONFIG_INET_TUNNEL is not set
# CONFIG_IPV6 is not set
# CONFIG_NETFILTER is not set
# CONFIG_MD is not set
#
# SCTP Configuration (EXPERIMENTAL)
# Fusion MPT device support
#
# CONFIG_IP_SCTP is not set
# CONFIG_ATM is not set
# CONFIG_BRIDGE is not set
# CONFIG_VLAN_8021Q is not set
# CONFIG_DECNET is not set
# CONFIG_LLC2 is not set
# CONFIG_IPX is not set
# CONFIG_ATALK is not set
# CONFIG_X25 is not set
# CONFIG_LAPB is not set
# CONFIG_NET_DIVERT is not set
# CONFIG_ECONET is not set
# CONFIG_WAN_ROUTER is not set
# CONFIG_NET_HW_FLOWCONTROL is not set
# CONFIG_FUSION is not set
#
# QoS and/or fair queueing
# IEEE 1394 (FireWire) support
#
# CONFIG_NET_SCHED is not set
# CONFIG_NET_CLS_ROUTE is not set
#
# Network testing
# I2O device support
#
#
# Network device support
#
# CONFIG_NET_PKTGEN is not set
# CONFIG_NETPOLL is not set
# CONFIG_NET_POLL_CONTROLLER is not set
# CONFIG_HAMRADIO is not set
# CONFIG_IRDA is not set
# CONFIG_BT is not set
CONFIG_NETDEVICES=y
# CONFIG_DUMMY is not set
# CONFIG_BONDING is not set
# CONFIG_EQUALIZER is not set
# CONFIG_TUN is not set
#
# PHY device support
#
# CONFIG_PHYLIB is not set
#
# Ethernet (10 or 100Mbit)
#
CONFIG_NET_ETHERNET=y
CONFIG_MII=y
CONFIG_NET_VENDOR_SMC=y
CONFIG_SMC91X=y
# CONFIG_SMC9194 is not set
# CONFIG_DM9000 is not set
#
# Ethernet (1000 Mbit)
......@@ -385,23 +497,8 @@ CONFIG_SLIP_COMPRESSED=y
# CONFIG_SLIP_MODE_SLIP6 is not set
# CONFIG_SHAPER is not set
# CONFIG_NETCONSOLE is not set
#
# SCSI device support
#
# CONFIG_SCSI is not set
#
# Fusion MPT device support
#
#
# IEEE 1394 (FireWire) support
#
#
# I2O device support
#
# CONFIG_NETPOLL is not set
# CONFIG_NET_POLL_CONTROLLER is not set
#
# ISDN subsystem
......@@ -425,16 +522,6 @@ CONFIG_INPUT_MOUSEDEV_SCREEN_Y=768
CONFIG_INPUT_EVDEV=y
CONFIG_INPUT_EVBUG=y
#
# Input I/O drivers
#
# CONFIG_GAMEPORT is not set
CONFIG_SOUND_GAMEPORT=y
CONFIG_SERIO=y
CONFIG_SERIO_SERPORT=y
# CONFIG_SERIO_CT82C710 is not set
# CONFIG_SERIO_RAW is not set
#
# Input Device Drivers
#
......@@ -445,6 +532,14 @@ CONFIG_SERIO_SERPORT=y
CONFIG_INPUT_MISC=y
CONFIG_INPUT_UINPUT=y
#
# Hardware I/O ports
#
CONFIG_SERIO=y
CONFIG_SERIO_SERPORT=y
# CONFIG_SERIO_RAW is not set
# CONFIG_GAMEPORT is not set
#
# Character devices
#
......@@ -464,7 +559,6 @@ CONFIG_SERIAL_8250_NR_UARTS=4
#
# Non-8250 serial port support
#
CONFIG_SERIAL_8250_OMAP=y
CONFIG_SERIAL_CORE=y
CONFIG_SERIAL_CORE_CONSOLE=y
CONFIG_UNIX98_PTYS=y
......@@ -490,7 +584,8 @@ CONFIG_WATCHDOG_NOWAYOUT=y
# USB-based Watchdog Cards
#
# CONFIG_USBPCWATCHDOG is not set
# CONFIG_OMAP16XX_WATCHDOG is not set
# CONFIG_OMAP_WATCHDOG is not set
# CONFIG_OMAP_RNG is not set
# CONFIG_NVRAM is not set
# CONFIG_RTC is not set
CONFIG_OMAP_RTC=y
......@@ -500,9 +595,12 @@ CONFIG_OMAP_RTC=y
#
# Ftape, the floppy tape device driver
#
# CONFIG_DRM is not set
# CONFIG_RAW_DRIVER is not set
#
# TPM devices
#
#
# I2C support
#
......@@ -519,214 +617,103 @@ CONFIG_I2C=y
#
# I2C Hardware Bus support
#
# CONFIG_I2C_AMD756 is not set
# CONFIG_I2C_AMD8111 is not set
# CONFIG_I2C_ISA is not set
# CONFIG_I2C_PARPORT_LIGHT is not set
# CONFIG_SCx200_ACB is not set
# CONFIG_I2C_STUB is not set
# CONFIG_I2C_PCA_ISA is not set
CONFIG_I2C_OMAP=y
#
# Hardware Sensors Chip support
#
# CONFIG_I2C_SENSOR is not set
# CONFIG_SENSORS_ADM1021 is not set
# CONFIG_SENSORS_ADM1025 is not set
# CONFIG_SENSORS_ADM1031 is not set
# CONFIG_SENSORS_ASB100 is not set
# CONFIG_SENSORS_DS1621 is not set
# CONFIG_SENSORS_FSCHER is not set
# CONFIG_SENSORS_GL518SM is not set
# CONFIG_SENSORS_IT87 is not set
# CONFIG_SENSORS_LM75 is not set
# CONFIG_SENSORS_LM77 is not set
# CONFIG_SENSORS_LM78 is not set
# CONFIG_SENSORS_LM80 is not set
# CONFIG_SENSORS_LM83 is not set
# CONFIG_SENSORS_LM85 is not set
# CONFIG_SENSORS_LM90 is not set
# CONFIG_SENSORS_MAX1619 is not set
# CONFIG_SENSORS_SMSC47M1 is not set
# CONFIG_SENSORS_W83781D is not set
# CONFIG_SENSORS_W83L785TS is not set
# CONFIG_SENSORS_W83627HF is not set
#
# Other I2C Chip support
# Miscellaneous I2C Chip support
#
# CONFIG_SENSORS_DS1337 is not set
# CONFIG_SENSORS_DS1374 is not set
# CONFIG_SENSORS_EEPROM is not set
# CONFIG_SENSORS_PCF8574 is not set
# CONFIG_SENSORS_PCA9539 is not set
# CONFIG_SENSORS_PCF8591 is not set
# CONFIG_SENSORS_RTC8564 is not set
CONFIG_ISP1301_OMAP=y
CONFIG_TPS65010=y
# CONFIG_SENSORS_TLV320AIC23 is not set
# CONFIG_GPIOEXPANDER_OMAP is not set
# CONFIG_SENSORS_MAX6875 is not set
# CONFIG_I2C_DEBUG_CORE is not set
# CONFIG_I2C_DEBUG_ALGO is not set
# CONFIG_I2C_DEBUG_BUS is not set
# CONFIG_I2C_DEBUG_CHIP is not set
#
# Multimedia devices
#
# CONFIG_VIDEO_DEV is not set
#
# Digital Video Broadcasting Devices
#
# CONFIG_DVB is not set
#
# File systems
#
CONFIG_EXT2_FS=y
# CONFIG_EXT2_FS_XATTR is not set
# CONFIG_EXT3_FS is not set
# CONFIG_JBD is not set
# CONFIG_REISERFS_FS is not set
# CONFIG_JFS_FS is not set
# CONFIG_XFS_FS is not set
# CONFIG_MINIX_FS is not set
CONFIG_ROMFS_FS=y
# CONFIG_QUOTA is not set
# CONFIG_AUTOFS_FS is not set
# CONFIG_AUTOFS4_FS is not set
#
# CD-ROM/DVD Filesystems
#
# CONFIG_ISO9660_FS is not set
# CONFIG_UDF_FS is not set
# Hardware Monitoring support
#
# DOS/FAT/NT Filesystems
#
CONFIG_FAT_FS=y
CONFIG_MSDOS_FS=y
# CONFIG_VFAT_FS is not set
CONFIG_FAT_DEFAULT_CODEPAGE=437
# CONFIG_NTFS_FS is not set
#
# Pseudo filesystems
#
CONFIG_PROC_FS=y
CONFIG_SYSFS=y
# CONFIG_DEVFS_FS is not set
# CONFIG_DEVPTS_FS_XATTR is not set
# CONFIG_TMPFS is not set
# CONFIG_HUGETLB_PAGE is not set
CONFIG_RAMFS=y
#
# Miscellaneous filesystems
#
# CONFIG_ADFS_FS is not set
# CONFIG_AFFS_FS is not set
# CONFIG_HFS_FS is not set
# CONFIG_HFSPLUS_FS is not set
# CONFIG_BEFS_FS is not set
# CONFIG_BFS_FS is not set
# CONFIG_EFS_FS is not set
# CONFIG_JFFS_FS is not set
CONFIG_JFFS2_FS=y
CONFIG_JFFS2_FS_DEBUG=2
# CONFIG_JFFS2_FS_NAND is not set
# CONFIG_JFFS2_COMPRESSION_OPTIONS is not set
CONFIG_JFFS2_ZLIB=y
CONFIG_JFFS2_RTIME=y
# CONFIG_JFFS2_RUBIN is not set
CONFIG_CRAMFS=y
# CONFIG_VXFS_FS is not set
# CONFIG_HPFS_FS is not set
# CONFIG_QNX4FS_FS is not set
# CONFIG_SYSV_FS is not set
# CONFIG_UFS_FS is not set
CONFIG_HWMON=y
# CONFIG_HWMON_VID is not set
# CONFIG_SENSORS_ADM1021 is not set
# CONFIG_SENSORS_ADM1025 is not set
# CONFIG_SENSORS_ADM1026 is not set
# CONFIG_SENSORS_ADM1031 is not set
# CONFIG_SENSORS_ADM9240 is not set
# CONFIG_SENSORS_ASB100 is not set
# CONFIG_SENSORS_ATXP1 is not set
# CONFIG_SENSORS_DS1621 is not set
# CONFIG_SENSORS_FSCHER is not set
# CONFIG_SENSORS_FSCPOS is not set
# CONFIG_SENSORS_GL518SM is not set
# CONFIG_SENSORS_GL520SM is not set
# CONFIG_SENSORS_IT87 is not set
# CONFIG_SENSORS_LM63 is not set
# CONFIG_SENSORS_LM75 is not set
# CONFIG_SENSORS_LM77 is not set
# CONFIG_SENSORS_LM78 is not set
# CONFIG_SENSORS_LM80 is not set
# CONFIG_SENSORS_LM83 is not set
# CONFIG_SENSORS_LM85 is not set
# CONFIG_SENSORS_LM87 is not set
# CONFIG_SENSORS_LM90 is not set
# CONFIG_SENSORS_LM92 is not set
# CONFIG_SENSORS_MAX1619 is not set
# CONFIG_SENSORS_PC87360 is not set
# CONFIG_SENSORS_SMSC47M1 is not set
# CONFIG_SENSORS_SMSC47B397 is not set
# CONFIG_SENSORS_W83781D is not set
# CONFIG_SENSORS_W83792D is not set
# CONFIG_SENSORS_W83L785TS is not set
# CONFIG_SENSORS_W83627HF is not set
# CONFIG_SENSORS_W83627EHF is not set
# CONFIG_HWMON_DEBUG_CHIP is not set
#
# Network File Systems
# Misc devices
#
CONFIG_NFS_FS=y
# CONFIG_NFS_V3 is not set
# CONFIG_NFS_V4 is not set
# CONFIG_NFS_DIRECTIO is not set
# CONFIG_NFSD is not set
CONFIG_ROOT_NFS=y
CONFIG_LOCKD=y
# CONFIG_EXPORTFS is not set
CONFIG_SUNRPC=y
# CONFIG_RPCSEC_GSS_KRB5 is not set
# CONFIG_RPCSEC_GSS_SPKM3 is not set
# CONFIG_SMB_FS is not set
# CONFIG_CIFS is not set
# CONFIG_NCP_FS is not set
# CONFIG_CODA_FS is not set
# CONFIG_AFS_FS is not set
#
# Partition Types
# Multimedia Capabilities Port drivers
#
# CONFIG_PARTITION_ADVANCED is not set
#
# Native Language Support
# Multimedia devices
#
CONFIG_NLS=y
CONFIG_NLS_DEFAULT="iso8859-1"
# CONFIG_NLS_CODEPAGE_437 is not set
# CONFIG_NLS_CODEPAGE_737 is not set
# CONFIG_NLS_CODEPAGE_775 is not set
# CONFIG_NLS_CODEPAGE_850 is not set
# CONFIG_NLS_CODEPAGE_852 is not set
# CONFIG_NLS_CODEPAGE_855 is not set
# CONFIG_NLS_CODEPAGE_857 is not set
# CONFIG_NLS_CODEPAGE_860 is not set
# CONFIG_NLS_CODEPAGE_861 is not set
# CONFIG_NLS_CODEPAGE_862 is not set
# CONFIG_NLS_CODEPAGE_863 is not set
# CONFIG_NLS_CODEPAGE_864 is not set
# CONFIG_NLS_CODEPAGE_865 is not set
# CONFIG_NLS_CODEPAGE_866 is not set
# CONFIG_NLS_CODEPAGE_869 is not set
# CONFIG_NLS_CODEPAGE_936 is not set
# CONFIG_NLS_CODEPAGE_950 is not set
# CONFIG_NLS_CODEPAGE_932 is not set
# CONFIG_NLS_CODEPAGE_949 is not set
# CONFIG_NLS_CODEPAGE_874 is not set
# CONFIG_NLS_ISO8859_8 is not set
# CONFIG_NLS_CODEPAGE_1250 is not set
# CONFIG_NLS_CODEPAGE_1251 is not set
# CONFIG_NLS_ASCII is not set
# CONFIG_NLS_ISO8859_1 is not set
# CONFIG_NLS_ISO8859_2 is not set
# CONFIG_NLS_ISO8859_3 is not set
# CONFIG_NLS_ISO8859_4 is not set
# CONFIG_NLS_ISO8859_5 is not set
# CONFIG_NLS_ISO8859_6 is not set
# CONFIG_NLS_ISO8859_7 is not set
# CONFIG_NLS_ISO8859_9 is not set
# CONFIG_NLS_ISO8859_13 is not set
# CONFIG_NLS_ISO8859_14 is not set
# CONFIG_NLS_ISO8859_15 is not set
# CONFIG_NLS_KOI8_R is not set
# CONFIG_NLS_KOI8_U is not set
# CONFIG_NLS_UTF8 is not set
# CONFIG_VIDEO_DEV is not set
#
# Profiling support
# Digital Video Broadcasting Devices
#
# CONFIG_PROFILING is not set
# CONFIG_DVB is not set
#
# Graphics support
#
CONFIG_FB=y
# CONFIG_FB_CFB_FILLRECT is not set
# CONFIG_FB_CFB_COPYAREA is not set
# CONFIG_FB_CFB_IMAGEBLIT is not set
CONFIG_FB_SOFT_CURSOR=y
# CONFIG_FB_MACMODES is not set
CONFIG_FB_MODE_HELPERS=y
# CONFIG_FB_TILEBLITTING is not set
# CONFIG_FB_S1D13XXX is not set
CONFIG_FB_OMAP=y
CONFIG_FB_OMAP_INTERNAL_LCDC=y
# CONFIG_FB_OMAP_EXTERNAL_LCDC is not set
CONFIG_FB_OMAP_LCDC_INTERNAL=y
# CONFIG_FB_OMAP_LCDC_EXTERNAL is not set
# CONFIG_FB_OMAP_DMA_TUNE is not set
# CONFIG_FB_VIRTUAL is not set
......@@ -747,19 +734,18 @@ CONFIG_LOGO=y
# CONFIG_LOGO_LINUX_MONO is not set
# CONFIG_LOGO_LINUX_VGA16 is not set
CONFIG_LOGO_LINUX_CLUT224=y
# CONFIG_BACKLIGHT_LCD_SUPPORT is not set
#
# Sound
#
# CONFIG_SOUND is not set
#
# Misc devices
#
#
# USB support
#
CONFIG_USB_ARCH_HAS_HCD=y
CONFIG_USB_ARCH_HAS_OHCI=y
CONFIG_USB=y
# CONFIG_USB_DEBUG is not set
......@@ -776,10 +762,11 @@ CONFIG_USB_OTG_WHITELIST=y
#
# USB Host Controller Drivers
#
# CONFIG_USB_EHCI_HCD is not set
# CONFIG_USB_ISP116X_HCD is not set
CONFIG_USB_OHCI_HCD=y
# CONFIG_USB_UHCI_HCD is not set
# CONFIG_USB_SL811HS is not set
# CONFIG_USB_OHCI_BIG_ENDIAN is not set
CONFIG_USB_OHCI_LITTLE_ENDIAN=y
# CONFIG_USB_SL811_HCD is not set
#
# USB Device Class drivers
......@@ -787,10 +774,14 @@ CONFIG_USB_OHCI_HCD=y
# CONFIG_USB_BLUETOOTH_TTY is not set
# CONFIG_USB_ACM is not set
# CONFIG_USB_PRINTER is not set
#
# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support' may also be needed; see USB_STORAGE Help for more information
#
# CONFIG_USB_STORAGE is not set
#
# USB Human Interface Devices (HID)
# USB Input Devices
#
# CONFIG_USB_HID is not set
......@@ -801,12 +792,17 @@ CONFIG_USB_OHCI_HCD=y
# CONFIG_USB_MOUSE is not set
# CONFIG_USB_AIPTEK is not set
# CONFIG_USB_WACOM is not set
# CONFIG_USB_ACECAD is not set
# CONFIG_USB_KBTAB is not set
# CONFIG_USB_POWERMATE is not set
# CONFIG_USB_MTOUCH is not set
# CONFIG_USB_ITMTOUCH is not set
# CONFIG_USB_EGALAX is not set
# CONFIG_USB_YEALINK is not set
# CONFIG_USB_XPAD is not set
# CONFIG_USB_ATI_REMOTE is not set
# CONFIG_USB_KEYSPAN_REMOTE is not set
# CONFIG_USB_APPLETOUCH is not set
#
# USB Imaging devices
......@@ -823,13 +819,14 @@ CONFIG_USB_OHCI_HCD=y
#
#
# USB Network adaptors
# USB Network Adapters
#
# CONFIG_USB_CATC is not set
# CONFIG_USB_KAWETH is not set
# CONFIG_USB_PEGASUS is not set
# CONFIG_USB_RTL8150 is not set
# CONFIG_USB_USBNET is not set
CONFIG_USB_MON=y
#
# USB port drivers
......@@ -845,29 +842,35 @@ CONFIG_USB_OHCI_HCD=y
#
# CONFIG_USB_EMI62 is not set
# CONFIG_USB_EMI26 is not set
# CONFIG_USB_TIGL is not set
# CONFIG_USB_AUERSWALD is not set
# CONFIG_USB_RIO500 is not set
# CONFIG_USB_LEGOTOWER is not set
# CONFIG_USB_LCD is not set
# CONFIG_USB_LED is not set
# CONFIG_USB_CYTHERM is not set
# CONFIG_USB_PHIDGETKIT is not set
# CONFIG_USB_PHIDGETSERVO is not set
# CONFIG_USB_IDMOUSE is not set
# CONFIG_USB_LD is not set
CONFIG_USB_TEST=y
#
# USB DSL modem support
#
#
# USB Gadget Support
#
CONFIG_USB_GADGET=y
# CONFIG_USB_GADGET_DEBUG_FILES is not set
CONFIG_USB_GADGET_SELECTED=y
# CONFIG_USB_GADGET_NET2280 is not set
# CONFIG_USB_GADGET_PXA2XX is not set
# CONFIG_USB_GADGET_GOKU is not set
# CONFIG_USB_GADGET_SA1100 is not set
# CONFIG_USB_GADGET_LH7A40X is not set
# CONFIG_USB_GADGET_DUMMY_HCD is not set
CONFIG_USB_GADGET_OMAP=y
CONFIG_USB_OMAP=y
# CONFIG_USB_OMAP_PROC is not set
# CONFIG_USB_GADGET_DUMMY_HCD is not set
# CONFIG_USB_GADGET_DUALSPEED is not set
# CONFIG_USB_ZERO is not set
CONFIG_USB_ETH=y
......@@ -876,25 +879,180 @@ CONFIG_USB_ETH_RNDIS=y
# CONFIG_USB_FILE_STORAGE is not set
# CONFIG_USB_G_SERIAL is not set
#
# MMC/SD Card support
#
# CONFIG_MMC is not set
#
# Synchronous Serial Interfaces (SSI)
#
CONFIG_OMAP_UWIRE=y
# CONFIG_OMAP_TSC2101 is not set
#
# MMC/SD Card support
# File systems
#
# CONFIG_MMC is not set
CONFIG_EXT2_FS=y
# CONFIG_EXT2_FS_XATTR is not set
# CONFIG_EXT2_FS_XIP is not set
# CONFIG_EXT3_FS is not set
# CONFIG_JBD is not set
# CONFIG_REISERFS_FS is not set
# CONFIG_JFS_FS is not set
# CONFIG_FS_POSIX_ACL is not set
# CONFIG_XFS_FS is not set
# CONFIG_MINIX_FS is not set
CONFIG_ROMFS_FS=y
CONFIG_INOTIFY=y
# CONFIG_QUOTA is not set
CONFIG_DNOTIFY=y
# CONFIG_AUTOFS_FS is not set
# CONFIG_AUTOFS4_FS is not set
# CONFIG_FUSE_FS is not set
#
# CD-ROM/DVD Filesystems
#
# CONFIG_ISO9660_FS is not set
# CONFIG_UDF_FS is not set
#
# DOS/FAT/NT Filesystems
#
CONFIG_FAT_FS=y
CONFIG_MSDOS_FS=y
# CONFIG_VFAT_FS is not set
CONFIG_FAT_DEFAULT_CODEPAGE=437
# CONFIG_NTFS_FS is not set
#
# Pseudo filesystems
#
CONFIG_PROC_FS=y
CONFIG_SYSFS=y
# CONFIG_TMPFS is not set
# CONFIG_HUGETLB_PAGE is not set
CONFIG_RAMFS=y
# CONFIG_RELAYFS_FS is not set
#
# Miscellaneous filesystems
#
# CONFIG_ADFS_FS is not set
# CONFIG_AFFS_FS is not set
# CONFIG_HFS_FS is not set
# CONFIG_HFSPLUS_FS is not set
# CONFIG_BEFS_FS is not set
# CONFIG_BFS_FS is not set
# CONFIG_EFS_FS is not set
# CONFIG_JFFS_FS is not set
CONFIG_JFFS2_FS=y
CONFIG_JFFS2_FS_DEBUG=2
CONFIG_JFFS2_FS_WRITEBUFFER=y
# CONFIG_JFFS2_COMPRESSION_OPTIONS is not set
CONFIG_JFFS2_ZLIB=y
CONFIG_JFFS2_RTIME=y
# CONFIG_JFFS2_RUBIN is not set
CONFIG_CRAMFS=y
# CONFIG_VXFS_FS is not set
# CONFIG_HPFS_FS is not set
# CONFIG_QNX4FS_FS is not set
# CONFIG_SYSV_FS is not set
# CONFIG_UFS_FS is not set
#
# Network File Systems
#
CONFIG_NFS_FS=y
# CONFIG_NFS_V3 is not set
# CONFIG_NFS_V4 is not set
# CONFIG_NFS_DIRECTIO is not set
# CONFIG_NFSD is not set
CONFIG_ROOT_NFS=y
CONFIG_LOCKD=y
CONFIG_NFS_COMMON=y
CONFIG_SUNRPC=y
# CONFIG_RPCSEC_GSS_KRB5 is not set
# CONFIG_RPCSEC_GSS_SPKM3 is not set
# CONFIG_SMB_FS is not set
# CONFIG_CIFS is not set
# CONFIG_NCP_FS is not set
# CONFIG_CODA_FS is not set
# CONFIG_AFS_FS is not set
# CONFIG_9P_FS is not set
#
# Partition Types
#
# CONFIG_PARTITION_ADVANCED is not set
CONFIG_MSDOS_PARTITION=y
#
# Native Language Support
#
CONFIG_NLS=y
CONFIG_NLS_DEFAULT="iso8859-1"
# CONFIG_NLS_CODEPAGE_437 is not set
# CONFIG_NLS_CODEPAGE_737 is not set
# CONFIG_NLS_CODEPAGE_775 is not set
# CONFIG_NLS_CODEPAGE_850 is not set
# CONFIG_NLS_CODEPAGE_852 is not set
# CONFIG_NLS_CODEPAGE_855 is not set
# CONFIG_NLS_CODEPAGE_857 is not set
# CONFIG_NLS_CODEPAGE_860 is not set
# CONFIG_NLS_CODEPAGE_861 is not set
# CONFIG_NLS_CODEPAGE_862 is not set
# CONFIG_NLS_CODEPAGE_863 is not set
# CONFIG_NLS_CODEPAGE_864 is not set
# CONFIG_NLS_CODEPAGE_865 is not set
# CONFIG_NLS_CODEPAGE_866 is not set
# CONFIG_NLS_CODEPAGE_869 is not set
# CONFIG_NLS_CODEPAGE_936 is not set
# CONFIG_NLS_CODEPAGE_950 is not set
# CONFIG_NLS_CODEPAGE_932 is not set
# CONFIG_NLS_CODEPAGE_949 is not set
# CONFIG_NLS_CODEPAGE_874 is not set
# CONFIG_NLS_ISO8859_8 is not set
# CONFIG_NLS_CODEPAGE_1250 is not set
# CONFIG_NLS_CODEPAGE_1251 is not set
# CONFIG_NLS_ASCII is not set
# CONFIG_NLS_ISO8859_1 is not set
# CONFIG_NLS_ISO8859_2 is not set
# CONFIG_NLS_ISO8859_3 is not set
# CONFIG_NLS_ISO8859_4 is not set
# CONFIG_NLS_ISO8859_5 is not set
# CONFIG_NLS_ISO8859_6 is not set
# CONFIG_NLS_ISO8859_7 is not set
# CONFIG_NLS_ISO8859_9 is not set
# CONFIG_NLS_ISO8859_13 is not set
# CONFIG_NLS_ISO8859_14 is not set
# CONFIG_NLS_ISO8859_15 is not set
# CONFIG_NLS_KOI8_R is not set
# CONFIG_NLS_KOI8_U is not set
# CONFIG_NLS_UTF8 is not set
#
# Profiling support
#
# CONFIG_PROFILING is not set
#
# Kernel hacking
#
# CONFIG_PRINTK_TIME is not set
CONFIG_DEBUG_KERNEL=y
# CONFIG_MAGIC_SYSRQ is not set
CONFIG_LOG_BUF_SHIFT=14
CONFIG_DETECT_SOFTLOCKUP=y
# CONFIG_SCHEDSTATS is not set
# CONFIG_DEBUG_SLAB is not set
# CONFIG_DEBUG_SPINLOCK is not set
# CONFIG_DEBUG_SPINLOCK_SLEEP is not set
# CONFIG_DEBUG_KOBJECT is not set
CONFIG_DEBUG_BUGVERBOSE=y
CONFIG_DEBUG_INFO=y
# CONFIG_DEBUG_FS is not set
CONFIG_FRAME_POINTER=y
CONFIG_DEBUG_USER=y
# CONFIG_DEBUG_WAITQ is not set
......@@ -904,6 +1062,7 @@ CONFIG_DEBUG_ERRORS=y
#
# Security options
#
# CONFIG_KEYS is not set
# CONFIG_SECURITY is not set
#
......@@ -911,10 +1070,15 @@ CONFIG_DEBUG_ERRORS=y
#
# CONFIG_CRYPTO is not set
#
# Hardware crypto devices
#
#
# Library routines
#
# CONFIG_CRC_CCITT is not set
# CONFIG_CRC16 is not set
CONFIG_CRC32=y
# CONFIG_LIBCRC32C is not set
CONFIG_ZLIB_INFLATE=y
......
#
# Automatically generated make config: don't edit
# Linux kernel version: 2.6.9-rc3-omap1
# Mon Oct 4 10:15:35 2004
# Linux kernel version: 2.6.14-rc4-omap1
# Tue Oct 18 17:58:27 2005
#
CONFIG_ARM=y
CONFIG_MMU=y
CONFIG_UID16=y
CONFIG_RWSEM_GENERIC_SPINLOCK=y
CONFIG_GENERIC_IOMAP=y
CONFIG_GENERIC_CALIBRATE_DELAY=y
#
# Code maturity level options
......@@ -15,33 +15,40 @@ CONFIG_GENERIC_IOMAP=y
CONFIG_EXPERIMENTAL=y
CONFIG_CLEAN_COMPILE=y
CONFIG_BROKEN_ON_SMP=y
CONFIG_INIT_ENV_ARG_LIMIT=32
#
# General setup
#
CONFIG_LOCALVERSION=""
CONFIG_LOCALVERSION_AUTO=y
CONFIG_SWAP=y
CONFIG_SYSVIPC=y
# CONFIG_POSIX_MQUEUE is not set
# CONFIG_BSD_PROCESS_ACCT is not set
CONFIG_SYSCTL=y
# CONFIG_AUDIT is not set
CONFIG_LOG_BUF_SHIFT=14
# CONFIG_HOTPLUG is not set
CONFIG_KOBJECT_UEVENT=y
# CONFIG_IKCONFIG is not set
CONFIG_INITRAMFS_SOURCE=""
# CONFIG_EMBEDDED is not set
CONFIG_KALLSYMS=y
# CONFIG_KALLSYMS_ALL is not set
# CONFIG_KALLSYMS_EXTRA_PASS is not set
CONFIG_PRINTK=y
CONFIG_BUG=y
CONFIG_BASE_FULL=y
CONFIG_FUTEX=y
CONFIG_EPOLL=y
CONFIG_IOSCHED_NOOP=y
CONFIG_IOSCHED_AS=y
CONFIG_IOSCHED_DEADLINE=y
CONFIG_IOSCHED_CFQ=y
CONFIG_CC_OPTIMIZE_FOR_SIZE=y
CONFIG_SHMEM=y
CONFIG_CC_ALIGN_FUNCTIONS=0
CONFIG_CC_ALIGN_LABELS=0
CONFIG_CC_ALIGN_LOOPS=0
CONFIG_CC_ALIGN_JUMPS=0
# CONFIG_TINY_SHMEM is not set
CONFIG_BASE_SMALL=0
#
# Loadable module support
......@@ -51,6 +58,7 @@ CONFIG_MODULE_UNLOAD=y
# CONFIG_MODULE_FORCE_UNLOAD is not set
CONFIG_OBSOLETE_MODPARM=y
# CONFIG_MODVERSIONS is not set
# CONFIG_MODULE_SRCVERSION_ALL is not set
# CONFIG_KMOD is not set
#
......@@ -74,12 +82,33 @@ CONFIG_OBSOLETE_MODPARM=y
# CONFIG_ARCH_SHARK is not set
# CONFIG_ARCH_LH7A40X is not set
CONFIG_ARCH_OMAP=y
# CONFIG_ARCH_VERSATILE_PB is not set
# CONFIG_ARCH_VERSATILE is not set
# CONFIG_ARCH_IMX is not set
# CONFIG_ARCH_H720X is not set
# CONFIG_ARCH_AAEC2000 is not set
#
# TI OMAP Implementations
#
CONFIG_ARCH_OMAP_OTG=y
CONFIG_ARCH_OMAP1=y
# CONFIG_ARCH_OMAP2 is not set
#
# OMAP Feature Selections
#
# CONFIG_OMAP_RESET_CLOCKS is not set
# CONFIG_OMAP_BOOT_TAG is not set
CONFIG_OMAP_MUX=y
# CONFIG_OMAP_MUX_DEBUG is not set
CONFIG_OMAP_MUX_WARNINGS=y
CONFIG_OMAP_MPU_TIMER=y
# CONFIG_OMAP_32K_TIMER is not set
# CONFIG_OMAP_DM_TIMER is not set
CONFIG_OMAP_LL_DEBUG_UART1=y
# CONFIG_OMAP_LL_DEBUG_UART2 is not set
# CONFIG_OMAP_LL_DEBUG_UART3 is not set
CONFIG_OMAP_SERIAL_WAKE=y
#
# OMAP Core Type
......@@ -87,7 +116,6 @@ CONFIG_ARCH_OMAP=y
# CONFIG_ARCH_OMAP730 is not set
# CONFIG_ARCH_OMAP15XX is not set
CONFIG_ARCH_OMAP16XX=y
CONFIG_ARCH_OMAP_OTG=y
#
# OMAP Board Type
......@@ -95,20 +123,14 @@ CONFIG_ARCH_OMAP_OTG=y
# CONFIG_MACH_OMAP_INNOVATOR is not set
# CONFIG_MACH_OMAP_H2 is not set
CONFIG_MACH_OMAP_H3=y
# CONFIG_MACH_OMAP_H4 is not set
# CONFIG_MACH_OMAP_OSK is not set
# CONFIG_MACH_OMAP_GENERIC is not set
#
# OMAP Feature Selections
# OMAP CPU Speed
#
# CONFIG_OMAP_BOOT_TAG is not set
CONFIG_OMAP_MUX=y
# CONFIG_OMAP_MUX_DEBUG is not set
CONFIG_OMAP_MUX_WARNINGS=y
CONFIG_OMAP_LL_DEBUG_UART1=y
# CONFIG_OMAP_LL_DEBUG_UART2 is not set
# CONFIG_OMAP_LL_DEBUG_UART3 is not set
# CONFIG_OMAP_CLOCKS_SET_BY_BOOTLOADER is not set
# CONFIG_OMAP_ARM_216MHZ is not set
# CONFIG_OMAP_ARM_192MHZ is not set
CONFIG_OMAP_ARM_168MHZ=y
# CONFIG_OMAP_ARM_120MHZ is not set
......@@ -123,6 +145,7 @@ CONFIG_CPU_32=y
CONFIG_CPU_ARM926T=y
CONFIG_CPU_32v5=y
CONFIG_CPU_ABRT_EV5TJ=y
CONFIG_CPU_CACHE_VIVT=y
CONFIG_CPU_COPY_V4WB=y
CONFIG_CPU_TLB_V4WBI=y
......@@ -136,68 +159,74 @@ CONFIG_ARM_THUMB=y
# CONFIG_CPU_CACHE_ROUND_ROBIN is not set
#
# General setup
# Bus support
#
# CONFIG_ZBOOT_ROM is not set
CONFIG_ZBOOT_ROM_TEXT=0x10C08000
CONFIG_ZBOOT_ROM_BSS=0x10200000
CONFIG_ISA_DMA_API=y
#
# At least one math emulation must be selected
# PCCARD (PCMCIA/CardBus) support
#
CONFIG_FPE_NWFPE=y
# CONFIG_FPE_NWFPE_XP is not set
# CONFIG_FPE_FASTFPE is not set
# CONFIG_VFP is not set
CONFIG_BINFMT_ELF=y
CONFIG_BINFMT_AOUT=y
# CONFIG_BINFMT_MISC is not set
# CONFIG_PCCARD is not set
#
# Generic Driver Options
# Kernel Features
#
CONFIG_STANDALONE=y
CONFIG_PREVENT_FIRMWARE_BUILD=y
# CONFIG_DEBUG_DRIVER is not set
# CONFIG_PM is not set
# CONFIG_PREEMPT is not set
# CONFIG_ARTHUR is not set
CONFIG_CMDLINE="mem=32M console=ttyS0,115200n8 initrd=0x10A00000,8M root=/dev/ram0 rw ip=dhcp devfs=mount"
# CONFIG_NO_IDLE_HZ is not set
# CONFIG_ARCH_DISCONTIGMEM_ENABLE is not set
CONFIG_SELECT_MEMORY_MODEL=y
CONFIG_FLATMEM_MANUAL=y
# CONFIG_DISCONTIGMEM_MANUAL is not set
# CONFIG_SPARSEMEM_MANUAL is not set
CONFIG_FLATMEM=y
CONFIG_FLAT_NODE_MEM_MAP=y
# CONFIG_SPARSEMEM_STATIC is not set
CONFIG_LEDS=y
# CONFIG_LEDS_TIMER is not set
# CONFIG_LEDS_CPU is not set
CONFIG_ALIGNMENT_TRAP=y
#
# Parallel port support
# Boot options
#
# CONFIG_PARPORT is not set
CONFIG_ZBOOT_ROM_TEXT=0x10C08000
CONFIG_ZBOOT_ROM_BSS=0x10200000
# CONFIG_ZBOOT_ROM is not set
CONFIG_CMDLINE="mem=32M console=ttyS0,115200n8 initrd=0x10A00000,8M root=/dev/ram0 rw ip=dhcp devfs=mount"
# CONFIG_XIP_KERNEL is not set
#
# Memory Technology Devices (MTD)
# CPU Frequency scaling
#
# CONFIG_MTD is not set
# CONFIG_CPU_FREQ is not set
#
# Plug and Play support
# Floating point emulation
#
#
# Block devices
# At least one emulation must be selected
#
# CONFIG_BLK_DEV_FD is not set
# CONFIG_BLK_DEV_LOOP is not set
# CONFIG_BLK_DEV_NBD is not set
# CONFIG_BLK_DEV_UB is not set
CONFIG_BLK_DEV_RAM=y
CONFIG_BLK_DEV_RAM_SIZE=4096
CONFIG_BLK_DEV_INITRD=y
CONFIG_FPE_NWFPE=y
# CONFIG_FPE_NWFPE_XP is not set
# CONFIG_FPE_FASTFPE is not set
# CONFIG_VFP is not set
#
# Multi-device support (RAID and LVM)
# Userspace binary formats
#
# CONFIG_MD is not set
CONFIG_BINFMT_ELF=y
CONFIG_BINFMT_AOUT=y
# CONFIG_BINFMT_MISC is not set
# CONFIG_ARTHUR is not set
#
# Power management options
#
# CONFIG_PM is not set
#
# Networking support
# Networking
#
CONFIG_NET=y
......@@ -206,12 +235,12 @@ CONFIG_NET=y
#
CONFIG_PACKET=y
# CONFIG_PACKET_MMAP is not set
# CONFIG_NETLINK_DEV is not set
CONFIG_UNIX=y
# CONFIG_NET_KEY is not set
CONFIG_INET=y
CONFIG_IP_MULTICAST=y
# CONFIG_IP_ADVANCED_ROUTER is not set
CONFIG_IP_FIB_HASH=y
CONFIG_IP_PNP=y
CONFIG_IP_PNP_DHCP=y
CONFIG_IP_PNP_BOOTP=y
......@@ -225,9 +254,18 @@ CONFIG_IP_PNP_BOOTP=y
# CONFIG_INET_ESP is not set
# CONFIG_INET_IPCOMP is not set
# CONFIG_INET_TUNNEL is not set
CONFIG_INET_DIAG=y
CONFIG_INET_TCP_DIAG=y
# CONFIG_TCP_CONG_ADVANCED is not set
CONFIG_TCP_CONG_BIC=y
# CONFIG_IPV6 is not set
# CONFIG_NETFILTER is not set
#
# DCCP Configuration (EXPERIMENTAL)
#
# CONFIG_IP_DCCP is not set
#
# SCTP Configuration (EXPERIMENTAL)
#
......@@ -244,11 +282,6 @@ CONFIG_IP_PNP_BOOTP=y
# CONFIG_NET_DIVERT is not set
# CONFIG_ECONET is not set
# CONFIG_WAN_ROUTER is not set
# CONFIG_NET_HW_FLOWCONTROL is not set
#
# QoS and/or fair queueing
#
# CONFIG_NET_SCHED is not set
# CONFIG_NET_CLS_ROUTE is not set
......@@ -256,8 +289,6 @@ CONFIG_IP_PNP_BOOTP=y
# Network testing
#
# CONFIG_NET_PKTGEN is not set
# CONFIG_NETPOLL is not set
# CONFIG_NET_POLL_CONTROLLER is not set
# CONFIG_HAMRADIO is not set
CONFIG_IRDA=y
......@@ -303,22 +334,108 @@ CONFIG_IRDA=y
#
# CONFIG_USB_IRDA is not set
# CONFIG_SIGMATEL_FIR is not set
# CONFIG_NSC_FIR is not set
# CONFIG_WINBOND_FIR is not set
CONFIG_OMAP1610_IR=y
# CONFIG_SMC_IRCC_FIR is not set
# CONFIG_ALI_FIR is not set
# CONFIG_VIA_FIR is not set
# CONFIG_BT is not set
# CONFIG_IEEE80211 is not set
#
# Device Drivers
#
#
# Generic Driver Options
#
CONFIG_STANDALONE=y
CONFIG_PREVENT_FIRMWARE_BUILD=y
# CONFIG_FW_LOADER is not set
# CONFIG_DEBUG_DRIVER is not set
#
# Memory Technology Devices (MTD)
#
# CONFIG_MTD is not set
#
# Parallel port support
#
# CONFIG_PARPORT is not set
#
# Plug and Play support
#
#
# Block devices
#
# CONFIG_BLK_DEV_COW_COMMON is not set
# CONFIG_BLK_DEV_LOOP is not set
# CONFIG_BLK_DEV_NBD is not set
# CONFIG_BLK_DEV_UB is not set
CONFIG_BLK_DEV_RAM=y
CONFIG_BLK_DEV_RAM_COUNT=16
CONFIG_BLK_DEV_RAM_SIZE=4096
CONFIG_BLK_DEV_INITRD=y
# CONFIG_CDROM_PKTCDVD is not set
#
# IO Schedulers
#
CONFIG_IOSCHED_NOOP=y
CONFIG_IOSCHED_AS=y
CONFIG_IOSCHED_DEADLINE=y
CONFIG_IOSCHED_CFQ=y
# CONFIG_ATA_OVER_ETH is not set
#
# SCSI device support
#
# CONFIG_RAID_ATTRS is not set
# CONFIG_SCSI is not set
#
# Multi-device support (RAID and LVM)
#
# CONFIG_MD is not set
#
# Fusion MPT device support
#
# CONFIG_FUSION is not set
#
# IEEE 1394 (FireWire) support
#
#
# I2O device support
#
#
# Network device support
#
CONFIG_NETDEVICES=y
# CONFIG_DUMMY is not set
# CONFIG_BONDING is not set
# CONFIG_EQUALIZER is not set
# CONFIG_TUN is not set
#
# PHY device support
#
# CONFIG_PHYLIB is not set
#
# Ethernet (10 or 100Mbit)
#
CONFIG_NET_ETHERNET=y
CONFIG_MII=y
CONFIG_NET_VENDOR_SMC=y
CONFIG_SMC91X=y
# CONFIG_SMC9194 is not set
# CONFIG_DM9000 is not set
#
# Ethernet (1000 Mbit)
......@@ -355,23 +472,8 @@ CONFIG_SLIP_COMPRESSED=y
# CONFIG_SLIP_MODE_SLIP6 is not set
# CONFIG_SHAPER is not set
# CONFIG_NETCONSOLE is not set
#
# SCSI device support
#
# CONFIG_SCSI is not set
#
# Fusion MPT device support
#
#
# IEEE 1394 (FireWire) support
#
#
# I2O device support
#
# CONFIG_NETPOLL is not set
# CONFIG_NET_POLL_CONTROLLER is not set
#
# ISDN subsystem
......@@ -395,16 +497,6 @@ CONFIG_INPUT_MOUSEDEV_SCREEN_Y=768
CONFIG_INPUT_EVDEV=y
# CONFIG_INPUT_EVBUG is not set
#
# Input I/O drivers
#
# CONFIG_GAMEPORT is not set
CONFIG_SOUND_GAMEPORT=y
CONFIG_SERIO=y
CONFIG_SERIO_SERPORT=y
# CONFIG_SERIO_CT82C710 is not set
# CONFIG_SERIO_RAW is not set
#
# Input Device Drivers
#
......@@ -420,6 +512,14 @@ CONFIG_KEYBOARD_OMAP=y
# CONFIG_INPUT_TOUCHSCREEN is not set
# CONFIG_INPUT_MISC is not set
#
# Hardware I/O ports
#
CONFIG_SERIO=y
CONFIG_SERIO_SERPORT=y
# CONFIG_SERIO_RAW is not set
# CONFIG_GAMEPORT is not set
#
# Character devices
#
......@@ -439,7 +539,6 @@ CONFIG_SERIAL_8250_NR_UARTS=4
#
# Non-8250 serial port support
#
CONFIG_SERIAL_8250_OMAP=y
CONFIG_SERIAL_CORE=y
CONFIG_SERIAL_CORE_CONSOLE=y
CONFIG_UNIX98_PTYS=y
......@@ -465,7 +564,8 @@ CONFIG_WATCHDOG_NOWAYOUT=y
# USB-based Watchdog Cards
#
# CONFIG_USBPCWATCHDOG is not set
# CONFIG_OMAP16XX_WATCHDOG is not set
# CONFIG_OMAP_WATCHDOG is not set
# CONFIG_OMAP_RNG is not set
# CONFIG_NVRAM is not set
# CONFIG_RTC is not set
CONFIG_OMAP_RTC=y
......@@ -475,9 +575,12 @@ CONFIG_OMAP_RTC=y
#
# Ftape, the floppy tape device driver
#
# CONFIG_DRM is not set
# CONFIG_RAW_DRIVER is not set
#
# TPM devices
#
#
# I2C support
#
......@@ -494,54 +597,77 @@ CONFIG_I2C=y
#
# I2C Hardware Bus support
#
# CONFIG_I2C_AMD756 is not set
# CONFIG_I2C_AMD8111 is not set
# CONFIG_I2C_ISA is not set
# CONFIG_I2C_PARPORT_LIGHT is not set
# CONFIG_SCx200_ACB is not set
# CONFIG_I2C_STUB is not set
# CONFIG_I2C_PCA_ISA is not set
CONFIG_I2C_OMAP=y
#
# Hardware Sensors Chip support
# Miscellaneous I2C Chip support
#
# CONFIG_SENSORS_DS1337 is not set
# CONFIG_SENSORS_DS1374 is not set
# CONFIG_SENSORS_EEPROM is not set
# CONFIG_SENSORS_PCF8574 is not set
# CONFIG_SENSORS_PCA9539 is not set
# CONFIG_SENSORS_PCF8591 is not set
# CONFIG_SENSORS_RTC8564 is not set
CONFIG_ISP1301_OMAP=m
CONFIG_TPS65010=y
# CONFIG_SENSORS_TLV320AIC23 is not set
CONFIG_GPIOEXPANDER_OMAP=y
# CONFIG_SENSORS_MAX6875 is not set
# CONFIG_I2C_DEBUG_CORE is not set
# CONFIG_I2C_DEBUG_ALGO is not set
# CONFIG_I2C_DEBUG_BUS is not set
# CONFIG_I2C_DEBUG_CHIP is not set
#
# Hardware Monitoring support
#
# CONFIG_I2C_SENSOR is not set
CONFIG_HWMON=y
# CONFIG_HWMON_VID is not set
# CONFIG_SENSORS_ADM1021 is not set
# CONFIG_SENSORS_ADM1025 is not set
# CONFIG_SENSORS_ADM1026 is not set
# CONFIG_SENSORS_ADM1031 is not set
# CONFIG_SENSORS_ADM9240 is not set
# CONFIG_SENSORS_ASB100 is not set
# CONFIG_SENSORS_ATXP1 is not set
# CONFIG_SENSORS_DS1621 is not set
# CONFIG_SENSORS_FSCHER is not set
# CONFIG_SENSORS_FSCPOS is not set
# CONFIG_SENSORS_GL518SM is not set
# CONFIG_SENSORS_GL520SM is not set
# CONFIG_SENSORS_IT87 is not set
# CONFIG_SENSORS_LM63 is not set
# CONFIG_SENSORS_LM75 is not set
# CONFIG_SENSORS_LM77 is not set
# CONFIG_SENSORS_LM78 is not set
# CONFIG_SENSORS_LM80 is not set
# CONFIG_SENSORS_LM83 is not set
# CONFIG_SENSORS_LM85 is not set
# CONFIG_SENSORS_LM87 is not set
# CONFIG_SENSORS_LM90 is not set
# CONFIG_SENSORS_LM92 is not set
# CONFIG_SENSORS_MAX1619 is not set
# CONFIG_SENSORS_PC87360 is not set
# CONFIG_SENSORS_SMSC47M1 is not set
# CONFIG_SENSORS_SMSC47B397 is not set
# CONFIG_SENSORS_W83781D is not set
# CONFIG_SENSORS_W83792D is not set
# CONFIG_SENSORS_W83L785TS is not set
# CONFIG_SENSORS_W83627HF is not set
# CONFIG_SENSORS_W83627EHF is not set
# CONFIG_HWMON_DEBUG_CHIP is not set
#
# Other I2C Chip support
# Misc devices
#
#
# Multimedia Capabilities Port drivers
#
# CONFIG_SENSORS_EEPROM is not set
# CONFIG_SENSORS_PCF8574 is not set
# CONFIG_SENSORS_PCF8591 is not set
# CONFIG_SENSORS_RTC8564 is not set
# CONFIG_ISP1301_OMAP is not set
CONFIG_TPS65010=y
# CONFIG_SENSORS_TLV320AIC23 is not set
CONFIG_GPIOEXPANDER_OMAP=y
# CONFIG_I2C_DEBUG_CORE is not set
# CONFIG_I2C_DEBUG_ALGO is not set
# CONFIG_I2C_DEBUG_BUS is not set
# CONFIG_I2C_DEBUG_CHIP is not set
#
# Multimedia devices
......@@ -560,6 +686,7 @@ CONFIG_VIDEO_DEV=y
# CONFIG_VIDEO_SAA5249 is not set
# CONFIG_TUNER_3036 is not set
# CONFIG_VIDEO_OVCAMCHIP is not set
# CONFIG_VIDEO_OMAP_CAMERA is not set
#
# Radio Adapters
......@@ -571,112 +698,21 @@ CONFIG_VIDEO_DEV=y
#
# CONFIG_DVB is not set
#
# File systems
#
CONFIG_EXT2_FS=y
CONFIG_EXT2_FS_XATTR=y
# CONFIG_EXT2_FS_POSIX_ACL is not set
# CONFIG_EXT2_FS_SECURITY is not set
# CONFIG_EXT3_FS is not set
# CONFIG_JBD is not set
CONFIG_FS_MBCACHE=y
# CONFIG_REISERFS_FS is not set
# CONFIG_JFS_FS is not set
# CONFIG_XFS_FS is not set
# CONFIG_MINIX_FS is not set
CONFIG_ROMFS_FS=y
# CONFIG_QUOTA is not set
# CONFIG_AUTOFS_FS is not set
# CONFIG_AUTOFS4_FS is not set
#
# CD-ROM/DVD Filesystems
#
# CONFIG_ISO9660_FS is not set
# CONFIG_UDF_FS is not set
#
# DOS/FAT/NT Filesystems
#
# CONFIG_MSDOS_FS is not set
# CONFIG_VFAT_FS is not set
# CONFIG_NTFS_FS is not set
#
# Pseudo filesystems
#
CONFIG_PROC_FS=y
CONFIG_SYSFS=y
CONFIG_DEVFS_FS=y
# CONFIG_DEVFS_MOUNT is not set
# CONFIG_DEVFS_DEBUG is not set
# CONFIG_DEVPTS_FS_XATTR is not set
# CONFIG_TMPFS is not set
# CONFIG_HUGETLB_PAGE is not set
CONFIG_RAMFS=y
#
# Miscellaneous filesystems
#
# CONFIG_ADFS_FS is not set
# CONFIG_AFFS_FS is not set
# CONFIG_HFS_FS is not set
# CONFIG_HFSPLUS_FS is not set
# CONFIG_BEFS_FS is not set
# CONFIG_BFS_FS is not set
# CONFIG_EFS_FS is not set
# CONFIG_CRAMFS is not set
# CONFIG_VXFS_FS is not set
# CONFIG_HPFS_FS is not set
# CONFIG_QNX4FS_FS is not set
# CONFIG_SYSV_FS is not set
# CONFIG_UFS_FS is not set
#
# Network File Systems
#
CONFIG_NFS_FS=y
CONFIG_NFS_V3=y
# CONFIG_NFS_V4 is not set
# CONFIG_NFS_DIRECTIO is not set
# CONFIG_NFSD is not set
CONFIG_ROOT_NFS=y
CONFIG_LOCKD=y
CONFIG_LOCKD_V4=y
# CONFIG_EXPORTFS is not set
CONFIG_SUNRPC=y
# CONFIG_RPCSEC_GSS_KRB5 is not set
# CONFIG_RPCSEC_GSS_SPKM3 is not set
# CONFIG_SMB_FS is not set
# CONFIG_CIFS is not set
# CONFIG_NCP_FS is not set
# CONFIG_CODA_FS is not set
# CONFIG_AFS_FS is not set
#
# Partition Types
#
# CONFIG_PARTITION_ADVANCED is not set
#
# Native Language Support
#
# CONFIG_NLS is not set
#
# Profiling support
#
# CONFIG_PROFILING is not set
#
# Graphics support
#
CONFIG_FB=y
# CONFIG_FB_CFB_FILLRECT is not set
# CONFIG_FB_CFB_COPYAREA is not set
# CONFIG_FB_CFB_IMAGEBLIT is not set
CONFIG_FB_SOFT_CURSOR=y
# CONFIG_FB_MACMODES is not set
CONFIG_FB_MODE_HELPERS=y
# CONFIG_FB_TILEBLITTING is not set
# CONFIG_FB_S1D13XXX is not set
CONFIG_FB_OMAP=y
CONFIG_FB_OMAP_INTERNAL_LCDC=y
# CONFIG_FB_OMAP_EXTERNAL_LCDC is not set
CONFIG_FB_OMAP_LCDC_INTERNAL=y
# CONFIG_FB_OMAP_LCDC_EXTERNAL is not set
# CONFIG_FB_OMAP_DMA_TUNE is not set
# CONFIG_FB_VIRTUAL is not set
......@@ -697,6 +733,7 @@ CONFIG_LOGO=y
# CONFIG_LOGO_LINUX_MONO is not set
# CONFIG_LOGO_LINUX_VGA16 is not set
CONFIG_LOGO_LINUX_CLUT224=y
# CONFIG_BACKLIGHT_LCD_SUPPORT is not set
#
# Sound
......@@ -712,24 +749,18 @@ CONFIG_SOUND=y
# Open Sound System
#
CONFIG_SOUND_PRIME=y
# CONFIG_SOUND_BT878 is not set
# CONFIG_SOUND_FUSION is not set
# CONFIG_SOUND_CS4281 is not set
# CONFIG_SOUND_SONICVIBES is not set
# CONFIG_SOUND_TRIDENT is not set
# CONFIG_SOUND_OMAP is not set
# CONFIG_SOUND_MSNDCLAS is not set
# CONFIG_SOUND_MSNDPIN is not set
# CONFIG_SOUND_OSS is not set
# CONFIG_SOUND_TVMIXER is not set
# CONFIG_SOUND_AD1980 is not set
#
# Misc devices
#
#
# USB support
#
CONFIG_USB_ARCH_HAS_HCD=y
CONFIG_USB_ARCH_HAS_OHCI=y
CONFIG_USB=m
# CONFIG_USB_DEBUG is not set
......@@ -744,23 +775,27 @@ CONFIG_USB=m
#
# USB Host Controller Drivers
#
# CONFIG_USB_EHCI_HCD is not set
# CONFIG_USB_ISP116X_HCD is not set
CONFIG_USB_OHCI_HCD=m
# CONFIG_USB_UHCI_HCD is not set
# CONFIG_USB_SL811HS is not set
# CONFIG_USB_OHCI_BIG_ENDIAN is not set
CONFIG_USB_OHCI_LITTLE_ENDIAN=y
# CONFIG_USB_SL811_HCD is not set
#
# USB Device Class drivers
#
# CONFIG_USB_AUDIO is not set
# CONFIG_OBSOLETE_OSS_USB_DRIVER is not set
# CONFIG_USB_BLUETOOTH_TTY is not set
# CONFIG_USB_MIDI is not set
# CONFIG_USB_ACM is not set
# CONFIG_USB_PRINTER is not set
#
# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support' may also be needed; see USB_STORAGE Help for more information
#
# CONFIG_USB_STORAGE is not set
#
# USB Human Interface Devices (HID)
# USB Input Devices
#
# CONFIG_USB_HID is not set
......@@ -771,12 +806,17 @@ CONFIG_USB_OHCI_HCD=m
# CONFIG_USB_MOUSE is not set
# CONFIG_USB_AIPTEK is not set
# CONFIG_USB_WACOM is not set
# CONFIG_USB_ACECAD is not set
# CONFIG_USB_KBTAB is not set
# CONFIG_USB_POWERMATE is not set
# CONFIG_USB_MTOUCH is not set
# CONFIG_USB_ITMTOUCH is not set
# CONFIG_USB_EGALAX is not set
# CONFIG_USB_YEALINK is not set
# CONFIG_USB_XPAD is not set
# CONFIG_USB_ATI_REMOTE is not set
# CONFIG_USB_KEYSPAN_REMOTE is not set
# CONFIG_USB_APPLETOUCH is not set
#
# USB Imaging devices
......@@ -795,15 +835,17 @@ CONFIG_USB_OHCI_HCD=m
# CONFIG_USB_SE401 is not set
# CONFIG_USB_SN9C102 is not set
# CONFIG_USB_STV680 is not set
# CONFIG_USB_PWC is not set
#
# USB Network adaptors
# USB Network Adapters
#
# CONFIG_USB_CATC is not set
# CONFIG_USB_KAWETH is not set
# CONFIG_USB_PEGASUS is not set
# CONFIG_USB_RTL8150 is not set
# CONFIG_USB_USBNET is not set
CONFIG_USB_MON=y
#
# USB port drivers
......@@ -819,24 +861,25 @@ CONFIG_USB_OHCI_HCD=m
#
# CONFIG_USB_EMI62 is not set
# CONFIG_USB_EMI26 is not set
# CONFIG_USB_TIGL is not set
# CONFIG_USB_AUERSWALD is not set
# CONFIG_USB_RIO500 is not set
# CONFIG_USB_LEGOTOWER is not set
# CONFIG_USB_LCD is not set
# CONFIG_USB_LED is not set
# CONFIG_USB_CYTHERM is not set
# CONFIG_USB_PHIDGETKIT is not set
# CONFIG_USB_PHIDGETSERVO is not set
# CONFIG_USB_IDMOUSE is not set
# CONFIG_USB_LD is not set
#
# USB Gadget Support
# USB DSL modem support
#
# CONFIG_USB_GADGET is not set
#
# Synchronous Serial Interfaces (SSI)
# USB Gadget Support
#
CONFIG_OMAP_UWIRE=y
# CONFIG_USB_GADGET is not set
#
# MMC/SD Card support
......@@ -845,19 +888,135 @@ CONFIG_MMC=y
# CONFIG_MMC_DEBUG is not set
CONFIG_MMC_BLOCK=y
# CONFIG_MMC_BLOCK_BROKEN_RFD is not set
# CONFIG_MMC_BULKTRANSFER is not set
CONFIG_MMC_OMAP=y
CONFIG_MMC_OMAP16XX_BLOCK1=y
# CONFIG_MMC_OMAP16XX_BLOCK2 is not set
# CONFIG_MMC_WBSD is not set
#
# Synchronous Serial Interfaces (SSI)
#
CONFIG_OMAP_UWIRE=y
# CONFIG_OMAP_TSC2101 is not set
#
# File systems
#
CONFIG_EXT2_FS=y
CONFIG_EXT2_FS_XATTR=y
# CONFIG_EXT2_FS_POSIX_ACL is not set
# CONFIG_EXT2_FS_SECURITY is not set
# CONFIG_EXT2_FS_XIP is not set
# CONFIG_EXT3_FS is not set
# CONFIG_JBD is not set
CONFIG_FS_MBCACHE=y
# CONFIG_REISERFS_FS is not set
# CONFIG_JFS_FS is not set
# CONFIG_FS_POSIX_ACL is not set
# CONFIG_XFS_FS is not set
# CONFIG_MINIX_FS is not set
CONFIG_ROMFS_FS=y
CONFIG_INOTIFY=y
# CONFIG_QUOTA is not set
CONFIG_DNOTIFY=y
# CONFIG_AUTOFS_FS is not set
# CONFIG_AUTOFS4_FS is not set
# CONFIG_FUSE_FS is not set
#
# CD-ROM/DVD Filesystems
#
# CONFIG_ISO9660_FS is not set
# CONFIG_UDF_FS is not set
#
# DOS/FAT/NT Filesystems
#
# CONFIG_MSDOS_FS is not set
# CONFIG_VFAT_FS is not set
# CONFIG_NTFS_FS is not set
#
# Pseudo filesystems
#
CONFIG_PROC_FS=y
CONFIG_SYSFS=y
# CONFIG_TMPFS is not set
# CONFIG_HUGETLB_PAGE is not set
CONFIG_RAMFS=y
# CONFIG_RELAYFS_FS is not set
#
# Miscellaneous filesystems
#
# CONFIG_ADFS_FS is not set
# CONFIG_AFFS_FS is not set
# CONFIG_HFS_FS is not set
# CONFIG_HFSPLUS_FS is not set
# CONFIG_BEFS_FS is not set
# CONFIG_BFS_FS is not set
# CONFIG_EFS_FS is not set
# CONFIG_CRAMFS is not set
# CONFIG_VXFS_FS is not set
# CONFIG_HPFS_FS is not set
# CONFIG_QNX4FS_FS is not set
# CONFIG_SYSV_FS is not set
# CONFIG_UFS_FS is not set
#
# Network File Systems
#
CONFIG_NFS_FS=y
CONFIG_NFS_V3=y
# CONFIG_NFS_V3_ACL is not set
# CONFIG_NFS_V4 is not set
# CONFIG_NFS_DIRECTIO is not set
# CONFIG_NFSD is not set
CONFIG_ROOT_NFS=y
CONFIG_LOCKD=y
CONFIG_LOCKD_V4=y
CONFIG_NFS_COMMON=y
CONFIG_SUNRPC=y
# CONFIG_RPCSEC_GSS_KRB5 is not set
# CONFIG_RPCSEC_GSS_SPKM3 is not set
# CONFIG_SMB_FS is not set
# CONFIG_CIFS is not set
# CONFIG_NCP_FS is not set
# CONFIG_CODA_FS is not set
# CONFIG_AFS_FS is not set
# CONFIG_9P_FS is not set
#
# Partition Types
#
# CONFIG_PARTITION_ADVANCED is not set
CONFIG_MSDOS_PARTITION=y
#
# Native Language Support
#
# CONFIG_NLS is not set
#
# Profiling support
#
# CONFIG_PROFILING is not set
#
# Kernel hacking
#
# CONFIG_PRINTK_TIME is not set
CONFIG_DEBUG_KERNEL=y
# CONFIG_MAGIC_SYSRQ is not set
CONFIG_LOG_BUF_SHIFT=14
CONFIG_DETECT_SOFTLOCKUP=y
# CONFIG_SCHEDSTATS is not set
# CONFIG_DEBUG_SLAB is not set
# CONFIG_DEBUG_SPINLOCK is not set
# CONFIG_DEBUG_SPINLOCK_SLEEP is not set
# CONFIG_DEBUG_KOBJECT is not set
CONFIG_DEBUG_BUGVERBOSE=y
CONFIG_DEBUG_INFO=y
# CONFIG_DEBUG_FS is not set
CONFIG_FRAME_POINTER=y
CONFIG_DEBUG_USER=y
# CONFIG_DEBUG_WAITQ is not set
......@@ -868,6 +1027,7 @@ CONFIG_DEBUG_LL=y
#
# Security options
#
# CONFIG_KEYS is not set
# CONFIG_SECURITY is not set
#
......@@ -875,9 +1035,14 @@ CONFIG_DEBUG_LL=y
#
# CONFIG_CRYPTO is not set
#
# Hardware crypto devices
#
#
# Library routines
#
CONFIG_CRC_CCITT=y
# CONFIG_CRC16 is not set
CONFIG_CRC32=y
# CONFIG_LIBCRC32C is not set
#
# Automatically generated make config: don't edit
# Linux kernel version: 2.6.14-rc1-omap1
# Tue Oct 11 22:28:40 2005
# Linux kernel version: 2.6.14-rc4-omap1
# Tue Oct 18 17:58:50 2005
#
CONFIG_ARM=y
CONFIG_MMU=y
......@@ -139,6 +139,10 @@ CONFIG_CPU_TLB_V6=y
# Processor Features
#
CONFIG_ARM_THUMB=y
# CONFIG_CPU_ICACHE_DISABLE is not set
# CONFIG_CPU_DCACHE_DISABLE is not set
# CONFIG_CPU_DCACHE_WRITETHROUGH is not set
# CONFIG_CPU_BPREDICT_DISABLE is not set
#
# Bus support
......@@ -264,7 +268,6 @@ CONFIG_TCP_CONG_BIC=y
# Network testing
#
# CONFIG_NET_PKTGEN is not set
# CONFIG_NETFILTER_NETLINK is not set
# CONFIG_HAMRADIO is not set
# CONFIG_IRDA is not set
# CONFIG_BT is not set
......@@ -624,13 +627,38 @@ CONFIG_MENELAUS=y
#
# Graphics support
#
# CONFIG_FB is not set
CONFIG_FB=y
# CONFIG_FB_CFB_FILLRECT is not set
# CONFIG_FB_CFB_COPYAREA is not set
# CONFIG_FB_CFB_IMAGEBLIT is not set
CONFIG_FB_SOFT_CURSOR=y
# CONFIG_FB_MACMODES is not set
# CONFIG_FB_MODE_HELPERS is not set
# CONFIG_FB_TILEBLITTING is not set
# CONFIG_FB_S1D13XXX is not set
CONFIG_FB_OMAP=y
CONFIG_FB_OMAP_LCDC_INTERNAL=y
# CONFIG_FB_OMAP_LCDC_EXTERNAL is not set
# CONFIG_FB_VIRTUAL is not set
#
# Console display driver support
#
# CONFIG_VGA_CONSOLE is not set
CONFIG_DUMMY_CONSOLE=y
CONFIG_FRAMEBUFFER_CONSOLE=y
# CONFIG_FONTS is not set
CONFIG_FONT_8x8=y
CONFIG_FONT_8x16=y
#
# Logo configuration
#
CONFIG_LOGO=y
# CONFIG_LOGO_LINUX_MONO is not set
# CONFIG_LOGO_LINUX_VGA16 is not set
CONFIG_LOGO_LINUX_CLUT224=y
# CONFIG_BACKLIGHT_LCD_SUPPORT is not set
#
# Sound
......
#
# Automatically generated make config: don't edit
# Linux kernel version: 2.6.9-rc1-omap1
# Wed Sep 8 14:14:10 2004
# Linux kernel version: 2.6.14-rc4-omap1
# Tue Oct 18 17:55:19 2005
#
CONFIG_ARM=y
CONFIG_MMU=y
CONFIG_UID16=y
CONFIG_RWSEM_GENERIC_SPINLOCK=y
CONFIG_GENERIC_CALIBRATE_DELAY=y
#
# Code maturity level options
......@@ -14,30 +15,41 @@ CONFIG_RWSEM_GENERIC_SPINLOCK=y
CONFIG_EXPERIMENTAL=y
CONFIG_CLEAN_COMPILE=y
CONFIG_BROKEN_ON_SMP=y
CONFIG_LOCK_KERNEL=y
CONFIG_INIT_ENV_ARG_LIMIT=32
#
# General setup
#
CONFIG_LOCALVERSION=""
CONFIG_LOCALVERSION_AUTO=y
CONFIG_SWAP=y
CONFIG_SYSVIPC=y
# CONFIG_POSIX_MQUEUE is not set
# CONFIG_BSD_PROCESS_ACCT is not set
CONFIG_SYSCTL=y
# CONFIG_AUDIT is not set
CONFIG_LOG_BUF_SHIFT=14
# CONFIG_HOTPLUG is not set
CONFIG_KOBJECT_UEVENT=y
# CONFIG_IKCONFIG is not set
CONFIG_INITRAMFS_SOURCE=""
# CONFIG_EMBEDDED is not set
CONFIG_KALLSYMS=y
# CONFIG_KALLSYMS_ALL is not set
# CONFIG_KALLSYMS_EXTRA_PASS is not set
CONFIG_PRINTK=y
CONFIG_BUG=y
CONFIG_BASE_FULL=y
CONFIG_FUTEX=y
CONFIG_EPOLL=y
CONFIG_IOSCHED_NOOP=y
CONFIG_IOSCHED_AS=y
CONFIG_IOSCHED_DEADLINE=y
CONFIG_IOSCHED_CFQ=y
CONFIG_CC_OPTIMIZE_FOR_SIZE=y
CONFIG_SHMEM=y
CONFIG_CC_ALIGN_FUNCTIONS=0
CONFIG_CC_ALIGN_LABELS=0
CONFIG_CC_ALIGN_LOOPS=0
CONFIG_CC_ALIGN_JUMPS=0
# CONFIG_TINY_SHMEM is not set
CONFIG_BASE_SMALL=0
#
# Loadable module support
......@@ -47,6 +59,7 @@ CONFIG_MODULE_UNLOAD=y
# CONFIG_MODULE_FORCE_UNLOAD is not set
CONFIG_OBSOLETE_MODPARM=y
# CONFIG_MODVERSIONS is not set
# CONFIG_MODULE_SRCVERSION_ALL is not set
CONFIG_KMOD=y
#
......@@ -61,6 +74,7 @@ CONFIG_KMOD=y
# CONFIG_ARCH_INTEGRATOR is not set
# CONFIG_ARCH_IOP3XX is not set
# CONFIG_ARCH_IXP4XX is not set
# CONFIG_ARCH_IXP2000 is not set
# CONFIG_ARCH_L7200 is not set
# CONFIG_ARCH_PXA is not set
# CONFIG_ARCH_RPC is not set
......@@ -69,41 +83,58 @@ CONFIG_KMOD=y
# CONFIG_ARCH_SHARK is not set
# CONFIG_ARCH_LH7A40X is not set
CONFIG_ARCH_OMAP=y
# CONFIG_ARCH_VERSATILE_PB is not set
# CONFIG_ARCH_VERSATILE is not set
# CONFIG_ARCH_IMX is not set
# CONFIG_ARCH_H720X is not set
# CONFIG_ARCH_AAEC2000 is not set
#
# TI OMAP Implementations
#
CONFIG_ARCH_OMAP1=y
# CONFIG_ARCH_OMAP2 is not set
#
# OMAP Feature Selections
#
# CONFIG_OMAP_RESET_CLOCKS is not set
# CONFIG_OMAP_BOOT_TAG is not set
CONFIG_OMAP_MUX=y
# CONFIG_OMAP_MUX_DEBUG is not set
CONFIG_OMAP_MUX_WARNINGS=y
CONFIG_OMAP_MPU_TIMER=y
# CONFIG_OMAP_32K_TIMER is not set
CONFIG_OMAP_LL_DEBUG_UART1=y
# CONFIG_OMAP_LL_DEBUG_UART2 is not set
# CONFIG_OMAP_LL_DEBUG_UART3 is not set
CONFIG_OMAP_SERIAL_WAKE=y
#
# OMAP Core Type
#
# CONFIG_ARCH_OMAP730 is not set
CONFIG_ARCH_OMAP15XX=y
# CONFIG_ARCH_OMAP1610 is not set
# CONFIG_ARCH_OMAP1710 is not set
# CONFIG_ARCH_OMAP5912 is not set
# CONFIG_ARCH_OMAP16XX is not set
#
# OMAP Board Type
#
CONFIG_MACH_OMAP_INNOVATOR=y
# CONFIG_MACH_VOICEBLUE is not set
# CONFIG_MACH_NETSTAR is not set
# CONFIG_MACH_OMAP_PALMTE is not set
# CONFIG_MACH_OMAP_GENERIC is not set
#
# OMAP Feature Selections
# OMAP CPU Speed
#
# CONFIG_OMAP_BOOT_TAG is not set
CONFIG_OMAP_MUX=y
# CONFIG_OMAP_MUX_DEBUG is not set
CONFIG_OMAP_LL_DEBUG_UART1=y
# CONFIG_OMAP_LL_DEBUG_UART2 is not set
# CONFIG_OMAP_LL_DEBUG_UART3 is not set
# CONFIG_OMAP_CLOCKS_SET_BY_BOOTLOADER is not set
CONFIG_OMAP_ARM_168MHZ=y
# CONFIG_OMAP_ARM_150MHZ is not set
# CONFIG_OMAP_ARM_120MHZ is not set
# CONFIG_OMAP_ARM_60MHZ is not set
# CONFIG_OMAP_ARM_30MHZ is not set
# CONFIG_OMAP_DSP is not set
#
# Processor Type
......@@ -113,6 +144,7 @@ CONFIG_CPU_ARM925T=y
CONFIG_CPU_32v4=y
CONFIG_CPU_ABRT_EV4T=y
CONFIG_CPU_CACHE_V4WT=y
CONFIG_CPU_CACHE_VIVT=y
CONFIG_CPU_COPY_V4WB=y
CONFIG_CPU_TLB_V4WBI=y
......@@ -125,70 +157,73 @@ CONFIG_ARM_THUMB=y
CONFIG_CPU_DCACHE_WRITETHROUGH=y
#
# General setup
# Bus support
#
# CONFIG_ZBOOT_ROM is not set
CONFIG_ZBOOT_ROM_TEXT=0x0
CONFIG_ZBOOT_ROM_BSS=0x0
CONFIG_ISA_DMA_API=y
#
# At least one math emulation must be selected
# PCCARD (PCMCIA/CardBus) support
#
CONFIG_FPE_NWFPE=y
# CONFIG_FPE_NWFPE_XP is not set
# CONFIG_FPE_FASTFPE is not set
# CONFIG_VFP is not set
CONFIG_BINFMT_ELF=y
# CONFIG_BINFMT_AOUT is not set
# CONFIG_BINFMT_MISC is not set
# CONFIG_PCCARD is not set
#
# Generic Driver Options
# Kernel Features
#
CONFIG_STANDALONE=y
CONFIG_PREVENT_FIRMWARE_BUILD=y
# CONFIG_DEBUG_DRIVER is not set
CONFIG_PM=y
CONFIG_PREEMPT=y
# CONFIG_APM is not set
# CONFIG_ARTHUR is not set
CONFIG_CMDLINE="console=ttyS0,115200n8 root=/dev/nfs ip=bootp noinitrd"
# CONFIG_NO_IDLE_HZ is not set
# CONFIG_ARCH_DISCONTIGMEM_ENABLE is not set
CONFIG_SELECT_MEMORY_MODEL=y
CONFIG_FLATMEM_MANUAL=y
# CONFIG_DISCONTIGMEM_MANUAL is not set
# CONFIG_SPARSEMEM_MANUAL is not set
CONFIG_FLATMEM=y
CONFIG_FLAT_NODE_MEM_MAP=y
# CONFIG_SPARSEMEM_STATIC is not set
CONFIG_LEDS=y
# CONFIG_LEDS_TIMER is not set
# CONFIG_LEDS_CPU is not set
CONFIG_ALIGNMENT_TRAP=y
#
# Parallel port support
# Boot options
#
# CONFIG_PARPORT is not set
CONFIG_ZBOOT_ROM_TEXT=0x0
CONFIG_ZBOOT_ROM_BSS=0x0
CONFIG_CMDLINE="console=ttyS0,115200n8 root=/dev/nfs ip=bootp noinitrd"
# CONFIG_XIP_KERNEL is not set
#
# Memory Technology Devices (MTD)
# CPU Frequency scaling
#
# CONFIG_MTD is not set
# CONFIG_CPU_FREQ is not set
#
# Plug and Play support
# Floating point emulation
#
#
# Block devices
# At least one emulation must be selected
#
# CONFIG_BLK_DEV_FD is not set
CONFIG_BLK_DEV_LOOP=y
# CONFIG_BLK_DEV_CRYPTOLOOP is not set
# CONFIG_BLK_DEV_NBD is not set
# CONFIG_BLK_DEV_UB is not set
CONFIG_BLK_DEV_RAM=y
CONFIG_BLK_DEV_RAM_SIZE=8192
CONFIG_BLK_DEV_INITRD=y
CONFIG_FPE_NWFPE=y
# CONFIG_FPE_NWFPE_XP is not set
# CONFIG_FPE_FASTFPE is not set
#
# Multi-device support (RAID and LVM)
# Userspace binary formats
#
# CONFIG_MD is not set
CONFIG_BINFMT_ELF=y
# CONFIG_BINFMT_AOUT is not set
# CONFIG_BINFMT_MISC is not set
# CONFIG_ARTHUR is not set
#
# Networking support
# Power management options
#
CONFIG_PM=y
# CONFIG_APM is not set
#
# Networking
#
CONFIG_NET=y
......@@ -197,12 +232,12 @@ CONFIG_NET=y
#
CONFIG_PACKET=y
# CONFIG_PACKET_MMAP is not set
# CONFIG_NETLINK_DEV is not set
CONFIG_UNIX=y
# CONFIG_NET_KEY is not set
CONFIG_INET=y
CONFIG_IP_MULTICAST=y
# CONFIG_IP_ADVANCED_ROUTER is not set
CONFIG_IP_FIB_HASH=y
CONFIG_IP_PNP=y
CONFIG_IP_PNP_DHCP=y
CONFIG_IP_PNP_BOOTP=y
......@@ -216,9 +251,18 @@ CONFIG_IP_PNP_BOOTP=y
# CONFIG_INET_ESP is not set
# CONFIG_INET_IPCOMP is not set
# CONFIG_INET_TUNNEL is not set
CONFIG_INET_DIAG=y
CONFIG_INET_TCP_DIAG=y
# CONFIG_TCP_CONG_ADVANCED is not set
CONFIG_TCP_CONG_BIC=y
# CONFIG_IPV6 is not set
# CONFIG_NETFILTER is not set
#
# DCCP Configuration (EXPERIMENTAL)
#
# CONFIG_IP_DCCP is not set
#
# SCTP Configuration (EXPERIMENTAL)
#
......@@ -235,11 +279,6 @@ CONFIG_IP_PNP_BOOTP=y
# CONFIG_NET_DIVERT is not set
# CONFIG_ECONET is not set
# CONFIG_WAN_ROUTER is not set
# CONFIG_NET_HW_FLOWCONTROL is not set
#
# QoS and/or fair queueing
#
# CONFIG_NET_SCHED is not set
# CONFIG_NET_CLS_ROUTE is not set
......@@ -247,61 +286,64 @@ CONFIG_IP_PNP_BOOTP=y
# Network testing
#
# CONFIG_NET_PKTGEN is not set
# CONFIG_NETPOLL is not set
# CONFIG_NET_POLL_CONTROLLER is not set
# CONFIG_HAMRADIO is not set
# CONFIG_IRDA is not set
# CONFIG_BT is not set
CONFIG_NETDEVICES=y
# CONFIG_DUMMY is not set
# CONFIG_BONDING is not set
# CONFIG_EQUALIZER is not set
# CONFIG_TUN is not set
# CONFIG_IEEE80211 is not set
#
# Ethernet (10 or 100Mbit)
# Device Drivers
#
CONFIG_NET_ETHERNET=y
CONFIG_MII=y
CONFIG_SMC91X=y
# CONFIG_NET_VENDOR_SMC is not set
#
# Ethernet (1000 Mbit)
# Generic Driver Options
#
CONFIG_STANDALONE=y
CONFIG_PREVENT_FIRMWARE_BUILD=y
# CONFIG_FW_LOADER is not set
# CONFIG_DEBUG_DRIVER is not set
#
# Ethernet (10000 Mbit)
# Memory Technology Devices (MTD)
#
# CONFIG_MTD is not set
#
# Token Ring devices
# Parallel port support
#
# CONFIG_PARPORT is not set
#
# Wireless LAN (non-hamradio)
# Plug and Play support
#
# CONFIG_NET_RADIO is not set
#
# Wan interfaces
# Block devices
#
# CONFIG_WAN is not set
CONFIG_PPP=y
CONFIG_PPP_MULTILINK=y
# CONFIG_PPP_FILTER is not set
CONFIG_PPP_ASYNC=y
# CONFIG_PPP_SYNC_TTY is not set
CONFIG_PPP_DEFLATE=y
CONFIG_PPP_BSDCOMP=y
# CONFIG_PPPOE is not set
# CONFIG_SLIP is not set
# CONFIG_SHAPER is not set
# CONFIG_NETCONSOLE is not set
# CONFIG_BLK_DEV_COW_COMMON is not set
CONFIG_BLK_DEV_LOOP=y
# CONFIG_BLK_DEV_CRYPTOLOOP is not set
# CONFIG_BLK_DEV_NBD is not set
# CONFIG_BLK_DEV_UB is not set
CONFIG_BLK_DEV_RAM=y
CONFIG_BLK_DEV_RAM_COUNT=16
CONFIG_BLK_DEV_RAM_SIZE=8192
CONFIG_BLK_DEV_INITRD=y
# CONFIG_CDROM_PKTCDVD is not set
#
# IO Schedulers
#
CONFIG_IOSCHED_NOOP=y
CONFIG_IOSCHED_AS=y
CONFIG_IOSCHED_DEADLINE=y
CONFIG_IOSCHED_CFQ=y
# CONFIG_ATA_OVER_ETH is not set
#
# SCSI device support
#
# CONFIG_RAID_ATTRS is not set
CONFIG_SCSI=y
CONFIG_SCSI_PROC_FS=y
......@@ -314,6 +356,7 @@ CONFIG_CHR_DEV_ST=y
CONFIG_BLK_DEV_SR=y
# CONFIG_BLK_DEV_SR_VENDOR is not set
CONFIG_CHR_DEV_SG=y
# CONFIG_CHR_DEV_SCH is not set
#
# Some SCSI devices (e.g. CD jukebox) support multiple LUNs
......@@ -327,18 +370,24 @@ CONFIG_SCSI_MULTI_LUN=y
#
# CONFIG_SCSI_SPI_ATTRS is not set
# CONFIG_SCSI_FC_ATTRS is not set
# CONFIG_SCSI_ISCSI_ATTRS is not set
# CONFIG_SCSI_SAS_ATTRS is not set
#
# SCSI low-level drivers
#
# CONFIG_SCSI_AIC7XXX_OLD is not set
# CONFIG_SCSI_SATA is not set
# CONFIG_SCSI_EATA_PIO is not set
# CONFIG_SCSI_DEBUG is not set
#
# Multi-device support (RAID and LVM)
#
# CONFIG_MD is not set
#
# Fusion MPT device support
#
# CONFIG_FUSION is not set
#
# IEEE 1394 (FireWire) support
......@@ -348,6 +397,63 @@ CONFIG_SCSI_MULTI_LUN=y
# I2O device support
#
#
# Network device support
#
CONFIG_NETDEVICES=y
# CONFIG_DUMMY is not set
# CONFIG_BONDING is not set
# CONFIG_EQUALIZER is not set
# CONFIG_TUN is not set
#
# PHY device support
#
# CONFIG_PHYLIB is not set
#
# Ethernet (10 or 100Mbit)
#
CONFIG_NET_ETHERNET=y
CONFIG_MII=y
CONFIG_SMC91X=y
# CONFIG_DM9000 is not set
#
# Ethernet (1000 Mbit)
#
#
# Ethernet (10000 Mbit)
#
#
# Token Ring devices
#
#
# Wireless LAN (non-hamradio)
#
# CONFIG_NET_RADIO is not set
#
# Wan interfaces
#
# CONFIG_WAN is not set
CONFIG_PPP=y
CONFIG_PPP_MULTILINK=y
# CONFIG_PPP_FILTER is not set
CONFIG_PPP_ASYNC=y
# CONFIG_PPP_SYNC_TTY is not set
CONFIG_PPP_DEFLATE=y
CONFIG_PPP_BSDCOMP=y
# CONFIG_PPPOE is not set
# CONFIG_SLIP is not set
# CONFIG_SHAPER is not set
# CONFIG_NETCONSOLE is not set
# CONFIG_NETPOLL is not set
# CONFIG_NET_POLL_CONTROLLER is not set
#
# ISDN subsystem
#
......@@ -370,16 +476,6 @@ CONFIG_INPUT_MOUSEDEV_SCREEN_Y=320
# CONFIG_INPUT_EVDEV is not set
# CONFIG_INPUT_EVBUG is not set
#
# Input I/O drivers
#
# CONFIG_GAMEPORT is not set
CONFIG_SOUND_GAMEPORT=y
CONFIG_SERIO=y
# CONFIG_SERIO_I8042 is not set
CONFIG_SERIO_SERPORT=y
# CONFIG_SERIO_CT82C710 is not set
#
# Input Device Drivers
#
......@@ -396,6 +492,14 @@ CONFIG_OMAP_PS2=m
# CONFIG_INPUT_TOUCHSCREEN is not set
# CONFIG_INPUT_MISC is not set
#
# Hardware I/O ports
#
CONFIG_SERIO=y
CONFIG_SERIO_SERPORT=y
# CONFIG_SERIO_RAW is not set
# CONFIG_GAMEPORT is not set
#
# Character devices
#
......@@ -415,12 +519,10 @@ CONFIG_SERIAL_8250_NR_UARTS=4
#
# Non-8250 serial port support
#
CONFIG_SERIAL_8250_OMAP=y
CONFIG_SERIAL_CORE=y
CONFIG_SERIAL_CORE_CONSOLE=y
CONFIG_UNIX98_PTYS=y
# CONFIG_LEGACY_PTYS is not set
# CONFIG_QIC02_TAPE is not set
#
# IPMI
......@@ -433,7 +535,6 @@ CONFIG_UNIX98_PTYS=y
# CONFIG_WATCHDOG is not set
# CONFIG_NVRAM is not set
# CONFIG_RTC is not set
# CONFIG_GEN_RTC is not set
CONFIG_OMAP_RTC=y
# CONFIG_DTLK is not set
# CONFIG_R3964 is not set
......@@ -441,10 +542,12 @@ CONFIG_OMAP_RTC=y
#
# Ftape, the floppy tape device driver
#
# CONFIG_AGP is not set
# CONFIG_DRM is not set
# CONFIG_RAW_DRIVER is not set
#
# TPM devices
#
#
# I2C support
#
......@@ -461,51 +564,74 @@ CONFIG_I2C=y
#
# I2C Hardware Bus support
#
# CONFIG_I2C_AMD756 is not set
# CONFIG_I2C_AMD8111 is not set
# CONFIG_I2C_ISA is not set
# CONFIG_I2C_PARPORT_LIGHT is not set
# CONFIG_SCx200_ACB is not set
# CONFIG_I2C_STUB is not set
# CONFIG_I2C_PCA_ISA is not set
# CONFIG_I2C_OMAP is not set
#
# Hardware Sensors Chip support
# Miscellaneous I2C Chip support
#
# CONFIG_SENSORS_DS1337 is not set
# CONFIG_SENSORS_DS1374 is not set
# CONFIG_SENSORS_EEPROM is not set
# CONFIG_SENSORS_PCF8574 is not set
# CONFIG_SENSORS_PCA9539 is not set
# CONFIG_SENSORS_PCF8591 is not set
# CONFIG_SENSORS_RTC8564 is not set
# CONFIG_TPS65010 is not set
# CONFIG_SENSORS_MAX6875 is not set
# CONFIG_I2C_DEBUG_CORE is not set
# CONFIG_I2C_DEBUG_ALGO is not set
# CONFIG_I2C_DEBUG_BUS is not set
# CONFIG_I2C_DEBUG_CHIP is not set
#
# Hardware Monitoring support
#
# CONFIG_I2C_SENSOR is not set
CONFIG_HWMON=y
# CONFIG_HWMON_VID is not set
# CONFIG_SENSORS_ADM1021 is not set
# CONFIG_SENSORS_ADM1025 is not set
# CONFIG_SENSORS_ADM1026 is not set
# CONFIG_SENSORS_ADM1031 is not set
# CONFIG_SENSORS_ADM9240 is not set
# CONFIG_SENSORS_ASB100 is not set
# CONFIG_SENSORS_ATXP1 is not set
# CONFIG_SENSORS_DS1621 is not set
# CONFIG_SENSORS_FSCHER is not set
# CONFIG_SENSORS_FSCPOS is not set
# CONFIG_SENSORS_GL518SM is not set
# CONFIG_SENSORS_GL520SM is not set
# CONFIG_SENSORS_IT87 is not set
# CONFIG_SENSORS_LM63 is not set
# CONFIG_SENSORS_LM75 is not set
# CONFIG_SENSORS_LM77 is not set
# CONFIG_SENSORS_LM78 is not set
# CONFIG_SENSORS_LM80 is not set
# CONFIG_SENSORS_LM83 is not set
# CONFIG_SENSORS_LM85 is not set
# CONFIG_SENSORS_LM87 is not set
# CONFIG_SENSORS_LM90 is not set
# CONFIG_SENSORS_LM92 is not set
# CONFIG_SENSORS_MAX1619 is not set
# CONFIG_SENSORS_PC87360 is not set
# CONFIG_SENSORS_SMSC47M1 is not set
# CONFIG_SENSORS_SMSC47B397 is not set
# CONFIG_SENSORS_W83781D is not set
# CONFIG_SENSORS_W83792D is not set
# CONFIG_SENSORS_W83L785TS is not set
# CONFIG_SENSORS_W83627HF is not set
# CONFIG_SENSORS_W83627EHF is not set
# CONFIG_HWMON_DEBUG_CHIP is not set
#
# Other I2C Chip support
# Misc devices
#
#
# Multimedia Capabilities Port drivers
#
# CONFIG_SENSORS_EEPROM is not set
# CONFIG_SENSORS_PCF8574 is not set
# CONFIG_SENSORS_PCF8591 is not set
# CONFIG_SENSORS_RTC8564 is not set
# CONFIG_TPS65010 is not set
# CONFIG_I2C_DEBUG_CORE is not set
# CONFIG_I2C_DEBUG_ALGO is not set
# CONFIG_I2C_DEBUG_BUS is not set
# CONFIG_I2C_DEBUG_CHIP is not set
#
# Multimedia devices
......@@ -518,189 +644,40 @@ CONFIG_I2C=y
# CONFIG_DVB is not set
#
# File systems
# Graphics support
#
CONFIG_EXT2_FS=y
# CONFIG_EXT2_FS_XATTR is not set
CONFIG_EXT3_FS=y
CONFIG_EXT3_FS_XATTR=y
# CONFIG_EXT3_FS_POSIX_ACL is not set
# CONFIG_EXT3_FS_SECURITY is not set
CONFIG_JBD=y
# CONFIG_JBD_DEBUG is not set
CONFIG_FS_MBCACHE=y
# CONFIG_REISERFS_FS is not set
# CONFIG_JFS_FS is not set
# CONFIG_XFS_FS is not set
# CONFIG_MINIX_FS is not set
# CONFIG_ROMFS_FS is not set
# CONFIG_QUOTA is not set
CONFIG_AUTOFS_FS=y
CONFIG_AUTOFS4_FS=y
CONFIG_FB=y
# CONFIG_FB_CFB_FILLRECT is not set
# CONFIG_FB_CFB_COPYAREA is not set
# CONFIG_FB_CFB_IMAGEBLIT is not set
CONFIG_FB_SOFT_CURSOR=y
# CONFIG_FB_MACMODES is not set
# CONFIG_FB_MODE_HELPERS is not set
# CONFIG_FB_TILEBLITTING is not set
# CONFIG_FB_S1D13XXX is not set
CONFIG_FB_OMAP=y
CONFIG_FB_OMAP_LCDC_INTERNAL=y
# CONFIG_FB_OMAP_LCDC_EXTERNAL is not set
# CONFIG_FB_OMAP_DMA_TUNE is not set
# CONFIG_FB_VIRTUAL is not set
#
# CD-ROM/DVD Filesystems
#
CONFIG_ISO9660_FS=y
CONFIG_JOLIET=y
# CONFIG_ZISOFS is not set
# CONFIG_UDF_FS is not set
#
# DOS/FAT/NT Filesystems
#
CONFIG_FAT_FS=m
CONFIG_MSDOS_FS=m
CONFIG_VFAT_FS=m
CONFIG_FAT_DEFAULT_CODEPAGE=437
CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
# CONFIG_NTFS_FS is not set
#
# Pseudo filesystems
#
CONFIG_PROC_FS=y
CONFIG_SYSFS=y
# CONFIG_DEVFS_FS is not set
# CONFIG_DEVPTS_FS_XATTR is not set
CONFIG_TMPFS=y
# CONFIG_HUGETLB_PAGE is not set
CONFIG_RAMFS=y
#
# Miscellaneous filesystems
#
# CONFIG_ADFS_FS is not set
# CONFIG_AFFS_FS is not set
# CONFIG_HFS_FS is not set
# CONFIG_HFSPLUS_FS is not set
# CONFIG_BEFS_FS is not set
# CONFIG_BFS_FS is not set
# CONFIG_EFS_FS is not set
# CONFIG_CRAMFS is not set
# CONFIG_VXFS_FS is not set
# CONFIG_HPFS_FS is not set
# CONFIG_QNX4FS_FS is not set
# CONFIG_SYSV_FS is not set
# CONFIG_UFS_FS is not set
#
# Network File Systems
#
CONFIG_NFS_FS=y
CONFIG_NFS_V3=y
CONFIG_NFS_V4=y
# CONFIG_NFS_DIRECTIO is not set
# CONFIG_NFSD is not set
CONFIG_ROOT_NFS=y
CONFIG_LOCKD=y
CONFIG_LOCKD_V4=y
# CONFIG_EXPORTFS is not set
CONFIG_SUNRPC=y
CONFIG_SUNRPC_GSS=y
CONFIG_RPCSEC_GSS_KRB5=y
# CONFIG_RPCSEC_GSS_SPKM3 is not set
# CONFIG_SMB_FS is not set
# CONFIG_CIFS is not set
# CONFIG_NCP_FS is not set
# CONFIG_CODA_FS is not set
# CONFIG_AFS_FS is not set
#
# Partition Types
#
CONFIG_PARTITION_ADVANCED=y
# CONFIG_ACORN_PARTITION is not set
# CONFIG_OSF_PARTITION is not set
# CONFIG_AMIGA_PARTITION is not set
# CONFIG_ATARI_PARTITION is not set
# CONFIG_MAC_PARTITION is not set
CONFIG_MSDOS_PARTITION=y
# CONFIG_BSD_DISKLABEL is not set
# CONFIG_MINIX_SUBPARTITION is not set
# CONFIG_SOLARIS_X86_PARTITION is not set
# CONFIG_UNIXWARE_DISKLABEL is not set
# CONFIG_LDM_PARTITION is not set
# CONFIG_SGI_PARTITION is not set
# CONFIG_ULTRIX_PARTITION is not set
# CONFIG_SUN_PARTITION is not set
# CONFIG_EFI_PARTITION is not set
#
# Native Language Support
#
CONFIG_NLS=y
CONFIG_NLS_DEFAULT="iso8859-1"
# CONFIG_NLS_CODEPAGE_437 is not set
# CONFIG_NLS_CODEPAGE_737 is not set
# CONFIG_NLS_CODEPAGE_775 is not set
# CONFIG_NLS_CODEPAGE_850 is not set
# CONFIG_NLS_CODEPAGE_852 is not set
# CONFIG_NLS_CODEPAGE_855 is not set
# CONFIG_NLS_CODEPAGE_857 is not set
# CONFIG_NLS_CODEPAGE_860 is not set
# CONFIG_NLS_CODEPAGE_861 is not set
# CONFIG_NLS_CODEPAGE_862 is not set
# CONFIG_NLS_CODEPAGE_863 is not set
# CONFIG_NLS_CODEPAGE_864 is not set
# CONFIG_NLS_CODEPAGE_865 is not set
# CONFIG_NLS_CODEPAGE_866 is not set
# CONFIG_NLS_CODEPAGE_869 is not set
# CONFIG_NLS_CODEPAGE_936 is not set
# CONFIG_NLS_CODEPAGE_950 is not set
# CONFIG_NLS_CODEPAGE_932 is not set
# CONFIG_NLS_CODEPAGE_949 is not set
# CONFIG_NLS_CODEPAGE_874 is not set
# CONFIG_NLS_ISO8859_8 is not set
# CONFIG_NLS_CODEPAGE_1250 is not set
# CONFIG_NLS_CODEPAGE_1251 is not set
# CONFIG_NLS_ASCII is not set
# CONFIG_NLS_ISO8859_1 is not set
# CONFIG_NLS_ISO8859_2 is not set
# CONFIG_NLS_ISO8859_3 is not set
# CONFIG_NLS_ISO8859_4 is not set
# CONFIG_NLS_ISO8859_5 is not set
# CONFIG_NLS_ISO8859_6 is not set
# CONFIG_NLS_ISO8859_7 is not set
# CONFIG_NLS_ISO8859_9 is not set
# CONFIG_NLS_ISO8859_13 is not set
# CONFIG_NLS_ISO8859_14 is not set
# CONFIG_NLS_ISO8859_15 is not set
# CONFIG_NLS_KOI8_R is not set
# CONFIG_NLS_KOI8_U is not set
# CONFIG_NLS_UTF8 is not set
#
# Profiling support
#
# CONFIG_PROFILING is not set
#
# Graphics support
#
CONFIG_FB=y
# CONFIG_FB_MODE_HELPERS is not set
CONFIG_FB_OMAP=y
CONFIG_FB_OMAP_DMA_TUNE=y
# CONFIG_FB_OMAP_OLD is not set
# CONFIG_FB_VIRTUAL is not set
#
# Console display driver support
# Console display driver support
#
# CONFIG_VGA_CONSOLE is not set
# CONFIG_MDA_CONSOLE is not set
CONFIG_DUMMY_CONSOLE=y
CONFIG_FRAMEBUFFER_CONSOLE=y
CONFIG_FONTS=y
CONFIG_FONT_8x8=y
CONFIG_FONT_8x16=y
# CONFIG_FONT_6x11 is not set
# CONFIG_FONT_7x14 is not set
# CONFIG_FONT_PEARL_8x8 is not set
# CONFIG_FONT_ACORN_8x8 is not set
# CONFIG_FONT_MINI_4x6 is not set
# CONFIG_FONT_SUN8x16 is not set
# CONFIG_FONT_SUN12x22 is not set
# CONFIG_FONT_10x18 is not set
#
# Logo configuration
......@@ -709,19 +686,18 @@ CONFIG_LOGO=y
CONFIG_LOGO_LINUX_MONO=y
CONFIG_LOGO_LINUX_VGA16=y
CONFIG_LOGO_LINUX_CLUT224=y
# CONFIG_BACKLIGHT_LCD_SUPPORT is not set
#
# Sound
#
# CONFIG_SOUND is not set
#
# Misc devices
#
#
# USB support
#
CONFIG_USB_ARCH_HAS_HCD=y
CONFIG_USB_ARCH_HAS_OHCI=y
CONFIG_USB=y
CONFIG_USB_DEBUG=y
......@@ -732,14 +708,16 @@ CONFIG_USB_DEVICEFS=y
# CONFIG_USB_BANDWIDTH is not set
# CONFIG_USB_DYNAMIC_MINORS is not set
CONFIG_USB_SUSPEND=y
# CONFIG_USB_OTG is not set
#
# USB Host Controller Drivers
#
# CONFIG_USB_EHCI_HCD is not set
# CONFIG_USB_ISP116X_HCD is not set
CONFIG_USB_OHCI_HCD=y
# CONFIG_USB_UHCI_HCD is not set
# CONFIG_USB_SL811HS is not set
# CONFIG_USB_OHCI_BIG_ENDIAN is not set
CONFIG_USB_OHCI_LITTLE_ENDIAN=y
# CONFIG_USB_SL811_HCD is not set
#
# USB Device Class drivers
......@@ -747,19 +725,22 @@ CONFIG_USB_OHCI_HCD=y
# CONFIG_USB_BLUETOOTH_TTY is not set
# CONFIG_USB_ACM is not set
# CONFIG_USB_PRINTER is not set
#
# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support' may also be needed; see USB_STORAGE Help for more information
#
CONFIG_USB_STORAGE=y
# CONFIG_USB_STORAGE_DEBUG is not set
# CONFIG_USB_STORAGE_RW_DETECT is not set
CONFIG_USB_STORAGE_DATAFAB=y
CONFIG_USB_STORAGE_FREECOM=y
CONFIG_USB_STORAGE_DPCM=y
CONFIG_USB_STORAGE_HP8200e=y
# CONFIG_USB_STORAGE_USBAT is not set
CONFIG_USB_STORAGE_SDDR09=y
CONFIG_USB_STORAGE_SDDR55=y
CONFIG_USB_STORAGE_JUMPSHOT=y
#
# USB Human Interface Devices (HID)
# USB Input Devices
#
CONFIG_USB_HID=y
CONFIG_USB_HIDINPUT=y
......@@ -767,19 +748,23 @@ CONFIG_USB_HIDINPUT=y
# CONFIG_USB_HIDDEV is not set
# CONFIG_USB_AIPTEK is not set
# CONFIG_USB_WACOM is not set
# CONFIG_USB_ACECAD is not set
# CONFIG_USB_KBTAB is not set
# CONFIG_USB_POWERMATE is not set
# CONFIG_USB_MTOUCH is not set
# CONFIG_USB_ITMTOUCH is not set
# CONFIG_USB_EGALAX is not set
# CONFIG_USB_YEALINK is not set
# CONFIG_USB_XPAD is not set
# CONFIG_USB_ATI_REMOTE is not set
# CONFIG_USB_KEYSPAN_REMOTE is not set
# CONFIG_USB_APPLETOUCH is not set
#
# USB Imaging devices
#
# CONFIG_USB_MDC800 is not set
# CONFIG_USB_MICROTEK is not set
# CONFIG_USB_HPUSBSCSI is not set
#
# USB Multimedia devices
......@@ -791,36 +776,22 @@ CONFIG_USB_HIDINPUT=y
#
#
# USB Network adaptors
# USB Network Adapters
#
# CONFIG_USB_CATC is not set
# CONFIG_USB_KAWETH is not set
# CONFIG_USB_PEGASUS is not set
CONFIG_USB_RTL8150=y
CONFIG_USB_USBNET=y
#
# USB Host-to-Host Cables
#
CONFIG_USB_ALI_M5632=y
CONFIG_USB_AN2720=y
CONFIG_USB_BELKIN=y
CONFIG_USB_GENESYS=y
CONFIG_USB_NET1080=y
CONFIG_USB_PL2301=y
#
# Intelligent USB Devices/Gadgets
#
CONFIG_USB_ARMLINUX=y
CONFIG_USB_EPSON2888=y
CONFIG_USB_ZAURUS=y
CONFIG_USB_CDCETHER=y
#
# USB Network Adapters
#
CONFIG_USB_AX8817X=y
CONFIG_USB_NET_AX8817X=y
CONFIG_USB_NET_CDCETHER=y
# CONFIG_USB_NET_GL620A is not set
CONFIG_USB_NET_NET1080=y
# CONFIG_USB_NET_PLUSB is not set
# CONFIG_USB_NET_RNDIS_HOST is not set
# CONFIG_USB_NET_CDC_SUBSET is not set
CONFIG_USB_NET_ZAURUS=y
CONFIG_USB_MON=y
#
# USB port drivers
......@@ -836,25 +807,26 @@ CONFIG_USB_AX8817X=y
#
# CONFIG_USB_EMI62 is not set
# CONFIG_USB_EMI26 is not set
# CONFIG_USB_TIGL is not set
# CONFIG_USB_AUERSWALD is not set
# CONFIG_USB_RIO500 is not set
# CONFIG_USB_LEGOTOWER is not set
# CONFIG_USB_LCD is not set
# CONFIG_USB_LED is not set
# CONFIG_USB_CYTHERM is not set
# CONFIG_USB_PHIDGETKIT is not set
# CONFIG_USB_PHIDGETSERVO is not set
# CONFIG_USB_IDMOUSE is not set
# CONFIG_USB_LD is not set
# CONFIG_USB_TEST is not set
#
# USB Gadget Support
# USB DSL modem support
#
# CONFIG_USB_GADGET is not set
#
# Synchronous Serial Interfaces (SSI)
# USB Gadget Support
#
# CONFIG_OMAP_UWIRE is not set
# CONFIG_USB_GADGET is not set
#
# MMC/SD Card support
......@@ -863,17 +835,197 @@ CONFIG_MMC=y
# CONFIG_MMC_DEBUG is not set
CONFIG_MMC_BLOCK=y
CONFIG_MMC_BLOCK_BROKEN_RFD=y
# CONFIG_MMC_BULKTRANSFER is not set
CONFIG_MMC_OMAP=y
# CONFIG_MMC_WBSD is not set
#
# Synchronous Serial Interfaces (SSI)
#
# CONFIG_OMAP_UWIRE is not set
# CONFIG_OMAP_TSC2101 is not set
#
# File systems
#
CONFIG_EXT2_FS=y
# CONFIG_EXT2_FS_XATTR is not set
# CONFIG_EXT2_FS_XIP is not set
CONFIG_EXT3_FS=y
CONFIG_EXT3_FS_XATTR=y
# CONFIG_EXT3_FS_POSIX_ACL is not set
# CONFIG_EXT3_FS_SECURITY is not set
CONFIG_JBD=y
# CONFIG_JBD_DEBUG is not set
CONFIG_FS_MBCACHE=y
# CONFIG_REISERFS_FS is not set
# CONFIG_JFS_FS is not set
# CONFIG_FS_POSIX_ACL is not set
# CONFIG_XFS_FS is not set
# CONFIG_MINIX_FS is not set
# CONFIG_ROMFS_FS is not set
CONFIG_INOTIFY=y
# CONFIG_QUOTA is not set
CONFIG_DNOTIFY=y
CONFIG_AUTOFS_FS=y
CONFIG_AUTOFS4_FS=y
# CONFIG_FUSE_FS is not set
#
# CD-ROM/DVD Filesystems
#
CONFIG_ISO9660_FS=y
CONFIG_JOLIET=y
# CONFIG_ZISOFS is not set
# CONFIG_UDF_FS is not set
#
# DOS/FAT/NT Filesystems
#
CONFIG_FAT_FS=m
CONFIG_MSDOS_FS=m
CONFIG_VFAT_FS=m
CONFIG_FAT_DEFAULT_CODEPAGE=437
CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
# CONFIG_NTFS_FS is not set
#
# Pseudo filesystems
#
CONFIG_PROC_FS=y
CONFIG_SYSFS=y
CONFIG_TMPFS=y
# CONFIG_HUGETLB_PAGE is not set
CONFIG_RAMFS=y
# CONFIG_RELAYFS_FS is not set
#
# Miscellaneous filesystems
#
# CONFIG_ADFS_FS is not set
# CONFIG_AFFS_FS is not set
# CONFIG_HFS_FS is not set
# CONFIG_HFSPLUS_FS is not set
# CONFIG_BEFS_FS is not set
# CONFIG_BFS_FS is not set
# CONFIG_EFS_FS is not set
# CONFIG_CRAMFS is not set
# CONFIG_VXFS_FS is not set
# CONFIG_HPFS_FS is not set
# CONFIG_QNX4FS_FS is not set
# CONFIG_SYSV_FS is not set
# CONFIG_UFS_FS is not set
#
# Network File Systems
#
CONFIG_NFS_FS=y
CONFIG_NFS_V3=y
# CONFIG_NFS_V3_ACL is not set
CONFIG_NFS_V4=y
# CONFIG_NFS_DIRECTIO is not set
# CONFIG_NFSD is not set
CONFIG_ROOT_NFS=y
CONFIG_LOCKD=y
CONFIG_LOCKD_V4=y
CONFIG_NFS_COMMON=y
CONFIG_SUNRPC=y
CONFIG_SUNRPC_GSS=y
CONFIG_RPCSEC_GSS_KRB5=y
# CONFIG_RPCSEC_GSS_SPKM3 is not set
# CONFIG_SMB_FS is not set
# CONFIG_CIFS is not set
# CONFIG_NCP_FS is not set
# CONFIG_CODA_FS is not set
# CONFIG_AFS_FS is not set
# CONFIG_9P_FS is not set
#
# Partition Types
#
CONFIG_PARTITION_ADVANCED=y
# CONFIG_ACORN_PARTITION is not set
# CONFIG_OSF_PARTITION is not set
# CONFIG_AMIGA_PARTITION is not set
# CONFIG_ATARI_PARTITION is not set
# CONFIG_MAC_PARTITION is not set
CONFIG_MSDOS_PARTITION=y
# CONFIG_BSD_DISKLABEL is not set
# CONFIG_MINIX_SUBPARTITION is not set
# CONFIG_SOLARIS_X86_PARTITION is not set
# CONFIG_UNIXWARE_DISKLABEL is not set
# CONFIG_LDM_PARTITION is not set
# CONFIG_SGI_PARTITION is not set
# CONFIG_ULTRIX_PARTITION is not set
# CONFIG_SUN_PARTITION is not set
# CONFIG_EFI_PARTITION is not set
#
# Native Language Support
#
CONFIG_NLS=y
CONFIG_NLS_DEFAULT="iso8859-1"
# CONFIG_NLS_CODEPAGE_437 is not set
# CONFIG_NLS_CODEPAGE_737 is not set
# CONFIG_NLS_CODEPAGE_775 is not set
# CONFIG_NLS_CODEPAGE_850 is not set
# CONFIG_NLS_CODEPAGE_852 is not set
# CONFIG_NLS_CODEPAGE_855 is not set
# CONFIG_NLS_CODEPAGE_857 is not set
# CONFIG_NLS_CODEPAGE_860 is not set
# CONFIG_NLS_CODEPAGE_861 is not set
# CONFIG_NLS_CODEPAGE_862 is not set
# CONFIG_NLS_CODEPAGE_863 is not set
# CONFIG_NLS_CODEPAGE_864 is not set
# CONFIG_NLS_CODEPAGE_865 is not set
# CONFIG_NLS_CODEPAGE_866 is not set
# CONFIG_NLS_CODEPAGE_869 is not set
# CONFIG_NLS_CODEPAGE_936 is not set
# CONFIG_NLS_CODEPAGE_950 is not set
# CONFIG_NLS_CODEPAGE_932 is not set
# CONFIG_NLS_CODEPAGE_949 is not set
# CONFIG_NLS_CODEPAGE_874 is not set
# CONFIG_NLS_ISO8859_8 is not set
# CONFIG_NLS_CODEPAGE_1250 is not set
# CONFIG_NLS_CODEPAGE_1251 is not set
# CONFIG_NLS_ASCII is not set
# CONFIG_NLS_ISO8859_1 is not set
# CONFIG_NLS_ISO8859_2 is not set
# CONFIG_NLS_ISO8859_3 is not set
# CONFIG_NLS_ISO8859_4 is not set
# CONFIG_NLS_ISO8859_5 is not set
# CONFIG_NLS_ISO8859_6 is not set
# CONFIG_NLS_ISO8859_7 is not set
# CONFIG_NLS_ISO8859_9 is not set
# CONFIG_NLS_ISO8859_13 is not set
# CONFIG_NLS_ISO8859_14 is not set
# CONFIG_NLS_ISO8859_15 is not set
# CONFIG_NLS_KOI8_R is not set
# CONFIG_NLS_KOI8_U is not set
# CONFIG_NLS_UTF8 is not set
#
# Profiling support
#
# CONFIG_PROFILING is not set
#
# Kernel hacking
#
# CONFIG_PRINTK_TIME is not set
CONFIG_DEBUG_KERNEL=y
CONFIG_MAGIC_SYSRQ=y
CONFIG_LOG_BUF_SHIFT=14
CONFIG_DETECT_SOFTLOCKUP=y
# CONFIG_SCHEDSTATS is not set
# CONFIG_DEBUG_SLAB is not set
CONFIG_DEBUG_PREEMPT=y
# CONFIG_DEBUG_SPINLOCK is not set
# CONFIG_DEBUG_BUGVERBOSE is not set
# CONFIG_DEBUG_SPINLOCK_SLEEP is not set
# CONFIG_DEBUG_KOBJECT is not set
CONFIG_DEBUG_BUGVERBOSE=y
# CONFIG_DEBUG_INFO is not set
# CONFIG_DEBUG_FS is not set
CONFIG_FRAME_POINTER=y
# CONFIG_DEBUG_USER is not set
# CONFIG_DEBUG_WAITQ is not set
......@@ -883,6 +1035,7 @@ CONFIG_FRAME_POINTER=y
#
# Security options
#
# CONFIG_KEYS is not set
# CONFIG_SECURITY is not set
#
......@@ -896,6 +1049,8 @@ CONFIG_CRYPTO_MD5=y
# CONFIG_CRYPTO_SHA1 is not set
# CONFIG_CRYPTO_SHA256 is not set
# CONFIG_CRYPTO_SHA512 is not set
# CONFIG_CRYPTO_WP512 is not set
# CONFIG_CRYPTO_TGR192 is not set
CONFIG_CRYPTO_DES=y
# CONFIG_CRYPTO_BLOWFISH is not set
# CONFIG_CRYPTO_TWOFISH is not set
......@@ -906,15 +1061,21 @@ CONFIG_CRYPTO_DES=y
# CONFIG_CRYPTO_TEA is not set
# CONFIG_CRYPTO_ARC4 is not set
# CONFIG_CRYPTO_KHAZAD is not set
# CONFIG_CRYPTO_ANUBIS is not set
# CONFIG_CRYPTO_DEFLATE is not set
# CONFIG_CRYPTO_MICHAEL_MIC is not set
# CONFIG_CRYPTO_CRC32C is not set
# CONFIG_CRYPTO_TEST is not set
#
# Hardware crypto devices
#
#
# Library routines
#
CONFIG_CRC_CCITT=y
# CONFIG_CRC16 is not set
CONFIG_CRC32=y
# CONFIG_LIBCRC32C is not set
CONFIG_ZLIB_INFLATE=y
......
#
# Automatically generated make config: don't edit
# Linux kernel version: 2.6.9-rc3-omap1
# Mon Oct 4 10:15:49 2004
# Linux kernel version: 2.6.14-rc4-omap1
# Tue Oct 18 17:55:48 2005
#
CONFIG_ARM=y
CONFIG_MMU=y
CONFIG_UID16=y
CONFIG_RWSEM_GENERIC_SPINLOCK=y
CONFIG_GENERIC_IOMAP=y
CONFIG_GENERIC_CALIBRATE_DELAY=y
#
# Code maturity level options
......@@ -15,32 +15,39 @@ CONFIG_GENERIC_IOMAP=y
CONFIG_EXPERIMENTAL=y
CONFIG_CLEAN_COMPILE=y
CONFIG_BROKEN_ON_SMP=y
CONFIG_INIT_ENV_ARG_LIMIT=32
#
# General setup
#
CONFIG_LOCALVERSION=""
CONFIG_LOCALVERSION_AUTO=y
CONFIG_SWAP=y
CONFIG_SYSVIPC=y
# CONFIG_POSIX_MQUEUE is not set
# CONFIG_BSD_PROCESS_ACCT is not set
CONFIG_SYSCTL=y
# CONFIG_AUDIT is not set
CONFIG_LOG_BUF_SHIFT=14
# CONFIG_HOTPLUG is not set
CONFIG_KOBJECT_UEVENT=y
# CONFIG_IKCONFIG is not set
CONFIG_INITRAMFS_SOURCE=""
# CONFIG_EMBEDDED is not set
CONFIG_KALLSYMS=y
# CONFIG_KALLSYMS_EXTRA_PASS is not set
CONFIG_PRINTK=y
CONFIG_BUG=y
CONFIG_BASE_FULL=y
CONFIG_FUTEX=y
CONFIG_EPOLL=y
CONFIG_IOSCHED_NOOP=y
CONFIG_IOSCHED_AS=y
CONFIG_IOSCHED_DEADLINE=y
CONFIG_IOSCHED_CFQ=y
CONFIG_CC_OPTIMIZE_FOR_SIZE=y
CONFIG_SHMEM=y
CONFIG_CC_ALIGN_FUNCTIONS=0
CONFIG_CC_ALIGN_LABELS=0
CONFIG_CC_ALIGN_LOOPS=0
CONFIG_CC_ALIGN_JUMPS=0
# CONFIG_TINY_SHMEM is not set
CONFIG_BASE_SMALL=0
#
# Loadable module support
......@@ -50,6 +57,7 @@ CONFIG_MODULE_UNLOAD=y
# CONFIG_MODULE_FORCE_UNLOAD is not set
CONFIG_OBSOLETE_MODPARM=y
# CONFIG_MODVERSIONS is not set
# CONFIG_MODULE_SRCVERSION_ALL is not set
CONFIG_KMOD=y
#
......@@ -73,12 +81,33 @@ CONFIG_KMOD=y
# CONFIG_ARCH_SHARK is not set
# CONFIG_ARCH_LH7A40X is not set
CONFIG_ARCH_OMAP=y
# CONFIG_ARCH_VERSATILE_PB is not set
# CONFIG_ARCH_VERSATILE is not set
# CONFIG_ARCH_IMX is not set
# CONFIG_ARCH_H720X is not set
# CONFIG_ARCH_AAEC2000 is not set
#
# TI OMAP Implementations
#
CONFIG_ARCH_OMAP_OTG=y
CONFIG_ARCH_OMAP1=y
# CONFIG_ARCH_OMAP2 is not set
#
# OMAP Feature Selections
#
# CONFIG_OMAP_RESET_CLOCKS is not set
# CONFIG_OMAP_BOOT_TAG is not set
CONFIG_OMAP_MUX=y
# CONFIG_OMAP_MUX_DEBUG is not set
CONFIG_OMAP_MUX_WARNINGS=y
CONFIG_OMAP_MPU_TIMER=y
# CONFIG_OMAP_32K_TIMER is not set
# CONFIG_OMAP_DM_TIMER is not set
CONFIG_OMAP_LL_DEBUG_UART1=y
# CONFIG_OMAP_LL_DEBUG_UART2 is not set
# CONFIG_OMAP_LL_DEBUG_UART3 is not set
CONFIG_OMAP_SERIAL_WAKE=y
#
# OMAP Core Type
......@@ -86,7 +115,6 @@ CONFIG_ARCH_OMAP=y
# CONFIG_ARCH_OMAP730 is not set
# CONFIG_ARCH_OMAP15XX is not set
CONFIG_ARCH_OMAP16XX=y
CONFIG_ARCH_OMAP_OTG=y
#
# OMAP Board Type
......@@ -94,20 +122,14 @@ CONFIG_ARCH_OMAP_OTG=y
CONFIG_MACH_OMAP_INNOVATOR=y
# CONFIG_MACH_OMAP_H2 is not set
# CONFIG_MACH_OMAP_H3 is not set
# CONFIG_MACH_OMAP_H4 is not set
# CONFIG_MACH_OMAP_OSK is not set
# CONFIG_MACH_OMAP_GENERIC is not set
#
# OMAP Feature Selections
# OMAP CPU Speed
#
# CONFIG_OMAP_BOOT_TAG is not set
CONFIG_OMAP_MUX=y
# CONFIG_OMAP_MUX_DEBUG is not set
CONFIG_OMAP_MUX_WARNINGS=y
CONFIG_OMAP_LL_DEBUG_UART1=y
# CONFIG_OMAP_LL_DEBUG_UART2 is not set
# CONFIG_OMAP_LL_DEBUG_UART3 is not set
# CONFIG_OMAP_CLOCKS_SET_BY_BOOTLOADER is not set
# CONFIG_OMAP_ARM_216MHZ is not set
CONFIG_OMAP_ARM_192MHZ=y
# CONFIG_OMAP_ARM_168MHZ is not set
# CONFIG_OMAP_ARM_120MHZ is not set
......@@ -122,6 +144,7 @@ CONFIG_CPU_32=y
CONFIG_CPU_ARM926T=y
CONFIG_CPU_32v5=y
CONFIG_CPU_ABRT_EV5TJ=y
CONFIG_CPU_CACHE_VIVT=y
CONFIG_CPU_COPY_V4WB=y
CONFIG_CPU_TLB_V4WBI=y
......@@ -135,67 +158,71 @@ CONFIG_CPU_DCACHE_WRITETHROUGH=y
# CONFIG_CPU_CACHE_ROUND_ROBIN is not set
#
# General setup
# Bus support
#
# CONFIG_ZBOOT_ROM is not set
CONFIG_ZBOOT_ROM_TEXT=0x0
CONFIG_ZBOOT_ROM_BSS=0x0
CONFIG_ISA_DMA_API=y
#
# At least one math emulation must be selected
# PCCARD (PCMCIA/CardBus) support
#
CONFIG_FPE_NWFPE=y
# CONFIG_FPE_NWFPE_XP is not set
# CONFIG_FPE_FASTFPE is not set
# CONFIG_VFP is not set
CONFIG_BINFMT_ELF=y
# CONFIG_BINFMT_AOUT is not set
# CONFIG_BINFMT_MISC is not set
# CONFIG_PCCARD is not set
#
# Generic Driver Options
# Kernel Features
#
CONFIG_STANDALONE=y
CONFIG_PREVENT_FIRMWARE_BUILD=y
# CONFIG_PM is not set
# CONFIG_PREEMPT is not set
# CONFIG_ARTHUR is not set
CONFIG_CMDLINE="mem=32M console=tty0 console=ttyS0,115200 initrd=0x10200000,8M root=/dev/ram0 rw"
# CONFIG_NO_IDLE_HZ is not set
# CONFIG_ARCH_DISCONTIGMEM_ENABLE is not set
CONFIG_SELECT_MEMORY_MODEL=y
CONFIG_FLATMEM_MANUAL=y
# CONFIG_DISCONTIGMEM_MANUAL is not set
# CONFIG_SPARSEMEM_MANUAL is not set
CONFIG_FLATMEM=y
CONFIG_FLAT_NODE_MEM_MAP=y
# CONFIG_SPARSEMEM_STATIC is not set
# CONFIG_LEDS is not set
CONFIG_ALIGNMENT_TRAP=y
#
# Parallel port support
# Boot options
#
# CONFIG_PARPORT is not set
CONFIG_ZBOOT_ROM_TEXT=0x0
CONFIG_ZBOOT_ROM_BSS=0x0
CONFIG_CMDLINE="mem=32M console=tty0 console=ttyS0,115200 initrd=0x10200000,8M root=/dev/ram0 rw"
# CONFIG_XIP_KERNEL is not set
#
# Memory Technology Devices (MTD)
# CPU Frequency scaling
#
# CONFIG_MTD is not set
# CONFIG_CPU_FREQ is not set
#
# Plug and Play support
# Floating point emulation
#
#
# Block devices
# At least one emulation must be selected
#
# CONFIG_BLK_DEV_FD is not set
CONFIG_BLK_DEV_LOOP=y
# CONFIG_BLK_DEV_CRYPTOLOOP is not set
# CONFIG_BLK_DEV_NBD is not set
CONFIG_BLK_DEV_RAM=y
CONFIG_BLK_DEV_RAM_SIZE=8192
CONFIG_BLK_DEV_INITRD=y
CONFIG_FPE_NWFPE=y
# CONFIG_FPE_NWFPE_XP is not set
# CONFIG_FPE_FASTFPE is not set
# CONFIG_VFP is not set
#
# Multi-device support (RAID and LVM)
# Userspace binary formats
#
# CONFIG_MD is not set
CONFIG_BINFMT_ELF=y
# CONFIG_BINFMT_AOUT is not set
# CONFIG_BINFMT_MISC is not set
# CONFIG_ARTHUR is not set
#
# Power management options
#
# CONFIG_PM is not set
#
# Networking support
# Networking
#
CONFIG_NET=y
......@@ -204,12 +231,12 @@ CONFIG_NET=y
#
CONFIG_PACKET=m
# CONFIG_PACKET_MMAP is not set
# CONFIG_NETLINK_DEV is not set
CONFIG_UNIX=y
# CONFIG_NET_KEY is not set
CONFIG_INET=y
CONFIG_IP_MULTICAST=y
# CONFIG_IP_ADVANCED_ROUTER is not set
CONFIG_IP_FIB_HASH=y
CONFIG_IP_PNP=y
CONFIG_IP_PNP_DHCP=y
CONFIG_IP_PNP_BOOTP=y
......@@ -223,9 +250,18 @@ CONFIG_IP_PNP_BOOTP=y
# CONFIG_INET_ESP is not set
# CONFIG_INET_IPCOMP is not set
# CONFIG_INET_TUNNEL is not set
CONFIG_INET_DIAG=y
CONFIG_INET_TCP_DIAG=y
# CONFIG_TCP_CONG_ADVANCED is not set
CONFIG_TCP_CONG_BIC=y
# CONFIG_IPV6 is not set
# CONFIG_NETFILTER is not set
#
# DCCP Configuration (EXPERIMENTAL)
#
# CONFIG_IP_DCCP is not set
#
# SCTP Configuration (EXPERIMENTAL)
#
......@@ -242,11 +278,6 @@ CONFIG_IP_PNP_BOOTP=y
# CONFIG_NET_DIVERT is not set
# CONFIG_ECONET is not set
# CONFIG_WAN_ROUTER is not set
# CONFIG_NET_HW_FLOWCONTROL is not set
#
# QoS and/or fair queueing
#
# CONFIG_NET_SCHED is not set
# CONFIG_NET_CLS_ROUTE is not set
......@@ -254,24 +285,103 @@ CONFIG_IP_PNP_BOOTP=y
# Network testing
#
# CONFIG_NET_PKTGEN is not set
# CONFIG_NETPOLL is not set
# CONFIG_NET_POLL_CONTROLLER is not set
# CONFIG_HAMRADIO is not set
# CONFIG_IRDA is not set
# CONFIG_BT is not set
# CONFIG_IEEE80211 is not set
#
# Device Drivers
#
#
# Generic Driver Options
#
CONFIG_STANDALONE=y
CONFIG_PREVENT_FIRMWARE_BUILD=y
# CONFIG_FW_LOADER is not set
#
# Memory Technology Devices (MTD)
#
# CONFIG_MTD is not set
#
# Parallel port support
#
# CONFIG_PARPORT is not set
#
# Plug and Play support
#
#
# Block devices
#
# CONFIG_BLK_DEV_COW_COMMON is not set
CONFIG_BLK_DEV_LOOP=y
# CONFIG_BLK_DEV_CRYPTOLOOP is not set
# CONFIG_BLK_DEV_NBD is not set
CONFIG_BLK_DEV_RAM=y
CONFIG_BLK_DEV_RAM_COUNT=16
CONFIG_BLK_DEV_RAM_SIZE=8192
CONFIG_BLK_DEV_INITRD=y
# CONFIG_CDROM_PKTCDVD is not set
#
# IO Schedulers
#
CONFIG_IOSCHED_NOOP=y
CONFIG_IOSCHED_AS=y
CONFIG_IOSCHED_DEADLINE=y
CONFIG_IOSCHED_CFQ=y
# CONFIG_ATA_OVER_ETH is not set
#
# SCSI device support
#
# CONFIG_RAID_ATTRS is not set
# CONFIG_SCSI is not set
#
# Multi-device support (RAID and LVM)
#
# CONFIG_MD is not set
#
# Fusion MPT device support
#
# CONFIG_FUSION is not set
#
# IEEE 1394 (FireWire) support
#
#
# I2O device support
#
#
# Network device support
#
CONFIG_NETDEVICES=y
# CONFIG_DUMMY is not set
# CONFIG_BONDING is not set
# CONFIG_EQUALIZER is not set
# CONFIG_TUN is not set
#
# PHY device support
#
# CONFIG_PHYLIB is not set
#
# Ethernet (10 or 100Mbit)
#
CONFIG_NET_ETHERNET=y
CONFIG_MII=y
# CONFIG_NET_VENDOR_SMC is not set
CONFIG_SMC91X=y
# CONFIG_DM9000 is not set
#
# Ethernet (1000 Mbit)
......@@ -305,23 +415,8 @@ CONFIG_PPP_MULTILINK=y
# CONFIG_SLIP is not set
# CONFIG_SHAPER is not set
# CONFIG_NETCONSOLE is not set
#
# SCSI device support
#
# CONFIG_SCSI is not set
#
# Fusion MPT device support
#
#
# IEEE 1394 (FireWire) support
#
#
# I2O device support
#
# CONFIG_NETPOLL is not set
# CONFIG_NET_POLL_CONTROLLER is not set
#
# ISDN subsystem
......@@ -345,16 +440,6 @@ CONFIG_INPUT_MOUSEDEV_SCREEN_Y=768
# CONFIG_INPUT_EVDEV is not set
# CONFIG_INPUT_EVBUG is not set
#
# Input I/O drivers
#
# CONFIG_GAMEPORT is not set
CONFIG_SOUND_GAMEPORT=y
CONFIG_SERIO=y
CONFIG_SERIO_SERPORT=y
# CONFIG_SERIO_CT82C710 is not set
# CONFIG_SERIO_RAW is not set
#
# Input Device Drivers
#
......@@ -370,6 +455,14 @@ CONFIG_KEYBOARD_OMAP=y
# CONFIG_INPUT_TOUCHSCREEN is not set
# CONFIG_INPUT_MISC is not set
#
# Hardware I/O ports
#
CONFIG_SERIO=y
CONFIG_SERIO_SERPORT=y
# CONFIG_SERIO_RAW is not set
# CONFIG_GAMEPORT is not set
#
# Character devices
#
......@@ -389,7 +482,6 @@ CONFIG_SERIAL_8250_NR_UARTS=4
#
# Non-8250 serial port support
#
CONFIG_SERIAL_8250_OMAP=y
CONFIG_SERIAL_CORE=y
CONFIG_SERIAL_CORE_CONSOLE=y
CONFIG_UNIX98_PTYS=y
......@@ -405,6 +497,7 @@ CONFIG_LEGACY_PTY_COUNT=256
# Watchdog Cards
#
# CONFIG_WATCHDOG is not set
# CONFIG_OMAP_RNG is not set
# CONFIG_NVRAM is not set
# CONFIG_RTC is not set
# CONFIG_OMAP_RTC is not set
......@@ -414,14 +507,32 @@ CONFIG_LEGACY_PTY_COUNT=256
#
# Ftape, the floppy tape device driver
#
# CONFIG_DRM is not set
# CONFIG_RAW_DRIVER is not set
#
# TPM devices
#
#
# I2C support
#
# CONFIG_I2C is not set
#
# Hardware Monitoring support
#
CONFIG_HWMON=y
# CONFIG_HWMON_VID is not set
# CONFIG_HWMON_DEBUG_CHIP is not set
#
# Misc devices
#
#
# Multimedia Capabilities Port drivers
#
#
# Multimedia devices
#
......@@ -432,21 +543,99 @@ CONFIG_LEGACY_PTY_COUNT=256
#
# CONFIG_DVB is not set
#
# Graphics support
#
CONFIG_FB=y
# CONFIG_FB_CFB_FILLRECT is not set
# CONFIG_FB_CFB_COPYAREA is not set
# CONFIG_FB_CFB_IMAGEBLIT is not set
CONFIG_FB_SOFT_CURSOR=y
# CONFIG_FB_MACMODES is not set
CONFIG_FB_MODE_HELPERS=y
# CONFIG_FB_TILEBLITTING is not set
# CONFIG_FB_S1D13XXX is not set
CONFIG_FB_OMAP=y
CONFIG_FB_OMAP_LCDC_INTERNAL=y
# CONFIG_FB_OMAP_LCDC_EXTERNAL is not set
# CONFIG_FB_OMAP_DMA_TUNE is not set
# CONFIG_FB_VIRTUAL is not set
#
# Console display driver support
#
# CONFIG_VGA_CONSOLE is not set
CONFIG_DUMMY_CONSOLE=y
CONFIG_FRAMEBUFFER_CONSOLE=y
CONFIG_FONTS=y
CONFIG_FONT_8x8=y
CONFIG_FONT_8x16=y
# CONFIG_FONT_6x11 is not set
# CONFIG_FONT_7x14 is not set
# CONFIG_FONT_PEARL_8x8 is not set
# CONFIG_FONT_ACORN_8x8 is not set
# CONFIG_FONT_MINI_4x6 is not set
# CONFIG_FONT_SUN8x16 is not set
# CONFIG_FONT_SUN12x22 is not set
# CONFIG_FONT_10x18 is not set
#
# Logo configuration
#
CONFIG_LOGO=y
CONFIG_LOGO_LINUX_MONO=y
CONFIG_LOGO_LINUX_VGA16=y
CONFIG_LOGO_LINUX_CLUT224=y
# CONFIG_BACKLIGHT_LCD_SUPPORT is not set
#
# Sound
#
# CONFIG_SOUND is not set
#
# USB support
#
CONFIG_USB_ARCH_HAS_HCD=y
CONFIG_USB_ARCH_HAS_OHCI=y
# CONFIG_USB is not set
#
# USB Gadget Support
#
# CONFIG_USB_GADGET is not set
#
# MMC/SD Card support
#
# CONFIG_MMC is not set
#
# Synchronous Serial Interfaces (SSI)
#
# CONFIG_OMAP_UWIRE is not set
# CONFIG_OMAP_TSC2101 is not set
#
# File systems
#
CONFIG_EXT2_FS=y
# CONFIG_EXT2_FS_XATTR is not set
# CONFIG_EXT2_FS_XIP is not set
# CONFIG_EXT3_FS is not set
# CONFIG_JBD is not set
# CONFIG_REISERFS_FS is not set
# CONFIG_JFS_FS is not set
# CONFIG_FS_POSIX_ACL is not set
# CONFIG_XFS_FS is not set
# CONFIG_MINIX_FS is not set
# CONFIG_ROMFS_FS is not set
CONFIG_INOTIFY=y
# CONFIG_QUOTA is not set
CONFIG_DNOTIFY=y
CONFIG_AUTOFS_FS=y
CONFIG_AUTOFS4_FS=y
# CONFIG_FUSE_FS is not set
#
# CD-ROM/DVD Filesystems
......@@ -466,13 +655,10 @@ CONFIG_AUTOFS4_FS=y
#
CONFIG_PROC_FS=y
CONFIG_SYSFS=y
CONFIG_DEVFS_FS=y
# CONFIG_DEVFS_MOUNT is not set
# CONFIG_DEVFS_DEBUG is not set
# CONFIG_DEVPTS_FS_XATTR is not set
# CONFIG_TMPFS is not set
# CONFIG_HUGETLB_PAGE is not set
CONFIG_RAMFS=y
# CONFIG_RELAYFS_FS is not set
#
# Miscellaneous filesystems
......@@ -496,13 +682,14 @@ CONFIG_RAMFS=y
#
CONFIG_NFS_FS=y
CONFIG_NFS_V3=y
# CONFIG_NFS_V3_ACL is not set
# CONFIG_NFS_V4 is not set
# CONFIG_NFS_DIRECTIO is not set
# CONFIG_NFSD is not set
# CONFIG_ROOT_NFS is not set
CONFIG_LOCKD=y
CONFIG_LOCKD_V4=y
# CONFIG_EXPORTFS is not set
CONFIG_NFS_COMMON=y
CONFIG_SUNRPC=y
# CONFIG_RPCSEC_GSS_KRB5 is not set
# CONFIG_RPCSEC_GSS_SPKM3 is not set
......@@ -511,11 +698,13 @@ CONFIG_SUNRPC=y
# CONFIG_NCP_FS is not set
# CONFIG_CODA_FS is not set
# CONFIG_AFS_FS is not set
# CONFIG_9P_FS is not set
#
# Partition Types
#
# CONFIG_PARTITION_ADVANCED is not set
CONFIG_MSDOS_PARTITION=y
#
# Native Language Support
......@@ -527,81 +716,20 @@ CONFIG_SUNRPC=y
#
# CONFIG_PROFILING is not set
#
# Graphics support
#
CONFIG_FB=y
CONFIG_FB_MODE_HELPERS=y
CONFIG_FB_OMAP=y
CONFIG_FB_OMAP_INTERNAL_LCDC=y
# CONFIG_FB_OMAP_EXTERNAL_LCDC is not set
# CONFIG_FB_OMAP_DMA_TUNE is not set
# CONFIG_FB_VIRTUAL is not set
#
# Console display driver support
#
# CONFIG_VGA_CONSOLE is not set
CONFIG_DUMMY_CONSOLE=y
CONFIG_FRAMEBUFFER_CONSOLE=y
CONFIG_FONTS=y
CONFIG_FONT_8x8=y
CONFIG_FONT_8x16=y
# CONFIG_FONT_6x11 is not set
# CONFIG_FONT_PEARL_8x8 is not set
# CONFIG_FONT_ACORN_8x8 is not set
# CONFIG_FONT_MINI_4x6 is not set
# CONFIG_FONT_SUN8x16 is not set
# CONFIG_FONT_SUN12x22 is not set
#
# Logo configuration
#
CONFIG_LOGO=y
CONFIG_LOGO_LINUX_MONO=y
CONFIG_LOGO_LINUX_VGA16=y
CONFIG_LOGO_LINUX_CLUT224=y
#
# Sound
#
# CONFIG_SOUND is not set
#
# Misc devices
#
#
# USB support
#
# CONFIG_USB is not set
#
# USB Gadget Support
#
# CONFIG_USB_GADGET is not set
#
# Synchronous Serial Interfaces (SSI)
#
# CONFIG_OMAP_UWIRE is not set
#
# MMC/SD Card support
#
# CONFIG_MMC is not set
#
# Kernel hacking
#
# CONFIG_PRINTK_TIME is not set
# CONFIG_DEBUG_KERNEL is not set
# CONFIG_DEBUG_INFO is not set
CONFIG_LOG_BUF_SHIFT=14
CONFIG_DEBUG_BUGVERBOSE=y
CONFIG_FRAME_POINTER=y
# CONFIG_DEBUG_USER is not set
#
# Security options
#
# CONFIG_KEYS is not set
# CONFIG_SECURITY is not set
#
......@@ -609,9 +737,14 @@ CONFIG_FRAME_POINTER=y
#
# CONFIG_CRYPTO is not set
#
# Hardware crypto devices
#
#
# Library routines
#
# CONFIG_CRC_CCITT is not set
# CONFIG_CRC16 is not set
CONFIG_CRC32=y
# CONFIG_LIBCRC32C is not set
#
# Automatically generated make config: don't edit
# Linux kernel version: 2.6.12-rc6-omap1
# Wed Jun 8 16:04:54 2005
# Linux kernel version: 2.6.14-rc4-omap1
# Tue Oct 18 17:56:19 2005
#
CONFIG_ARM=y
CONFIG_MMU=y
CONFIG_UID16=y
CONFIG_RWSEM_GENERIC_SPINLOCK=y
CONFIG_GENERIC_CALIBRATE_DELAY=y
CONFIG_GENERIC_IOMAP=y
#
# Code maturity level options
......@@ -22,6 +21,7 @@ CONFIG_INIT_ENV_ARG_LIMIT=32
# General setup
#
CONFIG_LOCALVERSION=""
CONFIG_LOCALVERSION_AUTO=y
CONFIG_SWAP=y
CONFIG_SYSVIPC=y
# CONFIG_POSIX_MQUEUE is not set
......@@ -31,6 +31,7 @@ CONFIG_SYSCTL=y
CONFIG_HOTPLUG=y
CONFIG_KOBJECT_UEVENT=y
# CONFIG_IKCONFIG is not set
CONFIG_INITRAMFS_SOURCE=""
# CONFIG_EMBEDDED is not set
CONFIG_KALLSYMS=y
# CONFIG_KALLSYMS_EXTRA_PASS is not set
......@@ -83,6 +84,7 @@ CONFIG_ARCH_OMAP=y
# CONFIG_ARCH_VERSATILE is not set
# CONFIG_ARCH_IMX is not set
# CONFIG_ARCH_H720X is not set
# CONFIG_ARCH_AAEC2000 is not set
#
# TI OMAP Implementations
......@@ -91,6 +93,23 @@ CONFIG_ARCH_OMAP_OTG=y
CONFIG_ARCH_OMAP1=y
# CONFIG_ARCH_OMAP2 is not set
#
# OMAP Feature Selections
#
CONFIG_OMAP_RESET_CLOCKS=y
# CONFIG_OMAP_BOOT_TAG is not set
CONFIG_OMAP_MUX=y
# CONFIG_OMAP_MUX_DEBUG is not set
CONFIG_OMAP_MUX_WARNINGS=y
# CONFIG_OMAP_MPU_TIMER is not set
CONFIG_OMAP_32K_TIMER=y
CONFIG_OMAP_32K_TIMER_HZ=128
# CONFIG_OMAP_DM_TIMER is not set
CONFIG_OMAP_LL_DEBUG_UART1=y
# CONFIG_OMAP_LL_DEBUG_UART2 is not set
# CONFIG_OMAP_LL_DEBUG_UART3 is not set
CONFIG_OMAP_SERIAL_WAKE=y
#
# OMAP Core Type
#
......@@ -105,6 +124,7 @@ CONFIG_ARCH_OMAP16XX=y
# CONFIG_MACH_OMAP_H2 is not set
# CONFIG_MACH_OMAP_H3 is not set
CONFIG_MACH_OMAP_OSK=y
# CONFIG_OMAP_OSK_MISTRAL is not set
# CONFIG_MACH_OMAP_GENERIC is not set
#
......@@ -119,24 +139,6 @@ CONFIG_OMAP_ARM_192MHZ=y
# CONFIG_OMAP_ARM_30MHZ is not set
# CONFIG_OMAP_DSP is not set
#
# OMAP Feature Selections
#
CONFIG_OMAP_RESET_CLOCKS=y
# CONFIG_OMAP_BOOT_TAG is not set
CONFIG_OMAP_MUX=y
# CONFIG_OMAP_MUX_DEBUG is not set
CONFIG_OMAP_MUX_WARNINGS=y
# CONFIG_OMAP_MPU_TIMER is not set
CONFIG_OMAP_32K_TIMER=y
CONFIG_OMAP_32K_TIMER_HZ=128
# CONFIG_OMAP_DM_TIMER is not set
CONFIG_NO_IDLE_HZ=y
CONFIG_NO_IDLE_HZ_ENABLED=y
CONFIG_OMAP_LL_DEBUG_UART1=y
# CONFIG_OMAP_LL_DEBUG_UART2 is not set
# CONFIG_OMAP_LL_DEBUG_UART3 is not set
#
# Processor Type
#
......@@ -168,19 +170,27 @@ CONFIG_ISA_DMA_API=y
CONFIG_PCCARD=y
# CONFIG_PCMCIA_DEBUG is not set
CONFIG_PCMCIA=y
CONFIG_PCMCIA_LOAD_CIS=y
CONFIG_PCMCIA_IOCTL=y
#
# PC-card bridges
#
# CONFIG_TCIC is not set
CONFIG_OMAP_CF=y
#
# Kernel Features
#
# CONFIG_SMP is not set
# CONFIG_PREEMPT is not set
# CONFIG_DISCONTIGMEM is not set
CONFIG_NO_IDLE_HZ=y
# CONFIG_ARCH_DISCONTIGMEM_ENABLE is not set
CONFIG_SELECT_MEMORY_MODEL=y
CONFIG_FLATMEM_MANUAL=y
# CONFIG_DISCONTIGMEM_MANUAL is not set
# CONFIG_SPARSEMEM_MANUAL is not set
CONFIG_FLATMEM=y
CONFIG_FLAT_NODE_MEM_MAP=y
# CONFIG_SPARSEMEM_STATIC is not set
# CONFIG_LEDS is not set
CONFIG_ALIGNMENT_TRAP=y
......@@ -223,6 +233,75 @@ CONFIG_BINFMT_ELF=y
CONFIG_PM=y
# CONFIG_APM is not set
#
# Networking
#
CONFIG_NET=y
#
# Networking options
#
CONFIG_PACKET=m
# CONFIG_PACKET_MMAP is not set
CONFIG_UNIX=y
# CONFIG_NET_KEY is not set
CONFIG_INET=y
CONFIG_IP_MULTICAST=y
# CONFIG_IP_ADVANCED_ROUTER is not set
CONFIG_IP_FIB_HASH=y
CONFIG_IP_PNP=y
CONFIG_IP_PNP_DHCP=y
CONFIG_IP_PNP_BOOTP=y
# CONFIG_IP_PNP_RARP is not set
# CONFIG_NET_IPIP is not set
# CONFIG_NET_IPGRE is not set
# CONFIG_IP_MROUTE is not set
# CONFIG_ARPD is not set
# CONFIG_SYN_COOKIES is not set
# CONFIG_INET_AH is not set
# CONFIG_INET_ESP is not set
# CONFIG_INET_IPCOMP is not set
# CONFIG_INET_TUNNEL is not set
CONFIG_INET_DIAG=y
CONFIG_INET_TCP_DIAG=y
# CONFIG_TCP_CONG_ADVANCED is not set
CONFIG_TCP_CONG_BIC=y
# CONFIG_IPV6 is not set
# CONFIG_NETFILTER is not set
#
# DCCP Configuration (EXPERIMENTAL)
#
# CONFIG_IP_DCCP is not set
#
# SCTP Configuration (EXPERIMENTAL)
#
# CONFIG_IP_SCTP is not set
# CONFIG_ATM is not set
# CONFIG_BRIDGE is not set
# CONFIG_VLAN_8021Q is not set
# CONFIG_DECNET is not set
# CONFIG_LLC2 is not set
# CONFIG_IPX is not set
# CONFIG_ATALK is not set
# CONFIG_X25 is not set
# CONFIG_LAPB is not set
# CONFIG_NET_DIVERT is not set
# CONFIG_ECONET is not set
# CONFIG_WAN_ROUTER is not set
# CONFIG_NET_SCHED is not set
# CONFIG_NET_CLS_ROUTE is not set
#
# Network testing
#
# CONFIG_NET_PKTGEN is not set
# CONFIG_HAMRADIO is not set
# CONFIG_IRDA is not set
# CONFIG_BT is not set
# CONFIG_IEEE80211 is not set
#
# Device Drivers
#
......@@ -232,7 +311,7 @@ CONFIG_PM=y
#
CONFIG_STANDALONE=y
CONFIG_PREVENT_FIRMWARE_BUILD=y
# CONFIG_FW_LOADER is not set
CONFIG_FW_LOADER=y
#
# Memory Technology Devices (MTD)
......@@ -288,6 +367,7 @@ CONFIG_MTD_CFI_UTIL=y
# CONFIG_MTD_ARM_INTEGRATOR is not set
# CONFIG_MTD_EDB7312 is not set
CONFIG_MTD_OMAP_NOR=y
# CONFIG_MTD_PLATRAM is not set
#
# Self-contained MTD device drivers
......@@ -330,7 +410,6 @@ CONFIG_BLK_DEV_RAM=y
CONFIG_BLK_DEV_RAM_COUNT=16
CONFIG_BLK_DEV_RAM_SIZE=8192
CONFIG_BLK_DEV_INITRD=y
CONFIG_INITRAMFS_SOURCE=""
# CONFIG_CDROM_PKTCDVD is not set
#
......@@ -372,6 +451,7 @@ CONFIG_BLK_DEV_IDECS=m
#
# SCSI device support
#
# CONFIG_RAID_ATTRS is not set
# CONFIG_SCSI is not set
#
......@@ -382,6 +462,7 @@ CONFIG_BLK_DEV_IDECS=m
#
# Fusion MPT device support
#
# CONFIG_FUSION is not set
#
# IEEE 1394 (FireWire) support
......@@ -392,82 +473,26 @@ CONFIG_BLK_DEV_IDECS=m
#
#
# Networking support
#
CONFIG_NET=y
#
# Networking options
#
CONFIG_PACKET=m
# CONFIG_PACKET_MMAP is not set
CONFIG_UNIX=y
# CONFIG_NET_KEY is not set
CONFIG_INET=y
CONFIG_IP_MULTICAST=y
# CONFIG_IP_ADVANCED_ROUTER is not set
CONFIG_IP_PNP=y
CONFIG_IP_PNP_DHCP=y
CONFIG_IP_PNP_BOOTP=y
# CONFIG_IP_PNP_RARP is not set
# CONFIG_NET_IPIP is not set
# CONFIG_NET_IPGRE is not set
# CONFIG_IP_MROUTE is not set
# CONFIG_ARPD is not set
# CONFIG_SYN_COOKIES is not set
# CONFIG_INET_AH is not set
# CONFIG_INET_ESP is not set
# CONFIG_INET_IPCOMP is not set
# CONFIG_INET_TUNNEL is not set
CONFIG_IP_TCPDIAG=y
# CONFIG_IP_TCPDIAG_IPV6 is not set
# CONFIG_IPV6 is not set
# CONFIG_NETFILTER is not set
#
# SCTP Configuration (EXPERIMENTAL)
#
# CONFIG_IP_SCTP is not set
# CONFIG_ATM is not set
# CONFIG_BRIDGE is not set
# CONFIG_VLAN_8021Q is not set
# CONFIG_DECNET is not set
# CONFIG_LLC2 is not set
# CONFIG_IPX is not set
# CONFIG_ATALK is not set
# CONFIG_X25 is not set
# CONFIG_LAPB is not set
# CONFIG_NET_DIVERT is not set
# CONFIG_ECONET is not set
# CONFIG_WAN_ROUTER is not set
#
# QoS and/or fair queueing
#
# CONFIG_NET_SCHED is not set
# CONFIG_NET_CLS_ROUTE is not set
#
# Network testing
# Network device support
#
# CONFIG_NET_PKTGEN is not set
# CONFIG_NETPOLL is not set
# CONFIG_NET_POLL_CONTROLLER is not set
# CONFIG_HAMRADIO is not set
# CONFIG_IRDA is not set
# CONFIG_BT is not set
CONFIG_NETDEVICES=y
# CONFIG_DUMMY is not set
# CONFIG_BONDING is not set
# CONFIG_EQUALIZER is not set
# CONFIG_TUN is not set
#
# PHY device support
#
# CONFIG_PHYLIB is not set
#
# Ethernet (10 or 100Mbit)
#
CONFIG_NET_ETHERNET=y
CONFIG_MII=y
CONFIG_SMC91X=y
# CONFIG_DM9000 is not set
#
# Ethernet (1000 Mbit)
......@@ -506,6 +531,8 @@ CONFIG_PPP_MULTILINK=y
# CONFIG_SLIP is not set
# CONFIG_SHAPER is not set
# CONFIG_NETCONSOLE is not set
# CONFIG_NETPOLL is not set
# CONFIG_NET_POLL_CONTROLLER is not set
#
# ISDN subsystem
......@@ -590,6 +617,7 @@ CONFIG_LEGACY_PTY_COUNT=256
# Watchdog Cards
#
# CONFIG_WATCHDOG is not set
# CONFIG_OMAP_RNG is not set
# CONFIG_NVRAM is not set
# CONFIG_RTC is not set
# CONFIG_OMAP_RTC is not set
......@@ -599,7 +627,6 @@ CONFIG_LEGACY_PTY_COUNT=256
#
# Ftape, the floppy tape device driver
#
# CONFIG_DRM is not set
#
# PCMCIA character devices
......@@ -627,21 +654,43 @@ CONFIG_I2C_CHARDEV=y
#
# I2C Hardware Bus support
#
# CONFIG_I2C_ISA is not set
# CONFIG_I2C_PARPORT_LIGHT is not set
# CONFIG_I2C_STUB is not set
# CONFIG_I2C_PCA_ISA is not set
CONFIG_I2C_OMAP=y
#
# Hardware Sensors Chip support
# Miscellaneous I2C Chip support
#
# CONFIG_I2C_SENSOR is not set
# CONFIG_SENSORS_DS1337 is not set
# CONFIG_SENSORS_DS1374 is not set
# CONFIG_SENSORS_EEPROM is not set
# CONFIG_SENSORS_PCF8574 is not set
# CONFIG_SENSORS_PCA9539 is not set
# CONFIG_SENSORS_PCF8591 is not set
# CONFIG_SENSORS_RTC8564 is not set
# CONFIG_ISP1301_OMAP is not set
CONFIG_TPS65010=y
# CONFIG_SENSORS_TLV320AIC23 is not set
# CONFIG_GPIOEXPANDER_OMAP is not set
# CONFIG_SENSORS_MAX6875 is not set
# CONFIG_I2C_DEBUG_CORE is not set
# CONFIG_I2C_DEBUG_ALGO is not set
# CONFIG_I2C_DEBUG_BUS is not set
# CONFIG_I2C_DEBUG_CHIP is not set
#
# Hardware Monitoring support
#
CONFIG_HWMON=y
# CONFIG_HWMON_VID is not set
# CONFIG_SENSORS_ADM1021 is not set
# CONFIG_SENSORS_ADM1025 is not set
# CONFIG_SENSORS_ADM1026 is not set
# CONFIG_SENSORS_ADM1031 is not set
# CONFIG_SENSORS_ADM9240 is not set
# CONFIG_SENSORS_ASB100 is not set
# CONFIG_SENSORS_ATXP1 is not set
# CONFIG_SENSORS_DS1621 is not set
# CONFIG_SENSORS_FSCHER is not set
# CONFIG_SENSORS_FSCPOS is not set
......@@ -660,31 +709,21 @@ CONFIG_I2C_OMAP=y
# CONFIG_SENSORS_LM92 is not set
# CONFIG_SENSORS_MAX1619 is not set
# CONFIG_SENSORS_PC87360 is not set
# CONFIG_SENSORS_SMSC47B397 is not set
# CONFIG_SENSORS_SMSC47M1 is not set
# CONFIG_SENSORS_SMSC47B397 is not set
# CONFIG_SENSORS_W83781D is not set
# CONFIG_SENSORS_W83792D is not set
# CONFIG_SENSORS_W83L785TS is not set
# CONFIG_SENSORS_W83627HF is not set
# CONFIG_SENSORS_W83627EHF is not set
# CONFIG_HWMON_DEBUG_CHIP is not set
#
# Other I2C Chip support
# Misc devices
#
# CONFIG_SENSORS_DS1337 is not set
# CONFIG_SENSORS_EEPROM is not set
# CONFIG_SENSORS_PCF8574 is not set
# CONFIG_SENSORS_PCF8591 is not set
# CONFIG_SENSORS_RTC8564 is not set
# CONFIG_ISP1301_OMAP is not set
CONFIG_TPS65010=y
# CONFIG_SENSORS_TLV320AIC23 is not set
# CONFIG_GPIOEXPANDER_OMAP is not set
# CONFIG_I2C_DEBUG_CORE is not set
# CONFIG_I2C_DEBUG_ALGO is not set
# CONFIG_I2C_DEBUG_BUS is not set
# CONFIG_I2C_DEBUG_CHIP is not set
#
# Misc devices
# Multimedia Capabilities Port drivers
#
#
......@@ -710,9 +749,9 @@ CONFIG_FB_MODE_HELPERS=y
# CONFIG_FB_TILEBLITTING is not set
# CONFIG_FB_S1D13XXX is not set
CONFIG_FB_OMAP=y
CONFIG_FB_OMAP_INTERNAL_LCDC=y
# CONFIG_FB_OMAP_EXTERNAL_LCDC is not set
CONFIG_FB_OMAP_DMA_TUNE=y
CONFIG_FB_OMAP_LCDC_INTERNAL=y
# CONFIG_FB_OMAP_LCDC_EXTERNAL is not set
# CONFIG_FB_OMAP_DMA_TUNE is not set
# CONFIG_FB_VIRTUAL is not set
#
......@@ -725,11 +764,13 @@ CONFIG_FONTS=y
CONFIG_FONT_8x8=y
# CONFIG_FONT_8x16 is not set
# CONFIG_FONT_6x11 is not set
# CONFIG_FONT_7x14 is not set
# CONFIG_FONT_PEARL_8x8 is not set
# CONFIG_FONT_ACORN_8x8 is not set
# CONFIG_FONT_MINI_4x6 is not set
# CONFIG_FONT_SUN8x16 is not set
# CONFIG_FONT_SUN12x22 is not set
# CONFIG_FONT_10x18 is not set
#
# Logo configuration
......@@ -766,28 +807,28 @@ CONFIG_USB_ARCH_HAS_OHCI=y
# Synchronous Serial Interfaces (SSI)
#
CONFIG_OMAP_UWIRE=y
# CONFIG_OMAP_TSC2101 is not set
CONFIG_OMAP_TSC2101=y
#
# File systems
#
CONFIG_EXT2_FS=y
# CONFIG_EXT2_FS_XATTR is not set
# CONFIG_EXT2_FS_XIP is not set
# CONFIG_EXT3_FS is not set
# CONFIG_JBD is not set
# CONFIG_REISERFS_FS is not set
# CONFIG_JFS_FS is not set
#
# XFS support
#
# CONFIG_FS_POSIX_ACL is not set
# CONFIG_XFS_FS is not set
# CONFIG_MINIX_FS is not set
# CONFIG_ROMFS_FS is not set
CONFIG_INOTIFY=y
# CONFIG_QUOTA is not set
CONFIG_DNOTIFY=y
CONFIG_AUTOFS_FS=y
CONFIG_AUTOFS4_FS=y
# CONFIG_FUSE_FS is not set
#
# CD-ROM/DVD Filesystems
......@@ -810,11 +851,10 @@ CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
#
CONFIG_PROC_FS=y
CONFIG_SYSFS=y
# CONFIG_DEVFS_FS is not set
# CONFIG_DEVPTS_FS_XATTR is not set
# CONFIG_TMPFS is not set
# CONFIG_HUGETLB_PAGE is not set
CONFIG_RAMFS=y
# CONFIG_RELAYFS_FS is not set
#
# Miscellaneous filesystems
......@@ -829,8 +869,7 @@ CONFIG_RAMFS=y
# CONFIG_JFFS_FS is not set
CONFIG_JFFS2_FS=y
CONFIG_JFFS2_FS_DEBUG=0
# CONFIG_JFFS2_FS_NAND is not set
# CONFIG_JFFS2_FS_NOR_ECC is not set
CONFIG_JFFS2_FS_WRITEBUFFER=y
# CONFIG_JFFS2_COMPRESSION_OPTIONS is not set
CONFIG_JFFS2_ZLIB=y
CONFIG_JFFS2_RTIME=y
......@@ -847,12 +886,14 @@ CONFIG_JFFS2_RTIME=y
#
CONFIG_NFS_FS=y
CONFIG_NFS_V3=y
# CONFIG_NFS_V3_ACL is not set
# CONFIG_NFS_V4 is not set
# CONFIG_NFS_DIRECTIO is not set
# CONFIG_NFSD is not set
CONFIG_ROOT_NFS=y
CONFIG_LOCKD=y
CONFIG_LOCKD_V4=y
CONFIG_NFS_COMMON=y
CONFIG_SUNRPC=y
# CONFIG_RPCSEC_GSS_KRB5 is not set
# CONFIG_RPCSEC_GSS_SPKM3 is not set
......@@ -861,6 +902,7 @@ CONFIG_SUNRPC=y
# CONFIG_NCP_FS is not set
# CONFIG_CODA_FS is not set
# CONFIG_AFS_FS is not set
# CONFIG_9P_FS is not set
#
# Partition Types
......@@ -946,6 +988,7 @@ CONFIG_FRAME_POINTER=y
# Library routines
#
# CONFIG_CRC_CCITT is not set
# CONFIG_CRC16 is not set
CONFIG_CRC32=y
# CONFIG_LIBCRC32C is not set
CONFIG_ZLIB_INFLATE=y
......
#
# Automatically generated make config: don't edit
# Linux kernel version: 2.6.14-rc4-omap1
# Wed Oct 12 15:10:00 2005
# Tue Oct 18 17:57:11 2005
#
CONFIG_ARM=y
CONFIG_MMU=y
......@@ -623,8 +623,8 @@ CONFIG_FB_MODE_HELPERS=y
# CONFIG_FB_TILEBLITTING is not set
# CONFIG_FB_S1D13XXX is not set
CONFIG_FB_OMAP=y
CONFIG_FB_OMAP_INTERNAL_LCDC=y
# CONFIG_FB_OMAP_EXTERNAL_LCDC is not set
CONFIG_FB_OMAP_LCDC_INTERNAL=y
# CONFIG_FB_OMAP_LCDC_EXTERNAL is not set
# CONFIG_FB_OMAP_DMA_TUNE is not set
CONFIG_FB_VIRTUAL=y
......
......@@ -162,10 +162,16 @@ static struct omap_uart_config h2_uart_config __initdata = {
.enabled_uarts = ((1 << 0) | (1 << 1) | (1 << 2)),
};
static struct omap_lcd_config h2_lcd_config __initdata = {
.panel_name = "h2",
.ctrl_name = "internal",
};
static struct omap_board_config_kernel h2_config[] = {
{ OMAP_TAG_USB, &h2_usb_config },
{ OMAP_TAG_MMC, &h2_mmc_config },
{ OMAP_TAG_UART, &h2_uart_config },
{ OMAP_TAG_LCD, &h2_lcd_config },
};
static void __init h2_init(void)
......
......@@ -170,10 +170,16 @@ static struct omap_uart_config h3_uart_config __initdata = {
.enabled_uarts = ((1 << 0) | (1 << 1) | (1 << 2)),
};
static struct omap_lcd_config h3_lcd_config __initdata = {
.panel_name = "h3",
.ctrl_name = "internal",
};
static struct omap_board_config_kernel h3_config[] = {
{ OMAP_TAG_USB, &h3_usb_config },
{ OMAP_TAG_MMC, &h3_mmc_config },
{ OMAP_TAG_UART, &h3_uart_config },
{ OMAP_TAG_LCD, &h3_lcd_config },
};
static void __init h3_init(void)
......
......@@ -199,6 +199,11 @@ static struct omap_usb_config innovator1510_usb_config __initdata = {
.register_dev = 1,
.pins[0] = 2,
};
static struct omap_lcd_config innovator1510_lcd_config __initdata = {
.panel_name = "inn1510",
.ctrl_name = "internal",
};
#endif
#ifdef CONFIG_ARCH_OMAP16XX
......@@ -216,6 +221,11 @@ static struct omap_usb_config h2_usb_config __initdata = {
.pins[1] = 3,
};
static struct omap_lcd_config innovator1610_lcd_config __initdata = {
.panel_name = "inn1610",
.ctrl_name = "internal",
};
#endif
static struct omap_mmc_config innovator_mmc_config __initdata = {
......@@ -234,6 +244,7 @@ static struct omap_uart_config innovator_uart_config __initdata = {
static struct omap_board_config_kernel innovator_config[] = {
{ OMAP_TAG_USB, NULL },
{ OMAP_TAG_LCD, NULL },
{ OMAP_TAG_MMC, &innovator_mmc_config },
{ OMAP_TAG_UART, &innovator_uart_config },
};
......@@ -252,12 +263,16 @@ static void __init innovator_init(void)
#endif
#ifdef CONFIG_ARCH_OMAP15XX
if (cpu_is_omap1510())
if (cpu_is_omap1510()) {
innovator_config[0].data = &innovator1510_usb_config;
innovator_config[1].data = &innovator1510_lcd_config;
}
#endif
#ifdef CONFIG_ARCH_OMAP16XX
if (cpu_is_omap1610())
if (cpu_is_omap1610()) {
innovator_config[0].data = &h2_usb_config;
innovator_config[1].data = &innovator1610_lcd_config;
}
#endif
omap_board_config = innovator_config;
omap_board_config_size = ARRAY_SIZE(innovator_config);
......
......@@ -195,9 +195,15 @@ static struct omap_uart_config osk_uart_config __initdata = {
.enabled_uarts = (1 << 0),
};
static struct omap_lcd_config osk_lcd_config __initdata = {
.panel_name = "osk",
.ctrl_name = "internal",
};
static struct omap_board_config_kernel osk_config[] = {
{ OMAP_TAG_USB, &osk_usb_config },
{ OMAP_TAG_UART, &osk_uart_config },
{ OMAP_TAG_LCD, &osk_lcd_config },
};
#ifdef CONFIG_OMAP_OSK_MISTRAL
......
......@@ -53,9 +53,15 @@ static struct omap_mmc_config palmte_mmc_config __initdata = {
},
};
static struct omap_lcd_config palmte_lcd_config __initdata = {
.panel_name = "palmte",
.ctrl_name = "internal",
};
static struct omap_board_config_kernel palmte_config[] = {
{ OMAP_TAG_USB, &palmte_usb_config },
{ OMAP_TAG_MMC, &palmte_mmc_config },
{ OMAP_TAG_LCD, &palmte_lcd_config },
};
static void __init omap_generic_init(void)
......
......@@ -114,8 +114,14 @@ static struct omap_uart_config perseus2_uart_config __initdata = {
.enabled_uarts = ((1 << 0) | (1 << 1)),
};
static struct omap_lcd_config perseus2_lcd_config __initdata = {
.panel_name = "p2",
.ctrl_name = "internal",
};
static struct omap_board_config_kernel perseus2_config[] = {
{ OMAP_TAG_UART, &perseus2_uart_config },
{ OMAP_TAG_LCD, &perseus2_lcd_config },
};
static void __init omap_perseus2_init(void)
......
......@@ -147,7 +147,7 @@ static struct omap_uart_config h4_uart_config __initdata = {
static struct omap_mmc_config h4_mmc_config __initdata = {
.mmc [0] = {
.enabled = 1,
.enabled = 1,
.wire4 = 1,
.wp_pin = -1,
.power_pin = -1,
......@@ -155,9 +155,15 @@ static struct omap_mmc_config h4_mmc_config __initdata = {
},
};
static struct omap_lcd_config h4_lcd_config __initdata = {
.panel_name = "h4",
.ctrl_name = "internal",
};
static struct omap_board_config_kernel h4_config[] = {
{ OMAP_TAG_UART, &h4_uart_config },
{ OMAP_TAG_MMC, &h4_mmc_config },
{ OMAP_TAG_LCD, &h4_lcd_config },
};
static void __init omap_h4_init(void)
......
......@@ -341,6 +341,42 @@ static void omap_init_rng(void)
static inline void omap_init_rng(void) {}
#endif
#if defined(CONFIG_FB_OMAP) || defined(CONFIG_FB_OMAP_MODULE)
static struct omap_lcd_config omap_fb_conf;
static u64 omap_fb_dma_mask = ~(u32)0;
static struct platform_device omap_fb_device = {
.name = "omapfb",
.id = -1,
.dev = {
.release = omap_nop_release,
.dma_mask = &omap_fb_dma_mask,
.coherent_dma_mask = ~(u32)0,
.platform_data = &omap_fb_conf,
},
.num_resources = 0,
};
static inline void omap_init_fb(void)
{
const struct omap_lcd_config *conf;
conf = omap_get_config(OMAP_TAG_LCD, struct omap_lcd_config);
if (conf == NULL)
return;
omap_fb_conf = *conf;
platform_device_register(&omap_fb_device);
}
#else
static inline void omap_init_fb(void) {}
#endif
/*
* This gets called after board-specific INIT_MACHINE, and initializes most
* on-chip peripherals accessible on this board (except for few like USB):
......
......@@ -1543,47 +1543,7 @@ config FB_S3C2410_DEBUG
Turn on debugging messages. Note that you can set/unset at run time
through sysfs
config FB_OMAP
tristate "OMAP frame buffer support (EXPERIMENTAL)"
depends on FB && ARCH_OMAP1
select FB_SOFT_CURSOR
help
This is the new frame buffer device driver with 2D acceleration
for OMAP boards.
config FB_OMAP_INTERNAL_LCDC
bool "OMAP internal LCD controller support"
depends on FB_OMAP
default y
help
Say Y here, if you want to have support for the internal OMAP
LCD controller. If unsure, say Y.
config FB_OMAP_EXTERNAL_LCDC
bool "OMAP external LCD controller support"
depends on FB_OMAP
help
Say Y here, if you want to have support for boards with an
external LCD controller connected to the SoSSI interface.
config FB_OMAP_MANUAL_UPDATE
bool "Default to manual update mode"
depends on FB_OMAP_EXTERNAL_LCDC
help
Say Y here, if your user-space applications are capable of
notifying the frame buffer driver when a change has occured in
the frame buffer content and thus a reload of the image data is
required. If unsure, say N.
config FB_OMAP_DMA_TUNE
bool "Set DMA SDRAM access priority high"
depends on FB_OMAP
help
On systems in which video memory is in system memory
(SDRAM) this will speed up graphics DMA operations.
If you have such a system and want to use rotation
answer yes. Answer no if you have a dedicated video
memory, or don't use any of the accelerated features.
source "drivers/video/omap/Kconfig"
config FB_VIRTUAL
tristate "Virtual Frame Buffer support (ONLY FOR TESTING!)"
......
config FB_OMAP
tristate "OMAP frame buffer support (EXPERIMENTAL)"
depends on FB
select FB_SOFT_CURSOR
help
Frame buffer driver for OMAP based boards.
config FB_OMAP_LCDC_INTERNAL
bool "Internal LCD controller support"
depends on FB_OMAP
help
Say Y here, if you want to have support for the internal OMAP
LCD controller. If unsure, say Y.
config FB_OMAP_LCDC_EXTERNAL
bool "External LCD controller support"
depends on FB_OMAP
help
Say Y here, if you want to have support for boards with an
external LCD controller connected to the SoSSI/RFBI interface.
config FB_OMAP_MANUAL_UPDATE
bool "Default to manual update mode"
depends on FB_OMAP && FB_OMAP_LCDC_EXTERNAL
help
Say Y here, if your user-space applications are capable of
notifying the frame buffer driver when a change has occured in
the frame buffer content and thus a reload of the image data to
the external frame buffer is required. If unsure, say N.
config FB_OMAP_DMA_TUNE
bool "Set DMA SDRAM access priority high"
depends on FB_OMAP && ARCH_OMAP1
help
On systems in which video memory is in system memory
(SDRAM) this will speed up graphics DMA operations.
If you have such a system and want to use rotation
answer yes. Answer no if you have a dedicated video
memory, or don't use any of the accelerated features.
......@@ -5,14 +5,22 @@
obj-$(CONFIG_FB_OMAP) += omapfb.o
objs-yy := omapfb_main.o
objs-y$(CONFIG_FB_OMAP_INTERNAL_LCDC) += omap_lcdc.o
objs-y$(CONFIG_FB_OMAP_EXTERNAL_LCDC) += sossi.o
objs-$(CONFIG_ARCH_OMAP16XX)$(CONFIG_MACH_OMAP_H3) += lcd_h3.o
objs-y$(CONFIG_ARCH_OMAP2) += dispc.o
objs-$(CONFIG_ARCH_OMAP1)$(CONFIG_FB_OMAP_LCDC_INTERNAL) += lcdc.o
objs-$(CONFIG_ARCH_OMAP1)$(CONFIG_FB_OMAP_LCDC_EXTERNAL) += sossi.o
objs-$(CONFIG_ARCH_OMAP2)$(CONFIG_FB_OMAP_LCDC_EXTERNAL) += rfbi.o
objs-y$(CONFIG_MACH_OMAP_H4) += lcd_h4.o
objs-y$(CONFIG_MACH_OMAP_H3) += lcd_h3.o
objs-y$(CONFIG_MACH_OMAP_H2) += lcd_h2.o
objs-y$(CONFIG_MACH_OMAP_PALMTE) += lcd_palmte.o
objs-$(CONFIG_ARCH_OMAP16XX)$(CONFIG_MACH_OMAP_INNOVATOR) += lcd_inn1610.o
objs-$(CONFIG_ARCH_OMAP15XX)$(CONFIG_MACH_OMAP_INNOVATOR) += lcd_inn1510.o
objs-$(CONFIG_ARCH_OMAP16XX)$(CONFIG_MACH_OMAP_OSK) += lcd_osk.o
objs-$(CONFIG_ARCH_OMAP730)$(CONFIG_MACH_OMAP_PERSEUS2) += lcd_p2.o
objs-y$(CONFIG_MACH_OMAP_OSK) += lcd_osk.o
objs-y$(CONFIG_MACH_OMAP_PERSEUS2) += lcd_p2.o
omapfb-objs := $(objs-yy)
......@@ -24,58 +24,23 @@
#ifndef __OMAPFB_DEBUG_H
#define __OMAPFB_DEBUG_H
#ifdef OMAPFB_DBG
#define DBG_BUF_SIZE 2048
#define MAX_DBG_INDENT_LEVEL 5
#define DBG_INDENT_SIZE 3
#define MAX_DBG_MESSAGES 0
static int dbg_indent;
static int dbg_cnt;
static char dbg_buf[DBG_BUF_SIZE];
static spinlock_t dbg_spinlock = SPIN_LOCK_UNLOCKED;
static inline void dbg_print(int level, const char *fmt, ...)
{
if (level <= OMAPFB_DBG) {
if (!MAX_DBG_MESSAGES || dbg_cnt < MAX_DBG_MESSAGES) {
va_list args;
int ind = dbg_indent;
unsigned long flags;
#include <asm/io.h>
spin_lock_irqsave(&dbg_spinlock, flags);
dbg_cnt++;
if (ind > MAX_DBG_INDENT_LEVEL)
ind = MAX_DBG_INDENT_LEVEL;
printk("%*s", ind * DBG_INDENT_SIZE, "");
va_start(args, fmt);
vsnprintf(dbg_buf, sizeof(dbg_buf), fmt, args);
printk(dbg_buf);
va_end(args);
spin_unlock_irqrestore(&dbg_spinlock, flags);
}
}
}
#define DBGPRINT dbg_print
#define DBGENTER(level) do { \
dbg_print(level, "%s: Enter\n", __FUNCTION__); \
dbg_indent++; \
} while (0)
#ifdef OMAPFB_DBG
#define DBGLEAVE(level) do { \
dbg_indent--; \
dbg_print(level, "%s: Leave\n", __FUNCTION__); \
} while (0)
#define DBGPRINT(level, fmt, ...) if (level <= OMAPFB_DBG) do { \
printk(KERN_DEBUG "%s: "fmt, \
__FUNCTION__, ## __VA_ARGS__); \
} while (0)
#define DBGENTER(level) DBGPRINT(level, "Enter\n")
#define DBGLEAVE(level) DBGPRINT(level, "Leave\n")
static inline void dump_dma_regs(int lch)
{
#ifdef CONFIG_ARCH_OMAP1
#define _R(x) __REG16(OMAP_DMA_##x(lch))
dbg_print(4, "\nCSDP :%#06x CCR :%#06x CSSA_U :%#06x "
DBGPRINT(4, "\nCSDP :%#06x CCR :%#06x CSSA_U :%#06x "
"\nCDSA_L:%#06x CDSA_U :%#06x CEN :%#06x "
"\nCFN :%#06x CSFI :%#06x CSEI :%#06x "
"\nCSAC :%#06x CICR :%#06x CSR :%04x "
......@@ -90,6 +55,7 @@ static inline void dump_dma_regs(int lch)
_R(CDFI), _R(COLOR_L), _R(COLOR_U),
_R(CCR2), _R(CLNK_CTRL), _R(LCH_CTRL));
#undef _R
#endif
}
#define DUMP_DMA_REGS(lch) dump_dma_regs(lch)
......
/*
* File: drivers/video/omap/omap2/dispc.c
*
* OMAP2 display controller support
*
* Copyright (C) 2005 Nokia Corporation
* Author: Imre Deak <imre.deak@nokia.com>
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
* Free Software Foundation; either version 2 of the License, or (at your
* option) any later version.
*
* This program is distributed in the hope that it will be useful, but
* WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* General Public License for more details.
*
* You should have received a copy of the GNU General Public License along
* with this program; if not, write to the Free Software Foundation, Inc.,
* 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
#include <linux/kernel.h>
#include <linux/dma-mapping.h>
#include <asm/io.h>
#include <asm/arch/omapfb.h>
#include <asm/hardware/clock.h>
#include "dispc.h"
/* #define OMAPFB_DBG 2 */
#include "debug.h"
#define MODULE_NAME "omapfb-dispc"
#define DISPC_BASE 0x48050400
/* DISPC common */
#define DISPC_REVISION 0x0000
#define DISPC_SYSCONFIG 0x0010
#define DISPC_SYSSTATUS 0x0014
#define DISPC_IRQSTATUS 0x0018
#define DISPC_IRQENABLE 0x001C
#define DISPC_CONTROL 0x0040
#define DISPC_CONFIG 0x0044
#define DISPC_CAPABLE 0x0048
#define DISPC_DEFAULT_COLOR0 0x004C
#define DISPC_DEFAULT_COLOR1 0x0050
#define DISPC_TRANS_COLOR0 0x0054
#define DISPC_TRANS_COLOR1 0x0058
#define DISPC_LINE_STATUS 0x005C
#define DISPC_LINE_NUMBER 0x0060
#define DISPC_TIMING_H 0x0064
#define DISPC_TIMING_V 0x0068
#define DISPC_POL_FREQ 0x006C
#define DISPC_DIVISOR 0x0070
#define DISPC_SIZE_DIG 0x0078
#define DISPC_SIZE_LCD 0x007C
#define DISPC_DATA_CYCLE1 0x01D4
#define DISPC_DATA_CYCLE2 0x01D8
#define DISPC_DATA_CYCLE3 0x01DC
/* DISPC GFX plane */
#define DISPC_GFX_BA0 0x0080
#define DISPC_GFX_BA1 0x0084
#define DISPC_GFX_POSITION 0x0088
#define DISPC_GFX_SIZE 0x008C
#define DISPC_GFX_ATTRIBUTES 0x00A0
#define DISPC_GFX_FIFO_THRESHOLD 0x00A4
#define DISPC_GFX_FIFO_SIZE_STATUS 0x00A8
#define DISPC_GFX_ROW_INC 0x00AC
#define DISPC_GFX_PIXEL_INC 0x00B0
#define DISPC_GFX_WINDOW_SKIP 0x00B4
#define DISPC_GFX_TABLE_BA 0x00B8
/* DISPC Video plane 1/2 */
#define DISPC_VID1_BASE 0x00BC
#define DISPC_VID2_BASE 0x014C
/* Offsets into DISPC_VID1/2_BASE */
#define DISPC_VID_BA0 0x0000
#define DISPC_VID_BA1 0x0004
#define DISPC_VID_POSITION 0x0008
#define DISPC_VID_SIZE 0x000C
#define DISPC_VID_ATTRIBUTES 0x0010
#define DISPC_VID_FIFO_THRESHOLD 0x0014
#define DISPC_VID_FIFO_SIZE_STATUS 0x0018
#define DISPC_VID_ROW_INC 0x001C
#define DISPC_VID_PIXEL_INC 0x0020
#define DISPC_VID_FIR 0x0024
#define DISPC_VID_PICTURE_SIZE 0x0028
#define DISPC_VID_ACCU0 0x002C
#define DISPC_VID_ACCU1 0x0030
/* 8 elements in 8 byte increments */
#define DISPC_VID_FIR_COEF_H0 0x0034
/* 8 elements in 8 byte increments */
#define DISPC_VID_FIR_COEF_HV0 0x0038
/* 5 elements in 4 byte increments */
#define DISPC_VID_CONV_COEF0 0x0074
#define DISPC_IRQ_FRAMEMASK 0x0001
#define DISPC_IRQ_VSYNC 0x0002
#define DISPC_IRQ_EVSYNC_EVEN 0x0004
#define DISPC_IRQ_EVSYNC_ODD 0x0008
#define DISPC_IRQ_ACBIAS_COUNT_STAT 0x0010
#define DISPC_IRQ_PROG_LINE_NUM 0x0020
#define DISPC_IRQ_GFX_FIFO_UNDERFLOW 0x0040
#define DISPC_IRQ_GFX_END_WIN 0x0080
#define DISPC_IRQ_PAL_GAMMA_MASK 0x0100
#define DISPC_IRQ_OCP_ERR 0x0200
#define DISPC_IRQ_VID1_FIFO_UNDERFLOW 0x0400
#define DISPC_IRQ_VID1_END_WIN 0x0800
#define DISPC_IRQ_VID2_FIFO_UNDERFLOW 0x1000
#define DISPC_IRQ_VID2_END_WIN 0x2000
#define DISPC_IRQ_SYNC_LOST 0x4000
#define DISPC_IRQ_MASK_ALL 0x7fff
#define DISPC_IRQ_MASK_ERROR (DISPC_IRQ_GFX_FIFO_UNDERFLOW | \
DISPC_IRQ_VID1_FIFO_UNDERFLOW | \
DISPC_IRQ_VID2_FIFO_UNDERFLOW | \
DISPC_IRQ_SYNC_LOST)
#define MAX_PALETTE_SIZE 256 * 16
#define pr_err(fmt, args...) printk(KERN_ERR MODULE_NAME ": " fmt, ## args)
#define FLD_MASK(pos, len) (((1 << len) - 1) << pos)
#define MOD_REG_FLD(reg, mask, val) \
dispc_write_reg((reg), (dispc_read_reg(reg) & ~(mask)) | (val));
static struct {
u32 base;
void *vram_virt;
dma_addr_t vram_phys;
int vram_size;
int ext_mode;
unsigned long enabled_irqs;
void (*irq_callback)(void *);
void *irq_callback_data;
struct completion frame_done;
struct clk *dss_ick, *dss1_fck;
struct clk *dss_54m_fck;
int active_plane_mask;
enum omapfb_update_mode update_mode;
struct omapfb_device *fbdev;
} dispc;
static void inline dispc_write_reg(int idx, u32 val)
{
__raw_writel(val, dispc.base + idx);
}
static u32 inline dispc_read_reg(int idx)
{
u32 l = __raw_readl(dispc.base + idx);
return l;
}
/* Select RFBI or bypass mode */
static void enable_rfbi_mode(int enable)
{
u32 l;
l = dispc_read_reg(DISPC_CONTROL);
/* Enable RFBI, GPIO0/1 */
l &= ~((1 << 11) | (1 << 15) | (1 << 16));
l |= enable ? (1 << 11) : 0;
/* RFBI En: GPIO0/1=10 RFBI Dis: GPIO0/1=11 */
l |= 1 << 15;
l |= enable ? 0 : (1 << 16);
dispc_write_reg(DISPC_CONTROL, l);
}
static void set_lcd_data_lines(int data_lines)
{
u32 l;
int code = 0;
switch (data_lines) {
case 12:
code = 0;
break;
case 16:
code = 1;
break;
case 18:
code = 2;
break;
case 24:
code = 3;
break;
default:
BUG();
}
l = dispc_read_reg(DISPC_CONTROL);
l &= ~(0x03 << 8);
l |= code << 8;
dispc_write_reg(DISPC_CONTROL, l);
}
static void set_load_mode(int mode)
{
BUG_ON(mode & ~(DISPC_LOAD_CLUT_ONLY | DISPC_LOAD_FRAME_ONLY |
DISPC_LOAD_CLUT_ONCE_FRAME));
MOD_REG_FLD(DISPC_CONFIG, 0x03 << 1, mode << 1);
}
void omap_dispc_set_lcd_size(int x, int y)
{
BUG_ON((x > (1 << 11)) || (y > (1 << 11)));
MOD_REG_FLD(DISPC_SIZE_LCD, FLD_MASK(16, 11) | FLD_MASK(0, 11),
((y - 1) << 16) | (x - 1));
}
EXPORT_SYMBOL(omap_dispc_set_lcd_size);
void omap_dispc_set_digit_size(int x, int y)
{
BUG_ON((x > (1 << 11)) || (y > (1 << 11)));
MOD_REG_FLD(DISPC_SIZE_DIG, FLD_MASK(16, 11) | FLD_MASK(0, 11),
((y - 1) << 16) | (x - 1));
}
EXPORT_SYMBOL(omap_dispc_set_digit_size);
static void setup_plane_fifo(int plane)
{
const u32 ftrs_reg[] = { DISPC_GFX_FIFO_THRESHOLD,
DISPC_VID1_BASE + DISPC_VID_FIFO_THRESHOLD,
DISPC_VID2_BASE + DISPC_VID_FIFO_THRESHOLD };
const u32 fsz_reg[] = { DISPC_GFX_FIFO_SIZE_STATUS,
DISPC_VID1_BASE + DISPC_VID_FIFO_SIZE_STATUS,
DISPC_VID2_BASE + DISPC_VID_FIFO_SIZE_STATUS };
u32 l;
BUG_ON(plane > 2);
l = dispc_read_reg(fsz_reg[plane]);
l &= FLD_MASK(0, 9);
/* HIGH=3/4 LOW=1/4 */
MOD_REG_FLD(ftrs_reg[plane], FLD_MASK(16, 9) | FLD_MASK(0, 9),
((l * 3 / 4) << 16) | (l / 4));
}
void omap_dispc_enable_lcd_out(int enable)
{
MOD_REG_FLD(DISPC_CONTROL, 1, enable ? 1 : 0);
}
EXPORT_SYMBOL(omap_dispc_enable_lcd_out);
void omap_dispc_enable_digit_out(int enable)
{
MOD_REG_FLD(DISPC_CONTROL, 1 << 1, enable ? 1 << 1 : 0);
}
EXPORT_SYMBOL(omap_dispc_enable_digit_out);
static int omap_dispc_setup_plane(int plane, int channel_out,
unsigned long offset, int screen_width,
int pos_x, int pos_y, int width, int height,
int color_mode)
{
const u32 at_reg[] = { DISPC_GFX_ATTRIBUTES,
DISPC_VID1_BASE + DISPC_VID_ATTRIBUTES,
DISPC_VID2_BASE + DISPC_VID_ATTRIBUTES };
const u32 ba_reg[] = { DISPC_GFX_BA0, DISPC_VID1_BASE + DISPC_VID_BA0,
DISPC_VID2_BASE + DISPC_VID_BA0 };
const u32 ps_reg[] = { DISPC_GFX_POSITION,
DISPC_VID1_BASE + DISPC_VID_POSITION,
DISPC_VID2_BASE + DISPC_VID_POSITION };
const u32 sz_reg[] = { DISPC_GFX_SIZE, DISPC_VID1_BASE + DISPC_VID_SIZE,
DISPC_VID2_BASE + DISPC_VID_SIZE };
const u32 ri_reg[] = { DISPC_GFX_ROW_INC,
DISPC_VID1_BASE + DISPC_VID_ROW_INC,
DISPC_VID2_BASE + DISPC_VID_ROW_INC };
int chout_shift, burst_shift;
int chout_val;
int color_code;
int bpp;
u32 l;
DBGENTER(1);
switch (plane) {
case OMAPFB_PLANE_GFX:
burst_shift = 6;
chout_shift = 8;
break;
case OMAPFB_PLANE_VID1:
case OMAPFB_PLANE_VID2:
burst_shift = 14;
chout_shift = 16;
break;
default:
return -EINVAL;
}
switch (channel_out) {
case OMAPFB_CHANNEL_OUT_LCD:
chout_val = 0;
break;
case OMAPFB_CHANNEL_OUT_DIGIT:
chout_val = 1;
break;
default:
return -EINVAL;
}
switch (color_mode) {
case OMAPFB_COLOR_RGB565:
color_code = DISPC_RGB_16_BPP;
bpp = 16;
break;
case OMAPFB_COLOR_YUV422:
if (plane != 0)
return -EINVAL;
color_code = DISPC_UYVY_422;
bpp = 16;
break;
case OMAPFB_COLOR_YUV420:
if (plane != 0)
return -EINVAL;
color_code = DISPC_YUV2_422;
bpp = 12;
break;
default:
return -EINVAL;
}
l = dispc_read_reg(at_reg[plane]);
l &= ~(0x0f << 1);
l |= color_code << 1;
l &= ~(0x03 << burst_shift);
l |= DISPC_BURST_8x32 << burst_shift;
l &= ~(1 << chout_shift);
l |= chout_val << chout_shift;
dispc_write_reg(at_reg[plane], l);
dispc_write_reg(ba_reg[plane],
dispc.vram_phys + PAGE_ALIGN(MAX_PALETTE_SIZE) + offset);
MOD_REG_FLD(ps_reg[plane],
FLD_MASK(16, 11) | FLD_MASK(0, 11), (pos_y << 16) | pos_x);
MOD_REG_FLD(sz_reg[plane], FLD_MASK(16, 11) | FLD_MASK(0, 11),
((height - 1) << 16) | (width - 1));
dispc_write_reg(ri_reg[plane], (screen_width - width) * bpp / 8 + 1);
return 0;
}
static int omap_dispc_enable_plane(int plane, int enable)
{
const u32 at_reg[] = { DISPC_GFX_ATTRIBUTES,
DISPC_VID1_BASE + DISPC_VID_ATTRIBUTES,
DISPC_VID2_BASE + DISPC_VID_ATTRIBUTES };
DBGENTER(1);
if ((unsigned int)plane > 2)
return -EINVAL;
MOD_REG_FLD(at_reg[plane], 1, enable ? 1 : 0);
return 0;
}
static int omap_dispc_set_color_key(struct omapfb_color_key *ck)
{
u32 df_reg, tr_reg;
int shift, val;
switch (ck->channel_out) {
case OMAPFB_CHANNEL_OUT_LCD:
df_reg = DISPC_DEFAULT_COLOR0;
tr_reg = DISPC_TRANS_COLOR0;
shift = 10;
break;
case OMAPFB_CHANNEL_OUT_DIGIT:
df_reg = DISPC_DEFAULT_COLOR1;
tr_reg = DISPC_TRANS_COLOR1;
shift = 12;
break;
default:
return -EINVAL;
}
switch (ck->key_type) {
case OMAPFB_COLOR_KEY_DISABLED:
val = 0;
break;
case OMAPFB_COLOR_KEY_GFX_DST:
val = 1;
break;
case OMAPFB_COLOR_KEY_VID_SRC:
val = 3;
break;
default:
return -EINVAL;
}
MOD_REG_FLD(DISPC_CONFIG, FLD_MASK(shift, 2), val << shift);
if (val != 0)
dispc_write_reg(tr_reg, ck->trans_key);
dispc_write_reg(df_reg, ck->background);
return 0;
}
static void load_palette(void)
{
}
static int omap_dispc_set_update_mode(enum omapfb_update_mode mode)
{
int r = 0;
DBGENTER(1);
if (mode != dispc.update_mode) {
switch (mode) {
case OMAPFB_AUTO_UPDATE:
omap_dispc_enable_lcd_out(1);
dispc.update_mode = mode;
break;
case OMAPFB_UPDATE_DISABLED:
init_completion(&dispc.frame_done);
omap_dispc_enable_lcd_out(0);
if (!wait_for_completion_timeout(&dispc.frame_done,
msecs_to_jiffies(500))) {
pr_err("timeout waiting for FRAME DONE\n");
}
dispc.update_mode = mode;
break;
default:
r = -EINVAL;
}
}
DBGLEAVE(1);
return r;
}
static enum omapfb_update_mode omap_dispc_get_update_mode(void)
{
return dispc.update_mode;
}
static void calc_ck_div(int is_tft, int pck, int *lck_div, int *pck_div)
{
unsigned long fck, lck;
*lck_div = 1;
pck = max(1, pck);
fck = clk_get_rate(dispc.dss1_fck);
lck = fck;
*pck_div = lck / pck;
if (is_tft)
*pck_div = max(2, *pck_div);
else
*pck_div = max(3, *pck_div);
if (*pck_div > 255) {
*pck_div = 255;
lck = pck * *pck_div;
*lck_div = fck / lck;
BUG_ON(*lck_div < 1);
if (*lck_div > 255) {
*lck_div = 255;
printk(KERN_WARNING
MODULE_NAME ": pixclock %d kHz too low.\n",
pck / 1000);
}
}
}
static void set_lcd_timings(void)
{
u32 l;
int lck_div, pck_div;
struct lcd_panel *panel = dispc.fbdev->panel;
int is_tft = panel->config & OMAP_LCDC_PANEL_TFT;
unsigned long fck;
DBGENTER(1);
/* TFT dither, TFT/STN */
l = (1 << 7) | (1 << 3);
MOD_REG_FLD(DISPC_CONTROL, l, is_tft ? l : 0);
l = dispc_read_reg(DISPC_TIMING_H);
l &= ~(FLD_MASK(0, 6) | FLD_MASK(8, 8) | FLD_MASK(20, 8));
l |= ( max(1, (min(64, panel->hsw))) - 1 ) << 0;
l |= ( max(1, (min(256, panel->hfp))) - 1 ) << 8;
l |= ( max(1, (min(256, panel->hbp))) - 1 ) << 20;
dispc_write_reg(DISPC_TIMING_H, l);
l = dispc_read_reg(DISPC_TIMING_V);
l &= ~(FLD_MASK(0, 6) | FLD_MASK(8, 8) | FLD_MASK(20, 8));
l |= ( max(1, (min(64, panel->vsw))) - 1 ) << 0;
l |= ( max(0, (min(255, panel->vfp))) - 0 ) << 8;
l |= ( max(0, (min(255, panel->vbp))) - 0 ) << 20;
dispc_write_reg(DISPC_TIMING_V, l);
l = dispc_read_reg(DISPC_POL_FREQ);
l &= ~FLD_MASK(12, 6);
l |= (panel->config & OMAP_LCDC_SIGNAL_MASK) << 12;
l |= panel->acb & 0xff;
dispc_write_reg(DISPC_POL_FREQ, l);
calc_ck_div(is_tft, panel->pixel_clock * 1000, &lck_div, &pck_div);
l = dispc_read_reg(DISPC_DIVISOR);
l &= ~(FLD_MASK(16, 8) | FLD_MASK(0, 8));
l |= (lck_div << 16) | (pck_div << 0);
dispc_write_reg(DISPC_DIVISOR, l);
/* update panel info with the exact clock */
fck = clk_get_rate(dispc.dss1_fck);
panel->pixel_clock = fck / lck_div / pck_div / 1000;
}
int omap_dispc_request_irq(void (*callback)(void *data), void *data)
{
int r = 0;
BUG_ON(callback == NULL);
if (dispc.irq_callback)
r = -EBUSY;
else {
dispc.irq_callback = callback;
dispc.irq_callback_data = data;
}
return r;
}
EXPORT_SYMBOL(omap_dispc_request_irq);
void omap_dispc_enable_irqs(int irq_mask)
{
dispc.enabled_irqs = irq_mask;
irq_mask |= DISPC_IRQ_MASK_ERROR;
MOD_REG_FLD(DISPC_IRQENABLE, 0x7fff, irq_mask);
}
EXPORT_SYMBOL(omap_dispc_enable_irqs);
void omap_dispc_disable_irqs(int irq_mask)
{
dispc.enabled_irqs &= ~irq_mask;
irq_mask &= ~DISPC_IRQ_MASK_ERROR;
MOD_REG_FLD(DISPC_IRQENABLE, 0x7fff, irq_mask);
}
EXPORT_SYMBOL(omap_dispc_disable_irqs);
void omap_dispc_free_irq(void)
{
omap_dispc_disable_irqs(DISPC_IRQ_MASK_ALL);
dispc.irq_callback = NULL;
dispc.irq_callback_data = NULL;
}
EXPORT_SYMBOL(omap_dispc_free_irq);
static irqreturn_t omap_dispc_irq_handler(int irq, void *dev, struct pt_regs *regs)
{
u32 stat = dispc_read_reg(DISPC_IRQSTATUS);
static int jabber;
DBGENTER(2);
if (stat & DISPC_IRQ_FRAMEMASK)
complete(&dispc.frame_done);
if (stat & DISPC_IRQ_MASK_ERROR) {
if (jabber++ < 5) {
pr_err("irq error status %04x\n", stat);
} else {
pr_err("disable irq\n");
dispc_write_reg(DISPC_IRQENABLE, 0);
}
}
if ((stat & dispc.enabled_irqs) && dispc.irq_callback)
dispc.irq_callback(dispc.irq_callback_data);
dispc_write_reg(DISPC_IRQSTATUS, stat);
return IRQ_HANDLED;
}
static int get_dss_clocks(void)
{
if (IS_ERR((dispc.dss_ick = clk_get(dispc.fbdev->dev, "dss_ick")))) {
pr_err("can't get dss_ick");
return PTR_ERR(dispc.dss_ick);
}
if (IS_ERR((dispc.dss1_fck = clk_get(dispc.fbdev->dev, "dss1_fck")))) {
pr_err("can't get dss1_fck");
clk_put(dispc.dss_ick);
return PTR_ERR(dispc.dss1_fck);
}
if (IS_ERR((dispc.dss_54m_fck =
clk_get(dispc.fbdev->dev, "dss_54m_fck")))) {
pr_err("can't get dss_54m_fck");
clk_put(dispc.dss_ick);
clk_put(dispc.dss1_fck);
return PTR_ERR(dispc.dss_54m_fck);
}
return 0;
}
static void put_dss_clocks(void)
{
clk_put(dispc.dss_54m_fck);
clk_put(dispc.dss1_fck);
clk_put(dispc.dss_ick);
}
static void enable_lcd_clocks(int enable)
{
if (enable) {
clk_use(dispc.dss_ick);
clk_use(dispc.dss1_fck);
} else {
clk_unuse(dispc.dss1_fck);
clk_unuse(dispc.dss_ick);
}
}
static void enable_digit_clocks(int enable)
{
if (enable)
clk_use(dispc.dss_54m_fck);
else
clk_unuse(dispc.dss_54m_fck);
}
static void omap_dispc_suspend(void)
{
DBGENTER(1);
if (dispc.update_mode == OMAPFB_AUTO_UPDATE) {
init_completion(&dispc.frame_done);
omap_dispc_enable_lcd_out(0);
if (!wait_for_completion_timeout(&dispc.frame_done,
msecs_to_jiffies(500))) {
pr_err("timeout waiting for FRAME DONE\n");
}
enable_lcd_clocks(0);
}
DBGLEAVE(1);
}
static void omap_dispc_resume(void)
{
DBGENTER(1);
if (dispc.update_mode == OMAPFB_AUTO_UPDATE) {
enable_lcd_clocks(1);
set_lcd_timings();
load_palette();
omap_dispc_enable_lcd_out(1);
}
DBGLEAVE(1);
}
/* Called when used in bypass mode */
static int alloc_vram(int req_size)
{
int frame_size;
struct lcd_panel *panel = dispc.fbdev->panel;
frame_size = PAGE_ALIGN(panel->x_res * panel->bpp / 8 * panel->y_res);
if (req_size > frame_size)
frame_size = req_size;
dispc.vram_size = PAGE_ALIGN(MAX_PALETTE_SIZE) + frame_size;
dispc.vram_virt = dma_alloc_writecombine(dispc.fbdev->dev,
dispc.vram_size, &dispc.vram_phys, GFP_KERNEL);
if (dispc.vram_virt == 0) {
pr_err("unable to allocate fb DMA memory\n");
return -ENOMEM;
}
return 0;
}
static void free_vram(void)
{
dma_free_writecombine(dispc.fbdev->dev, dispc.vram_size,
dispc.vram_virt, dispc.vram_phys);
}
static void omap_dispc_get_vram_layout(unsigned long *size, void **virt,
dma_addr_t *phys)
{
*size = dispc.vram_size - PAGE_ALIGN(MAX_PALETTE_SIZE);
*virt = (u8 *)dispc.vram_virt + PAGE_ALIGN(MAX_PALETTE_SIZE);
*phys = dispc.vram_phys + PAGE_ALIGN(MAX_PALETTE_SIZE);
}
static int omap_dispc_init(struct omapfb_device *fbdev, int ext_mode,
int req_vram_size)
{
int r;
u32 l;
struct lcd_panel *panel = fbdev->panel;
int tmo = 10000;
DBGENTER(1);
memset(&dispc, 0, sizeof(dispc));
dispc.base = io_p2v(DISPC_BASE);
dispc.fbdev = fbdev;
dispc.ext_mode = ext_mode;
if ((r = get_dss_clocks()) < 0)
goto fail0;
enable_lcd_clocks(1);
/* Reset monitoring works only w/ the 54M clk */
enable_digit_clocks(1);
l = dispc_read_reg(DISPC_REVISION);
pr_info(MODULE_NAME ": version %d.%d\n", l >> 4 & 0x0f, l & 0x0f);
/* Soft reset */
MOD_REG_FLD(DISPC_SYSCONFIG, 1 << 1, 1 << 1);
while (!(dispc_read_reg(DISPC_SYSSTATUS) & 1)) {
if (!--tmo) {
pr_err("soft reset failed\n");
r = -ENODEV;
enable_digit_clocks(0);
goto fail1;
}
}
enable_digit_clocks(0);
if (!ext_mode && (r = alloc_vram(req_vram_size)) < 0)
goto fail1;
/* Set logic clock to the fck for now */
MOD_REG_FLD(DISPC_DIVISOR, FLD_MASK(16, 8), 1);
setup_plane_fifo(0);
setup_plane_fifo(1);
setup_plane_fifo(2);
l = dispc_read_reg(DISPC_IRQSTATUS);
dispc_write_reg(l, DISPC_IRQSTATUS);
/* Enable those that we handle always */
omap_dispc_enable_irqs(DISPC_IRQ_FRAMEMASK);
if ((r = request_irq(INT_24XX_DSS_IRQ, omap_dispc_irq_handler,
0, MODULE_NAME, NULL)) < 0) {
pr_err("can't get DSS IRQ\n");
goto fail2;
}
set_lcd_data_lines(panel->data_lines);
set_load_mode(DISPC_LOAD_FRAME_ONLY);
if (!ext_mode) {
omap_dispc_set_lcd_size(panel->x_res, panel->y_res);
set_lcd_timings();
}
enable_rfbi_mode(ext_mode);
DBGLEAVE(1);
return 0;
fail2:
if (ext_mode)
free_vram();
fail1:
enable_lcd_clocks(0);
put_dss_clocks();
fail0:
DBGLEAVE(1);
return r;
}
static void omap_dispc_cleanup(void)
{
free_irq(INT_24XX_DSS_IRQ, NULL);
enable_lcd_clocks(0);
put_dss_clocks();
if (dispc.ext_mode)
free_vram();
}
static unsigned long omap_dispc_get_caps(void)
{
return 0;
}
struct lcd_ctrl omap2_int_ctrl = {
.name = "internal",
.init = omap_dispc_init,
.cleanup = omap_dispc_cleanup,
.get_vram_layout = omap_dispc_get_vram_layout,
.get_caps = omap_dispc_get_caps,
.set_update_mode = omap_dispc_set_update_mode,
.get_update_mode = omap_dispc_get_update_mode,
.update_window = NULL,
.suspend = omap_dispc_suspend,
.resume = omap_dispc_resume,
.setup_plane = omap_dispc_setup_plane,
.enable_plane = omap_dispc_enable_plane,
.set_color_key = omap_dispc_set_color_key,
};
MODULE_DESCRIPTION("TI OMAP LCDC controller");
MODULE_LICENSE("GPL");
#ifndef _DISPC_H
#define _DISPC_H
#include <linux/interrupt.h>
#define DISPC_PLANE_GFX 0
#define DISPC_PLANE_VID1 1
#define DISPC_PLANE_VID2 2
#define DISPC_RGB_1_BPP 0x00
#define DISPC_RGB_2_BPP 0x01
#define DISPC_RGB_4_BPP 0x02
#define DISPC_RGB_8_BPP 0x03
#define DISPC_RGB_12_BPP 0x04
#define DISPC_RGB_16_BPP 0x06
#define DISPC_RGB_24_BPP 0x08
#define DISPC_RGB_24_BPP_UNPACK_32 0x09
#define DISPC_YUV2_422 0x0a
#define DISPC_UYVY_422 0x0b
#define DISPC_BURST_4x32 0
#define DISPC_BURST_8x32 1
#define DISPC_BURST_16x32 2
#define DISPC_LOAD_CLUT_AND_FRAME 0x00
#define DISPC_LOAD_CLUT_ONLY 0x01
#define DISPC_LOAD_FRAME_ONLY 0x02
#define DISPC_LOAD_CLUT_ONCE_FRAME 0x03
#define DISPC_TFT_DATA_LINES_12 0
#define DISPC_TFT_DATA_LINES_16 1
#define DISPC_TFT_DATA_LINES_18 2
#define DISPC_TFT_DATA_LINES_24 3
extern void omap_dispc_set_lcd_size(int width, int height);
extern void omap_dispc_enable_lcd_out(int enable);
extern void omap_dispc_enable_digit_out(int enable);
extern int omap_dispc_request_irq(void (*callback)(void *data), void *data);
extern void omap_dispc_free_irq(void);
#endif
/*
* File: drivers/video/omap_new/lcd-h2.c
* File: drivers/video/omap/lcd-h2.c
*
* LCD panel support for the TI OMAP H2 board
* LCD panel support for the TI OMAP H2 board
*
* Copyright (C) 2004 Nokia Corporation
* Author: Imre Deak <imre.deak@nokia.com>
......@@ -24,16 +24,18 @@
#include <linux/module.h>
#include <asm/arch/mux.h>
#include <asm/arch/omapfb.h>
#include "omapfb.h"
// #define OMAPFB_DBG 1
/* #define OMAPFB_DBG 1 */
#include "debug.h"
#include "../drivers/ssi/omap-uwire.h"
#define MODULE_NAME "omapfb-lcd_h2"
#define TSC2101_UWIRE_CS 1
#define pr_err(fmt, args...) printk(KERN_ERR MODULE_NAME ": " fmt, ## args)
static int tsc2101_write_reg(int page, int reg, u16 data)
{
u16 cmd;
......@@ -45,13 +47,14 @@ static int tsc2101_write_reg(int page, int reg, u16 data)
if (omap_uwire_data_transfer(TSC2101_UWIRE_CS, cmd, 16, 0, NULL, 1))
r = -1;
else
r = omap_uwire_data_transfer(TSC2101_UWIRE_CS, data, 16, 0, NULL, 0);
r = omap_uwire_data_transfer(TSC2101_UWIRE_CS, data, 16, 0,
NULL, 0);
DBGLEAVE(1);
return r;
}
static int h2_panel_init(struct lcd_panel *panel)
static int h2_panel_init(struct omapfb_device *fbdev)
{
unsigned long uwire_flags;
DBGENTER(1);
......@@ -66,13 +69,13 @@ static int h2_panel_init(struct lcd_panel *panel)
return 0;
}
static void h2_panel_cleanup(struct lcd_panel *panel)
static void h2_panel_cleanup(void)
{
DBGENTER(1);
DBGLEAVE(1);
}
static int h2_panel_enable(struct lcd_panel *panel)
static int h2_panel_enable(void)
{
int r;
......@@ -87,7 +90,7 @@ static int h2_panel_enable(struct lcd_panel *panel)
return r;
}
static void h2_panel_disable(struct lcd_panel *panel)
static void h2_panel_disable(void)
{
DBGENTER(1);
......@@ -95,39 +98,36 @@ static void h2_panel_disable(struct lcd_panel *panel)
* page2, GPIO config reg, GPIO(0,1) to out and deasserted
*/
if (tsc2101_write_reg(2, 0x23, 0x8800))
PRNERR("failed to disable LCD panel\n");
pr_err("failed to disable LCD panel\n");
DBGLEAVE(1);
}
static unsigned long h2_panel_get_caps(struct lcd_panel *panel)
static unsigned long h2_panel_get_caps(void)
{
return 0;
}
static struct lcdc_video_mode mode240x320 = {
.x_res = 240,
.y_res = 320,
.pixel_clock = 12500,
.bpp = 16,
.hsw = 12,
.hfp = 14,
.hbp = 72 - 12,
.vsw = 1,
.vfp = 1,
.vbp = 0,
.pcd = 12,
};
struct lcd_panel h2_panel = {
.name = "h2",
.config = LCD_PANEL_TFT,
.video_mode = &mode240x320,
.init = h2_panel_init,
.cleanup = h2_panel_cleanup,
.enable = h2_panel_enable,
.disable = h2_panel_disable,
.get_caps= h2_panel_get_caps,
.name = "h2",
.config = OMAP_LCDC_PANEL_TFT,
.bpp = 16,
.data_lines = 16,
.x_res = 240,
.y_res = 320,
.pixel_clock = 5000,
.hsw = 12,
.hfp = 12,
.hbp = 46,
.vsw = 1,
.vfp = 1,
.vbp = 0,
.init = h2_panel_init,
.cleanup = h2_panel_cleanup,
.enable = h2_panel_enable,
.disable = h2_panel_disable,
.get_caps = h2_panel_get_caps,
};
/*
* File: drivers/video/omap_new/lcd-h3.c
* File: drivers/video/omap/lcd-h3.c
*
* LCD panel support for the TI OMAP H3 board
* LCD panel support for the TI OMAP H3 board
*
* Copyright (C) 2004 Nokia Corporation
* Author: Imre Deak <imre.deak@nokia.com>
......@@ -25,27 +25,30 @@
#include <asm/arch/gpio.h>
#include <asm/arch/tps65010.h>
#include <asm/arch/omapfb.h>
#include "omapfb.h"
// #define OMAPFB_DBG 1
/* #define OMAPFB_DBG 1 */
#include "debug.h"
static int h3_panel_init(struct lcd_panel *panel)
#define MODULE_NAME "omapfb-lcd_h3"
#define pr_err(fmt, args...) printk(KERN_ERR MODULE_NAME ": " fmt, ## args)
static int h3_panel_init(struct omapfb_device *fbdev)
{
DBGENTER(1);
DBGLEAVE(1);
return 0;
}
static void h3_panel_cleanup(struct lcd_panel *panel)
static void h3_panel_cleanup(void)
{
DBGENTER(1);
DBGLEAVE(1);
}
static int h3_panel_enable(struct lcd_panel *panel)
static int h3_panel_enable(void)
{
int r = 0;
......@@ -56,13 +59,13 @@ static int h3_panel_enable(struct lcd_panel *panel)
if (!r)
r = tps65010_set_gpio_out_value(GPIO2, HIGH);
if (r)
PRNERR("Unable to turn on LCD panel\n");
pr_err("Unable to turn on LCD panel\n");
DBGLEAVE(1);
return r;
}
static void h3_panel_disable(struct lcd_panel *panel)
static void h3_panel_disable(void)
{
int r = 0;
......@@ -73,39 +76,37 @@ static void h3_panel_disable(struct lcd_panel *panel)
if (!r)
tps65010_set_gpio_out_value(GPIO2, LOW);
if (r)
PRNERR("Unable to turn off LCD panel\n");
pr_err("Unable to turn off LCD panel\n");
DBGLEAVE(1);
}
static unsigned long h3_panel_get_caps(struct lcd_panel *panel)
static unsigned long h3_panel_get_caps(void)
{
return 0;
}
static struct lcdc_video_mode mode240x320 = {
.x_res = 240,
.y_res = 320,
.pixel_clock = 12500,
.bpp = 16,
.hsw = 12,
.hfp = 14,
.hbp = 72 - 12,
.vsw = 1,
.vfp = 1,
.vbp = 0,
.pcd = 2,
};
struct lcd_panel h3_panel = {
.name = "h3",
.config = LCD_PANEL_TFT,
.video_mode = &mode240x320,
.init = h3_panel_init,
.cleanup = h3_panel_cleanup,
.enable = h3_panel_enable,
.disable = h3_panel_disable,
.get_caps= h3_panel_get_caps,
.name = "h3",
.config = OMAP_LCDC_PANEL_TFT,
.data_lines = 16,
.bpp = 16,
.x_res = 240,
.y_res = 320,
.pixel_clock = 12500,
.hsw = 12,
.hfp = 14,
.hbp = 72 - 12,
.vsw = 1,
.vfp = 1,
.vbp = 0,
.pcd = 2,
.init = h3_panel_init,
.cleanup = h3_panel_cleanup,
.enable = h3_panel_enable,
.disable = h3_panel_disable,
.get_caps = h3_panel_get_caps,
};
/*
* File: drivers/video/omap/lcd-h4.c
*
* LCD panel support for the TI OMAP H4 board
*
* Copyright (C) 2004 Nokia Corporation
* Author: Imre Deak <imre.deak@nokia.com>
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
* Free Software Foundation; either version 2 of the License, or (at your
* option) any later version.
*
* This program is distributed in the hope that it will be useful, but
* WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* General Public License for more details.
*
* You should have received a copy of the GNU General Public License along
* with this program; if not, write to the Free Software Foundation, Inc.,
* 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
#include <linux/module.h>
#include <asm/arch/omapfb.h>
/* #define OMAPFB_DBG 1 */
#include "debug.h"
static int h4_panel_init(struct omapfb_device *fbdev)
{
DBGENTER(1);
DBGLEAVE(1);
return 0;
}
static void h4_panel_cleanup(void)
{
DBGENTER(1);
DBGLEAVE(1);
}
static int h4_panel_enable(void)
{
DBGENTER(1);
DBGLEAVE(1);
return 0;
}
static void h4_panel_disable(void)
{
DBGENTER(1);
DBGLEAVE(1);
}
static unsigned long h4_panel_get_caps(void)
{
return 0;
}
struct lcd_panel h4_panel = {
.name = "h4",
.config = OMAP_LCDC_PANEL_TFT,
.bpp = 16,
.data_lines = 16,
.x_res = 240,
.y_res = 320,
.pixel_clock = 6250,
.hsw = 15,
.hfp = 15,
.hbp = 60,
.vsw = 1,
.vfp = 1,
.vbp = 1,
.init = h4_panel_init,
.cleanup = h4_panel_cleanup,
.enable = h4_panel_enable,
.disable = h4_panel_disable,
.get_caps = h4_panel_get_caps,
};
/*
* File: drivers/video/omap_new/lcd-inn1510.c
* File: drivers/video/omap/lcd-inn1510.c
*
* LCD panel support for the TI OMAP1510 Innovator board
*
......@@ -26,27 +26,26 @@
#include <asm/io.h>
#include <asm/arch/fpga.h>
#include <asm/arch/omapfb.h>
#include "omapfb.h"
// #define OMAPFB_DBG 1
/* #define OMAPFB_DBG 1 */
#include "debug.h"
static int innovator1510_panel_init(struct lcd_panel *panel)
static int innovator1510_panel_init(struct omapfb_device *fbdev)
{
DBGENTER(1);
DBGLEAVE(1);
return 0;
}
static void innovator1510_panel_cleanup(struct lcd_panel *panel)
static void innovator1510_panel_cleanup(void)
{
DBGENTER(1);
DBGLEAVE(1);
}
static int innovator1510_panel_enable(struct lcd_panel *panel)
static int innovator1510_panel_enable(void)
{
DBGENTER(1);
......@@ -56,7 +55,7 @@ static int innovator1510_panel_enable(struct lcd_panel *panel)
return 0;
}
static void innovator1510_panel_disable(struct lcd_panel *panel)
static void innovator1510_panel_disable(void)
{
DBGENTER(1);
......@@ -65,34 +64,32 @@ static void innovator1510_panel_disable(struct lcd_panel *panel)
DBGLEAVE(1);
}
static unsigned long innovator1510_panel_get_caps(struct lcd_panel *panel)
static unsigned long innovator1510_panel_get_caps(void)
{
return 0;
}
static struct lcdc_video_mode mode240x320 = {
.x_res = 240,
.y_res = 320,
.pixel_clock = 12500,
.bpp = 16,
.hsw = 40,
.hfp = 40,
.hbp = 72,
.vsw = 1,
.vfp = 1,
.vbp = 0,
.pcd = 12,
};
struct lcd_panel innovator1510_panel = {
.name = "inn1510",
.config = LCD_PANEL_TFT,
.video_mode = &mode240x320,
.init = innovator1510_panel_init,
.cleanup = innovator1510_panel_cleanup,
.enable = innovator1510_panel_enable,
.disable = innovator1510_panel_disable,
.get_caps= innovator1510_panel_get_caps,
.name = "inn1510",
.config = OMAP_LCDC_PANEL_TFT,
.bpp = 16,
.data_lines = 16,
.x_res = 240,
.y_res = 320,
.pixel_clock = 12500,
.hsw = 40,
.hfp = 40,
.hbp = 72,
.vsw = 1,
.vfp = 1,
.vbp = 0,
.pcd = 12,
.init = innovator1510_panel_init,
.cleanup = innovator1510_panel_cleanup,
.enable = innovator1510_panel_enable,
.disable = innovator1510_panel_disable,
.get_caps = innovator1510_panel_get_caps,
};
/*
* File: drivers/video/omap_new/lcd-inn1610.c
* File: drivers/video/omap/lcd-inn1610.c
*
* LCD panel support for the TI OMAP1610 Innovator board
* LCD panel support for the TI OMAP1610 Innovator board
*
* Copyright (C) 2004 Nokia Corporation
* Author: Imre Deak <imre.deak@nokia.com>
......@@ -24,26 +24,29 @@
#include <linux/module.h>
#include <asm/arch/gpio.h>
#include <asm/arch/omapfb.h>
#include "omapfb.h"
// #define OMAPFB_DBG 1
/* #define OMAPFB_DBG 1 */
#include "debug.h"
static int innovator1610_panel_init(struct lcd_panel *panel)
#define MODULE_NAME "omapfb-lcd_h3"
#define pr_err(fmt, args...) printk(KERN_ERR MODULE_NAME ": " fmt, ## args)
static int innovator1610_panel_init(struct omapfb_device *fbdev)
{
int r = 0;
DBGENTER(1);
if (omap_request_gpio(14)) {
PRNERR("can't request GPIO 14\n");
pr_err("can't request GPIO 14\n");
r = -1;
goto exit;
}
if (omap_request_gpio(15)) {
PRNERR("can't request GPIO 15\n");
pr_err("can't request GPIO 15\n");
omap_free_gpio(14);
r = -1;
goto exit;
......@@ -56,7 +59,7 @@ exit:
return r;
}
static void innovator1610_panel_cleanup(struct lcd_panel *panel)
static void innovator1610_panel_cleanup(void)
{
DBGENTER(1);
......@@ -66,7 +69,7 @@ static void innovator1610_panel_cleanup(struct lcd_panel *panel)
DBGLEAVE(1);
}
static int innovator1610_panel_enable(struct lcd_panel *panel)
static int innovator1610_panel_enable(void)
{
DBGENTER(1);
......@@ -78,7 +81,7 @@ static int innovator1610_panel_enable(struct lcd_panel *panel)
return 0;
}
static void innovator1610_panel_disable(struct lcd_panel *panel)
static void innovator1610_panel_disable(void)
{
DBGENTER(1);
......@@ -89,34 +92,32 @@ static void innovator1610_panel_disable(struct lcd_panel *panel)
DBGLEAVE(1);
}
static unsigned long innovator1610_panel_get_caps(struct lcd_panel *panel)
static unsigned long innovator1610_panel_get_caps(void)
{
return 0;
}
static struct lcdc_video_mode mode320x240 = {
.x_res = 320,
.y_res = 240,
.pixel_clock = 12500,
.bpp = 16,
.hsw = 40,
.hfp = 40,
.hbp = 72,
.vsw = 1,
.vfp = 1,
.vbp = 0,
.pcd = 12,
};
struct lcd_panel innovator1610_panel = {
.name = "inn1610",
.config = LCD_PANEL_TFT,
.video_mode = &mode320x240,
.init = innovator1610_panel_init,
.cleanup = innovator1610_panel_cleanup,
.enable = innovator1610_panel_enable,
.disable = innovator1610_panel_disable,
.get_caps= innovator1610_panel_get_caps,
.name = "inn1610",
.config = OMAP_LCDC_PANEL_TFT,
.bpp = 16,
.data_lines = 16,
.x_res = 320,
.y_res = 240,
.pixel_clock = 12500,
.hsw = 40,
.hfp = 40,
.hbp = 72,
.vsw = 1,
.vfp = 1,
.vbp = 0,
.pcd = 12,
.init = innovator1610_panel_init,
.cleanup = innovator1610_panel_cleanup,
.enable = innovator1610_panel_enable,
.disable = innovator1610_panel_disable,
.get_caps = innovator1610_panel_get_caps,
};
/*
* File: drivers/video/omap_new/lcd-osk.c
* File: drivers/video/omap/lcd-osk.c
*
* LCD panel support for the TI OMAP OSK board
* LCD panel support for the TI OMAP OSK board
*
* Copyright (C) 2004 Nokia Corporation
* Author: Imre Deak <imre.deak@nokia.com>
......@@ -23,29 +23,29 @@
*/
#include <linux/module.h>
#include <asm/arch/gpio.h>
#include <asm/arch/mux.h>
#include <asm/arch/omapfb.h>
#include "omapfb.h"
// #define OMAPFB_DBG 1
/* #define OMAPFB_DBG 1 */
#include "debug.h"
static int osk_panel_init(struct lcd_panel *panel)
static int osk_panel_init(struct omapfb_device *fbdev)
{
DBGENTER(1);
DBGLEAVE(1);
return 0;
}
static void osk_panel_cleanup(struct lcd_panel *panel)
static void osk_panel_cleanup(void)
{
DBGENTER(1);
DBGLEAVE(1);
}
static int osk_panel_enable(struct lcd_panel *panel)
static int osk_panel_enable(void)
{
DBGENTER(1);
......@@ -68,7 +68,7 @@ static int osk_panel_enable(struct lcd_panel *panel)
return 0;
}
static void osk_panel_disable(struct lcd_panel *panel)
static void osk_panel_disable(void)
{
DBGENTER(1);
......@@ -84,34 +84,32 @@ static void osk_panel_disable(struct lcd_panel *panel)
DBGLEAVE(1);
}
static unsigned long osk_panel_get_caps(struct lcd_panel *panel)
static unsigned long osk_panel_get_caps(void)
{
return 0;
}
static struct lcdc_video_mode mode240x320 = {
.x_res = 240,
.y_res = 320,
.pixel_clock = 12500,
.bpp = 16,
.hsw = 40,
.hfp = 40,
.hbp = 72,
.vsw = 1,
.vfp = 1,
.vbp = 0,
.pcd = 12,
};
struct lcd_panel osk_panel = {
.name = "osk",
.config = LCD_PANEL_TFT,
.video_mode = &mode240x320,
.init = osk_panel_init,
.cleanup = osk_panel_cleanup,
.enable = osk_panel_enable,
.disable = osk_panel_disable,
.get_caps= osk_panel_get_caps,
.name = "osk",
.config = OMAP_LCDC_PANEL_TFT,
.bpp = 16,
.data_lines = 16,
.x_res = 240,
.y_res = 320,
.pixel_clock = 12500,
.hsw = 40,
.hfp = 40,
.hbp = 72,
.vsw = 1,
.vfp = 1,
.vbp = 0,
.pcd = 12,
.init = osk_panel_init,
.cleanup = osk_panel_cleanup,
.enable = osk_panel_enable,
.disable = osk_panel_disable,
.get_caps = osk_panel_get_caps,
};
/*
* File: drivers/video/omap_new/lcd-p2.c
* File: drivers/video/omap/lcd-p2.c
*
* LCD panel support for the TI OMAP P2 board
* LCD panel support for the TI OMAP P2 board
*
* Authors:
* jekyll <jekyll@mail.jekyll.idv.tw>
* B Jp <lastjp_fr@yahoo.fr>
* Brian Swetland <swetland@android.com>
*
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
* Free Software Foundation; either version 2 of the License, or (at your
......@@ -25,10 +25,10 @@
#include <linux/module.h>
#include <linux/delay.h>
#include <asm/arch/mux.h>
#include <asm/arch/gpio.h>
#include "omapfb.h"
#include <asm/arch/omapfb.h>
/*
* File: epson-md-tft.h
......@@ -152,20 +152,20 @@ const unsigned short INIT_SCSTART[2] = { 0x00, 0x00 };
#define LCD_UWIRE_CS 0
static int p2_panel_init(struct lcd_panel *panel)
static int p2_panel_init(struct omapfb_device *fbdev)
{
DBGENTER(1);
DBGLEAVE(1);
return 0;
}
static void p2_panel_cleanup(struct lcd_panel *panel)
static void p2_panel_cleanup(void)
{
DBGENTER(1);
DBGLEAVE(1);
}
static int p2_panel_enable(struct lcd_panel *panel)
static int p2_panel_enable(void)
{
int i;
unsigned long value;
......@@ -195,8 +195,8 @@ static int p2_panel_enable(struct lcd_panel *panel)
omap_uwire_data_transfer(LCD_UWIRE_CS, LCD_GSSET, 9, 0,NULL,1);
omap_uwire_data_transfer(LCD_UWIRE_CS, (INIT_GSSET | 0x100), 9, 0,NULL,1);
/* DISCTL */
omap_uwire_data_transfer(LCD_UWIRE_CS, LCD_DISCTL, 9, 0,NULL,1);
/* DISCTL */
omap_uwire_data_transfer(LCD_UWIRE_CS, LCD_DISCTL, 9, 0,NULL,1);
for (i = 0; i < (sizeof(INIT_DISCTL)/sizeof(unsigned short)); i++)
omap_uwire_data_transfer(LCD_UWIRE_CS, (INIT_DISCTL[i] | 0x100), 9, 0,NULL,1);
......@@ -209,7 +209,7 @@ static int p2_panel_enable(struct lcd_panel *panel)
omap_uwire_data_transfer(LCD_UWIRE_CS, LCD_GCP16, 9, 0,NULL,1);
for (i = 0; i < (sizeof(INIT_GCP16)/sizeof(unsigned short)); i++)
omap_uwire_data_transfer(LCD_UWIRE_CS, (INIT_GCP16[i] | 0x100), 9, 0,NULL,1);
/* MD_CSET */
omap_uwire_data_transfer(LCD_UWIRE_CS, LCD_MD_CSET, 9, 0,NULL,1);
for (i = 0; i < (sizeof(INIT_MD_CSET)/sizeof(unsigned short)); i++)
......@@ -251,16 +251,16 @@ static int p2_panel_enable(struct lcd_panel *panel)
/* 3500KEND */
omap_uwire_data_transfer(LCD_UWIRE_CS, LCD_3500KEND, 9, 0,NULL,1);
omap_uwire_data_transfer(LCD_UWIRE_CS, LCD_SLPOUT, 9, 0,NULL,1);
omap_uwire_data_transfer(LCD_UWIRE_CS, LCD_VOLCTL, 9, 0,NULL,1);
omap_uwire_data_transfer(LCD_UWIRE_CS, (INIT_VOLCTL_Ton | 0x100), 9, 0,NULL,1);
omap_uwire_data_transfer(LCD_UWIRE_CS, LCD_VOLCTL, 9, 0,NULL,1);
omap_uwire_data_transfer(LCD_UWIRE_CS, (INIT_VOLCTL | 0x100), 9, 0,NULL,1);
omap_uwire_data_transfer(LCD_UWIRE_CS, LCD_DISON, 9, 0,NULL,1);
/* enable backlight */
......@@ -271,41 +271,37 @@ static int p2_panel_enable(struct lcd_panel *panel)
return 0;
}
static void p2_panel_disable(struct lcd_panel *panel)
static void p2_panel_disable(void)
{
DBGENTER(1);
DBGLEAVE(1);
}
static unsigned long p2_panel_get_caps(struct lcd_panel *panel)
static unsigned long p2_panel_get_caps(void)
{
return 0;
}
static struct lcdc_video_mode mode176x220 = {
.x_res = 176,
.y_res = 220,
.pixel_clock = 12500,
.bpp = 16,
.hsw = 5,
.hfp = 1,
.hbp = 1,
.vsw = 2,
.vfp = 12,
.vbp = 1,
.pcd = 4,
.flags = OMAP_LCDC_INV_PIX_CLOCK,
};
struct lcd_panel p2_panel = {
.name = "p2",
.config = LCD_PANEL_TFT,
.video_mode = &mode176x220,
.init = p2_panel_init,
.cleanup = p2_panel_cleanup,
.enable = p2_panel_enable,
.disable = p2_panel_disable,
.get_caps= p2_panel_get_caps,
.name = "p2",
.config = OMAP_LCDC_PANEL_TFT | OMAP_LCDC_INV_PIX_CLOCK,
.bpp = 16,
.data_lines = 16,
.x_res = 176,
.y_res = 220,
.pixel_clock = 12500,
.hsw = 5,
.hfp = 1,
.hbp = 1,
.vsw = 2,
.vfp = 12,
.vbp = 1,
.init = p2_panel_init,
.cleanup = p2_panel_cleanup,
.enable = p2_panel_enable,
.disable = p2_panel_disable,
.get_caps = p2_panel_get_caps,
};
/*
* File: drivers/video/omap/lcd_palmte.c
*
* LCD panel support for the Palm Tungsten E
*
* Original version : Romain Goyet
* Current version : Laurent Gonzalez
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
* Free Software Foundation; either version 2 of the License, or (at your
* option) any later version.
*
* This program is distributed in the hope that it will be useful, but
* WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* General Public License for more details.
*
* You should have received a copy of the GNU General Public License along
* with this program; if not, write to the Free Software Foundation, Inc.,
* 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
#include <linux/module.h>
#include <asm/io.h>
#include <asm/arch/fpga.h>
#include "omapfb.h"
/* #define OMAPFB_DBG 1 */
#include "debug.h"
static int palmte_panel_init(struct lcd_panel *panel)
{
DBGENTER(1);
DBGLEAVE(1);
return 0;
}
static void palmte_panel_cleanup(struct lcd_panel *panel)
{
DBGENTER(1);
DBGLEAVE(1);
}
static int palmte_panel_enable(struct lcd_panel *panel)
{
DBGENTER(1);
DBGLEAVE(1);
return 0;
}
static void palmte_panel_disable(struct lcd_panel *panel)
{
DBGENTER(1);
DBGLEAVE(1);
}
static unsigned long palmte_panel_get_caps(struct lcd_panel *panel)
{
return 0;
}
struct lcd_panel palmte_panel = {
.name = "palmte",
.config = OMAP_LCDC_PANEL_TFT | OMAP_LCDC_INV_VSYNC |
OMAP_LCDC_INV_HSYNC | OMAP_LCDC_HSVS_RISING_EDGE |
OMAP_LCDC_HSVS_OPPOSITE;
.data_lines = 16,
.bpp = 8,
.pixel_clock = 12500,
.x_res = 320,
.y_res = 320,
.hsw = 4,
.hfp = 8,
.hbp = 28,
.vsw = 1,
.vfp = 8,
.vbp = 7,
.pcd = 5,
.init = palmte_panel_init,
.cleanup = palmte_panel_cleanup,
.enable = palmte_panel_enable,
.disable = palmte_panel_disable,
.get_caps = palmte_panel_get_caps,
};
/*
* linux/arch/arm/mach-omap/omap_lcdc.c
* File: drivers/video/omap/omap1/lcdc.c
*
* OMAP internal LCD controller
* OMAP1 internal LCD controller
*
* Copyright (C) 2004 Nokia Corporation
* Author: Imre Deak <imre.deak@nokia.com>
......@@ -19,7 +19,7 @@
* You should have received a copy of the GNU General Public License along
* with this program; if not, write to the Free Software Foundation, Inc.,
* 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
*/
#include <linux/config.h>
#include <linux/module.h>
......@@ -29,14 +29,20 @@
#include <linux/err.h>
#include <linux/mm.h>
#include <linux/fb.h>
#include <linux/dma-mapping.h>
#include <asm/arch/dma.h>
#include <asm/arch/omapfb.h>
#include <asm/mach-types.h>
#include <asm/hardware/clock.h>
#include "omapfb.h"
/* #define OMAPFB_DBG 2 */
#include "debug.h"
#define MODULE_NAME "omapfb-lcdc"
#define OMAP_LCDC_BASE 0xfffec000
#define OMAP_LCDC_SIZE 256
#define OMAP_LCDC_IRQ INT_LCD_CTRL
......@@ -71,6 +77,8 @@
#define MAX_PALETTE_SIZE PAGE_SIZE
#define pr_err(fmt, args...) printk(KERN_ERR MODULE_NAME ": " fmt, ## args)
enum lcdc_load_mode {
OMAP_LCDC_LOAD_PALETTE,
OMAP_LCDC_LOAD_FRAME,
......@@ -78,11 +86,26 @@ enum lcdc_load_mode {
};
static struct omap_lcd_controller {
enum fb_update_mode update_mode;
enum omapfb_update_mode update_mode;
unsigned long frame_offset;
int screen_width;
enum omapfb_color_format color_mode;
int bpp;
int palette_org;
int palette_code;
int palette_size;
unsigned int irq_mask;
struct completion last_frame_complete;
struct completion palette_load_complete;
struct clk *lcd_ck;
struct omapfb_device *fbdev;
dma_addr_t vram_phys;
void *vram_virt;
unsigned long vram_size;
} omap_lcdc;
static void inline enable_irqs(int mask)
......@@ -132,7 +155,6 @@ static void disable_controller_async(void)
u32 l;
u32 mask;
init_completion(&omap_lcdc.last_frame_complete);
l = omap_readl(OMAP_LCDC_CONTROL);
mask = OMAP_LCDC_CTRL_LCD_EN | OMAP_LCDC_IRQ_MASK;
/* Preserve the DONE mask, since we still want to get the
......@@ -143,57 +165,39 @@ static void disable_controller_async(void)
omap_writel(l, OMAP_LCDC_CONTROL);
}
static void last_frame_timeout(unsigned long data)
{
printk(KERN_ERR "omap_lcdc: timeout waiting for DONE flag\n");
complete(&omap_lcdc.last_frame_complete);
}
static void inline wait_for_frame_done(void)
{
struct timer_list timeout;
init_timer(&timeout);
timeout.function = last_frame_timeout;
timeout.expires = jiffies + msecs_to_jiffies(500);
add_timer(&timeout);
wait_for_completion(&omap_lcdc.last_frame_complete);
del_timer_sync(&timeout);
}
static void disable_controller(void)
{
init_completion(&omap_lcdc.last_frame_complete);
disable_controller_async();
wait_for_frame_done();
if (!wait_for_completion_timeout(&omap_lcdc.last_frame_complete,
msecs_to_jiffies(500)))
pr_err("timeout waiting for FRAME DONE\n");
}
static void reset_controller(u32 status)
{
static unsigned long reset_count = 0;
static unsigned long last_jiffies = 0;
disable_controller_async();
reset_count++;
if (reset_count == 1 ||
time_after(jiffies, last_jiffies + HZ)) {
printk(KERN_ERR "omap_lcdc: resetting "
"(status %#010x,reset count %lu)\n",
status, reset_count);
last_jiffies = jiffies;
}
if (reset_count < 100) {
enable_controller();
} else {
reset_count = 0;
printk(KERN_ERR "omap_lcdc: too many reset attempts, "
"giving up.\n");
}
static unsigned long reset_count = 0;
static unsigned long last_jiffies = 0;
disable_controller_async();
reset_count++;
if (reset_count == 1 || time_after(jiffies, last_jiffies + HZ)) {
pr_err("resetting (status %#010x,reset count %lu)\n",
status, reset_count);
last_jiffies = jiffies;
}
if (reset_count < 100) {
enable_controller();
} else {
reset_count = 0;
pr_err("too many reset attempts, giving up.\n");
}
}
/* Configure the LCD DMA according to the current mode specified by parameters
* in fbdev and fbdev->var.
* in omap_lcdc.fbdev and fbdev->var.
*/
static void setup_lcd_dma(struct omapfb_device *fbdev)
static void setup_lcd_dma(void)
{
static const int dma_elem_type[] = {
0,
......@@ -202,46 +206,50 @@ static void setup_lcd_dma(struct omapfb_device *fbdev)
0,
OMAP_DMA_DATA_TYPE_S32,
};
struct fb_var_screeninfo *var = &fbdev->fb_info->var;
struct fb_var_screeninfo *var = &omap_lcdc.fbdev->fb_info->var;
struct lcd_panel *panel = omap_lcdc.fbdev->panel;
unsigned long src;
int esize, xelem, yelem;
src = fbdev->lcddma_handle + fbdev->vis_frame_org + fbdev->view_org;
src = omap_lcdc.vram_phys + PAGE_ALIGN(MAX_PALETTE_SIZE) +
omap_lcdc.frame_offset;
switch (var->rotate) {
case 0:
esize = fbdev->mirror || (src & 3) ? 2 : 4;
xelem = var->xres * var->bits_per_pixel / 8 / esize;
yelem = var->yres;
esize = omap_lcdc.fbdev->mirror || (src & 3) ? 2 : 4;
xelem = panel->x_res * omap_lcdc.bpp / 8 / esize;
yelem = panel->y_res;
break;
case 90:
case 180:
case 270:
if (cpu_is_omap15xx()) {
BUG();
}
esize = 2;
xelem = var->xres * var->bits_per_pixel / 16;
yelem = var->yres;
xelem = panel->y_res * omap_lcdc.bpp / 16;
yelem = panel->x_res;
break;
default:
BUG();
return;
}
DBGPRINT(1, "setup_dma: src=%#010x esize=%d xelem=%d yelem=%d\n",
DBGPRINT(1, "setup_dma: src %#010lx esize %d xelem %d yelem %d\n",
src, esize, xelem, yelem);
omap_set_lcd_dma_b1(src, xelem, yelem, dma_elem_type[esize]);
omap_set_lcd_dma_single_transfer(0);
if (!cpu_is_omap1510()) {
if (!cpu_is_omap15xx()) {
/* Set virtual xres elem size */
omap_set_lcd_dma_b1_vxres(
fbdev->fb_info->fix.line_length / esize);
omap_lcdc.screen_width * omap_lcdc.bpp / 8 / esize);
/* Setup transformations */
omap_set_lcd_dma_b1_rotation(var->rotate);
omap_set_lcd_dma_b1_mirror(fbdev->mirror);
omap_set_lcd_dma_b1_scale(fbdev->xscale, fbdev->yscale);
omap_set_lcd_dma_b1_mirror(omap_lcdc.fbdev->mirror);
}
omap_setup_lcd_dma();
}
static irqreturn_t lcdc_irq_handler(int irq, void *dev_id,
struct pt_regs *fp)
static irqreturn_t lcdc_irq_handler(int irq, void *dev_id, struct pt_regs *fp)
{
u32 status;
......@@ -288,65 +296,99 @@ static irqreturn_t lcdc_irq_handler(int irq, void *dev_id,
* been transferred. Then it'll be safe to reconfigure both the LCD controller
* as well as the LCD DMA.
*/
static void omap_lcdc_change_mode(struct omapfb_device *fbdev)
static int omap_lcdc_setup_plane(int plane, int channel_out,
unsigned long offset, int screen_width,
int pos_x, int pos_y, int width, int height,
int color_mode)
{
struct fb_var_screeninfo *var = &omap_lcdc.fbdev->fb_info->var;
struct lcd_panel *panel = omap_lcdc.fbdev->panel;
int rot_x, rot_y;
DBGENTER(1);
omap_stop_lcd_dma();
disable_controller();
setup_lcd_dma(fbdev);
enable_controller();
if (var->rotate == 0) {
rot_x = panel->x_res;
rot_y = panel->y_res;
} else {
rot_x = panel->y_res;
rot_y = panel->x_res;
}
if (plane != 0 || channel_out != 0 || pos_x != 0 || pos_y != 0 ||
width != rot_x || height != rot_y) {
DBGPRINT(1, "invalid plane params plane %d pos_x %d "
"pos_y %d w %d h %d\n", plane, pos_x, pos_y,
width, height);
return -EINVAL;
}
omap_lcdc.frame_offset = offset;
omap_lcdc.screen_width = screen_width;
omap_lcdc.color_mode = color_mode;
switch (color_mode) {
case OMAPFB_COLOR_CLUT_8BPP:
omap_lcdc.bpp = 8;
omap_lcdc.palette_code = 0x3000;
omap_lcdc.palette_size = 512;
break;
case OMAPFB_COLOR_RGB565:
omap_lcdc.bpp = 16;
omap_lcdc.palette_code = 0x4000;
omap_lcdc.palette_size = 32;
break;
default:
/* FIXME: other BPPs.
* bpp1: code 0, size 256
* bpp2: code 0x1000 size 256
* bpp4: code 0x2000 size 256
* bpp12: code 0x4000 size 32
*/
DBGPRINT(1, "invalid color mode %d\n", color_mode);
return -1;
}
omap_lcdc.palette_org = PAGE_ALIGN(MAX_PALETTE_SIZE) -
omap_lcdc.palette_size;
if (omap_lcdc.update_mode == OMAPFB_AUTO_UPDATE) {
disable_controller();
omap_stop_lcd_dma();
setup_lcd_dma();
enable_controller();
}
DBGLEAVE(1);
return 0;
}
static int omap_lcdc_enable_plane(int plane, int enable)
{
if (plane != 0 || enable != 1)
return -EINVAL;
return 0;
}
/* Configure the LCD DMA for a palette load operation and do the palette
* downloading synchronously. We don't use the frame+palette load mode of
* the controller, since the palette can always be downloaded seperately.
*/
static void load_palette(struct omapfb_device *fbdev)
static void load_palette(void)
{
u8 *palette;
u32 code;
unsigned long size;
unsigned long palette_org;
u16 *palette;
DBGENTER(1);
switch (fbdev->panel->video_mode->bpp) {
case 1:
/* 0 is already set */
code = 0;
size = 256;
break;
case 2:
code = 0x1000;
size = 256;
break;
case 4:
code = 0x2000;
size = 256;
break;
case 8:
code = 0x3000;
size = 256;
break;
case 12:
case 16:
code = 0x4000;
size = 32;
break;
default:
BUG();
return;
}
palette_org = MAX_PALETTE_SIZE - size;
palette = fbdev->lcddma_base + palette_org;
memset(palette, 0, size);
*(u32 *)palette = code;
palette = (u16 *)((u8 *)omap_lcdc.vram_virt + omap_lcdc.palette_org);
*(u16 *)palette &= 0x0fff;
*(u16 *)palette |= omap_lcdc.palette_code;
omap_set_lcd_dma_b1(omap_lcdc.vram_phys + omap_lcdc.palette_org,
omap_lcdc.palette_size / 4 + 1, 1, OMAP_DMA_DATA_TYPE_S32);
omap_set_lcd_dma_b1(fbdev->lcddma_handle + palette_org,
size / 4 + 1, 1, OMAP_DMA_DATA_TYPE_S32);
omap_set_lcd_dma_single_transfer(1);
omap_setup_lcd_dma();
......@@ -354,7 +396,9 @@ static void load_palette(struct omapfb_device *fbdev)
enable_irqs(OMAP_LCDC_IRQ_LOADED_PALETTE);
set_load_mode(OMAP_LCDC_LOAD_PALETTE);
enable_controller();
wait_for_completion(&omap_lcdc.palette_load_complete);
if (!wait_for_completion_timeout(&omap_lcdc.palette_load_complete,
msecs_to_jiffies(500)))
pr_err("timeout waiting for FRAME DONE\n");
/* The controller gets disabled in the irq handler */
disable_irqs(OMAP_LCDC_IRQ_LOADED_PALETTE);
omap_stop_lcd_dma();
......@@ -362,74 +406,88 @@ static void load_palette(struct omapfb_device *fbdev)
DBGLEAVE(1);
}
static void inline setup_regs(struct omapfb_device *fbdev)
static void calc_ck_div(int is_tft, int pck, int *pck_div)
{
unsigned long lck;
pck = max(1, pck);
lck = clk_get_rate(omap_lcdc.lcd_ck);
*pck_div = lck / pck;
if (is_tft)
*pck_div = max(2, *pck_div);
else
*pck_div = max(3, *pck_div);
if (*pck_div > 255) {
/* FIXME: try to adjust logic clock divider as well */
*pck_div = 255;
printk(KERN_WARNING MODULE_NAME ": pixclock %d kHz too low.\n",
pck / 1000);
}
}
static void inline setup_regs(void)
{
u32 l;
struct lcdc_video_mode *mode = fbdev->panel->video_mode;
int tft = fbdev->panel->config & LCD_PANEL_TFT;
int signal_levels = fbdev->panel->signals;
struct lcd_panel *panel = omap_lcdc.fbdev->panel;
int is_tft = panel->config & OMAP_LCDC_PANEL_TFT;
unsigned long lck;
int pcd;
l = omap_readl(OMAP_LCDC_CONTROL);
l &= ~OMAP_LCDC_CTRL_LCD_TFT;
l |= tft ? OMAP_LCDC_CTRL_LCD_TFT : 0;
l |= is_tft ? OMAP_LCDC_CTRL_LCD_TFT : 0;
#ifdef CONFIG_MACH_OMAP_PALMTE
/* FIXME:if (machine_is_omap_palmte()) { */
/* PalmTE uses alternate TFT setting in 8BPP mode */
l |= (tft && fbdev->panel->video_mode->bpp == 8) ? 0x810000 : 0;
/* } */
#endif
omap_writel(l, OMAP_LCDC_CONTROL);
l = omap_readl(OMAP_LCDC_TIMING2);
l &= ~(((1 << 6) - 1) << 20);
l |= signal_levels << 20;
l |= (panel->config & OMAP_LCDC_SIGNAL_MASK) << 20;
omap_writel(l, OMAP_LCDC_TIMING2);
l = mode->x_res - 1;
l |= (mode->hsw - 1) << 10;
l |= (mode->hfp - 1) << 16;
l |= (mode->hbp - 1) << 24;
l = panel->x_res - 1;
l |= (panel->hsw - 1) << 10;
l |= (panel->hfp - 1) << 16;
l |= (panel->hbp - 1) << 24;
omap_writel(l, OMAP_LCDC_TIMING0);
l = mode->y_res - 1;
l |= (mode->vsw - 1) << 10;
l |= mode->vfp << 16;
l |= mode->vbp << 24;
l = panel->y_res - 1;
l |= (panel->vsw - 1) << 10;
l |= panel->vfp << 16;
l |= panel->vbp << 24;
omap_writel(l, OMAP_LCDC_TIMING1);
l = omap_readl(OMAP_LCDC_TIMING2);
l &= ~0xff;
if (!cpu_is_omap730())
l |= mode->pcd;
lck = clk_get_rate(omap_lcdc.lcd_ck);
if (machine_is_omap_perseus2()) {
u32 clock1, clock2;
int pcd;
clock1 = mode->pixel_clock * 1000;
clock2 = clk_get_rate(omap_lcdc.lcd_ck);
if (clock1 != 0) {
pcd = clock2 / clock1;
if (pcd > 255)
pcd = 0;
} else {
pcd = 0;
}
if (pcd == 0)
l |= mode->pcd;
else
l |= pcd;
if (!panel->pcd)
calc_ck_div(is_tft, panel->pixel_clock * 1000, &pcd);
else {
printk(KERN_WARNING
MODULE_NAME ": Pixel clock divider value is obsolete.\n"
MODULE_NAME ": Try to set pixel_clock to %lu and pcd to 0 "
"in drivers/video/omap/lcd_%s.c and submit a patch.\n",
lck / panel->pcd / 1000, panel->name);
// printk("%% ck1: %d ck2: %d pcd: %d %%\n",clock1, clock2, pcd);
pcd = panel->pcd;
}
l |= mode->acb << 8;
if (mode->flags & OMAP_LCDC_INV_PIX_CLOCK)
l |= 1 << 22;
l |= pcd & 0xff;
l |= panel->acb << 8;
omap_writel(l, OMAP_LCDC_TIMING2);
/* update panel info with the exact clock */
panel->pixel_clock = lck / pcd / 1000;
}
/* Configure the LCD controller, download the color palette and start a looped
* DMA transfer of the frame image data. */
static int omap_lcdc_set_update_mode(struct omapfb_device *fbdev,
enum fb_update_mode mode)
static int omap_lcdc_set_update_mode(enum omapfb_update_mode mode)
{
int r = 0;
......@@ -437,12 +495,12 @@ static int omap_lcdc_set_update_mode(struct omapfb_device *fbdev,
if (mode != omap_lcdc.update_mode) {
switch (mode) {
case FB_AUTO_UPDATE:
setup_regs(fbdev);
load_palette(fbdev);
case OMAPFB_AUTO_UPDATE:
setup_regs();
load_palette();
/* Setup and start LCD DMA */
setup_lcd_dma(fbdev);
setup_lcd_dma();
set_load_mode(OMAP_LCDC_LOAD_FRAME);
enable_irqs(OMAP_LCDC_IRQ_DONE);
......@@ -450,7 +508,7 @@ static int omap_lcdc_set_update_mode(struct omapfb_device *fbdev,
enable_controller();
omap_lcdc.update_mode = mode;
break;
case FB_UPDATE_DISABLED:
case OMAPFB_UPDATE_DISABLED:
disable_controller();
omap_stop_lcd_dma();
omap_lcdc.update_mode = mode;
......@@ -458,48 +516,63 @@ static int omap_lcdc_set_update_mode(struct omapfb_device *fbdev,
default:
r = -EINVAL;
}
}
}
DBGLEAVE(1);
return r;
}
static enum fb_update_mode omap_lcdc_get_update_mode(struct omapfb_device *fbdev)
static enum omapfb_update_mode omap_lcdc_get_update_mode(void)
{
return omap_lcdc.update_mode;
}
static void omap_lcdc_suspend(struct omapfb_device *fbdev)
static void omap_lcdc_suspend(void)
{
if (omap_lcdc.update_mode == FB_AUTO_UPDATE) {
if (omap_lcdc.update_mode == OMAPFB_AUTO_UPDATE) {
disable_controller();
omap_stop_lcd_dma();
}
}
static void omap_lcdc_resume(struct omapfb_device *fbdev)
static void omap_lcdc_resume(void)
{
if (omap_lcdc.update_mode == FB_AUTO_UPDATE) {
setup_regs(fbdev);
load_palette(fbdev);
setup_lcd_dma(fbdev);
if (omap_lcdc.update_mode == OMAPFB_AUTO_UPDATE) {
setup_regs();
load_palette();
setup_lcd_dma();
set_load_mode(OMAP_LCDC_LOAD_FRAME);
enable_irqs(OMAP_LCDC_IRQ_DONE);
enable_controller();
}
}
static int omap_lcdc_init(struct omapfb_device *fbdev)
static void omap_lcdc_get_vram_layout(unsigned long *size, void **virt,
dma_addr_t *phys)
{
*size = omap_lcdc.vram_size - PAGE_ALIGN(MAX_PALETTE_SIZE);
*virt = (u8 *)omap_lcdc.vram_virt + PAGE_ALIGN(MAX_PALETTE_SIZE);
*phys = omap_lcdc.vram_phys + PAGE_ALIGN(MAX_PALETTE_SIZE);
}
static int omap_lcdc_init(struct omapfb_device *fbdev, int ext_mode,
int req_vram_size)
{
int r;
u32 l;
int rate;
struct clk *tc_ck;
struct lcd_panel *panel = fbdev->panel;
int frame_size;
DBGENTER(1);
omap_lcdc.irq_mask = 0;
omap_lcdc.fbdev = fbdev;
pr_info(MODULE_NAME ": init\n");
l = 0;
omap_writel(l, OMAP_LCDC_CONTROL);
......@@ -508,14 +581,14 @@ static int omap_lcdc_init(struct omapfb_device *fbdev)
*/
omap_lcdc.lcd_ck = clk_get(NULL, "lcd_ck");
if (IS_ERR(omap_lcdc.lcd_ck)) {
printk(KERN_ERR "omap_lcdc: unable to access LCD clock\n");
pr_err("unable to access LCD clock\n");
r = PTR_ERR(omap_lcdc.lcd_ck);
goto fail0;
}
tc_ck = clk_get(NULL, "tc_ck");
if (IS_ERR(tc_ck)) {
printk(KERN_ERR "omap_lcdc: unable to access TC clock\n");
pr_err("unable to access TC clock\n");
r = PTR_ERR(tc_ck);
goto fail1;
}
......@@ -527,28 +600,43 @@ static int omap_lcdc_init(struct omapfb_device *fbdev)
rate /= 3;
r = clk_set_rate(omap_lcdc.lcd_ck, rate);
if (r) {
printk(KERN_ERR "omap_lcdc: failed to adjust LCD rate\n");
pr_err("failed to adjust LCD rate\n");
goto fail1;
}
clk_use(omap_lcdc.lcd_ck);
r = request_irq(OMAP_LCDC_IRQ, lcdc_irq_handler, 0, "omap-lcdc", fbdev);
r = request_irq(OMAP_LCDC_IRQ, lcdc_irq_handler, 0, "omap-lcdc",
omap_lcdc.fbdev);
if (r) {
printk(KERN_ERR "omap_lcdc: unable to get IRQ\n");
pr_err("unable to get IRQ\n");
goto fail2;
}
r = omap_request_lcd_dma(NULL, NULL);
if (r) {
printk(KERN_ERR "omap_lcdc: unable to get LCD DMA\n");
pr_err("unable to get LCD DMA\n");
goto fail3;
}
printk(KERN_INFO "OMAP LCD controller initialized.\n");
frame_size = panel->x_res * panel->bpp * panel->y_res / 8;
if (req_vram_size > frame_size)
frame_size = req_vram_size;
omap_lcdc.vram_size = PAGE_ALIGN(MAX_PALETTE_SIZE) + frame_size;
omap_lcdc.vram_virt = dma_alloc_writecombine(fbdev->dev,
omap_lcdc.vram_size, &omap_lcdc.vram_phys, GFP_KERNEL);
if (omap_lcdc.vram_virt == NULL) {
pr_err("unable to allocate fb DMA memory\n");
r = -ENOMEM;
goto fail4;
}
DBGLEAVE(1);
return 0;
fail4:
omap_free_lcd_dma();
fail3:
free_irq(OMAP_LCDC_IRQ, fbdev);
free_irq(OMAP_LCDC_IRQ, omap_lcdc.fbdev);
fail2:
clk_unuse(omap_lcdc.lcd_ck);
fail1:
......@@ -558,41 +646,62 @@ fail0:
return r;
}
static void omap_lcdc_cleanup(struct omapfb_device *fbdev)
static void omap_lcdc_cleanup(void)
{
dma_free_writecombine(omap_lcdc.fbdev->dev, omap_lcdc.vram_size,
omap_lcdc.vram_virt, omap_lcdc.vram_phys);
omap_free_lcd_dma();
free_irq(OMAP_LCDC_IRQ, fbdev);
free_irq(OMAP_LCDC_IRQ, omap_lcdc.fbdev);
clk_unuse(omap_lcdc.lcd_ck);
clk_put(omap_lcdc.lcd_ck);
}
static void omap_lcdc_get_mem_layout(struct omapfb_device *fbdev,
unsigned long *size, unsigned long *fb_org)
static unsigned long omap_lcdc_get_caps(void)
{
struct lcdc_video_mode *mode = fbdev->panel->video_mode;
*size = MAX_PALETTE_SIZE;
*fb_org = *size;
*size += mode->x_res * mode->bpp / 8 * mode->y_res;
return 0;
}
static unsigned long omap_lcdc_get_caps(struct omapfb_device *fbdev)
static int omap_lcdc_setcolreg(u_int regno, u16 red, u16 green, u16 blue,
u16 transp, int update_hw_pal)
{
u16 *palette;
if (omap_lcdc.color_mode != OMAPFB_COLOR_CLUT_8BPP || regno > 255)
return -EINVAL;
palette = (u16 *)((u8*)omap_lcdc.vram_virt +
PAGE_ALIGN(MAX_PALETTE_SIZE) - omap_lcdc.palette_size);
palette[regno] &= ~0x0fff;
palette[regno] |= ((red >> 12) << 8) | ((green >> 12) << 4 ) |
(blue >> 12);
if (update_hw_pal) {
disable_controller();
omap_stop_lcd_dma();
load_palette();
setup_lcd_dma();
set_load_mode(OMAP_LCDC_LOAD_FRAME);
enable_controller();
}
return 0;
}
struct lcd_ctrl omapfb_lcdc_ctrl = {
struct lcd_ctrl omap1_int_ctrl = {
.name = "internal",
.init = omap_lcdc_init,
.cleanup = omap_lcdc_cleanup,
.get_mem_layout = omap_lcdc_get_mem_layout,
.get_vram_layout = omap_lcdc_get_vram_layout,
.get_caps = omap_lcdc_get_caps,
.set_update_mode = omap_lcdc_set_update_mode,
.get_update_mode = omap_lcdc_get_update_mode,
.update_window = NULL,
.suspend = omap_lcdc_suspend,
.suspend = omap_lcdc_suspend,
.resume = omap_lcdc_resume,
.change_mode = omap_lcdc_change_mode,
.setup_plane = omap_lcdc_setup_plane,
.enable_plane = omap_lcdc_enable_plane,
.setcolreg = omap_lcdc_setcolreg,
};
MODULE_DESCRIPTION("TI OMAP LCDC controller");
......
/*
* File: drivers/video/omap_new/omapfb.c
*
* Framebuffer driver for TI OMAP boards
*
* Copyright (C) 2004 Nokia Corporation
* Author: Imre Deak <imre.deak@nokia.com>
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
* Free Software Foundation; either version 2 of the License, or (at your
* option) any later version.
*
* This program is distributed in the hope that it will be useful, but
* WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* General Public License for more details.
*
* You should have received a copy of the GNU General Public License along
* with this program; if not, write to the Free Software Foundation, Inc.,
* 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
#ifndef __OMAPFB_H
#define __OMAPFB_H
/* IOCTL commands. */
#define OMAP_IOW(num, dtype) _IOW('O', num, dtype)
#define OMAP_IOR(num, dtype) _IOR('O', num, dtype)
#define OMAP_IOWR(num, dtype) _IOWR('O', num, dtype)
#define OMAP_IO(num) _IO('O', num)
#define OMAPFB_FILLRECT OMAP_IOW(0, struct fb_fillrect)
#define OMAPFB_COPYAREA OMAP_IOW(1, struct fb_copyarea)
#define OMAPFB_IMAGEBLIT OMAP_IOW(2, struct fb_image)
#define OMAPFB_TRANSPARENT_BLIT OMAP_IOW(30, struct fb_image)
#define OMAPFB_MIRROR OMAP_IOW(31, int)
#define OMAPFB_SCALE OMAP_IOW(32, struct fb_scale)
#define OMAPFB_SELECT_VIS_FRAME OMAP_IOW(33, int)
#define OMAPFB_SELECT_SRC_FRAME OMAP_IOW(34, int)
#define OMAPFB_SELECT_DST_FRAME OMAP_IOW(35, int)
#define OMAPFB_GET_FRAME_OFFSET OMAP_IOWR(36, struct fb_frame_offset)
#define OMAPFB_SYNC_GFX OMAP_IO(37)
#define OMAPFB_VSYNC OMAP_IO(38)
#define OMAPFB_LATE_ACTIVATE OMAP_IO(39)
#define OMAPFB_SET_UPDATE_MODE OMAP_IOW(40, enum fb_update_mode)
#define OMAPFB_UPDATE_WINDOW OMAP_IOW(41, struct fb_update_window)
#define OMAPFB_GET_CAPS OMAP_IOR(42, unsigned long)
#define OMAPFB_GET_UPDATE_MODE OMAP_IOW(43, enum fb_update_mode)
#define OMAPFB_GET_GFX_STATUS OMAP_IOR(44, unsigned long)
#define FBCAPS_GENERIC_MASK 0x00000fff
#define FBCAPS_LCDC_MASK 0x00fff000
#define FBCAPS_PANEL_MASK 0xff000000
#define FBCAPS_MANUAL_UPDATE 0x00001000
#define FBCAPS_SET_BACKLIGHT 0x01000000
enum omapfb_gfx_status {
OMAPFB_GFX_STATUS_OK = 0,
OMAPFB_GFX_STATUS_CHANGED
};
#define OMAPFB_UPDATE_FAILED 0x01
#define OMAPFB_FILLRECT_FAILED 0x02
#define OMAPFB_COPYAREA_FAILED 0x04
#define OMAPFB_IMGBLIT_FAILED 0x08
struct fb_copyarea_ext {
__u32 dx;
__u32 dy;
__u32 width;
__u32 height;
__u32 sx;
__u32 sy;
__u32 trans_color;
__u32 rev_dir;
};
struct fb_scale {
unsigned int xscale, yscale;
};
struct fb_frame_offset {
unsigned int idx;
unsigned long offset;
};
struct fb_update_window {
unsigned int x, y;
unsigned int width, height;
};
enum fb_update_mode {
FB_UPDATE_DISABLED = 0,
FB_AUTO_UPDATE,
FB_MANUAL_UPDATE
};
#ifdef __KERNEL__
#include <linux/completion.h>
#include <linux/interrupt.h>
#include <linux/fb.h>
#define OMAPFB_DEVICE "omapfb"
#define OMAPFB_DRIVER "omapfb"
#define PRNERR(fmt, args...) printk(KERN_ERR OMAPFB_DRIVER ": " fmt, ## args)
#define GFX_FIFO_SIZE 2
#define LCD_PANEL_TFT 0x01
#define OMAP_LCDC_INV_VSYNC 0x01
#define OMAP_LCDC_INV_HSYNC 0x02
#define OMAP_LCDC_INV_PIX_CLOCK 0x04
#define OMAP_LCDC_INV_OUTPUT_EN 0x08
#define OMAP_LCDC_HSVS_RISING_EDGE 0x10
#define OMAP_LCDC_HSVS_OPPOSITE 0x20
struct lcdc_video_mode {
u16 x_res, y_res;
u32 pixel_clock; /* In kHz */
int bpp;
u8 hsw; /* Horizontal synchronization pulse width */
u8 hfp; /* Horizontal front porch */
u8 hbp; /* Horizontal back porch */
u8 vsw; /* Vertical synchronization pulse width */
u8 vfp; /* Vertical front porch */
u8 vbp; /* Vertical back porch */
u8 acb; /* ac-bias pin frequency */
u8 pcd; /* Pixel clock divider (this will change) */
u8 flags;
};
struct lcd_panel {
const char *name;
int config;
int signals;
struct lcdc_video_mode *video_mode;
int (*init) (struct lcd_panel *panel);
void (*cleanup) (struct lcd_panel *panel);
int (*enable) (struct lcd_panel *panel);
void (*disable) (struct lcd_panel *panel);
unsigned long (*get_caps)(struct lcd_panel *panel);
int (*set_bklight_level)(struct lcd_panel *panel,
unsigned int level);
unsigned int (*get_bklight_level)(struct lcd_panel *panel);
unsigned int (*get_bklight_max) (struct lcd_panel *panel);
};
struct omapfb_device;
struct lcd_ctrl {
const char *name;
void *data;
int (*init) (struct omapfb_device *fbdev);
void (*cleanup) (struct omapfb_device *fbdev);
void (*get_mem_layout) (struct omapfb_device *fbdev,
unsigned long *size,
unsigned long *fb_org);
unsigned long (*get_caps) (struct omapfb_device *fbdev);
int (*set_update_mode)(struct omapfb_device *fbdev,
enum fb_update_mode mode);
enum fb_update_mode (*get_update_mode)(struct omapfb_device *fbdev);
int (*update_window) (struct omapfb_device *fbdev,
struct fb_update_window *win);
void (*suspend) (struct omapfb_device *fbdev);
void (*resume) (struct omapfb_device *fbdev);
void (*change_mode) (struct omapfb_device *fbdev);
};
enum omapfb_state {
OMAPFB_DISABLED = 0,
OMAPFB_SUSPENDED= 99,
OMAPFB_ACTIVE = 100
};
struct gfx_lchannel {
int lch_num;
struct gfx_lchannel *next, *prev;
};
struct gfx_dma {
spinlock_t spinlock;
struct completion sync_complete; /* Signalled when the
fifo gets empty */
volatile int done; /* Indicates the
end of a DMA chain
transfer */
struct gfx_lchannel fifo[GFX_FIFO_SIZE];
struct gfx_lchannel *f_head, *f_tail; /* Process and insert
points on the
fifo */
struct gfx_lchannel *f_chain_end; /* Points to the new
chain end */
struct semaphore f_free; /* # of free lch-s */
int f_run; /* # of active lch-s */
int f_wait; /* # of lch-s
waiting */
struct tasklet_struct dequeue_tasklet; /* Processes new DMA
chain transfers on
the fifo */
};
#define OMAPFB_RQUEUE_SIZE 20
struct omapfb_fillrect_params
{
struct fb_info *fbi;
struct fb_fillrect rect;
};
struct omapfb_copyarea_params
{
struct fb_info *fbi;
struct fb_copyarea_ext area;
};
struct omapfb_update_window_params
{
struct fb_info *fbi;
struct fb_update_window win;
};
struct omapfb_imageblit_params
{
struct fb_info *fbi;
struct fb_image image;
int flags;
};
union req_params
{
/* All possible requests are to be listed here */
struct omapfb_fillrect_params fillrect;
struct omapfb_copyarea_params copyarea;
struct omapfb_update_window_params update_window;
struct omapfb_imageblit_params imageblit;
};
struct omapfb_request
{
struct list_head entry;
int (*function)(void *par);
union req_params par;
};
struct omapfb_rqueue
{
spinlock_t lock;
struct list_head free_list;
struct list_head pending_list;
struct completion rqueue_empty;
struct semaphore free_sema;
struct omapfb_request req_pool[OMAPFB_RQUEUE_SIZE];
struct work_struct work;
unsigned long status;
};
struct omapfb_device {
int state;
int ext_lcdc; /* Using external
LCD controller */
void *lcddma_base; /* MPU virtual
address */
dma_addr_t lcddma_handle; /* Bus physical
address */
unsigned long lcddma_mem_size;
unsigned long palette_org; /* Palette offset into
lcddma_base/handle */
unsigned long frame0_org, frame1_org; /* Frame offsets for
back and front
frame buffers into
lcddma_base/handle */
unsigned long vis_frame_org; /* Offset of visible
frame buffer.
= frame0/1_org */
unsigned long src_frame_org; /* Offset of source
frame for drawing
operations.
= frame0/1_org */
unsigned long dst_frame_org; /* Offset of dest
frame for drawing
operations.
= frame0/1_org */
unsigned long view_org; /* View offset into
lcddma_base/handle+
vis_frame_org.
Used for panning */
unsigned long palette_size;
int xscale, yscale, mirror; /* transformations.
rotate is stored in
fb_info->var */
u32 pseudo_palette[17];
struct gfx_dma gfx; /* Accelerator */
struct omapfb_rqueue rqueue;
struct lcd_panel *panel; /* LCD panel */
struct lcd_ctrl *ctrl; /* LCD controller */
struct fb_info *fb_info; /* Linux fbdev
framework data */
struct device *dev;
};
extern struct lcd_panel h3_panel;
extern struct lcd_panel h2_panel;
extern struct lcd_panel p2_panel;
extern struct lcd_panel osk_panel;
extern struct lcd_panel innovator1610_panel;
extern struct lcd_panel innovator1510_panel;
extern struct lcd_ctrl omapfb_lcdc_ctrl;
#endif /* __KERNEL__ */
#endif /* __OMAPFB_H */
......@@ -43,28 +43,21 @@
#include <asm/arch/irqs.h>
#include <asm/arch/mux.h>
#include <asm/arch/board.h>
#include <asm/arch/omapfb.h>
#include "omapfb.h"
// #define OMAPFB_DBG_FIFO 1
// #define OMAPFB_DBG 1
/* #define OMAPFB_DBG 1 */
#include "debug.h"
#define COPY_MODE_REV_DIR 0x01
#define COPY_MODE_TRANSPARENT 0x02
#define COPY_MODE_IMAGE 0x04
#define OMAPFB_DRIVER "omapfb"
#define MODULE_NAME "omapfb"
#ifdef OMAPFB_DBG_FIFO
struct gfx_stat {
unsigned long f_run[GFX_FIFO_SIZE];
} stat;
#endif
#define pr_err(fmt, args...) printk(KERN_ERR MODULE_NAME ": " fmt, ## args)
static unsigned int def_accel;
static unsigned long def_vram;
static long def_vxres;
static long def_vyres;
static unsigned long def_vxres;
static unsigned long def_vyres;
static unsigned int def_rotate;
static unsigned int def_mirror;
......@@ -78,8 +71,8 @@ static struct caps_table_struct {
unsigned long flag;
const char *name;
} omapfb_caps_table[] = {
{ FBCAPS_MANUAL_UPDATE, "manual update" },
{ FBCAPS_SET_BACKLIGHT, "backlight setting" },
{ OMAPFB_CAPS_MANUAL_UPDATE, "manual update" },
{ OMAPFB_CAPS_SET_BACKLIGHT, "backlight setting" },
};
/*
......@@ -87,6 +80,16 @@ static struct caps_table_struct {
* LCD panel
* ---------------------------------------------------------------------------
*/
extern struct lcd_panel h4_panel;
extern struct lcd_panel h3_panel;
extern struct lcd_panel h2_panel;
extern struct lcd_panel p2_panel;
extern struct lcd_panel osk_panel;
extern struct lcd_panel palmte_panel;
extern struct lcd_panel innovator1610_panel;
extern struct lcd_panel innovator1510_panel;
extern struct lcd_panel lph8923_panel;
static struct lcd_panel *panels[] = {
#ifdef CONFIG_MACH_OMAP_H2
&h2_panel,
......@@ -94,367 +97,62 @@ static struct lcd_panel *panels[] = {
#ifdef CONFIG_MACH_OMAP_H3
&h3_panel,
#endif
#ifdef CONFIG_MACH_OMAP_H4
&h4_panel,
#endif
#ifdef CONFIG_MACH_OMAP_PERSEUS2
&p2_panel,
#endif
#ifdef CONFIG_MACH_OMAP_OSK
&osk_panel,
#endif
#ifdef CONFIG_MACH_OMAP_PALMTE
&palmte_panel,
#endif
#ifdef CONFIG_MACH_OMAP_INNOVATOR
#ifdef CONFIG_ARCH_OMAP15XX
&innovator1510_panel,
#endif
#ifdef CONFIG_ARCH_OMAP16XX
&innovator1610_panel,
#endif
#endif
};
extern struct lcd_ctrl omap1_int_ctrl;
extern struct lcd_ctrl omap2_int_ctrl;
extern struct lcd_ctrl hwa742_ctrl;
extern struct lcd_ctrl blizzard_ctrl;
static struct lcd_ctrl *ctrls[] = {
#ifdef CONFIG_FB_OMAP_INTERNAL_LCDC
&omapfb_lcdc_ctrl,
#ifdef CONFIG_FB_OMAP_LCDC_INTERNAL
#ifdef CONFIG_ARCH_OMAP1
&omap1_int_ctrl,
#else
&omap2_int_ctrl,
#endif
#endif
};
static struct omapfb_request *omapfb_rqueue_alloc_req(struct omapfb_rqueue *rq)
{
struct omapfb_request *req;
down(&rq->free_sema);
spin_lock(&rq->lock);
req = list_entry(rq->free_list.next, struct omapfb_request, entry);
list_del(&req->entry);
spin_unlock(&rq->lock);
return req;
}
static void __omapfb_rqueue_free_req(struct omapfb_rqueue *rq,
struct omapfb_request *req)
{
list_add(&req->entry, &rq->free_list);
up(&rq->free_sema);
}
static void omapfb_rqueue_process(void *data)
{
struct omapfb_rqueue *rq = data;
spin_lock(&rq->lock);
while (!list_empty(&rq->pending_list)) {
struct omapfb_request *req;
req = list_entry(rq->pending_list.next,
struct omapfb_request, entry);
list_del(&req->entry);
spin_unlock(&rq->lock);
rq->status |= req->function(&req->par);
spin_lock(&rq->lock);
__omapfb_rqueue_free_req(rq, req);
}
complete(&rq->rqueue_empty);
spin_unlock(&rq->lock);
}
static void omapfb_rqueue_schedule_req(struct omapfb_rqueue *rq,
struct omapfb_request *req)
{
spin_lock(&rq->lock);
list_add_tail(&req->entry, &rq->pending_list);
spin_unlock(&rq->lock);
schedule_work(&rq->work);
}
static void omapfb_rqueue_sync(struct omapfb_rqueue *rq)
{
int wait = 0;
spin_lock(&rq->lock);
if (!list_empty(&rq->pending_list)) {
wait = 1;
init_completion(&rq->rqueue_empty);
}
spin_unlock(&rq->lock);
if (wait)
wait_for_completion(&rq->rqueue_empty);
}
static void omapfb_rqueue_reset(struct omapfb_rqueue *rq, unsigned long *status)
{
omapfb_rqueue_sync(rq);
spin_lock(&rq->lock);
*status = rq->status;
rq->status = 0;
spin_unlock(&rq->lock);
}
static void omapfb_rqueue_init(struct omapfb_rqueue *rq)
{
int i;
spin_lock_init(&rq->lock);
sema_init(&rq->free_sema, OMAPFB_RQUEUE_SIZE);
init_completion(&rq->rqueue_empty);
INIT_WORK(&rq->work, omapfb_rqueue_process, rq);
INIT_LIST_HEAD(&rq->free_list);
INIT_LIST_HEAD(&rq->pending_list);
for (i = 0; i < OMAPFB_RQUEUE_SIZE; i++)
list_add(&rq->req_pool[i].entry, &rq->free_list);
}
static void omapfb_rqueue_cleanup(struct omapfb_rqueue *rq)
{
}
/*
* ---------------------------------------------------------------------------
* gfx DMA
* ---------------------------------------------------------------------------
*/
/* Get a new logical channel from the gfx fifo. */
static void inline gfxdma_get_lch(struct gfx_dma *gfx, int *lch)
{
DBGENTER(3);
down(&gfx->f_free);
spin_lock_bh(&gfx->spinlock);
*lch = gfx->f_tail->lch_num;
gfx->f_tail = gfx->f_tail->next;
spin_unlock_bh(&gfx->spinlock);
DBGLEAVE(3);
}
/* Set basic transfer params for the logical channel */
static inline void gfxdma_set_lch_params(int lch, int data_type,
int enumber, int fnumber,
unsigned long src_start, int src_amode,
unsigned long dst_start, int dst_amode)
{
omap_set_dma_transfer_params(lch, data_type, enumber, fnumber, 0);
omap_set_dma_src_params(lch, OMAP_DMA_PORT_EMIFF,
src_amode, src_start);
omap_set_dma_dest_params(lch, OMAP_DMA_PORT_EMIFF,
dst_amode, dst_start);
}
/* Set element and frame indexes for the logical channel, to support
* image transformations
*/
static inline void gfxdma_set_lch_index(int lch, int src_eidx, int src_fidx,
int dst_eidx, int dst_fidx)
{
omap_set_dma_src_index(lch, src_eidx, src_fidx);
omap_set_dma_dest_index(lch, dst_eidx, dst_fidx);
}
/* Set color parameter for the logical channel, to support constant fill and
* transparent copy operations
*/
static inline void gfxdma_set_lch_color(int lch, u32 color,
enum omap_dma_color_mode mode)
{
omap_set_dma_color_mode(lch, mode, color);
}
/* Start a new transfer consisting of a single DMA logical channel,
* or a chain (f_run > 1). Can be called in interrupt context.
* gfx->spinlock must be held.
*/
static void inline gfxdma_start_chain(struct gfx_dma *gfx)
{
DBGENTER(3);
gfx->f_run = gfx->f_wait;
#ifdef OMAPFB_DBG_FIFO
stat.f_run[gfx->f_run - 1]++;
#ifdef CONFIG_FB_OMAP_LCDC_EXTERNAL
#ifdef CONFIG_ARCH_OMAP1
extern struct lcd_ctrl_extif sossi_extif;
#else
extern struct lcd_ctrl_extif rfbi_extif;
#endif
#endif
gfx->f_wait = 0;
omap_enable_dma_irq(gfx->f_chain_end->lch_num, OMAP_DMA_BLOCK_IRQ);
/* Let it go */
DBGPRINT(1, "start %d\n", gfx->f_head->lch_num);
omap_start_dma(gfx->f_head->lch_num);
gfx->f_chain_end = gfx->f_chain_end->next;
DBGLEAVE(3);
}
/* Enqueue a logical channel, that has been set up. If no other transfers
* are pending start this new one right away. */
static void inline gfxdma_enqueue(struct gfx_dma *gfx, int lch)
{
DBGENTER(3);
spin_lock_bh(&gfx->spinlock);
DBGPRINT(3, "run:%d wait:%d\n", gfx->f_run, gfx->f_wait);
if (gfx->f_wait) {
DBGPRINT(1, "link %d, %d\n", gfx->f_chain_end->lch_num, lch);
omap_dma_link_lch(gfx->f_chain_end->lch_num, lch);
gfx->f_chain_end = gfx->f_chain_end->next;
}
omap_disable_dma_irq(lch, OMAP_DMA_BLOCK_IRQ);
gfx->f_wait++;
if (!gfx->f_run)
gfxdma_start_chain(gfx);
spin_unlock_bh(&gfx->spinlock);
DBGLEAVE(3);
}
/* Called by DMA core when the last transfer ended, or there is an error
* condition. We dispatch handling of the end of transfer case to a tasklet.
* Called in interrupt context.
*/
static void gfxdma_handler(int lch, u16 ch_status, void *data)
{
struct gfx_dma *gfx = (struct gfx_dma *)data;
int done = 0;
DBGENTER(3);
DBGPRINT(4, "lch=%d status=%#010x\n", lch, ch_status);
if (unlikely(ch_status & (OMAP_DMA_TOUT_IRQ | OMAP_DMA_DROP_IRQ))) {
PRNERR("gfx DMA error. status=%#010x\n", ch_status);
done = 1;
} else if (likely(ch_status & OMAP_DMA_BLOCK_IRQ))
done = 1;
if (likely(done)) {
gfx->done = 1;
tasklet_schedule(&gfx->dequeue_tasklet);
}
DBGLEAVE(3);
}
/* Let the DMA core know that the last transfer has ended. If there are
* pending transfers in the fifo start them now.
* Called in interrupt context.
*/
static void gfxdma_dequeue_tasklet(unsigned long data)
{
struct gfx_dma *gfx = (struct gfx_dma *)data;
struct gfx_lchannel *f_chain;
DBGENTER(3);
/* start an already programmed transfer
*/
while (likely(gfx->done)) {
gfx->done = 0;
spin_lock(&gfx->spinlock);
f_chain = gfx->f_head;
omap_stop_dma(f_chain->lch_num);
/* Would be better w/o a loop.. */
while (gfx->f_run--) {
if (gfx->f_run)
omap_dma_unlink_lch(f_chain->lch_num,
f_chain->next->lch_num);
f_chain = f_chain->next;
up(&gfx->f_free);
}
gfx->f_run = 0;
gfx->f_head = f_chain;
if (likely(gfx->f_wait))
gfxdma_start_chain(gfx);
else
complete(&gfx->sync_complete);
spin_unlock(&gfx->spinlock);
}
DBGLEAVE(3);
}
/* Wait till any pending transfers end. */
static void gfxdma_sync(struct gfx_dma *gfx)
{
int wait = 0;
DBGENTER(1);
for (;;) {
spin_lock_bh(&gfx->spinlock);
if (gfx->f_run + gfx->f_wait) {
wait = 1;
init_completion(&gfx->sync_complete);
}
spin_unlock_bh(&gfx->spinlock);
if (wait) {
wait_for_completion(&gfx->sync_complete);
wait = 0;
} else
break;
}
DBGLEAVE(1);
}
/* Initialize the gfx DMA object.
* Allocate DMA logical channels according to the fifo size.
* Set the channel parameters that will be the same for all transfers.
*/
static int gfxdma_init(struct gfx_dma *gfx)
static void omapfb_rqueue_lock(struct omapfb_device *fbdev)
{
int r = 0;
int i;
DBGENTER(1);
for (i = 0; i < GFX_FIFO_SIZE; i++) {
int next_idx;
int lch_num;
r = omap_request_dma(0, OMAPFB_DRIVER,
gfxdma_handler, gfx, &lch_num);
if (r) {
int j;
PRNERR("unable to get GFX DMA %d\n", i);
for (j = 0; j < i; j++)
omap_free_dma(lch_num);
r = -1;
goto exit;
}
omap_set_dma_src_data_pack(lch_num, 1);
omap_set_dma_src_burst_mode(lch_num, OMAP_DMA_DATA_BURST_4);
omap_set_dma_dest_data_pack(lch_num, 1);
omap_set_dma_dest_burst_mode(lch_num, OMAP_DMA_DATA_BURST_4);
gfx->fifo[i].lch_num = lch_num;
next_idx = i < GFX_FIFO_SIZE - 1 ? i + 1 : 0;
gfx->fifo[next_idx].prev = &gfx->fifo[i];
gfx->fifo[i].next = &gfx->fifo[next_idx];
}
gfx->f_head = gfx->f_tail = gfx->f_chain_end = &gfx->fifo[0];
sema_init(&gfx->f_free, GFX_FIFO_SIZE);
spin_lock_init(&gfx->spinlock);
tasklet_init(&gfx->dequeue_tasklet, gfxdma_dequeue_tasklet,
(unsigned long)gfx);
init_completion(&gfx->sync_complete);
exit:
DBGLEAVE(1);
return r;
down(&fbdev->rqueue_sema);
}
/* Clean up the gfx DMA object */
static void gfxdma_cleanup(struct gfx_dma *gfx)
static void omapfb_rqueue_unlock(struct omapfb_device *fbdev)
{
int i;
DBGENTER(1);
for (i = 0; i < GFX_FIFO_SIZE; i++)
omap_free_dma(gfx->fifo[i].lch_num);
DBGLEAVE(1);
up(&fbdev->rqueue_sema);
}
/*
......@@ -478,48 +176,26 @@ static const int dma_elem_type[] = {
*/
static int ctrl_init(struct omapfb_device *fbdev)
{
unsigned long mem_size;
int r;
DBGENTER(1);
r = fbdev->ctrl->init(fbdev);
if (r < 0)
r = fbdev->ctrl->init(fbdev, 0, def_vram);
if (r < 0) {
pr_err("controller initialization failed\n");
goto exit;
fbdev->ctrl->get_mem_layout(fbdev, &mem_size, &fbdev->frame0_org);
if (def_vram) {
if (mem_size > def_vram) {
PRNERR("specified frame buffer memory too small\n");
r = -ENOMEM;
goto cleanup_ctrl;
}
mem_size = def_vram;
}
fbdev->lcddma_mem_size = PAGE_SIZE << get_order(mem_size);
fbdev->lcddma_base = dma_alloc_writecombine(fbdev->dev,
fbdev->lcddma_mem_size,
&fbdev->lcddma_handle,
GFP_KERNEL);
if (fbdev->lcddma_base == NULL) {
PRNERR("unable to allocate fb DMA memory\n");
r = -ENOMEM;
goto cleanup_ctrl;
}
memset(fbdev->lcddma_base, 0, fbdev->lcddma_mem_size);
fbdev->ctrl->get_vram_layout(&fbdev->vram_size, &fbdev->vram_virt_base,
&fbdev->vram_phys_base);
memset((void *)fbdev->vram_virt_base, 0, fbdev->vram_size);
DBGPRINT(1, "lcddma_base=%#10x lcddma_handle=%#10x lcddma_mem_size=%d"
"palette_size=%d frame0_org=%d palette_org=%d\n",
fbdev->lcddma_base, fbdev->lcddma_handle,
fbdev->lcddma_mem_size,
fbdev->palette_size,
fbdev->frame0_org, fbdev->palette_org);
DBGPRINT(1, "vram_phys %08x vram_virt %p vram_size=%lu\n",
fbdev->vram_phys_base, fbdev->vram_virt_base,
fbdev->vram_size);
DBGLEAVE(1);
return 0;
cleanup_ctrl:
fbdev->ctrl->cleanup(fbdev);
exit:
DBGLEAVE(1);
return r;
......@@ -527,14 +203,26 @@ exit:
static void ctrl_cleanup(struct omapfb_device *fbdev)
{
fbdev->ctrl->cleanup(fbdev);
dma_free_writecombine(fbdev->dev, fbdev->lcddma_mem_size,
fbdev->lcddma_base, fbdev->lcddma_handle);
fbdev->ctrl->cleanup();
}
static void ctrl_change_mode(struct omapfb_device *fbdev)
static int ctrl_change_mode(struct omapfb_device *fbdev)
{
fbdev->ctrl->change_mode(fbdev);
int r;
unsigned long offset;
struct fb_var_screeninfo *var = &fbdev->fb_info->var;
DBGPRINT(1, "xoffset %d yoffset %d line_length %d bits_per_pixel %d\n",
var->xoffset, var->yoffset, fbdev->fb_info->fix.line_length,
var->bits_per_pixel);
offset = var->yoffset * fbdev->fb_info->fix.line_length +
var->xoffset * var->bits_per_pixel / 8;
r = fbdev->ctrl->setup_plane(OMAPFB_PLANE_GFX, OMAPFB_CHANNEL_OUT_LCD,
offset, var->xres_virtual, 0, 0, var->xres,
var->yres, fbdev->color_mode);
DBGLEAVE(1);
return r;
}
/*
......@@ -546,39 +234,19 @@ static void ctrl_change_mode(struct omapfb_device *fbdev)
static int omapfb_open(struct fb_info *info, int user)
{
DBGENTER(1);
#ifdef OMAPFB_DBG_FIFO
memset(&stat, 0, sizeof(stat));
#endif
DBGLEAVE(1);
return 0;
}
static void omapfb_sync(struct fb_info *info);
/* Called when the omapfb device is closed. We make sure that any pending
* gfx DMA operations are ended, before we return. */
static int omapfb_release(struct fb_info *info, int user)
{
struct omapfb_device *dev = (struct omapfb_device *)info->par;
int sync = 0;
DBGENTER(1);
spin_lock_bh(&dev->gfx.spinlock);
if (dev->gfx.f_run)
sync = 1;
spin_unlock_bh(&dev->gfx.spinlock);
if (sync) {
gfxdma_sync(&dev->gfx);
}
#ifdef OMAPFB_DBG_FIFO
{
int i;
for (i = 0; i < GFX_FIFO_SIZE; i++)
printk(KERN_INFO "f_run[%d]=%lu\n", i + 1,
stat.f_run[i]);
}
#endif
omapfb_sync(info);
DBGLEAVE(1);
return 0;
......@@ -588,499 +256,111 @@ static int omapfb_release(struct fb_info *info, int user)
* palette if one is available. For now we support only 16bpp and thus store
* the entry only to the pseudo palette.
*/
static int omapfb_setcolreg(u_int regno, u_int red, u_int green,
u_int blue, u_int transp,
struct fb_info *info)
static int _setcolreg(struct fb_info *info, u_int regno, u_int red, u_int green,
u_int blue, u_int transp, int update_hw_pal)
{
struct omapfb_device *fbdev = (struct omapfb_device *)info->par;
u16 pal;
int r = 0;
DBGENTER(2);
if (regno >= 16) {
r = -1;
goto exit;
if (regno < 16) {
pal = ((red >> 11) << 11) | ((green >> 10) << 5) | (blue >> 11);
((u32 *)(info->pseudo_palette))[regno] = pal;
}
pal = ((red >> 11) << 11) | ((green >> 10) << 5) | (blue >> 11);
((u32 *)(info->pseudo_palette))[regno] = pal;
exit:
DBGLEAVE(2);
return r;
}
static int omapfb_suspend(struct device *dev, pm_message_t mesg, u32 level);
static int omapfb_resume(struct device *dev, u32 level);
if (fbdev->ctrl->setcolreg)
r = fbdev->ctrl->setcolreg(regno, red, green, blue, transp,
update_hw_pal);
static int omapfb_blank(int blank, struct fb_info *info)
{
struct omapfb_device *fbdev = (struct omapfb_device *)info->par;
int r = 0;
DBGENTER(1);
switch (blank) {
case VESA_NO_BLANKING:
omapfb_resume(fbdev->dev, 0);
break;
case VESA_POWERDOWN:
omapfb_suspend(fbdev->dev, PMSG_SUSPEND, 0);
break;
default:
r = -EINVAL;
}
DBGLEAVE(1);
return r;
}
/* Setup a constant fill DMA transfer. Destination must be elem size aligned. */
static inline void fill_block(struct omapfb_device *fbdev,
unsigned long dst, unsigned long enumber,
unsigned long height, int esize, u32 color)
{
unsigned long fidx;
int lch;
DBGPRINT(2, "dst:%#010x enumber:%d height:%d esize:%d color:%#010x\n",
dst, enumber, height, esize, color);
fidx = fbdev->fb_info->fix.line_length - enumber * esize + 1;
gfxdma_get_lch(&fbdev->gfx, &lch);
gfxdma_set_lch_params(lch, dma_elem_type[esize], enumber, height,
0, OMAP_DMA_AMODE_CONSTANT,
dst, OMAP_DMA_AMODE_DOUBLE_IDX);
gfxdma_set_lch_index(lch, 0, 0, 1, fidx);
gfxdma_set_lch_color(lch, color, OMAP_DMA_CONSTANT_FILL);
gfxdma_enqueue(&fbdev->gfx, lch);
DUMP_DMA_REGS(lch);
}
/* Fill the specified rectangle with a solid color.
* ROP_XOR and bpp<8 can't be handled by the DMA hardware.
* When frame flipping is in effect use the destination frame.
* We'll make our best to use the largest possible elem size, doing the fill
* in more parts if alignment requires us to do so.
*/
static int omapfb_fillrect(void *data)
static int omapfb_setcolreg(u_int regno, u_int red, u_int green, u_int blue,
u_int transp, struct fb_info *info)
{
struct omapfb_fillrect_params *par = data;
struct omapfb_device *fbdev = (struct omapfb_device *)par->fbi->par;
int dx = par->rect.dx, dy = par->rect.dy;
int vxres = par->fbi->var.xres_virtual;
int vyres = par->fbi->var.yres_virtual;
int width = par->rect.width, height = par->rect.height;
unsigned long dst;
u32 color;
int bpp;
int enumber, esize;
int r = 0;
int r = 0;
DBGENTER(2);
bpp = par->fbi->var.bits_per_pixel;
/* bpp < 8 is tbd.
* We can't do ROP_XOR with DMA
* If IRQs are disabled we can't use DMA
*/
if (bpp < 8 || par->rect.rop == ROP_XOR || irqs_disabled()) {
r = OMAPFB_FILLRECT_FAILED;
goto exit;
}
/* Clipping */
if (!width || !height || dx > vxres || dy > vyres)
goto exit;
if (dx + width > vxres)
width = vxres - dx;
if (dy + height > vyres)
height = vyres - dy;
if (bpp == 12)
bpp = 16;
width = width * bpp / 8;
dst = fbdev->lcddma_handle + fbdev->dst_frame_org;
dst += dx * bpp / 8 + dy * par->fbi->fix.line_length;
color = par->rect.color;
switch (bpp) {
case 8:
color |= color << 8;
/* Fall through */
case 16:
color |= color << 16;
}
_setcolreg(info, regno, red, green, blue, transp, 1);
if ((dst & 3) || width < 4) {
if (!(dst & 1) && width > 1) {
esize = 2;
enumber = 1;
width -= 2;
} else {
esize = 1;
enumber = 4 - (esize & 3);
if (enumber > width)
enumber = width;
width -= enumber;
}
fill_block(fbdev, dst, enumber, height, esize, color);
dst = (dst + 3) & ~3;
}
if (width) {
enumber = width / 4;
fill_block(fbdev, dst, enumber, height, 4, color);
dst += enumber * 4;
width -= enumber * 4;
}
if (width) {
if (width == 2) {
esize = 2;
enumber = 1;
} else {
esize = 1;
enumber = width;
}
fill_block(fbdev, dst, enumber, height, esize, color);
}
exit:
DBGLEAVE(2);
return r;
}
static int omapfb_schedule_fillrect(struct fb_info *fbi,
const struct fb_fillrect *rect)
{
struct omapfb_device *fbdev = (struct omapfb_device *)fbi->par;
struct omapfb_request *req;
if ((req = omapfb_rqueue_alloc_req(&fbdev->rqueue)) == NULL)
return -ENOMEM;
req->function = omapfb_fillrect;
req->par.fillrect.fbi = fbi;
req->par.fillrect.rect = *rect;
omapfb_rqueue_schedule_req(&fbdev->rqueue, req);
return fbdev->rqueue.status ? OMAPFB_GFX_STATUS_CHANGED : 0;
return r;
}
/* Setup a gfx DMA transfer to a rectangular area.
* A color parameter can be specified for transparent copy.
* Transfer direction can be setup to use either incremental or decremental
* addresses.
* Source and destination must be elem size aligned.
*/
static inline void transfer_block(struct omapfb_device *fbdev,
unsigned long src, unsigned long dst,
unsigned long img_width,
unsigned long enumber, unsigned long height,
int esize, u32 trans_color, int flags)
static int omapfb_setcmap(struct fb_cmap *cmap, struct fb_info *info)
{
s16 eidx;
s16 s_fidx, d_fidx;
int lch;
eidx = 1;
s_fidx = img_width - enumber * esize + 1;
d_fidx = fbdev->fb_info->fix.line_length - enumber * esize + 1;
if (flags & COPY_MODE_REV_DIR) {
eidx = -2 * esize + 1;
s_fidx = -s_fidx + eidx + 1;
d_fidx = -d_fidx + eidx + 1;
}
int count, index, r;
u16 *red, *green, *blue, *transp;
u16 trans = 0xffff;
DBGPRINT(2, "src:%#010x dst:%#010x enumber:%d height:%d "
"esize:%d eidx:%d s_fidx:%d d_fidx bg_color:%#010x flags:%d\n",
src, dst, enumber, height, esize, eidx, s_fidx, d_fidx,
bg_color, flags);
gfxdma_get_lch(&fbdev->gfx, &lch);
gfxdma_set_lch_params(lch, dma_elem_type[esize], enumber, height,
src, OMAP_DMA_AMODE_DOUBLE_IDX,
dst, OMAP_DMA_AMODE_DOUBLE_IDX);
gfxdma_set_lch_index(lch, eidx, s_fidx, eidx, d_fidx);
if (flags & COPY_MODE_TRANSPARENT)
gfxdma_set_lch_color(lch, trans_color,
OMAP_DMA_TRANSPARENT_COPY);
else
gfxdma_set_lch_color(lch, 0, OMAP_DMA_COLOR_DIS);
gfxdma_enqueue(&fbdev->gfx, lch);
DUMP_DMA_REGS(lch);
}
red = cmap->red;
green = cmap->green;
blue = cmap->blue;
transp = cmap->transp;
index = cmap->start;
/* Copy a rectangular area or an image to another rectangular area.
* A color parameter can be specified for transparent copy.
* Transfer direction can be setup to use either incremental or decremental
* addresses.
* Currently both source and destination area must be entirely contained in
* frame buffer memory.
* The largest possible transfer elem size will be determined according to
* source and destination address alignment, dividing the transfer into more
* parts if necessary.
*/
static inline void copy_data(struct omapfb_device *fbdev,
unsigned long src, unsigned long dst,
unsigned long width, unsigned long height,
u32 trans_color, int flags)
{
struct fb_info *fbi = fbdev->fb_info;
int esize, stripe_esize;
int step, rest, enumber;
unsigned long img_width;
static const int esize_arr[] = {4, 1, 2, 1};
int rev;
/* Check alignment constraints */
esize = esize_arr[(src ^ dst) & 3];
rev = flags & COPY_MODE_REV_DIR;
if (rev) {
rest = src & (esize - 1);
if (rest > width)
rest = width;
src -= rest ? rest : esize;
dst -= rest ? rest : esize;
} else {
rest = esize - (src & (esize - 1));
if (rest > width)
rest = width;
}
if (width < esize)
rest = width;
img_width = flags & COPY_MODE_IMAGE ? width : fbi->fix.line_length;
DBGPRINT(2, "\nrev=%d src=%#010lx dst=%#010lx \n"
"esize=%d width=%d rest=%d\n",
rev, src, dst, esize, width, rest);
if (rest) {
/* Transfer this unaligned stripe, so that afterwards
* we have both src and dst 16bit or 32bit aligned.
*/
if (rest == 2) {
/* Area body is 32bit aligned */
stripe_esize = 2;
enumber = 1;
step = rev ? -esize : 2;
width -= 2;
} else {
stripe_esize = 1;
enumber = rest;
step = rev ? -esize : rest;
}
transfer_block(fbdev, src, dst, img_width, enumber, height,
stripe_esize, trans_color, flags);
src += step;
dst += step;
}
if (width) {
/* Transfer area body */
enumber = (width & ~(esize - 1)) / esize;
transfer_block(fbdev, src, dst, img_width, enumber, height,
esize, trans_color, flags);
step = enumber * esize;
width -= step;
if (rev)
step = -step + esize - width;
src += step;
dst += step;
}
if (width) {
/* Transfer the remaining unaligned stripe */
if (width == 2) {
stripe_esize = 2;
enumber = 1;
} else {
stripe_esize = 1;
enumber = width;
}
transfer_block(fbdev, src, dst, img_width, enumber, height,
stripe_esize, trans_color, flags);
for (count = 0; count < cmap->len; count++) {
if (transp)
trans = *transp++;
r = _setcolreg(info, index++, *red++, *green++, *blue++, trans,
count == cmap->len - 1);
if (r != 0)
return r;
}
DBGLEAVE(2);
return 0;
}
/* Copy a rectangular area in the frame buffer to another rectangular area.
* Calculate the source and destination addresses.
* Transfer direction will be determined taking care of possible area
* overlapping.
* Currently both source and destination area must be entirely contained in
* frame buffer memory, in case of frame flipping source and destination frame
* respectively.
*/
static int omapfb_copyarea(void *data)
{
struct omapfb_copyarea_params *par = data;
struct omapfb_device *fbdev = (struct omapfb_device *)par->fbi->par;
int width = par->area.width, height = par->area.height;
int sx = par->area.sx, sy = par->area.sy;
int dx = par->area.dx, dy = par->area.dy;
unsigned long dst, dst_ofs, src, src_ofs;
unsigned long end_ofs;
int bpp = par->fbi->var.bits_per_pixel;
int flags;
int r = 0;
DBGENTER(2);
if (!width || !height)
goto exit;
static void omapfb_update_full_screen(struct omapfb_device *fbdev);
/* Bpp < 8 is tbd. If IRQs are disabled we can't use DMA */
if (bpp < 8 || irqs_disabled()) {
r = OMAPFB_COPYAREA_FAILED;
goto exit;
}
src = fbdev->lcddma_handle;
dst = src;
src_ofs = fbdev->src_frame_org + sx * bpp / 8 +
sy * par->fbi->fix.line_length;
dst_ofs = fbdev->dst_frame_org + dx * bpp / 8 +
dy * par->fbi->fix.line_length;
end_ofs = (height - 1) * par->fbi->fix.line_length + width * bpp / 8;
src += src_ofs;
dst += dst_ofs;
DBGPRINT(2, "src:%#010lx dst:%#010lx end_ofs:%#010lx\n",
src, dst, end_ofs);
/* Currently we support only transfers where both source and destination
* area is contained entirely in fbmem. This is because of DMA memory
* constraints.
*/
if (src_ofs + end_ofs > fbdev->lcddma_mem_size ||
dst_ofs + end_ofs > fbdev->lcddma_mem_size) {
r = OMAPFB_COPYAREA_FAILED;
goto exit;
}
flags = 0;
if (par->area.rev_dir) {
flags = COPY_MODE_REV_DIR;
src += end_ofs;
dst += end_ofs;
}
if (par->area.trans_color != -1)
flags |= COPY_MODE_TRANSPARENT;
width = width * bpp / 8;
copy_data(fbdev, src, dst, width, height, par->area.trans_color, flags);
exit:
DBGLEAVE(2);
return r;
}
static int omapfb_schedule_copyarea(struct fb_info *fbi,
const struct fb_copyarea_ext *area)
static int omapfb_blank(int blank, struct fb_info *fbi)
{
struct omapfb_device *fbdev = (struct omapfb_device *)fbi->par;
struct omapfb_request *req;
if ((req = omapfb_rqueue_alloc_req(&fbdev->rqueue)) == NULL)
return -ENOMEM;
req->function = omapfb_copyarea;
req->par.copyarea.fbi = fbi;
req->par.copyarea.area = *area;
omapfb_rqueue_schedule_req(&fbdev->rqueue, req);
return fbdev->rqueue.status ? OMAPFB_GFX_STATUS_CHANGED : 0;
}
/* Copy an image to a rectangular area in the frame buffer.
* A color parameter can be specified for transparent copy.
* Calculate the source and destination addresses.
* Transfer direction will be determined taking care of possible area
* overlapping.
* Currently both source and destination area must be entirely contained in
* frame buffer memory, in case of frame flipping source and destination frame
* respectively.
*/
static int do_imageblit(void *data)
{
struct omapfb_imageblit_params *par = data;
struct omapfb_device *fbdev = (struct omapfb_device *)par->fbi->par;
int width = par->image.width, height = par->image.height;
int dx = par->image.dx, dy = par->image.dy;
const char *img_data = par->image.data;
unsigned long dst, dst_ofs;
unsigned long dst_end_ofs;
int bpp = par->fbi->var.bits_per_pixel;
u32 bg_color;
int r = 0;
DBGENTER(2);
if (!width || !height)
goto exit;
/* bpp conversion is not supported, let the default function handle it.
* Note that image->depth is either 1 for monochrome image, or equals
* bpp of the current video mode, so we can't rely on it.
* If IRQs are disabled we can't use DMA.
*/
if (bpp < 8 || par->image.depth != bpp || irqs_disabled()) {
r = OMAPFB_IMGBLIT_FAILED;
goto exit;
}
dst = fbdev->lcddma_handle;
dst_ofs = fbdev->dst_frame_org +
dx * bpp / 8 + dy * par->fbi->fix.line_length;
dst_end_ofs = (height - 1) * par->fbi->fix.line_length +
width * bpp / 8;
dst += dst_ofs;
DBGPRINT(2, "data:%#010lx dst:%#010lx dst_end_ofs:%#010lx\n",
img_data, dst, dst_end_ofs);
/* Check that both source and destination is DMA -able */
if (dst_ofs + dst_end_ofs > fbdev->lcddma_mem_size) {
r = OMAPFB_IMGBLIT_FAILED;
goto exit;
}
int r = 0;
if (((unsigned long)img_data < (unsigned long)fbdev->lcddma_base) ||
((unsigned long)img_data + width * bpp / 8 * height >
(unsigned long)fbdev->lcddma_base + fbdev->lcddma_mem_size)) {
r = OMAPFB_IMGBLIT_FAILED;
goto exit;
}
DBGENTER(1);
bg_color = par->image.bg_color;
if (par->flags & COPY_MODE_TRANSPARENT) {
switch (bpp) {
case 8:
bg_color |= bg_color << 8;
/* Fall through */
case 16:
bg_color |= bg_color << 16;
omapfb_rqueue_lock(fbdev);
switch (blank) {
case VESA_NO_BLANKING:
if (fbdev->state == OMAPFB_SUSPENDED) {
fbdev->panel->enable();
if (fbdev->ctrl->resume)
fbdev->ctrl->resume();
fbdev->state = OMAPFB_ACTIVE;
if (fbdev->ctrl->get_update_mode() ==
OMAPFB_MANUAL_UPDATE)
omapfb_update_full_screen(fbdev);
}
break;
case VESA_POWERDOWN:
if (fbdev->state == OMAPFB_ACTIVE) {
if (fbdev->ctrl->suspend)
fbdev->ctrl->suspend();
fbdev->panel->disable();
fbdev->state = OMAPFB_SUSPENDED;
}
break;
default:
r = -EINVAL;
}
omapfb_rqueue_unlock(fbdev);
width = width * bpp / 8;
copy_data(fbdev, (unsigned long)img_data, dst, width, height,
bg_color, par->flags | COPY_MODE_IMAGE);
exit:
DBGLEAVE(2);
DBGLEAVE(1);
return r;
}
static int omapfb_schedule_imageblit(struct fb_info *fbi,
const struct fb_image *image, int flags)
static void omapfb_sync(struct fb_info *fbi)
{
struct omapfb_device *fbdev = (struct omapfb_device *)fbi->par;
struct omapfb_request *req;
if ((req = omapfb_rqueue_alloc_req(&fbdev->rqueue)) == NULL)
return -ENOMEM;
req->function = do_imageblit;
req->par.imageblit.fbi = fbi;
req->par.imageblit.image = *image;
req->par.imageblit.flags = flags;
omapfb_rqueue_schedule_req(&fbdev->rqueue, req);
return fbdev->rqueue.status ? OMAPFB_GFX_STATUS_CHANGED : 0;
omapfb_rqueue_lock(fbdev);
if (fbdev->ctrl->sync)
fbdev->ctrl->sync();
omapfb_rqueue_unlock(fbdev);
}
/* Set fb_info.fix fields and also updates fbdev.
......@@ -1091,10 +371,9 @@ static void set_fb_fix(struct omapfb_device *fbdev)
struct fb_info *fbi = fbdev->fb_info;
struct fb_fix_screeninfo *fix = &fbi->fix;
struct fb_var_screeninfo *var = &fbi->var;
int frame_size;
strncpy(fix->id, OMAPFB_DRIVER, sizeof(fix->id));
fix->type = FB_TYPE_PACKED_PIXELS;
fix->type = FB_TYPE_PACKED_PIXELS;
switch (var->bits_per_pixel) {
case 16:
fix->visual = FB_VISUAL_TRUECOLOR;
......@@ -1108,20 +387,8 @@ static void set_fb_fix(struct omapfb_device *fbdev)
}
fix->accel = FB_ACCEL_OMAP1610;
fix->line_length = var->xres_virtual * var->bits_per_pixel / 8;
fix->smem_len = fbdev->lcddma_mem_size - fbdev->frame0_org;
fix->smem_start = fbdev->lcddma_handle + fbdev->frame0_org;
/* Set the second frame buffer offset for flipping if there is
* room for it. */
frame_size = fix->line_length * var->yres;
fbdev->frame1_org = fbdev->frame0_org + frame_size;
if (fbdev->frame1_org + frame_size > fbdev->lcddma_mem_size)
fbdev->frame1_org = 0;
fbdev->vis_frame_org = fbdev->src_frame_org = fbdev->dst_frame_org =
fbdev->frame0_org;
fbdev->view_org = var->yoffset * fix->line_length +
var->xoffset * var->bits_per_pixel / 8;
fix->smem_len = fbdev->vram_size;
fix->smem_start = fbdev->vram_phys_base;
}
/* Check the values in var against our capabilities and in case of out of
......@@ -1133,30 +400,41 @@ static int set_fb_var(struct omapfb_device *fbdev,
int bpp;
unsigned long max_frame_size;
unsigned long line_size;
struct lcd_panel *panel = fbdev->panel;
bpp = var->bits_per_pixel = panel->bpp;
switch (bpp) {
case 16:
fbdev->color_mode = OMAPFB_COLOR_RGB565;
break;
case 8:
fbdev->color_mode = OMAPFB_COLOR_CLUT_8BPP;
break;
default:
/* FIXME: other BPPs not yet supported */
return -EINVAL;
}
bpp = var->bits_per_pixel = fbdev->panel->video_mode->bpp;
if (bpp != 16)
/* Not yet supported */
return -1;
switch (var->rotate) {
case 0:
case 180:
var->xres = fbdev->panel->video_mode->x_res;
var->yres = fbdev->panel->video_mode->y_res;
var->xres = fbdev->panel->x_res;
var->yres = fbdev->panel->y_res;
break;
case 90:
case 270:
var->xres = fbdev->panel->video_mode->y_res;
var->yres = fbdev->panel->video_mode->x_res;
var->xres = fbdev->panel->y_res;
var->yres = fbdev->panel->x_res;
break;
default:
return -1;
return -EINVAL;
}
if (var->xres_virtual < var->xres)
var->xres_virtual = var->xres;
if (var->yres_virtual < var->yres)
var->yres_virtual = var->yres;
max_frame_size = fbdev->lcddma_mem_size - fbdev->frame0_org;
max_frame_size = fbdev->vram_size;
line_size = var->xres_virtual * bpp / 8;
if (line_size * var->yres_virtual > max_frame_size) {
/* Try to keep yres_virtual first */
......@@ -1184,15 +462,16 @@ static int set_fb_var(struct omapfb_device *fbdev,
var->grayscale = 0;
var->nonstd = 0;
/* TODO: video timing params, sync */
var->pixclock = -1;
var->left_margin = -1;
var->right_margin = -1;
var->upper_margin = -1;
var->lower_margin = -1;
var->hsync_len = -1;
var->vsync_len = -1;
/* pixclock in ps, the rest in pixclock */
var->pixclock = 10000000 / (panel->pixel_clock / 100);
var->left_margin = panel->hfp;
var->right_margin = panel->hbp;
var->upper_margin = panel->vfp;
var->lower_margin = panel->vbp;
var->hsync_len = panel->hsw;
var->vsync_len = panel->vsw;
/* TODO: get these from panel->config */
var->vmode = FB_VMODE_NONINTERLACED;
var->sync = 0;
......@@ -1214,7 +493,6 @@ static void omapfb_rotate(struct fb_info *fbi, int rotate)
if (set_fb_var(fbdev, &new_var) == 0 &&
memcmp(&new_var, &fbi->var, sizeof(new_var))) {
memcpy(&fbi->var, &new_var, sizeof(new_var));
set_fb_fix(fbdev);
ctrl_change_mode(fbdev);
}
}
......@@ -1242,7 +520,6 @@ static int omapfb_pan_display(struct fb_var_screeninfo *var,
r = -EINVAL;
else {
memcpy(&fbi->var, &new_var, sizeof(new_var));
set_fb_fix(fbdev);
ctrl_change_mode(fbdev);
}
}
......@@ -1252,9 +529,8 @@ static int omapfb_pan_display(struct fb_var_screeninfo *var,
}
/* Set mirror to vertical axis and switch to the new mode. */
static int omapfb_mirror(struct fb_info *fbi, int mirror)
static int omapfb_mirror(struct omapfb_device *fbdev, int mirror)
{
struct omapfb_device *fbdev = (struct omapfb_device *)fbi->par;
int r = 0;
DBGENTER(1);
......@@ -1264,33 +540,7 @@ static int omapfb_mirror(struct fb_info *fbi, int mirror)
r = -EINVAL;
else if (mirror != fbdev->mirror) {
fbdev->mirror = mirror;
ctrl_change_mode(fbdev);
}
DBGLEAVE(1);
return r;
}
/* Set x,y scale and switch to the new mode */
static int omapfb_scale(struct fb_info *fbi,
unsigned int xscale, unsigned int yscale)
{
struct omapfb_device *fbdev = (struct omapfb_device *)fbi->par;
int r = 0;
DBGENTER(1);
if (cpu_is_omap1510())
r = -EINVAL;
else if (xscale != fbdev->xscale || yscale != fbdev->yscale) {
if (fbi->var.xres * xscale > fbi->var.xres_virtual ||
fbi->var.yres * yscale > fbi->var.yres_virtual)
r = -EINVAL;
else {
fbdev->xscale = xscale;
fbdev->yscale = yscale;
ctrl_change_mode(fbdev);
}
r = ctrl_change_mode(fbdev);
}
DBGLEAVE(1);
......@@ -1318,114 +568,122 @@ static int omapfb_check_var(struct fb_var_screeninfo *var, struct fb_info *fbi)
*/
static int omapfb_set_par(struct fb_info *fbi)
{
int r;
struct omapfb_device *fbdev = (struct omapfb_device *)fbi->par;
DBGENTER(1);
set_fb_fix(fbdev);
ctrl_change_mode(fbdev);
r = ctrl_change_mode(fbdev);
DBGLEAVE(1);
return 0;
return r;
}
/* Frame flipping support. Assign the primary or the secondary frame to the
* visible frame, as well as the source and destination frames for graphics
* operations like rectangle fill and area copy. Flipping is only possible
* if we have enough video memory for the secondary frame.
*/
static int omapfb_select_vis_frame(struct fb_info *fbi, unsigned int vis_idx)
static int omapfb_update_win(struct omapfb_device *fbdev,
struct omapfb_update_window *win)
{
struct omapfb_device *fbdev = (struct omapfb_device *)fbi->par;
struct fb_var_screeninfo *var = &fbdev->fb_info->var;
int ret;
if (vis_idx > 1 || (vis_idx == 1 && !fbdev->frame1_org))
if (win->x >= var->xres || win->y >= var->yres)
return -EINVAL;
fbdev->vis_frame_org = vis_idx ? fbdev->frame1_org : fbdev->frame0_org;
ctrl_change_mode(fbdev);
return 0;
if (!fbdev->ctrl->update_window ||
fbdev->ctrl->get_update_mode() != OMAPFB_MANUAL_UPDATE)
return -ENODEV;
if (win->x + win->width >= var->xres)
win->width = var->xres - win->x;
if (win->y + win->height >= var->yres)
win->height = var->yres - win->y;
if (!win->width || !win->height)
return 0;
omapfb_rqueue_lock(fbdev);
ret = fbdev->ctrl->update_window(win, NULL, 0);
omapfb_rqueue_unlock(fbdev);
return ret;
}
static int omapfb_select_src_frame(struct fb_info *fbi, unsigned int src_idx)
static void omapfb_update_full_screen(struct omapfb_device *fbdev)
{
struct omapfb_device *fbdev = (struct omapfb_device *)fbi->par;
struct omapfb_update_window win;
if (src_idx > 1 || (src_idx == 1 && !fbdev->frame1_org))
return -EINVAL;
fbdev->src_frame_org = src_idx ? fbdev->frame1_org : fbdev->frame0_org;
return 0;
win.x = 0;
win.y = 0;
win.width = fbdev->panel->x_res;
win.height = fbdev->panel->y_res;
win.format = 0;
omapfb_rqueue_lock(fbdev);
fbdev->ctrl->update_window(&win, NULL, 0);
omapfb_rqueue_unlock(fbdev);
}
static int omapfb_select_dst_frame(struct fb_info *fbi, unsigned int dst_idx)
static int omapfb_setup_plane(struct omapfb_device *fbdev,
struct omapfb_setup_plane *sp)
{
struct omapfb_device *fbdev = (struct omapfb_device *)fbi->par;
int r;
if (dst_idx > 1 || (dst_idx == 1 && !fbdev->frame1_org))
return -EINVAL;
fbdev->dst_frame_org = dst_idx ? fbdev->frame1_org : fbdev->frame0_org;
DBGPRINT(1, "dst_frame_org=%#010x\n", fbdev->dst_frame_org);
return 0;
omapfb_rqueue_lock(fbdev);
r = fbdev->ctrl->setup_plane(sp->plane, sp->channel_out, sp->offset,
sp->width, sp->pos_x, sp->pos_y, sp->width,
sp->height, sp->color_mode);
omapfb_rqueue_unlock(fbdev);
return r;
}
/* Get the address of the primary and secondary frames */
static int omapfb_get_frame_offset(struct fb_info *fbi,
struct fb_frame_offset *fb_offset)
static int omapfb_enable_plane(struct omapfb_device *fbdev, int plane,
int enable)
{
struct omapfb_device *fbdev = (struct omapfb_device *)fbi->par;
int r;
if (fb_offset->idx > 1)
return -EINVAL;
if (fb_offset->idx == 1 && !fbdev->frame1_org)
return -EINVAL;
fb_offset->offset = fb_offset->idx ? fbdev->frame1_org :
fbdev->frame0_org;
return 0;
omapfb_rqueue_lock(fbdev);
r = fbdev->ctrl->enable_plane(plane, enable);
omapfb_rqueue_unlock(fbdev);
return r;
}
static int omapfb_update_window(void *data)
static int omapfb_set_color_key(struct omapfb_device *fbdev,
struct omapfb_color_key *ck)
{
struct omapfb_update_window_params *par = data;
struct omapfb_device *fbdev = (struct omapfb_device *)par->fbi->par;
int r;
gfxdma_sync(&fbdev->gfx);
if (fbdev->ctrl->update_window(fbdev, &par->win))
return OMAPFB_UPDATE_FAILED;
else
return 0;
if (!fbdev->ctrl->set_color_key)
return -ENODEV;
omapfb_rqueue_lock(fbdev);
r = fbdev->ctrl->set_color_key(ck);
omapfb_rqueue_unlock(fbdev);
return r;
}
static int omapfb_schedule_update_window(struct fb_info *fbi,
struct fb_update_window *win)
static int omapfb_set_update_mode(struct omapfb_device *fbdev,
enum omapfb_update_mode mode)
{
struct omapfb_device *fbdev = (struct omapfb_device *)fbi->par;
struct omapfb_request *req;
int r;
if (!fbdev->ctrl->update_window ||
win->x >= fbi->var.xres || win->y >= fbi->var.yres)
return -EINVAL;
if (win->x + win->width >= fbi->var.xres)
win->width = fbi->var.xres - win->x;
if (win->y + win->height >= fbi->var.yres)
win->height = fbi->var.yres - win->y;
if (!win->width || !win->height)
return 0;
if ((req = omapfb_rqueue_alloc_req(&fbdev->rqueue)) == NULL)
return -ENOMEM;
req->function = omapfb_update_window;
req->par.update_window.fbi = fbi;
req->par.update_window.win = *win;
omapfb_rqueue_schedule_req(&fbdev->rqueue, req);
return fbdev->rqueue.status ? OMAPFB_GFX_STATUS_CHANGED : 0;
omapfb_rqueue_lock(fbdev);
r = fbdev->ctrl->set_update_mode(mode);
omapfb_rqueue_unlock(fbdev);
return r;
}
static int omapfb_schedule_full_update(struct fb_info *fbi)
static enum omapfb_update_mode omapfb_get_update_mode(struct omapfb_device *fbdev)
{
struct fb_update_window win;
int r;
win.x = 0;
win.y = 0;
win.width = fbi->var.xres;
win.height = fbi->var.yres;
return omapfb_schedule_update_window(fbi, &win);
omapfb_rqueue_lock(fbdev);
r = fbdev->ctrl->get_update_mode();
omapfb_rqueue_unlock(fbdev);
return r;
}
static unsigned long omapfb_get_caps(struct fb_info *fbi)
......@@ -1434,15 +692,29 @@ static unsigned long omapfb_get_caps(struct fb_info *fbi)
unsigned long caps;
caps = 0;
caps |= fbdev->panel->get_caps(fbdev->panel);
caps |= fbdev->ctrl->get_caps(fbdev);
caps |= fbdev->panel->get_caps();
caps |= fbdev->ctrl->get_caps();
return caps;
}
static int omapfb_set_update_mode(struct omapfb_device *fbdev,
enum fb_update_mode new_mode);
/* For lcd testing */
void omapfb_write_first_pixel(struct omapfb_device *fbdev, u16 pixval)
{
omapfb_rqueue_lock(fbdev);
*(u16 *)fbdev->vram_virt_base = pixval;
if (fbdev->ctrl->get_update_mode() == OMAPFB_MANUAL_UPDATE) {
struct omapfb_update_window win;
static enum fb_update_mode omapfb_get_update_mode(struct omapfb_device *fbdev);
win.x = 0;
win.y = 0;
win.width = 1;
win.height = 1;
win.format = 0;
fbdev->ctrl->update_window(&win, NULL, 0);
}
omapfb_rqueue_unlock(fbdev);
}
EXPORT_SYMBOL(omapfb_write_first_pixel);
/* Ioctl interface. Part of the kernel mode frame buffer API is duplicated
* here to be accessible by user mode code. In addition transparent copy
......@@ -1456,19 +728,15 @@ static int omapfb_ioctl(struct inode *inode, struct file *file,
struct omapfb_device *fbdev = (struct omapfb_device *)fbi->par;
struct fb_ops *ops = fbi->fbops;
union {
struct fb_fillrect rect;
struct fb_copyarea_ext area;
struct fb_image image;
struct fb_scale scale;
struct fb_frame_offset frame_offset;
struct fb_update_window update_window;
unsigned int frame_idx;
unsigned int mirror;
enum fb_update_mode update_mode;
struct omapfb_update_window update_window;
struct omapfb_setup_plane setup_plane;
struct omapfb_enable_plane enable_plane;
struct omapfb_color_key color_key;
enum omapfb_update_mode update_mode;
unsigned long caps;
unsigned long rqueue_status;
unsigned int mirror;
} p;
int r = 0;
int r = 0;
DBGENTER(2);
......@@ -1476,85 +744,17 @@ static int omapfb_ioctl(struct inode *inode, struct file *file,
DBGPRINT(2, "cmd=%010x\n", cmd);
switch (cmd)
{
case OMAPFB_FILLRECT:
if (copy_from_user(&p.rect, (void __user *)arg, sizeof(p.rect)))
r = -EFAULT;
else
r = omapfb_schedule_fillrect(fbi, &p.rect);
break;
case OMAPFB_COPYAREA:
if (copy_from_user(&p.area, (void __user *)arg, sizeof(p.area)))
r = -EFAULT;
else
r = omapfb_schedule_copyarea(fbi, &p.area);
break;
case OMAPFB_IMAGEBLIT:
if (copy_from_user(&p.image, (void __user *)arg,
sizeof(p.image)))
r = -EFAULT;
else
r = omapfb_schedule_imageblit(fbi, &p.image, 0);
break;
case OMAPFB_TRANSPARENT_BLIT:
if (copy_from_user(&p.image, (void __user *)arg,
sizeof(p.image)))
r = -EFAULT;
else
r = omapfb_schedule_imageblit(fbi, &p.image,
COPY_MODE_TRANSPARENT);
break;
case OMAPFB_MIRROR:
if (get_user(p.mirror, (int __user *)arg))
r = -EFAULT;
else
omapfb_mirror(fbi, p.mirror);
break;
case OMAPFB_SCALE:
if (copy_from_user(&p.scale, (void __user *)arg,
sizeof(p.scale)))
r = -EFAULT;
else
r = omapfb_scale(fbi, p.scale.xscale, p.scale.yscale);
break;
case OMAPFB_SELECT_VIS_FRAME:
if (get_user(p.frame_idx, (int __user *)arg))
r = -EFAULT;
else
r = omapfb_select_vis_frame(fbi, p.frame_idx);
break;
case OMAPFB_SELECT_SRC_FRAME:
if (get_user(p.frame_idx, (int __user *)arg))
r = - EFAULT;
else
r = omapfb_select_src_frame(fbi, p.frame_idx);
break;
case OMAPFB_SELECT_DST_FRAME:
if (get_user(p.frame_idx, (int __user *)arg))
r = -EFAULT;
else
r = omapfb_select_dst_frame(fbi, p.frame_idx);
break;
case OMAPFB_GET_FRAME_OFFSET:
if (copy_from_user(&p.frame_offset, (void __user *)arg,
sizeof(p.frame_offset)))
r = -EFAULT;
else {
r = omapfb_get_frame_offset(fbi, &p.frame_offset);
if (copy_to_user((void __user *)arg, &p.frame_offset,
sizeof(p.frame_offset)))
r = -EFAULT;
}
omapfb_mirror(fbdev, p.mirror);
break;
case OMAPFB_SYNC_GFX:
omapfb_rqueue_sync(&fbdev->rqueue);
omapfb_sync(fbi);
break;
case OMAPFB_VSYNC:
break;
case OMAPFB_LATE_ACTIVATE:
printk(KERN_WARNING OMAPFB_DRIVER
": LATE_ACTIVATE obsoleted by SET_UPDATE_MODE.\n");
// r = -EINVAL;
break;
case OMAPFB_SET_UPDATE_MODE:
if (get_user(p.update_mode, (int __user *)arg))
r = -EFAULT;
......@@ -1563,7 +763,8 @@ static int omapfb_ioctl(struct inode *inode, struct file *file,
break;
case OMAPFB_GET_UPDATE_MODE:
p.update_mode = omapfb_get_update_mode(fbdev);
if (put_user(p.update_mode, (enum fb_update_mode __user *)arg))
if (put_user(p.update_mode,
(enum omapfb_update_mode __user *)arg))
r = -EFAULT;
break;
case OMAPFB_UPDATE_WINDOW:
......@@ -1571,18 +772,65 @@ static int omapfb_ioctl(struct inode *inode, struct file *file,
sizeof(p.update_window)))
r = -EFAULT;
else
r = omapfb_schedule_update_window(fbi, &p.update_window);
r = omapfb_update_win(fbdev, &p.update_window);
break;
case OMAPFB_SETUP_PLANE:
if (copy_from_user(&p.setup_plane, (void __user *)arg,
sizeof(p.setup_plane)))
r = -EFAULT;
else
r = omapfb_setup_plane(fbdev, &p.setup_plane);
break;
case OMAPFB_ENABLE_PLANE:
if (copy_from_user(&p.enable_plane, (void __user *)arg,
sizeof(p.enable_plane)))
r = -EFAULT;
else
r = omapfb_enable_plane(fbdev,
p.enable_plane.plane, p.enable_plane.enable);
break;
case OMAPFB_SET_COLOR_KEY:
if (copy_from_user(&p.color_key, (void __user *)arg,
sizeof(p.color_key)))
r = -EFAULT;
else
r = omapfb_set_color_key(fbdev, &p.color_key);
break;
case OMAPFB_GET_CAPS:
p.caps = omapfb_get_caps(fbi);
if (put_user(p.caps, (unsigned long __user *)arg))
r = -EFAULT;
break;
case OMAPFB_GET_GFX_STATUS:
omapfb_rqueue_reset(&fbdev->rqueue, &p.rqueue_status);
if (put_user(p.rqueue_status, (unsigned long *)arg))
r = -EFAULT;
break;
case OMAPFB_LCD_TEST:
{
int test_num;
if (get_user(test_num, (int __user *)arg)) {
r = -EFAULT;
break;
}
if (!fbdev->panel->run_test) {
r = -EINVAL;
break;
}
r = fbdev->panel->run_test(test_num);
break;
}
case OMAPFB_CTRL_TEST:
{
int test_num;
if (get_user(test_num, (int __user *)arg)) {
r = -EFAULT;
break;
}
if (!fbdev->ctrl->run_test) {
r = -EINVAL;
break;
}
r = fbdev->ctrl->run_test(test_num);
break;
}
default:
r = -EINVAL;
}
......@@ -1599,6 +847,7 @@ static struct fb_ops omapfb_ops = {
.fb_open = omapfb_open,
.fb_release = omapfb_release,
.fb_setcolreg = omapfb_setcolreg,
.fb_setcmap = omapfb_setcmap,
.fb_fillrect = cfb_fillrect,
.fb_copyarea = cfb_copyarea,
.fb_imageblit = cfb_imageblit,
......@@ -1613,7 +862,7 @@ static struct fb_ops omapfb_ops = {
/*
* ---------------------------------------------------------------------------
* Sysfs interface
* Sysfs interface
* ---------------------------------------------------------------------------
*/
/* omapfbX sysfs entries */
......@@ -1646,27 +895,31 @@ static DEVICE_ATTR(caps_num, 0444, omapfb_show_caps_num, NULL);
static DEVICE_ATTR(caps_text, 0444, omapfb_show_caps_text, NULL);
/* panel sysfs entries */
static ssize_t omapfb_show_panel_name(struct device *dev, struct device_attribute *attr, char *buf)
static ssize_t omapfb_show_panel_name(struct device *dev,
struct device_attribute *attr, char *buf)
{
struct omapfb_device *fbdev = (struct omapfb_device *)dev->driver_data;
return snprintf(buf, PAGE_SIZE, "%s\n", fbdev->panel->name);
}
static ssize_t omapfb_show_bklight_level(struct device *dev,struct device_attribute *attr, char *buf)
static ssize_t omapfb_show_bklight_level(struct device *dev,
struct device_attribute *attr,
char *buf)
{
struct omapfb_device *fbdev = (struct omapfb_device *)dev->driver_data;
int r;
if (fbdev->panel->get_bklight_level) {
r = snprintf(buf, PAGE_SIZE, "%d\n",
fbdev->panel->get_bklight_level(fbdev->panel));
fbdev->panel->get_bklight_level());
} else
r = -ENODEV;
return r;
}
static ssize_t omapfb_store_bklight_level(struct device *dev, struct device_attribute *attr,
static ssize_t omapfb_store_bklight_level(struct device *dev,
struct device_attribute *attr,
const char *buf, size_t size)
{
struct omapfb_device *fbdev = (struct omapfb_device *)dev->driver_data;
......@@ -1676,8 +929,7 @@ static ssize_t omapfb_store_bklight_level(struct device *dev, struct device_attr
unsigned int level;
if (sscanf(buf, "%10d", &level) == 1) {
r = fbdev->panel->set_bklight_level(fbdev->panel,
level);
r = fbdev->panel->set_bklight_level(level);
} else
r = -EINVAL;
} else
......@@ -1685,14 +937,15 @@ static ssize_t omapfb_store_bklight_level(struct device *dev, struct device_attr
return r ? r : size;
}
static ssize_t omapfb_show_bklight_max(struct device *dev, struct device_attribute *attr, char *buf)
static ssize_t omapfb_show_bklight_max(struct device *dev,
struct device_attribute *attr, char *buf)
{
struct omapfb_device *fbdev = (struct omapfb_device *)dev->driver_data;
int r;
if (fbdev->panel->get_bklight_level) {
r = snprintf(buf, PAGE_SIZE, "%d\n",
fbdev->panel->get_bklight_max(fbdev->panel));
fbdev->panel->get_bklight_max());
} else
r = -ENODEV;
return r;
......@@ -1717,7 +970,8 @@ static struct attribute_group panel_attr_grp = {
};
/* ctrl sysfs entries */
static ssize_t omapfb_show_ctrl_name(struct device *dev, struct device_attribute *attr, char *buf)
static ssize_t omapfb_show_ctrl_name(struct device *dev,
struct device_attribute *attr, char *buf)
{
struct omapfb_device *fbdev = (struct omapfb_device *)dev->driver_data;
......@@ -1743,7 +997,7 @@ static int omapfb_register_sysfs(struct omapfb_device *fbdev)
if ((r = device_create_file(fbdev->dev, &dev_attr_caps_num)))
goto fail0;
if ((r = device_create_file(fbdev->dev, &dev_attr_caps_text)))
goto fail1;
......@@ -1761,7 +1015,7 @@ fail2:
fail1:
device_remove_file(fbdev->dev, &dev_attr_caps_num);
fail0:
PRNERR("unable to register sysfs interface\n");
pr_err("unable to register sysfs interface\n");
return r;
}
......@@ -1789,11 +1043,12 @@ static int fbinfo_init(struct omapfb_device *fbdev)
DBGENTER(1);
BUG_ON(!fbdev->lcddma_base);
BUG_ON(!fbdev->vram_virt_base);
info->fbops = &omapfb_ops;
info->flags = FBINFO_FLAG_DEFAULT;
info->screen_base = (char __iomem *) fbdev->lcddma_base
+ fbdev->frame0_org;
info->screen_base = (char __iomem *)fbdev->vram_virt_base;
info->pseudo_palette = fbdev->pseudo_palette;
var->accel_flags = def_accel ? FB_ACCELF_TEXT : 0;
......@@ -1808,7 +1063,7 @@ static int fbinfo_init(struct omapfb_device *fbdev)
r = fb_alloc_cmap(&info->cmap, 16, 0);
if (r != 0)
PRNERR("unable to allocate color map memory\n");
pr_err("unable to allocate color map memory\n");
DBGLEAVE(1);
return r;
......@@ -1832,22 +1087,18 @@ static void omapfb_free_resources(struct omapfb_device *fbdev, int state)
switch (state) {
case OMAPFB_ACTIVE:
unregister_framebuffer(fbdev->fb_info);
case 8:
omapfb_unregister_sysfs(fbdev);
case 7:
omapfb_set_update_mode(fbdev, FB_UPDATE_DISABLED);
case 6:
fbdev->panel->disable(fbdev->panel);
omapfb_unregister_sysfs(fbdev);
omapfb_set_update_mode(fbdev, OMAPFB_UPDATE_DISABLED);
case 5:
gfxdma_cleanup(&fbdev->gfx);
fbdev->panel->disable();
case 4:
fbinfo_cleanup(fbdev);
case 3:
ctrl_cleanup(fbdev);
case 2:
fbdev->panel->cleanup(fbdev->panel);
fbdev->panel->cleanup();
case 1:
omapfb_rqueue_cleanup(&fbdev->rqueue);
dev_set_drvdata(fbdev->dev, NULL);
framebuffer_release(fbdev->fb_info);
case 0:
......@@ -1860,32 +1111,16 @@ static void omapfb_free_resources(struct omapfb_device *fbdev, int state)
static int omapfb_find_panel(struct omapfb_device *fbdev)
{
const struct omap_lcd_config *cfg;
const struct omap_lcd_config *conf;
char name[17];
int i;
conf = (struct omap_lcd_config *)fbdev->dev->platform_data;
fbdev->panel = NULL;
cfg = omap_get_config(OMAP_TAG_LCD, struct omap_lcd_config);
if (cfg == NULL) {
const char *def_name = NULL;
if (machine_is_omap_h2())
def_name = "h2";
if (machine_is_omap_h3())
def_name = "h3";
if (machine_is_omap_perseus2())
def_name = "p2";
if (machine_is_omap_osk())
def_name = "osk";
if (machine_is_omap_innovator() && cpu_is_omap1610())
def_name = "inn1610";
if (machine_is_omap_innovator() && cpu_is_omap1510())
def_name = "inn1510";
if (def_name == NULL)
return -1;
strncpy(name, def_name, sizeof(name) - 1);
} else
strncpy(name, cfg->panel_name, sizeof(name) - 1);
if (conf == NULL)
return -1;
strncpy(name, conf->panel_name, sizeof(name) - 1);
name[sizeof(name) - 1] = 0;
for (i = 0; i < ARRAY_SIZE(panels); i++) {
if (strcmp(panels[i]->name, name) == 0) {
......@@ -1893,58 +1128,59 @@ static int omapfb_find_panel(struct omapfb_device *fbdev)
break;
}
}
if (fbdev->panel == NULL)
return -1;
return 0;
return 0;
}
static int omapfb_find_ctrl(struct omapfb_device *fbdev)
{
const struct omap_lcd_config *cfg;
struct omap_lcd_config *conf;
char name[17];
int i;
conf = (struct omap_lcd_config *)fbdev->dev->platform_data;
fbdev->ctrl = NULL;
cfg = omap_get_config(OMAP_TAG_LCD, struct omap_lcd_config);
if (cfg == NULL) {
strcpy(name, "internal");
} else
strncpy(name, cfg->ctrl_name, sizeof(name) - 1);
name[sizeof(name) - 1] = 0;
if (conf == NULL)
return -1;
strncpy(name, conf->ctrl_name, sizeof(name) - 1);
name[sizeof(name) - 1] = '\0';
if (strcmp(name, "internal") == 0) {
fbdev->ctrl = fbdev->int_ctrl;
return 0;
}
for (i = 0; i < ARRAY_SIZE(ctrls); i++) {
if (strcmp(ctrls[i]->name, name) == 0) {
fbdev->ctrl = ctrls[i];
break;
}
}
if (fbdev->ctrl == NULL)
return -1;
return 0;
}
static void check_required_callbacks(struct omapfb_device *fbdev)
{
#define _C(x) (fbdev->ctrl->x)
#define _P(x) (fbdev->panel->x)
#define _C(x) (fbdev->ctrl->x != NULL)
#define _P(x) (fbdev->panel->x != NULL)
BUG_ON(fbdev->ctrl == NULL || fbdev->panel == NULL);
BUG_ON(!(_C(init) && _C(cleanup) && _C(get_caps) &&
_C(get_mem_layout) && _C(set_update_mode) && _C(change_mode) &&
_C(set_update_mode) && _C(setup_plane) && _C(enable_plane) &&
_P(init) && _P(cleanup) && _P(enable) && _P(disable) &&
_P(get_caps)));
#undef _P
#undef _C
}
static int omapfb_set_update_mode(struct omapfb_device *fbdev,
enum fb_update_mode mode)
{
return fbdev->ctrl->set_update_mode(fbdev, mode);
}
static enum fb_update_mode omapfb_get_update_mode(struct omapfb_device *fbdev)
{
return fbdev->ctrl->get_update_mode(fbdev);
}
/* Called by LDM binding to probe and attach a new device.
* Initialization sequence:
* 1. allocate system fb_info structure
......@@ -1963,7 +1199,9 @@ static int omapfb_probe(struct device *dev)
struct omapfb_device *fbdev = NULL;
struct fb_info *fbi;
int init_state;
int r = 0;
unsigned long phz, hhz, vhz;
struct lcd_panel *panel;
int r = 0;
DBGENTER(1);
......@@ -1971,43 +1209,55 @@ static int omapfb_probe(struct device *dev)
pdev = to_platform_device(dev);
if (pdev->num_resources != 0) {
PRNERR("probed for an unknown device\n");
pr_err("probed for an unknown device\n");
r = -ENODEV;
goto cleanup;
}
fbi = framebuffer_alloc(sizeof(struct omapfb_device), dev);
if (!fbi) {
PRNERR("unable to allocate memory for device info\n");
if (fbi == NULL) {
pr_err("unable to allocate memory for device info\n");
r = -ENOMEM;
goto cleanup;
}
init_state++;
fbdev = (struct omapfb_device *)fbi->par;
fbdev->fb_info = fbi;
fbdev->dev = dev;
dev_set_drvdata(dev, fbdev);
init_state++;
init_MUTEX(&fbdev->rqueue_sema);
#ifdef CONFIG_ARCH_OMAP1
fbdev->int_ctrl = &omap1_int_ctrl;
#ifdef CONFIG_FB_OMAP_LCDC_EXTERNAL
fbdev->ext_if = &sossi_extif;
#endif
#else /* OMAP2 */
fbdev->int_ctrl = &omap2_int_ctrl;
#ifdef CONFIG_FB_OMAP_LCDC_EXTERNAL
fbdev->ext_if = &rfbi_extif;
#endif
#endif
if (omapfb_find_ctrl(fbdev) < 0) {
PRNERR("LCD controller not found, board not supported\n");
pr_err("LCD controller not found, board not supported\n");
r = -ENODEV;
goto cleanup;
}
}
if (omapfb_find_panel(fbdev) < 0) {
PRNERR("LCD panel not found, board not supported\n");
pr_err("LCD panel not found, board not supported\n");
r = -ENODEV;
goto cleanup;
}
check_required_callbacks(fbdev);
printk(KERN_INFO OMAPFB_DRIVER ": configured for panel %s\n",
fbdev->panel->name);
omapfb_rqueue_init(&fbdev->rqueue);
r = fbdev->panel->init(fbdev->panel);
pr_info(MODULE_NAME ": configured for panel %s\n", fbdev->panel->name);
r = fbdev->panel->init(fbdev);
if (r)
goto cleanup;
init_state++;
......@@ -2022,26 +1272,26 @@ static int omapfb_probe(struct device *dev)
goto cleanup;
init_state++;
r = gfxdma_init(&fbdev->gfx);
if (r)
goto cleanup;
init_state++;
#ifdef CONFIG_FB_OMAP_DMA_TUNE
/* Set DMA priority for EMIFF access to highest */
omap_set_dma_priority(OMAP_DMA_PORT_EMIFF, 15);
#endif
r = fbdev->panel->enable(fbdev->panel);
r = fbdev->panel->enable();
if (r)
goto cleanup;
init_state++;
r = omapfb_set_update_mode(fbdev, manual_update ?
FB_MANUAL_UPDATE : FB_AUTO_UPDATE);
if (r)
r = ctrl_change_mode(fbdev);
if (r) {
pr_err("mode setting failed\n");
goto cleanup;
init_state++;
}
omapfb_enable_plane(fbdev, 0, 1);
omapfb_set_update_mode(fbdev, manual_update ?
OMAPFB_MANUAL_UPDATE : OMAPFB_AUTO_UPDATE);
r = omapfb_register_sysfs(fbdev);
if (r)
......@@ -2050,14 +1300,21 @@ static int omapfb_probe(struct device *dev)
r = register_framebuffer(fbdev->fb_info);
if (r != 0) {
PRNERR("register_framebuffer failed\n");
pr_err("register_framebuffer failed\n");
goto cleanup;
}
fbdev->state = OMAPFB_ACTIVE;
printk(KERN_INFO "OMAP framebuffer initialized vram=%lu\n",
fbdev->lcddma_mem_size);
panel = fbdev->panel;
phz = panel->pixel_clock * 1000;
hhz = phz * 10 / (panel->hfp + panel->x_res + panel->hbp + panel->hsw);
vhz = hhz / (panel->vfp + panel->y_res + panel->vbp + panel->vsw);
pr_info(MODULE_NAME ": initialized vram=%lu "
"pixclock %lu kHz hfreq %lu.%lu kHz vfreq %lu.%lu Hz\n",
fbdev->vram_size,
phz / 1000, hhz / 10000, hhz % 10, vhz / 10, vhz % 10);
DBGLEAVE(1);
return 0;
......@@ -2092,14 +1349,10 @@ static int omapfb_suspend(struct device *dev, pm_message_t mesg, u32 level)
DBGENTER(1);
if (fbdev->state == OMAPFB_ACTIVE) {
if (fbdev->ctrl->suspend)
fbdev->ctrl->suspend(fbdev);
fbdev->panel->disable(fbdev->panel);
fbdev->state = OMAPFB_SUSPENDED;
}
omapfb_blank(VESA_POWERDOWN, fbdev->fb_info);
DBGLEAVE(1);
return 0;
}
......@@ -2110,40 +1363,14 @@ static int omapfb_resume(struct device *dev, u32 level)
DBGENTER(1);
if (fbdev->state == OMAPFB_SUSPENDED) {
fbdev->panel->enable(fbdev->panel);
if (fbdev->ctrl->resume)
fbdev->ctrl->resume(fbdev);
fbdev->state = OMAPFB_ACTIVE;
if (manual_update)
omapfb_schedule_full_update(fbdev->fb_info);
}
omapfb_blank(VESA_NO_BLANKING, fbdev->fb_info);
DBGLEAVE(1);
return 0;
}
static void omapfb_release_dev(struct device *dev)
{
DBGENTER(1);
DBGLEAVE(1);
}
static u64 omapfb_dmamask = ~(u32)0;
static struct platform_device omapfb_device = {
.name = OMAPFB_DEVICE,
.id = -1,
.dev = {
.release = omapfb_release_dev,
.dma_mask = &omapfb_dmamask,
.coherent_dma_mask = 0xffffffff,
},
.num_resources = 0,
};
static struct device_driver omapfb_driver = {
.name = OMAPFB_DRIVER,
.name = OMAPFB_DRIVER,
.bus = &platform_bus_type,
.probe = omapfb_probe,
.remove = omapfb_remove,
......@@ -2171,16 +1398,18 @@ static int __init omapfb_setup(char *options)
char *suffix;
def_vram = (simple_strtoul(this_opt + 5, &suffix, 0));
switch (suffix[0]) {
case '\0':
break;
case 'm':
case 'M':
def_vram *= 1024 * 1024;
break;
def_vram *= 1024;
/* Fall through */
case 'k':
case 'K':
def_vram *= 1024;
break;
default:
PRNERR("invalid vram suffix\n");
pr_err("invalid vram suffix\n");
r = -1;
}
}
......@@ -2195,7 +1424,7 @@ static int __init omapfb_setup(char *options)
else if (!strncmp(this_opt, "manual_update", 13))
manual_update = 1;
else {
PRNERR("invalid option\n");
pr_err("invalid option\n");
r = -1;
}
}
......@@ -2216,7 +1445,7 @@ static int __init omapfb_init(void)
#ifndef MODULE
{
char *option;
if (fb_get_options("omapfb", &option)) {
r = -ENODEV;
goto exit;
......@@ -2224,16 +1453,9 @@ static int __init omapfb_init(void)
omapfb_setup(option);
}
#endif
/* Register the device with LDM */
if (platform_device_register(&omapfb_device)) {
PRNERR("failed to register omapfb device\n");
r = -ENODEV;
goto exit;
}
/* Register the driver with LDM */
if (driver_register(&omapfb_driver)) {
PRNERR("failed to register omapfb driver\n");
platform_device_unregister(&omapfb_device);
pr_err("failed to register omapfb driver\n");
r = -ENODEV;
goto exit;
}
......@@ -2248,7 +1470,6 @@ static void __exit omapfb_cleanup(void)
DBGENTER(1);
driver_unregister(&omapfb_driver);
platform_device_unregister(&omapfb_device);
DBGLEAVE(1);
}
......
/*
* File: drivers/video/omap/omap2/rfbi.c
*
* OMAP2 Remote Frame Buffer Interface support
*
* Copyright (C) 2005 Nokia Corporation
* Author: Juha Yrjl <juha.yrjola@nokia.com>
* Imre Deak <imre.deak@nokia.com>
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
* Free Software Foundation; either version 2 of the License, or (at your
* option) any later version.
*
* This program is distributed in the hope that it will be useful, but
* WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* General Public License for more details.
*
* You should have received a copy of the GNU General Public License along
* with this program; if not, write to the Free Software Foundation, Inc.,
* 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
#include <linux/module.h>
#include <linux/delay.h>
#include <linux/i2c.h>
#include <linux/err.h>
#include <linux/interrupt.h>
#include <asm/io.h>
#include <asm/hardware/clock.h>
#include <asm/arch/omapfb.h>
#include "dispc.h"
#define MODULE_NAME "omapfb-rfbi"
#define pr_err(fmt, args...) printk(KERN_ERR MODULE_NAME ": " fmt, ## args)
#define RFBI_BASE 0x48050800
#define RFBI_REVISION 0x0000
#define RFBI_SYSCONFIG 0x0010
#define RFBI_SYSSTATUS 0x0014
#define RFBI_CONTROL 0x0040
#define RFBI_PIXEL_CNT 0x0044
#define RFBI_LINE_NUMBER 0x0048
#define RFBI_CMD 0x004c
#define RFBI_PARAM 0x0050
#define RFBI_DATA 0x0054
#define RFBI_READ 0x0058
#define RFBI_STATUS 0x005c
#define RFBI_CONFIG0 0x0060
#define RFBI_ONOFF_TIME0 0x0064
#define RFBI_CYCLE_TIME0 0x0068
#define RFBI_DATA_CYCLE1_0 0x006c
#define RFBI_DATA_CYCLE2_0 0x0070
#define RFBI_DATA_CYCLE3_0 0x0074
#define RFBI_VSYNC_WIDTH 0x0090
#define RFBI_HSYNC_WIDTH 0x0094
#define DISPC_BASE 0x48050400
#define DISPC_CONTROL 0x0040
static struct {
u32 base;
void (*lcdc_callback)(void *data);
void *lcdc_callback_data;
unsigned long l4_khz;
} rfbi;
static inline void rfbi_write_reg(int idx, u32 val)
{
__raw_writel(val, rfbi.base + idx);
}
static inline u32 rfbi_read_reg(int idx)
{
return __raw_readl(rfbi.base + idx);
}
static int ns_to_dss_ticks(int time)
{
unsigned long tick_ps;
int ret;
/* Calculate in picosecs to yield more exact results */
tick_ps = 1000000000 / (rfbi.l4_khz);
ret = (time * 1000 + tick_ps - 1) / tick_ps;
return ret * 2;
}
static void print_timings(void)
{
u32 l;
DBGPRINT(1, "Tick time %lu ps\n", 1000000000 / rfbi.l4_khz);
l = rfbi_read_reg(RFBI_ONOFF_TIME0);
DBGPRINT(1, "CSONTIME %d, CSOFFTIME %d, WEONTIME %d, WEOFFTIME %d, "
"REONTIME %d, REOFFTIME %d\n",
l & 0x0f, (l >> 4) & 0x3f, (l >> 10) & 0x0f, (l >> 14) & 0x3f,
(l >> 20) & 0x0f, (l >> 24) & 0x3f);
l = rfbi_read_reg(RFBI_CYCLE_TIME0);
DBGPRINT(1, "WECYCLETIME %d, RECYCLETIME %d, CSPULSEWIDTH %d, "
"ACCESSTIME %d\n",
(l & 0x3f), (l >> 6) & 0x3f, (l >> 12) & 0x3f, (l >> 22) & 0x3f);
}
static void rfbi_set_timings(const struct extif_timings *t)
{
u32 l;
int on, off;
on = ns_to_l4_ticks(t->cs_on_time) & 0x0f;
l = on;
off = ns_to_l4_ticks(t->cs_off_time) & 0x3f;
if (off <= on)
off = on + 2;
l |= off << 4;
on = ns_to_l4_ticks(t->we_on_time) & 0x0f;
l |= on << 10;
off = ns_to_l4_ticks(t->we_off_time) & 0x3f;
if (off <= on)
off = on + 2;
l |= off << 14;
l |= (ns_to_l4_ticks(t->re_on_time) & 0x0f) << 20;
l |= (ns_to_l4_ticks(t->re_off_time) & 0x3f) << 24;
rfbi_write_reg(RFBI_ONOFF_TIME0, l);
l = ns_to_l4_ticks(t->we_cycle_time) & 0x3f;
l |= (ns_to_l4_ticks(t->re_cycle_time) & 0x3f) << 6;
l |= (ns_to_l4_ticks(t->cs_pulse_width) & 0x3f) << 12;
l |= (ns_to_l4_ticks(t->access_time) & 0x3f) << 22;
rfbi_write_reg(RFBI_CYCLE_TIME0, l);
}
static void rfbi_write_command(u32 cmd)
{
rfbi_write_reg(RFBI_CMD, cmd);
}
static u32 rfbi_read_data(void)
{
u32 val;
rfbi_write_reg(RFBI_READ, 0);
val = rfbi_read_reg(RFBI_READ);
return val;
}
static void rfbi_write_data(u32 val)
{
rfbi_write_reg(RFBI_PARAM, val);
}
static void rfbi_transfer_area(int width, int height,
void (callback)(void * data), void *data)
{
u32 w;
BUG_ON(callback == NULL);
dispc_set_lcd_size(width, height);
rfbi.lcdc_callback = callback;
rfbi.lcdc_callback_data = data;
rfbi_write_reg(RFBI_PIXEL_CNT, width * height);
w = rfbi_read_reg(RFBI_CONTROL);
/* Enable, Internal trigger */
rfbi_write_reg(RFBI_CONTROL, w | (1 << 0) | (1 << 4));
dispc_enable_lcd_out(1);
}
static inline void _stop_transfer(void)
{
u32 w;
w = rfbi_read_reg(RFBI_CONTROL);
rfbi_write_reg(RFBI_CONTROL, w & ~(1 << 0));
}
static void rfbi_dma_callback(void *data)
{
_stop_transfer();
rfbi.lcdc_callback(rfbi.lcdc_callback_data);
}
static int rfbi_init(void)
{
u32 l;
int r;
struct clk *dss_ick;
memset(&rfbi, 0, sizeof(rfbi));
rfbi.base = io_p2v(RFBI_BASE);
l = rfbi_read_reg(RFBI_REVISION);
pr_info(MODULE_NAME ": version %d.%d\n", (l >> 4) & 0x0f, l & 0x0f);
dss_ick = clk_get(NULL, "dss_ick");
if (IS_ERR(dss_ick)) {
pr_err("can't get dss_ick\n");
return PTR_ERR(dss_ick);
}
rfbi.l4_khz = clk_get_rate(dss_ick) / 1000;
clk_put(dss_ick);
/* Reset */
rfbi_write_reg(RFBI_SYSCONFIG, 1 << 1);
while (!(rfbi_read_reg(RFBI_SYSSTATUS) & (1 << 0)));
l = rfbi_read_reg(RFBI_SYSCONFIG);
/* Enable autoidle and smart-idle */
l |= (1 << 0) | (2 << 3);
rfbi_write_reg(RFBI_SYSCONFIG, l);
/* 16-bit interface, ITE trigger mode, 16-bit data */
l = (0x03 << 0) | (0x00 << 2) | (0x01 << 5) | (0x02 << 7);
l |= (0 << 9) | (1 << 20) | (1 << 21);
rfbi_write_reg(RFBI_CONFIG0, l);
l = 0x10;
rfbi_write_reg(RFBI_DATA_CYCLE1_0, l);
rfbi_write_reg(RFBI_DATA_CYCLE2_0, l);
rfbi_write_reg(RFBI_DATA_CYCLE3_0, l);
l = rfbi_read_reg(RFBI_CONTROL);
/* Select CS0 */
l = (0x01 << 2);
rfbi_write_reg(RFBI_CONTROL, l);
if ((r = dispc_request_irq(rfbi_dma_callback, NULL)) < 0) {
pr_err("can't get DISPC irq\n");
return r;
}
return 0;
}
static void rfbi_cleanup(void)
{
dispc_free_irq();
}
struct lcd_ctrl_extif rfbi_extif = {
.init = rfbi_init,
.cleanup = rfbi_cleanup,
.set_timings = rfbi_set_timings,
.write_command = rfbi_write_command,
.read_data = rfbi_read_data,
.write_data = rfbi_write_data,
.transfer_area = rfbi_transfer_area,
};
/*
* File: drivers/video/omap_new/omapfb_main.c
* File: drivers/video/omap/omap1/sossi.c
*
* Special optimiSed Screen Interface driver for TI OMAP boards
* OMAP1 Special OptimiSed Screen Interface support
*
* Copyright (C) 2004 Nokia Corporation
* Copyright (C) 2004-2005 Nokia Corporation
* Author: Juha Yrjl <juha.yrjola@nokia.com>
*
* This program is free software; you can redistribute it and/or modify it
......@@ -24,10 +24,13 @@
#include <linux/config.h>
#include <linux/module.h>
#include <linux/mm.h>
#include <asm/hardware/clock.h>
#include <asm/io.h>
#include "sossi.h"
#define MODULE_NAME "omapfb-sossi"
#define OMAP_SOSSI_BASE 0xfffbac00
#define SOSSI_ID_REG 0x00
#define SOSSI_INIT1_REG 0x04
......@@ -44,6 +47,8 @@
#define DMA_LCD_CTRL 0xfffee3c4
#define DMA_LCD_LCH_CTRL 0xfffee3ea
#define pr_err(fmt, args...) printk(KERN_ERR MODULE_NAME ": " fmt, ## args)
static int sossi_base = IO_ADDRESS(OMAP_SOSSI_BASE);
static inline u32 sossi_read_reg(int reg)
......@@ -86,37 +91,19 @@ static void sossi_clear_bits(int reg, u32 bits)
sossi_write_reg(reg, sossi_read_reg(reg) & ~bits);
}
#if 1
void sossi_dump(void)
{
printk(" INIT1: 0x%08x\n", sossi_read_reg(SOSSI_INIT1_REG));
printk(" INIT2: 0x%08x\n", sossi_read_reg(SOSSI_INIT2_REG));
printk(" INIT3: 0x%08x\n", sossi_read_reg(SOSSI_INIT3_REG));
printk(" TEARING: 0x%08x\n", sossi_read_reg(SOSSI_TEARING_REG));
printk(" INIT1B: 0x%08x\n", sossi_read_reg(SOSSI_INIT1B_REG));
}
#endif
static void sossi_dma_init(void)
{
/* OMAP3.1 mapping disable */
omap_writel(omap_readl(DMA_GSCR) | (1 << 3), DMA_GSCR);
/* Logical channel type to b0100 */
omap_writew(omap_readw(DMA_LCD_LCH_CTRL) | (1 << 2), DMA_LCD_LCH_CTRL);
/* LCD_DMA dest port to 1 */
omap_writew(omap_readw(DMA_LCD_CTRL) | (1 << 8), DMA_LCD_CTRL);
/* LCD_CCR OMAP31 comp mode */
omap_writew(omap_readw(DMA_LCD_CCR) | (1 << 10), DMA_LCD_CCR);
}
#define MOD_CONF_CTRL_1 0xfffe1110
#define CONF_SOSSI_RESET_R (1 << 23)
#define CONF_MOD_SOSSI_CLK_EN_R (1 << 16)
static struct clk *dpll_clk;
int sossi_init(void)
{
u32 l, k;
dpll_clk = clk_get(NULL, "ck_dpll1");
BUG_ON(dpll_clk == NULL);
/* Reset and enable the SoSSI module */
l = omap_readl(MOD_CONF_CTRL_1);
l |= CONF_SOSSI_RESET_R;
......@@ -125,15 +112,11 @@ int sossi_init(void)
omap_writel(l, MOD_CONF_CTRL_1);
l |= CONF_MOD_SOSSI_CLK_EN_R;
/* FIXME: Hardcode divide ratio 3 */
l |= 2 << 17;
omap_writel(l, MOD_CONF_CTRL_1);
omap_writel(omap_readl(ARM_IDLECT2) | (1 << 11), ARM_IDLECT2);
omap_writel(omap_readl(ARM_IDLECT1) | (1 << 6), ARM_IDLECT1);
sossi_dma_init();
l = sossi_read_reg(SOSSI_INIT2_REG);
/* Enable and reset the SoSSI block */
l |= (1 << 0) | (1 << 1);
......@@ -145,14 +128,15 @@ int sossi_init(void)
sossi_write_reg(SOSSI_ID_REG, 0);
l = sossi_read_reg(SOSSI_ID_REG);
k = sossi_read_reg(SOSSI_ID_REG);
if (l != 0x55555555 || k != 0xaaaaaaaa) {
printk(KERN_ERR "Invalid SoSSI sync pattern: %08x, %08x\n", l, k);
pr_err("Invalid SoSSI sync pattern: %08x, %08x\n", l, k);
return -ENODEV;
}
l = sossi_read_reg(SOSSI_ID_REG); /* Component code */
l = sossi_read_reg(SOSSI_ID_REG);
printk(KERN_INFO "SoSSI rev. %d.%d initialized\n", l >> 16, l & 0xffff);
pr_info(KERN_INFO MODULE_NAME ": version %d.%d initialized\n",
l >> 16, l & 0xffff);
l = sossi_read_reg(SOSSI_INIT1_REG);
l |= (1 << 19); /* DMA_MODE */
......@@ -162,25 +146,83 @@ int sossi_init(void)
return 0;
}
static void set_timings(int tw0, int tw1)
static unsigned long get_sossi_clk_rate(int div)
{
return (clk_get_rate(dpll_clk)) / div;
}
static unsigned long get_sossi_clk_period(int div)
{
/* In picoseconds */
return 1000000000 / (get_sossi_clk_rate(div) / 1000);
}
static int ns_to_sossi_ticks(int time, int div)
{
unsigned long tick_ps;
/* Calculate in picosecs to yield more exact results */
tick_ps = get_sossi_clk_period(div);
return (time * 1000 + tick_ps - 1) / tick_ps;
}
static int set_timings(int div, int tw0, int tw1)
{
u32 l;
if (tw1 * 1000 > 64 * get_sossi_clk_period(div))
return -1;
if (tw0 * 1000 > 16 * get_sossi_clk_period(div))
return -1;
l = omap_readl(MOD_CONF_CTRL_1);
l &= ~(7 << 17);
l |= (div - 1) << 17;
omap_writel(l, MOD_CONF_CTRL_1);
tw0 = ns_to_sossi_ticks(tw0, div) - 1;
tw1 = ns_to_sossi_ticks(tw1, div) - 1;
if (tw0 < 0)
tw0 = 0;
if (tw1 < 0)
tw1 = 0;
#if 0
printk("Using TW0 = %d, TW1 = %d, div = %d, period = %d ps\n",
tw0, tw1, div, get_sossi_clk_period(div));
#endif
l = sossi_read_reg(SOSSI_INIT1_REG);
l &= ~((0x0f << 20) | (0x3f << 24));
l |= ((tw0 & 0x0f) << 20) | ((tw1 & 0x3f) << 24);
sossi_write_reg(SOSSI_INIT1_REG, l);
return 0;
}
static struct sossi {
int bus_pick_width;
} sossi;
void sossi_set_xfer_params(int tw0, int tw1, int bus_pick_count, int bus_pick_width)
void sossi_set_timings(int min_time, int min_tw0, int min_tw1)
{
int div;
for (div = 1; div <= 8; div++) {
if (min_time * 1000 > get_sossi_clk_period(div))
continue;
if (set_timings(div, min_tw0, min_tw1) == 0)
break;
}
if (div == 9) {
pr_err("DPLL frequency too high for SoSSI\n");
BUG();
}
}
void sossi_set_xfer_params(int bus_pick_count, int bus_pick_width)
{
u32 l;
set_timings(tw0, tw1);
sossi.bus_pick_width = bus_pick_width;
l = ((bus_pick_count - 1) << 5) | ((bus_pick_width - 1) & 0x1f);
sossi_write_reg(SOSSI_INIT3_REG, l);
......@@ -234,27 +276,27 @@ static void set_cycles(unsigned int len)
void sossi_send_cmd(const void *data, unsigned int len)
{
sossi_clear_bits(SOSSI_INIT1_REG, 1 << 18);
set_cycles(len);
set_cycles(len);
send_data(data, len);
}
void sossi_send_data(const void *data, unsigned int len)
{
sossi_set_bits(SOSSI_INIT1_REG, 1 << 18);
set_cycles(len);
set_cycles(len);
send_data(data, len);
}
void sossi_prepare_dma_transfer(unsigned int count)
{
sossi_set_bits(SOSSI_INIT1_REG, 1 << 18);
set_cycles(count);
set_cycles(count);
}
void sossi_send_data_const32(u32 data, unsigned int count)
{
sossi_set_bits(SOSSI_INIT1_REG, 1 << 18);
set_cycles(count * 4);
set_cycles(count * 4);
while (count > 0) {
sossi_write_reg(SOSSI_FIFO_REG, data);
count--;
......@@ -283,7 +325,7 @@ void sossi_read_data(void *data, unsigned int len)
/* Before reading we must check if some writings are going on */
while (!(sossi_read_reg(SOSSI_INIT2_REG) & (1 << 3)));
sossi_set_bits(SOSSI_INIT1_REG, 1 << 18);
set_cycles(len);
set_cycles(len);
while (len >= 4) {
*(u32 *) data = sossi_read_reg(SOSSI_FIFO_REG);
len -= 4;
......
......@@ -5,7 +5,8 @@
#define SOSSI_FLAG_VS_INVERTED 0x02
extern int sossi_init(void);
extern void sossi_set_xfer_params(int tw0, int tw1, int bus_pick_count, int bus_pick_width);
extern void sossi_set_xfer_params(int bus_pick_count, int bus_pick_width);
extern void sossi_set_timings(int tick_ns, int tw0_ns, int tw1_ns);
extern void sossi_start_transfer(void);
extern void sossi_stop_transfer(void);
extern void sossi_send_cmd(const void *data, unsigned int len);
......
......@@ -233,6 +233,7 @@
#define INT_730_NAND (63 + IH2_BASE)
#define INT_24XX_SYS_NIRQ 7
#define INT_24XX_DSS_IRQ 25
#define INT_24XX_GPIO_BANK1 29
#define INT_24XX_GPIO_BANK2 30
#define INT_24XX_GPIO_BANK3 31
......
/*
* File: include/asm-arm/arch-omap/omapfb.h
*
* Framebuffer driver for TI OMAP boards
*
* Copyright (C) 2004 Nokia Corporation
* Author: Imre Deak <imre.deak@nokia.com>
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
* Free Software Foundation; either version 2 of the License, or (at your
* option) any later version.
*
* This program is distributed in the hope that it will be useful, but
* WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* General Public License for more details.
*
* You should have received a copy of the GNU General Public License along
* with this program; if not, write to the Free Software Foundation, Inc.,
* 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
#ifndef __OMAPFB_H
#define __OMAPFB_H
/* IOCTL commands. */
#define OMAP_IOW(num, dtype) _IOW('O', num, dtype)
#define OMAP_IOR(num, dtype) _IOR('O', num, dtype)
#define OMAP_IOWR(num, dtype) _IOWR('O', num, dtype)
#define OMAP_IO(num) _IO('O', num)
#define OMAPFB_MIRROR OMAP_IOW(31, int)
#define OMAPFB_SYNC_GFX OMAP_IO(37)
#define OMAPFB_VSYNC OMAP_IO(38)
#define OMAPFB_SET_UPDATE_MODE OMAP_IOW(40, enum omapfb_update_mode)
#define OMAPFB_GET_CAPS OMAP_IOR(42, unsigned long)
#define OMAPFB_GET_UPDATE_MODE OMAP_IOW(43, enum omapfb_update_mode)
#define OMAPFB_LCD_TEST OMAP_IOW(45, int)
#define OMAPFB_CTRL_TEST OMAP_IOW(46, int)
#define OMAPFB_UPDATE_WINDOW OMAP_IOW(47, struct omapfb_update_window)
#define OMAPFB_SETUP_PLANE OMAP_IOW(48, struct omapfb_setup_plane)
#define OMAPFB_ENABLE_PLANE OMAP_IOW(49, struct omapfb_enable_plane)
#define OMAPFB_SET_COLOR_KEY OMAP_IOW(50, struct omapfb_color_key)
#define OMAPFB_CAPS_GENERIC_MASK 0x00000fff
#define OMAPFB_CAPS_LCDC_MASK 0x00fff000
#define OMAPFB_CAPS_PANEL_MASK 0xff000000
#define OMAPFB_CAPS_MANUAL_UPDATE 0x00001000
#define OMAPFB_CAPS_SET_BACKLIGHT 0x01000000
/* Values from DSP must map to lower 16-bits */
#define OMAPFB_FORMAT_MASK 0x00ff
#define OMAPFB_FORMAT_FLAG_DOUBLE 0x0100
enum omapfb_color_format {
OMAPFB_COLOR_RGB565 = 0,
OMAPFB_COLOR_YUV422,
OMAPFB_COLOR_YUV420,
OMAPFB_COLOR_CLUT_8BPP,
OMAPFB_COLOR_CLUT_4BPP,
OMAPFB_COLOR_CLUT_2BPP,
OMAPFB_COLOR_CLUT_1BPP,
};
struct omapfb_update_window {
u32 x, y;
u32 width, height;
u32 format;
};
enum omapfb_plane {
OMAPFB_PLANE_GFX = 0,
OMAPFB_PLANE_VID1,
OMAPFB_PLANE_VID2,
};
enum omapfb_channel_out {
OMAPFB_CHANNEL_OUT_LCD = 0,
OMAPFB_CHANNEL_OUT_DIGIT,
};
struct omapfb_setup_plane {
u8 plane;
u8 channel_out;
u32 offset;
u32 pos_x, pos_y;
u32 width, height;
u32 color_mode;
};
struct omapfb_enable_plane {
u8 plane;
u8 enable;
};
enum omapfb_color_key_type {
OMAPFB_COLOR_KEY_DISABLED = 0,
OMAPFB_COLOR_KEY_GFX_DST,
OMAPFB_COLOR_KEY_VID_SRC,
};
struct omapfb_color_key {
u8 channel_out;
u32 background;
u32 trans_key;
u8 key_type;
};
enum omapfb_update_mode {
OMAPFB_UPDATE_DISABLED = 0,
OMAPFB_AUTO_UPDATE,
OMAPFB_MANUAL_UPDATE
};
#ifdef __KERNEL__
#include <linux/completion.h>
#include <linux/interrupt.h>
#include <linux/fb.h>
#define OMAP_LCDC_INV_VSYNC 0x0001
#define OMAP_LCDC_INV_HSYNC 0x0002
#define OMAP_LCDC_INV_PIX_CLOCK 0x0004
#define OMAP_LCDC_INV_OUTPUT_EN 0x0008
#define OMAP_LCDC_HSVS_RISING_EDGE 0x0010
#define OMAP_LCDC_HSVS_OPPOSITE 0x0020
#define OMAP_LCDC_SIGNAL_MASK 0x003f
#define OMAP_LCDC_PANEL_TFT 0x0100
#ifdef CONFIG_ARCH_OMAP1
#define OMAPFB_PLANE_NUM 1
#else
#define OMAPFB_PLANE_NUM 3
#endif
struct omapfb_device;
struct lcd_panel {
const char *name;
int config; /* TFT/STN, signal inversion */
int bpp; /* Pixel format in fb mem */
int data_lines; /* Lines on LCD HW interface */
int x_res, y_res;
int pixel_clock; /* In kHz */
int hsw; /* Horizontal synchronization
pulse width */
int hfp; /* Horizontal front porch */
int hbp; /* Horizontal back porch */
int vsw; /* Vertical synchronization
pulse width */
int vfp; /* Vertical front porch */
int vbp; /* Vertical back porch */
int acb; /* ac-bias pin frequency */
int pcd; /* pixel clock divider.
Obsolete use pixel_clock instead */
int (*init) (struct omapfb_device *fbdev);
void (*cleanup) (void);
int (*enable) (void);
void (*disable) (void);
unsigned long (*get_caps) (void);
int (*set_bklight_level)(unsigned int level);
unsigned int (*get_bklight_level)(void);
unsigned int (*get_bklight_max) (void);
int (*run_test) (int test_num);
};
struct omapfb_device;
struct extif_timings {
int cs_on_time;
int cs_off_time;
int we_on_time;
int we_off_time;
int re_on_time;
int re_off_time;
int we_cycle_time;
int re_cycle_time;
int cs_pulse_width;
int access_time;
};
struct lcd_ctrl_extif {
int (*init) (void);
void (*cleanup) (void);
void (*set_timings) (struct extif_timings timings);
void (*write_command) (u32 cmd);
u32 (*read_data) (void);
void (*write_data) (u32 data);
void (*transfer_area) (int width, int height,
void (callback)(void * data), void *data);
};
struct lcd_ctrl {
const char *name;
void *data;
int (*init) (struct omapfb_device *fbdev,
int ext_mode, int req_vram_size);
void (*cleanup) (void);
void (*get_vram_layout)(unsigned long *size,
void **virt_base,
dma_addr_t *phys_base);
unsigned long (*get_caps) (void);
int (*set_update_mode)(enum omapfb_update_mode mode);
enum omapfb_update_mode (*get_update_mode)(void);
int (*setup_plane) (int plane, int channel_out,
unsigned long offset,
int screen_width,
int pos_x, int pos_y, int width,
int height, int color_mode);
int (*enable_plane) (int plane, int enable);
int (*update_window) (struct omapfb_update_window *win,
void (*callback)(void *),
void *callback_data);
void (*sync) (void);
void (*suspend) (void);
void (*resume) (void);
int (*run_test) (int test_num);
int (*setcolreg) (u_int regno, u16 red, u16 green,
u16 blue, u16 transp,
int update_hw_mem);
int (*set_color_key) (struct omapfb_color_key *ck);
};
enum omapfb_state {
OMAPFB_DISABLED = 0,
OMAPFB_SUSPENDED= 99,
OMAPFB_ACTIVE = 100
};
struct omapfb_device {
int state;
int ext_lcdc; /* Using external
LCD controller */
struct semaphore rqueue_sema;
void *vram_virt_base;
dma_addr_t vram_phys_base;
unsigned long vram_size;
int color_mode;
int palette_size;
int mirror;
u32 pseudo_palette[17];
struct lcd_panel *panel; /* LCD panel */
struct lcd_ctrl *ctrl; /* LCD controller */
struct lcd_ctrl *int_ctrl; /* internal LCD ctrl */
struct lcd_ctrl_extif *ext_if; /* LCD ctrl external
interface */
struct fb_info *fb_info;
struct device *dev;
};
extern struct lcd_panel h3_panel;
extern struct lcd_panel h2_panel;
extern struct lcd_panel p2_panel;
extern struct lcd_panel osk_panel;
extern struct lcd_panel innovator1610_panel;
extern struct lcd_panel innovator1510_panel;
#ifdef CONFIG_ARCH_OMAP1
extern struct lcd_ctrl omap1_lcd_ctrl;
#else
extern struct lcd_ctrl omap2_disp_ctrl;
#endif
extern void omapfb_write_first_pixel(struct omapfb_device *fbdev, u16 pixval);
#endif /* __KERNEL__ */
#endif /* __OMAPFB_H */
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment