From: Imre Deak Date: Wed, 19 Oct 2005 19:53:29 +0000 (+0300) Subject: [PATCH] ARM: OMAP: FB support for OMAP2 X-Git-Tag: v2.6.15-omap2~139 X-Git-Url: http://www.pilppa.org/gitweb/gitweb.cgi?a=commitdiff_plain;h=c8d61d1be9b478d514ee90bad9b9ca046b049127;p=linux-2.6-omap-h63xx.git [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. --- diff --git a/arch/arm/configs/omap_h2_1610_defconfig b/arch/arm/configs/omap_h2_1610_defconfig index 8cb032e02a2..1cf919a752c 100644 --- a/arch/arm/configs/omap_h2_1610_defconfig +++ b/arch/arm/configs/omap_h2_1610_defconfig @@ -1,13 +1,13 @@ # # 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 diff --git a/arch/arm/configs/omap_h3_1710_defconfig b/arch/arm/configs/omap_h3_1710_defconfig index b5560178743..a32749d8f76 100644 --- a/arch/arm/configs/omap_h3_1710_defconfig +++ b/arch/arm/configs/omap_h3_1710_defconfig @@ -1,13 +1,13 @@ # # 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 diff --git a/arch/arm/configs/omap_h4_2420_defconfig b/arch/arm/configs/omap_h4_2420_defconfig index 153d59fd84b..d8417779db1 100644 --- a/arch/arm/configs/omap_h4_2420_defconfig +++ b/arch/arm/configs/omap_h4_2420_defconfig @@ -1,7 +1,7 @@ # # 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 diff --git a/arch/arm/configs/omap_innovator_1510_defconfig b/arch/arm/configs/omap_innovator_1510_defconfig index fc5850b3215..28c087ec921 100644 --- a/arch/arm/configs/omap_innovator_1510_defconfig +++ b/arch/arm/configs/omap_innovator_1510_defconfig @@ -1,12 +1,13 @@ # # 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 diff --git a/arch/arm/configs/omap_innovator_1610_defconfig b/arch/arm/configs/omap_innovator_1610_defconfig index 460c7a18d5a..7baf3bcf46b 100644 --- a/arch/arm/configs/omap_innovator_1610_defconfig +++ b/arch/arm/configs/omap_innovator_1610_defconfig @@ -1,13 +1,13 @@ # # 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 diff --git a/arch/arm/configs/omap_osk_5912_defconfig b/arch/arm/configs/omap_osk_5912_defconfig index dae95ee1c50..d190420599d 100644 --- a/arch/arm/configs/omap_osk_5912_defconfig +++ b/arch/arm/configs/omap_osk_5912_defconfig @@ -1,14 +1,13 @@ # # 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 diff --git a/arch/arm/configs/omap_perseus2_730_defconfig b/arch/arm/configs/omap_perseus2_730_defconfig index a2a11f752b2..7e08ad3dadc 100644 --- a/arch/arm/configs/omap_perseus2_730_defconfig +++ b/arch/arm/configs/omap_perseus2_730_defconfig @@ -1,7 +1,7 @@ # # 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 diff --git a/arch/arm/mach-omap1/board-h2.c b/arch/arm/mach-omap1/board-h2.c index 61dc5b213d4..ef372a9ce6f 100644 --- a/arch/arm/mach-omap1/board-h2.c +++ b/arch/arm/mach-omap1/board-h2.c @@ -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) diff --git a/arch/arm/mach-omap1/board-h3.c b/arch/arm/mach-omap1/board-h3.c index 92b0a99d318..c17793bc8f7 100644 --- a/arch/arm/mach-omap1/board-h3.c +++ b/arch/arm/mach-omap1/board-h3.c @@ -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) diff --git a/arch/arm/mach-omap1/board-innovator.c b/arch/arm/mach-omap1/board-innovator.c index c1618850438..f201b651c2e 100644 --- a/arch/arm/mach-omap1/board-innovator.c +++ b/arch/arm/mach-omap1/board-innovator.c @@ -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); diff --git a/arch/arm/mach-omap1/board-osk.c b/arch/arm/mach-omap1/board-osk.c index b5600568e90..a495fbcb460 100644 --- a/arch/arm/mach-omap1/board-osk.c +++ b/arch/arm/mach-omap1/board-osk.c @@ -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 diff --git a/arch/arm/mach-omap1/board-palmte.c b/arch/arm/mach-omap1/board-palmte.c index b8aea2da7ea..ec7c4d63f29 100644 --- a/arch/arm/mach-omap1/board-palmte.c +++ b/arch/arm/mach-omap1/board-palmte.c @@ -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) diff --git a/arch/arm/mach-omap1/board-perseus2.c b/arch/arm/mach-omap1/board-perseus2.c index 43021aa628b..1670146568d 100644 --- a/arch/arm/mach-omap1/board-perseus2.c +++ b/arch/arm/mach-omap1/board-perseus2.c @@ -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) diff --git a/arch/arm/mach-omap2/board-h4.c b/arch/arm/mach-omap2/board-h4.c index 6c15efca003..81d02e81df6 100644 --- a/arch/arm/mach-omap2/board-h4.c +++ b/arch/arm/mach-omap2/board-h4.c @@ -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) diff --git a/arch/arm/plat-omap/devices.c b/arch/arm/plat-omap/devices.c index e6e47139937..f199012c4a1 100644 --- a/arch/arm/plat-omap/devices.c +++ b/arch/arm/plat-omap/devices.c @@ -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): diff --git a/drivers/video/Kconfig b/drivers/video/Kconfig index 4cce85df9e4..0864f571dea 100644 --- a/drivers/video/Kconfig +++ b/drivers/video/Kconfig @@ -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!)" diff --git a/drivers/video/omap/Kconfig b/drivers/video/omap/Kconfig new file mode 100644 index 00000000000..5fd4aa5c202 --- /dev/null +++ b/drivers/video/omap/Kconfig @@ -0,0 +1,40 @@ +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. + diff --git a/drivers/video/omap/Makefile b/drivers/video/omap/Makefile index 569ff54ec92..391bf3f836b 100644 --- a/drivers/video/omap/Makefile +++ b/drivers/video/omap/Makefile @@ -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) diff --git a/drivers/video/omap/debug.h b/drivers/video/omap/debug.h index cbc5db8d529..835f28b6418 100644 --- a/drivers/video/omap/debug.h +++ b/drivers/video/omap/debug.h @@ -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 - 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) diff --git a/drivers/video/omap/dispc.c b/drivers/video/omap/dispc.c new file mode 100644 index 00000000000..eb85628bfa1 --- /dev/null +++ b/drivers/video/omap/dispc.c @@ -0,0 +1,838 @@ +/* + * File: drivers/video/omap/omap2/dispc.c + * + * OMAP2 display controller support + * + * Copyright (C) 2005 Nokia Corporation + * Author: Imre Deak + * + * 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 +#include + +#include + +#include + +#include + +#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"); diff --git a/drivers/video/omap/dispc.h b/drivers/video/omap/dispc.h new file mode 100644 index 00000000000..eb1512b56ce --- /dev/null +++ b/drivers/video/omap/dispc.h @@ -0,0 +1,43 @@ +#ifndef _DISPC_H +#define _DISPC_H + +#include + +#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 diff --git a/drivers/video/omap/lcd_h2.c b/drivers/video/omap/lcd_h2.c index 981cf1e2341..1021739b342 100644 --- a/drivers/video/omap/lcd_h2.c +++ b/drivers/video/omap/lcd_h2.c @@ -1,7 +1,7 @@ /* - * 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 @@ -24,16 +24,18 @@ #include #include +#include -#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, }; diff --git a/drivers/video/omap/lcd_h3.c b/drivers/video/omap/lcd_h3.c index e7e9fc50f0b..78b10c0b5f9 100644 --- a/drivers/video/omap/lcd_h3.c +++ b/drivers/video/omap/lcd_h3.c @@ -1,7 +1,7 @@ /* - * 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 @@ -25,27 +25,30 @@ #include #include +#include -#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, }; diff --git a/drivers/video/omap/lcd_h4.c b/drivers/video/omap/lcd_h4.c new file mode 100644 index 00000000000..48172477dba --- /dev/null +++ b/drivers/video/omap/lcd_h4.c @@ -0,0 +1,86 @@ +/* + * File: drivers/video/omap/lcd-h4.c + * + * LCD panel support for the TI OMAP H4 board + * + * Copyright (C) 2004 Nokia Corporation + * Author: Imre Deak + * + * 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 + +#include + +/* #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, +}; + diff --git a/drivers/video/omap/lcd_inn1510.c b/drivers/video/omap/lcd_inn1510.c index 45f1bdfc733..d6ae2f6533c 100644 --- a/drivers/video/omap/lcd_inn1510.c +++ b/drivers/video/omap/lcd_inn1510.c @@ -1,5 +1,5 @@ /* - * 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 #include +#include -#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, }; diff --git a/drivers/video/omap/lcd_inn1610.c b/drivers/video/omap/lcd_inn1610.c index 2d31695088b..bf71485e427 100644 --- a/drivers/video/omap/lcd_inn1610.c +++ b/drivers/video/omap/lcd_inn1610.c @@ -1,7 +1,7 @@ /* - * 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 @@ -24,26 +24,29 @@ #include #include +#include -#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, }; diff --git a/drivers/video/omap/lcd_osk.c b/drivers/video/omap/lcd_osk.c index 4a48832541e..54808d60fea 100644 --- a/drivers/video/omap/lcd_osk.c +++ b/drivers/video/omap/lcd_osk.c @@ -1,7 +1,7 @@ /* - * 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 @@ -23,29 +23,29 @@ */ #include + #include #include +#include -#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, }; diff --git a/drivers/video/omap/lcd_p2.c b/drivers/video/omap/lcd_p2.c index 64be10f1902..5a3e2dbf790 100644 --- a/drivers/video/omap/lcd_p2.c +++ b/drivers/video/omap/lcd_p2.c @@ -1,13 +1,13 @@ /* - * 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 * B Jp * Brian Swetland - * + * * 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 #include + #include #include - -#include "omapfb.h" +#include /* * 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, }; diff --git a/drivers/video/omap/lcd_palmte.c b/drivers/video/omap/lcd_palmte.c new file mode 100644 index 00000000000..3f25b732a4b --- /dev/null +++ b/drivers/video/omap/lcd_palmte.c @@ -0,0 +1,91 @@ +/* + * 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 + +#include +#include + +#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, +}; + diff --git a/drivers/video/omap/omap_lcdc.c b/drivers/video/omap/lcdc.c similarity index 52% rename from drivers/video/omap/omap_lcdc.c rename to drivers/video/omap/lcdc.c index fdc3af2cdad..fd5e1371f55 100644 --- a/drivers/video/omap/omap_lcdc.c +++ b/drivers/video/omap/lcdc.c @@ -1,7 +1,7 @@ /* - * 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 @@ -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 #include @@ -29,14 +29,20 @@ #include #include #include +#include #include +#include + #include #include -#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"); diff --git a/drivers/video/omap/omapfb.h b/drivers/video/omap/omapfb.h deleted file mode 100644 index 33f20864c6e..00000000000 --- a/drivers/video/omap/omapfb.h +++ /dev/null @@ -1,324 +0,0 @@ -/* - * File: drivers/video/omap_new/omapfb.c - * - * Framebuffer driver for TI OMAP boards - * - * Copyright (C) 2004 Nokia Corporation - * Author: Imre Deak - * - * 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 -#include -#include - -#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 */ diff --git a/drivers/video/omap/omapfb_main.c b/drivers/video/omap/omapfb_main.c index 430cef90d11..59b0f0f4517 100644 --- a/drivers/video/omap/omapfb_main.c +++ b/drivers/video/omap/omapfb_main.c @@ -43,28 +43,21 @@ #include #include #include +#include -#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); } diff --git a/drivers/video/omap/rfbi.c b/drivers/video/omap/rfbi.c new file mode 100644 index 00000000000..439c0ae81e6 --- /dev/null +++ b/drivers/video/omap/rfbi.c @@ -0,0 +1,262 @@ +/* + * File: drivers/video/omap/omap2/rfbi.c + * + * OMAP2 Remote Frame Buffer Interface support + * + * Copyright (C) 2005 Nokia Corporation + * Author: Juha Yrjölä + * Imre Deak + * + * 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 +#include +#include +#include +#include + +#include +#include + +#include + +#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, +}; + diff --git a/drivers/video/omap/sossi.c b/drivers/video/omap/sossi.c index b2006d77e25..e2145ebd56a 100644 --- a/drivers/video/omap/sossi.c +++ b/drivers/video/omap/sossi.c @@ -1,9 +1,9 @@ /* - * 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 Yrjölä * * This program is free software; you can redistribute it and/or modify it @@ -24,10 +24,13 @@ #include #include #include +#include #include #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; diff --git a/drivers/video/omap/sossi.h b/drivers/video/omap/sossi.h index 4cd18d7de1e..b71a4b9c63b 100644 --- a/drivers/video/omap/sossi.h +++ b/drivers/video/omap/sossi.h @@ -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); diff --git a/include/asm-arm/arch-omap/irqs.h b/include/asm-arm/arch-omap/irqs.h index 20d66797172..e2ada491fed 100644 --- a/include/asm-arm/arch-omap/irqs.h +++ b/include/asm-arm/arch-omap/irqs.h @@ -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 diff --git a/include/asm-arm/arch-omap/omapfb.h b/include/asm-arm/arch-omap/omapfb.h new file mode 100644 index 00000000000..ccda46f8661 --- /dev/null +++ b/include/asm-arm/arch-omap/omapfb.h @@ -0,0 +1,281 @@ +/* + * File: include/asm-arm/arch-omap/omapfb.h + * + * Framebuffer driver for TI OMAP boards + * + * Copyright (C) 2004 Nokia Corporation + * Author: Imre Deak + * + * 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 +#include +#include + +#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 */