]> www.pilppa.org Git - linux-2.6-omap-h63xx.git/commitdiff
Merge source.mvista.com:/home/git/linux-omap-2.6
authorTony Lindgren <tony@atomide.com>
Tue, 28 Mar 2006 15:26:53 +0000 (07:26 -0800)
committerTony Lindgren <tony@atomide.com>
Tue, 28 Mar 2006 15:26:53 +0000 (07:26 -0800)
21 files changed:
arch/arm/configs/ams_delta_defconfig [new file with mode: 0644]
arch/arm/mach-omap1/Kconfig
arch/arm/mach-omap1/Makefile
arch/arm/mach-omap1/board-ams-delta.c [new file with mode: 0644]
drivers/cbus/retu-rtc.c
drivers/cbus/retu-user.c
drivers/cbus/tahvo-usb.c
drivers/cbus/tahvo-user.c
drivers/i2c/chips/menelaus.c
drivers/input/keyboard/omap-keypad.c
drivers/media/video/omap/Makefile
drivers/media/video/omap/camera_core.c
drivers/media/video/omap/h4_sensor_power.c [new file with mode: 0644]
drivers/media/video/omap/h4sensorpower.h [new file with mode: 0644]
drivers/media/video/omap/sensor_ov9640.c
drivers/video/omap/omapfb_main.c
include/asm-arm/arch-omap/board-ams-delta.h [new file with mode: 0644]
include/asm-arm/arch-omap/omapfb.h
sound/oss/omap-audio-tsc2101.c
sound/oss/omap-audio.c
sound/oss/omap-audio.h

diff --git a/arch/arm/configs/ams_delta_defconfig b/arch/arm/configs/ams_delta_defconfig
new file mode 100644 (file)
index 0000000..03f02dd
--- /dev/null
@@ -0,0 +1,880 @@
+#
+# Automatically generated make config: don't edit
+# Linux kernel version: 2.6.16-omap1
+# Wed Mar 22 10:53:48 2006
+#
+CONFIG_ARM=y
+CONFIG_MMU=y
+CONFIG_RWSEM_GENERIC_SPINLOCK=y
+CONFIG_GENERIC_CALIBRATE_DELAY=y
+
+#
+# Code maturity level options
+#
+CONFIG_EXPERIMENTAL=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 is not set
+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_IKCONFIG is not set
+CONFIG_INITRAMFS_SOURCE=""
+CONFIG_UID16=y
+CONFIG_CC_OPTIMIZE_FOR_SIZE=y
+# CONFIG_EMBEDDED is not set
+CONFIG_KALLSYMS=y
+# CONFIG_KALLSYMS_ALL is not set
+# CONFIG_KALLSYMS_EXTRA_PASS is not set
+CONFIG_HOTPLUG=y
+CONFIG_PRINTK=y
+CONFIG_BUG=y
+CONFIG_ELF_CORE=y
+CONFIG_BASE_FULL=y
+CONFIG_FUTEX=y
+CONFIG_EPOLL=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_SLAB=y
+# CONFIG_TINY_SHMEM is not set
+CONFIG_BASE_SMALL=0
+# CONFIG_SLOB is not set
+
+#
+# Loadable module support
+#
+CONFIG_MODULES=y
+CONFIG_MODULE_UNLOAD=y
+CONFIG_MODULE_FORCE_UNLOAD=y
+CONFIG_OBSOLETE_MODPARM=y
+# CONFIG_MODVERSIONS is not set
+# CONFIG_MODULE_SRCVERSION_ALL is not set
+CONFIG_KMOD=y
+
+#
+# Block layer
+#
+
+#
+# IO Schedulers
+#
+CONFIG_IOSCHED_NOOP=y
+CONFIG_IOSCHED_AS=y
+CONFIG_IOSCHED_DEADLINE=y
+CONFIG_IOSCHED_CFQ=y
+CONFIG_DEFAULT_AS=y
+# CONFIG_DEFAULT_DEADLINE is not set
+# CONFIG_DEFAULT_CFQ is not set
+# CONFIG_DEFAULT_NOOP is not set
+CONFIG_DEFAULT_IOSCHED="anticipatory"
+
+#
+# System Type
+#
+# CONFIG_ARCH_CLPS7500 is not set
+# CONFIG_ARCH_CLPS711X is not set
+# CONFIG_ARCH_CO285 is not set
+# CONFIG_ARCH_EBSA110 is not set
+# CONFIG_ARCH_FOOTBRIDGE is not set
+# 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
+# CONFIG_ARCH_SA1100 is not set
+# CONFIG_ARCH_S3C2410 is not set
+# CONFIG_ARCH_SHARK is not set
+# CONFIG_ARCH_LH7A40X is not set
+CONFIG_ARCH_OMAP=y
+# CONFIG_ARCH_VERSATILE is not set
+# CONFIG_ARCH_REALVIEW is not set
+# CONFIG_ARCH_IMX is not set
+# CONFIG_ARCH_H720X is not set
+# CONFIG_ARCH_AAEC2000 is not set
+# CONFIG_ARCH_AT91RM9200 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_OMAP16XX is not set
+
+#
+# OMAP Board Type
+#
+# CONFIG_MACH_OMAP_INNOVATOR is not set
+# CONFIG_MACH_VOICEBLUE is not set
+# CONFIG_MACH_OMAP_PALMTE is not set
+CONFIG_MACH_AMS_DELTA=y
+# CONFIG_MACH_OMAP_GENERIC is not set
+
+#
+# OMAP CPU Speed
+#
+# CONFIG_OMAP_CLOCKS_SET_BY_BOOTLOADER is not set
+# CONFIG_OMAP_ARM_168MHZ is not set
+CONFIG_OMAP_ARM_150MHZ=y
+# 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
+#
+CONFIG_CPU_32=y
+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
+
+#
+# Processor Features
+#
+# CONFIG_ARM_THUMB is not set
+# CONFIG_CPU_ICACHE_DISABLE is not set
+# CONFIG_CPU_DCACHE_DISABLE is not set
+CONFIG_CPU_DCACHE_WRITETHROUGH=y
+
+#
+# Bus support
+#
+
+#
+# PCCARD (PCMCIA/CardBus) support
+#
+# CONFIG_PCCARD is not set
+
+#
+# Kernel Features
+#
+CONFIG_PREEMPT=y
+# CONFIG_NO_IDLE_HZ is not set
+# CONFIG_AEABI 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_SPLIT_PTLOCK_CPUS=4096
+# CONFIG_LEDS is not set
+CONFIG_ALIGNMENT_TRAP=y
+
+#
+# Boot options
+#
+CONFIG_ZBOOT_ROM_TEXT=0x0
+CONFIG_ZBOOT_ROM_BSS=0x0
+CONFIG_CMDLINE="mem=32M console=ttyS0,115200n8 root=/dev/ram0 initrd=0x11c00000,4M"
+# CONFIG_XIP_KERNEL is not set
+
+#
+# CPU Frequency scaling
+#
+# CONFIG_CPU_FREQ is not set
+
+#
+# Floating point emulation
+#
+
+#
+# At least one emulation must be selected
+#
+CONFIG_FPE_NWFPE=y
+# CONFIG_FPE_NWFPE_XP is not set
+# CONFIG_FPE_FASTFPE is not set
+
+#
+# Userspace binary formats
+#
+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
+# CONFIG_APM is not set
+
+#
+# Networking
+#
+CONFIG_NET=y
+
+#
+# Networking options
+#
+# CONFIG_NETDEBUG is not set
+CONFIG_PACKET=y
+# 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 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=y
+# CONFIG_IPV6_PRIVACY is not set
+# CONFIG_INET6_AH is not set
+# CONFIG_INET6_ESP is not set
+# CONFIG_INET6_IPCOMP is not set
+# CONFIG_INET6_TUNNEL is not set
+# CONFIG_IPV6_TUNNEL 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
+
+#
+# TIPC Configuration (EXPERIMENTAL)
+#
+# CONFIG_TIPC 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
+
+#
+# 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 is not set
+
+#
+# Connector - unified userspace <-> kernelspace linker
+#
+# CONFIG_CONNECTOR 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
+# 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_SMC91X is not set
+# 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 is not set
+# CONFIG_PPP_SYNC_TTY is not set
+# CONFIG_PPP_DEFLATE is not set
+# CONFIG_PPP_BSDCOMP is not set
+# CONFIG_PPP_MPPE is not set
+# 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
+#
+# CONFIG_ISDN is not set
+
+#
+# Input device support
+#
+CONFIG_INPUT=y
+
+#
+# Userland interfaces
+#
+CONFIG_INPUT_MOUSEDEV=y
+CONFIG_INPUT_MOUSEDEV_PSAUX=y
+CONFIG_INPUT_MOUSEDEV_SCREEN_X=1024
+CONFIG_INPUT_MOUSEDEV_SCREEN_Y=768
+# CONFIG_INPUT_JOYDEV is not set
+# CONFIG_INPUT_TSDEV is not set
+# CONFIG_INPUT_EVDEV is not set
+# CONFIG_INPUT_EVBUG is not set
+
+#
+# Input Device Drivers
+#
+CONFIG_INPUT_KEYBOARD=y
+CONFIG_KEYBOARD_ATKBD=y
+# CONFIG_KEYBOARD_SUNKBD is not set
+# CONFIG_KEYBOARD_LKKBD is not set
+# CONFIG_KEYBOARD_XTKBD is not set
+# CONFIG_KEYBOARD_NEWTON is not set
+CONFIG_KEYBOARD_OMAP=y
+# CONFIG_INPUT_MOUSE is not set
+# CONFIG_INPUT_JOYSTICK is not set
+# 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_LIBPS2=y
+# CONFIG_SERIO_RAW is not set
+# CONFIG_GAMEPORT is not set
+
+#
+# Character devices
+#
+CONFIG_VT=y
+CONFIG_VT_CONSOLE=y
+CONFIG_HW_CONSOLE=y
+# CONFIG_SERIAL_NONSTANDARD is not set
+
+#
+# Serial drivers
+#
+CONFIG_SERIAL_8250=y
+CONFIG_SERIAL_8250_CONSOLE=y
+CONFIG_SERIAL_8250_NR_UARTS=4
+CONFIG_SERIAL_8250_RUNTIME_UARTS=4
+# CONFIG_SERIAL_8250_EXTENDED is not set
+
+#
+# Non-8250 serial port support
+#
+CONFIG_SERIAL_CORE=y
+CONFIG_SERIAL_CORE_CONSOLE=y
+CONFIG_UNIX98_PTYS=y
+# CONFIG_LEGACY_PTYS is not set
+
+#
+# IPMI
+#
+# CONFIG_IPMI_HANDLER is not set
+
+#
+# Watchdog Cards
+#
+# CONFIG_WATCHDOG is not set
+# CONFIG_NVRAM is not set
+# CONFIG_RTC is not set
+CONFIG_OMAP_RTC=y
+# CONFIG_DTLK is not set
+# CONFIG_R3964 is not set
+
+#
+# Ftape, the floppy tape device driver
+#
+# CONFIG_RAW_DRIVER is not set
+
+#
+# TPM devices
+#
+# CONFIG_TCG_TPM is not set
+# CONFIG_TELCLOCK is not set
+
+#
+# I2C support
+#
+CONFIG_I2C=y
+CONFIG_I2C_CHARDEV=y
+
+#
+# I2C Algorithms
+#
+CONFIG_I2C_ALGOBIT=y
+# CONFIG_I2C_ALGOPCF is not set
+# CONFIG_I2C_ALGOPCA is not set
+
+#
+# I2C Hardware Bus support
+#
+# CONFIG_I2C_PARPORT_LIGHT is not set
+# CONFIG_I2C_STUB is not set
+# CONFIG_I2C_PCA_ISA is not set
+CONFIG_I2C_OMAP=y
+
+#
+# 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_TLV320AIC23 is not set
+# CONFIG_SENSORS_MAX6875 is not set
+# CONFIG_RTC_X1205_I2C 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
+
+#
+# SPI support
+#
+# CONFIG_SPI is not set
+# CONFIG_SPI_MASTER is not set
+
+#
+# Dallas's 1-wire bus
+#
+# CONFIG_W1 is not set
+
+#
+# Hardware Monitoring support
+#
+# CONFIG_HWMON is not set
+# CONFIG_HWMON_VID is not set
+
+#
+# Misc devices
+#
+
+#
+# Multimedia Capabilities Port drivers
+#
+
+#
+# Multimedia devices
+#
+# CONFIG_VIDEO_DEV is not set
+
+#
+# Digital Video Broadcasting Devices
+#
+# CONFIG_DVB is not set
+
+#
+# Graphics support
+#
+# CONFIG_FB is not set
+
+#
+# Console display driver support
+#
+# CONFIG_VGA_CONSOLE is not set
+CONFIG_DUMMY_CONSOLE=y
+
+#
+# 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
+
+#
+# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
+#
+
+#
+# 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
+
+#
+# CBUS support
+#
+# CONFIG_CBUS 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_OCFS2_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 is not set
+# CONFIG_UDF_FS is not set
+
+#
+# DOS/FAT/NT Filesystems
+#
+CONFIG_FAT_FS=y
+CONFIG_MSDOS_FS=y
+CONFIG_VFAT_FS=y
+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
+# CONFIG_CONFIGFS_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 is not set
+# CONFIG_NFS_V4 is not set
+# CONFIG_NFS_DIRECTIO is not set
+# CONFIG_NFSD is not set
+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=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_KARMA_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=y
+# CONFIG_NLS_CODEPAGE_737 is not set
+# CONFIG_NLS_CODEPAGE_775 is not set
+CONFIG_NLS_CODEPAGE_850=y
+CONFIG_NLS_CODEPAGE_852=y
+# 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=y
+CONFIG_NLS_ISO8859_2=y
+# 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_MAGIC_SYSRQ=y
+CONFIG_DEBUG_KERNEL=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_MUTEXES=y
+# 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 is not set
+# CONFIG_DEBUG_FS is not set
+# CONFIG_DEBUG_VM is not set
+CONFIG_FRAME_POINTER=y
+CONFIG_FORCED_INLINING=y
+# CONFIG_RCU_TORTURE_TEST is not set
+# CONFIG_DEBUG_USER is not set
+# CONFIG_DEBUG_WAITQ is not set
+# CONFIG_DEBUG_ERRORS is not set
+# CONFIG_DEBUG_LL is not set
+
+#
+# Security options
+#
+# CONFIG_KEYS is not set
+# CONFIG_SECURITY is not set
+
+#
+# Cryptographic options
+#
+# 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
index 0cad7be2c43d4e87629e868add298f89118da210..fc7d3cec9d537e771e36c622e10f945572459edf 100644 (file)
@@ -87,6 +87,13 @@ config MACH_NOKIA770
          Support for the Nokia 770 Internet Tablet. Say Y here if you
          have such a device.
 
+config MACH_AMS_DELTA
+       bool "Amstrad E3 (Delta)"
+       depends on ARCH_OMAP1 && ARCH_OMAP15XX
+       help
+         Support for the Amstrad E3 (codename Delta) videophone. Say Y here
+         if you have such a device.
+
 config MACH_OMAP_GENERIC
        bool "Generic OMAP board"
        depends on ARCH_OMAP1 && (ARCH_OMAP15XX || ARCH_OMAP16XX)
index 5e0e023af7e8d2e416696e897f4251dd155daf4a..9ea719550ad37f699478c1b271ed94651be246e7 100644 (file)
@@ -22,6 +22,7 @@ obj-$(CONFIG_MACH_OMAP_H3)            += board-h3.o
 obj-$(CONFIG_MACH_VOICEBLUE)           += board-voiceblue.o
 obj-$(CONFIG_MACH_OMAP_PALMTE)         += board-palmte.o
 obj-$(CONFIG_MACH_NOKIA770)            += board-nokia770.o
+obj-$(CONFIG_MACH_AMS_DELTA)           += board-ams-delta.o
 
 ifeq ($(CONFIG_ARCH_OMAP15XX),y)
 # Innovator-1510 FPGA
diff --git a/arch/arm/mach-omap1/board-ams-delta.c b/arch/arm/mach-omap1/board-ams-delta.c
new file mode 100644 (file)
index 0000000..6178f04
--- /dev/null
@@ -0,0 +1,116 @@
+/*
+ * linux/arch/arm/mach-omap1/board-ams-delta.c
+ *
+ * Modified from board-generic.c
+ *
+ * Board specific inits for the Amstrad E3 (codename Delta) videophone
+ *
+ * Copyright (C) 2006 Jonathan McDowell <noodles@earth.li>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation.
+ */
+
+#include <linux/kernel.h>
+#include <linux/init.h>
+#include <linux/platform_device.h>
+
+#include <asm/hardware.h>
+#include <asm/mach-types.h>
+#include <asm/mach/arch.h>
+#include <asm/mach/map.h>
+
+#include <asm/arch/board-ams-delta.h>
+#include <asm/arch/gpio.h>
+#include <asm/arch/mux.h>
+#include <asm/arch/usb.h>
+#include <asm/arch/board.h>
+#include <asm/arch/common.h>
+
+static u8 ams_delta_latch1_reg;
+static u16 ams_delta_latch2_reg;
+
+void ams_delta_latch1_write(u8 mask, u8 value)
+{
+       ams_delta_latch1_reg &= ~mask;
+       ams_delta_latch1_reg |= value;
+       *(volatile __u8 *) AMS_DELTA_LATCH1_VIRT = ams_delta_latch1_reg;
+}
+
+void ams_delta_latch2_write(u16 mask, u16 value)
+{
+       ams_delta_latch2_reg &= ~mask;
+       ams_delta_latch2_reg |= value;
+       *(volatile __u16 *) AMS_DELTA_LATCH2_VIRT = ams_delta_latch2_reg;
+}
+
+static void __init ams_delta_init_irq(void)
+{
+       omap1_init_common_hw();
+       omap_init_irq();
+       omap_gpio_init();
+}
+
+static struct map_desc ams_delta_io_desc[] __initdata = {
+       // AMS_DELTA_LATCH1
+       {
+               .virtual        = AMS_DELTA_LATCH1_VIRT,
+               .pfn            = __phys_to_pfn(AMS_DELTA_LATCH1_PHYS),
+               .length         = 0x01000000,
+               .type           = MT_DEVICE
+       },
+       // AMS_DELTA_LATCH2
+       {
+               .virtual        = AMS_DELTA_LATCH2_VIRT,
+               .pfn            = __phys_to_pfn(AMS_DELTA_LATCH2_PHYS),
+               .length         = 0x01000000,
+               .type           = MT_DEVICE
+       },
+       // AMS_DELTA_MODEM
+       {
+               .virtual        = AMS_DELTA_MODEM_VIRT,
+               .pfn            = __phys_to_pfn(AMS_DELTA_MODEM_PHYS),
+               .length         = 0x01000000,
+               .type           = MT_DEVICE
+       }
+};
+
+static struct omap_uart_config ams_delta_uart_config __initdata = {
+       .enabled_uarts = 1,
+};
+
+static struct omap_board_config_kernel ams_delta_config[] = {
+       { OMAP_TAG_UART,        &ams_delta_uart_config },
+};
+
+static void __init ams_delta_init(void)
+{
+       iotable_init(ams_delta_io_desc, ARRAY_SIZE(ams_delta_io_desc));
+
+       omap_board_config = ams_delta_config;
+       omap_board_config_size = ARRAY_SIZE(ams_delta_config);
+       omap_serial_init();
+
+       /* Clear latch2 (NAND, LCD, modem enable) */
+       ams_delta_latch2_write(~0, 0);
+}
+
+static void __init ams_delta_map_io(void)
+{
+       omap1_map_common_io();
+}
+
+MACHINE_START(AMS_DELTA, "Amstrad E3 (Delta)")
+       /* Maintainer: Jonathan McDowell <noodles@earth.li> */
+       .phys_io        = 0xfff00000,
+       .io_pg_offst    = ((0xfef00000) >> 18) & 0xfffc,
+       .boot_params    = 0x10000100,
+       .map_io         = ams_delta_map_io,
+       .init_irq       = ams_delta_init_irq,
+       .init_machine   = ams_delta_init,
+       .timer          = &omap_timer,
+MACHINE_END
+
+EXPORT_SYMBOL(ams_delta_latch1_write);
+EXPORT_SYMBOL(ams_delta_latch2_write);
index 6471e7ed0c34102dcac1e0982be418ff9c918407..cb69804f31f1c5e07fce02019917e1cd594ad1b3 100644 (file)
 #include <linux/module.h>
 #include <linux/completion.h>
 #include <linux/platform_device.h>
-#include <asm/semaphore.h>
+#include <linux/mutex.h>
 
 #include "cbus.h"
 #include "retu.h"
 
-static struct semaphore retu_rtc_sem;
+static struct mutex retu_rtc_mutex;
 static u16 retu_rtc_alarm_expired;
 static u16 retu_rtc_reset_occurred;
 
@@ -63,7 +63,7 @@ static ssize_t retu_rtc_time_show(struct device *dev, struct device_attribute *a
 {
        u16 dsr, hmr, dsr2;
 
-       down(&retu_rtc_sem);
+       mutex_lock(&retu_rtc_mutex);
 
        do {
                u16 dummy;
@@ -82,7 +82,7 @@ static ssize_t retu_rtc_time_show(struct device *dev, struct device_attribute *a
                dsr2    = retu_read_reg(RETU_REG_RTCDSR);
        } while ((dsr != dsr2));
 
-       up(&retu_rtc_sem);
+       mutex_unlock(&retu_rtc_mutex);
 
        /*
         * Format a 32-bit date-string for userspace
@@ -104,7 +104,7 @@ static ssize_t retu_rtc_time_show(struct device *dev, struct device_attribute *a
 static ssize_t retu_rtc_time_store(struct device *dev, struct device_attribute *attr,
                                   const char *buf, size_t count)
 {
-       down(&retu_rtc_sem);
+       mutex_lock(&retu_rtc_mutex);
        /*
         * Writing anything to the day counter forces it to 0
         * The seconds counter would be cleared by resetting the minutes counter,
@@ -117,7 +117,7 @@ static ssize_t retu_rtc_time_store(struct device *dev, struct device_attribute *
        retu_write_reg(RETU_REG_RTCDSR,
                       retu_read_reg(RETU_REG_RTCDSR) & (1 << 6));
 
-       up(&retu_rtc_sem);
+       mutex_unlock(&retu_rtc_mutex);
 
        return count;
 }
@@ -167,12 +167,12 @@ static ssize_t retu_rtc_reset_store(struct device *dev, struct device_attribute
 
        if(sscanf(buf, "%u", &choice) != 1)
                return count;
-       down(&retu_rtc_sem);
+       mutex_lock(&retu_rtc_mutex);
        if (choice == 0)
                retu_rtc_reset_occurred = 0;
        else if (choice == 1)
                retu_rtc_do_reset();
-       up(&retu_rtc_sem);
+       mutex_unlock(&retu_rtc_mutex);
        return count;
 }
 
@@ -185,7 +185,7 @@ static ssize_t retu_rtc_alarm_show(struct device *dev, struct device_attribute *
        u16 chmar;
        ssize_t retval;
 
-       down(&retu_rtc_sem);
+       mutex_lock(&retu_rtc_mutex);
        /*
         * Format a 16-bit date-string for userspace
         *
@@ -195,7 +195,7 @@ static ssize_t retu_rtc_alarm_show(struct device *dev, struct device_attribute *
        chmar = retu_read_reg(RETU_REG_RTCHMAR);
        /* No shifting needed, only masking unrelated bits */
        retval = sprintf(buf, "0x%04x\n", chmar & 0x1f3f);
-       up(&retu_rtc_sem);
+       mutex_unlock(&retu_rtc_mutex);
 
        return retval;
 }
@@ -208,7 +208,7 @@ static ssize_t retu_rtc_alarm_store(struct device *dev, struct device_attribute
        unsigned hours;
        unsigned minutes;
 
-       down(&retu_rtc_sem);
+       mutex_lock(&retu_rtc_mutex);
 
        if(sscanf(buf, "%x", &alrm) != 1)
                return count;
@@ -233,7 +233,7 @@ static ssize_t retu_rtc_alarm_store(struct device *dev, struct device_attribute
                        /* enable the interrupt */
                        retu_enable_irq(RETU_INT_RTCA);
        }
-       up(&retu_rtc_sem);
+       mutex_unlock(&retu_rtc_mutex);
 
        return count;
 }
@@ -268,9 +268,9 @@ static ssize_t retu_rtc_cal_show(struct device *dev, struct device_attribute *at
 {
        u16 rtccalr1;
 
-       down(&retu_rtc_sem);
+       mutex_lock(&retu_rtc_mutex);
        rtccalr1 = retu_read_reg(RETU_REG_RTCCALR);
-       up(&retu_rtc_sem);
+       mutex_unlock(&retu_rtc_mutex);
 
        /*
         * Shows the status of the Calibration Register.
@@ -291,10 +291,10 @@ static ssize_t retu_rtc_cal_store(struct device *dev, struct device_attribute *a
        if (sscanf(buf, "%x", &calibration_value) != 1)
                return count;
 
-       down(&retu_rtc_sem);
+       mutex_lock(&retu_rtc_mutex);
        retu_rtc_barrier();
        retu_write_reg(RETU_REG_RTCCALR, calibration_value & 0x00ff);
-       up(&retu_rtc_sem);
+       mutex_unlock(&retu_rtc_mutex);
 
        return count;
 }
@@ -370,7 +370,7 @@ static int __devinit retu_rtc_probe(struct device *dev)
        if ((r = retu_rtc_init_irq()) != 0)
                return r;
 
-       init_MUTEX(&retu_rtc_sem);
+       mutex_init(&retu_rtc_mutex);
 
        /* If the calibration register is zero, we've probably lost
         * power */
index 69d1be966de80f5c32a062b38e1ac1c878875e12..3245945bebb9809a82d37124a780be449f831416 100644 (file)
@@ -31,6 +31,7 @@
 #include <linux/poll.h>
 #include <linux/list.h>
 #include <linux/spinlock.h>
+#include <linux/mutex.h>
 
 #include <asm/uaccess.h>
 
@@ -64,7 +65,7 @@ static LIST_HEAD(retu_irqs_reserve);
 DECLARE_WAIT_QUEUE_HEAD(retu_user_waitqueue);
 
 /* Semaphore to protect irq subscription sequence */
-static struct semaphore retu_sem;
+static struct mutex retu_mutex;
 
 /* This array specifies RETU register types (read/write/toggle) */
 static const u8 retu_access_bits[] = {
@@ -135,14 +136,14 @@ static int retu_user_subscribe_to_irq(int id, struct file *filp)
 {
        int ret;
 
-       down(&retu_sem);
+       mutex_lock(&retu_mutex);
        if ((retu_irq_subscr != NULL) && (retu_irq_subscr != filp)) {
-               up(&retu_sem);
+               mutex_unlock(&retu_mutex);
                return -EBUSY;
        }
        /* Store the file pointer of the first user process registering IRQs */
        retu_irq_subscr = filp;
-       up(&retu_sem);
+       mutex_unlock(&retu_mutex);
 
        if (retu_irq_bits & (1 << id))
                return 0;
@@ -384,7 +385,7 @@ int retu_user_init(void)
        retu_irq_block = irq;
 
        spin_lock_init(&retu_irqs_lock);
-       sema_init(&retu_sem, 1);
+       mutex_init(&retu_mutex);
 
        /* Request a misc device */
        res = misc_register(&retu_device);
index e7f4b888d8527612a3944a50f8c2eaea3af1a961..aef8481f35c4b6fa6a9430b00a46c59d21d1f24d 100644 (file)
@@ -38,9 +38,9 @@
 #include <linux/workqueue.h>
 #include <linux/kobject.h>
 #include <linux/clk.h>
+#include <linux/mutex.h>
 
 #include <asm/irq.h>
-#include <asm/semaphore.h>
 #include <asm/arch/usb.h>
 
 #include "cbus.h"
@@ -92,7 +92,7 @@ struct tahvo_usb {
        struct otg_transceiver otg;
        int vbus_state;
        struct work_struct irq_work;
-       struct semaphore serialize;
+       struct mutex serialize;
 #ifdef CONFIG_USB_OTG
        int tahvo_mode;
 #endif
@@ -414,13 +414,13 @@ static int tahvo_usb_set_host(struct otg_transceiver *otg, struct usb_bus *host)
 
 #if defined(CONFIG_USB_OTG) || !defined(CONFIG_USB_GADGET_OMAP)
 
-       down(&tu->serialize);
+       mutex_lock(&tu->serialize);
 
        if (!host) {
                if (TAHVO_MODE(tu) == TAHVO_MODE_HOST)
                        tahvo_usb_power_off(tu);
                tu->otg.host = 0;
-               up(&tu->serialize);
+               mutex_unlock(&tu->serialize);
                return 0;
        }
 
@@ -432,7 +432,7 @@ static int tahvo_usb_set_host(struct otg_transceiver *otg, struct usb_bus *host)
 
        tu->otg.host = host;
 
-       up(&tu->serialize);
+       mutex_unlock(&tu->serialize);
 #else
        /* No host mode configured, so do not allow host controlled to be set */
        return -EINVAL;
@@ -450,13 +450,13 @@ static int tahvo_usb_set_peripheral(struct otg_transceiver *otg, struct usb_gadg
 
 #if defined(CONFIG_USB_OTG) || defined(CONFIG_USB_GADGET_OMAP)
 
-       down(&tu->serialize);
+       mutex_lock(&tu->serialize);
 
        if (!gadget) {
                if (TAHVO_MODE(tu) == TAHVO_MODE_PERIPHERAL)
                        tahvo_usb_power_off(tu);
                tu->otg.gadget = 0;
-               up(&tu->serialize);
+               mutex_unlock(&tu->serialize);
                return 0;
        }
 
@@ -464,7 +464,7 @@ static int tahvo_usb_set_peripheral(struct otg_transceiver *otg, struct usb_gadg
        if (TAHVO_MODE(tu) == TAHVO_MODE_PERIPHERAL)
                tahvo_usb_become_peripheral(tu);
 
-       up(&tu->serialize);
+       mutex_unlock(&tu->serialize);
 #else
        /* No gadget mode configured, so do not allow host controlled to be set */
        return -EINVAL;
@@ -477,9 +477,9 @@ static void tahvo_usb_irq_work(void *data)
 {
        struct tahvo_usb *tu = (struct tahvo_usb *)data;
 
-       down(&tu->serialize);
+       mutex_lock(&tu->serialize);
        check_vbus_state(tu);
-       up(&tu->serialize);
+       mutex_unlock(&tu->serialize);
 }
 
 static void tahvo_usb_vbus_interrupt(unsigned long arg)
@@ -514,7 +514,7 @@ static ssize_t otg_mode_store(struct device *device,
        int r;
 
        r = strlen(buf);
-       down(&tu->serialize);
+       mutex_lock(&tu->serialize);
        if (strncmp(buf, "host", 4) == 0) {
                if (tu->tahvo_mode == TAHVO_MODE_PERIPHERAL)
                        tahvo_usb_stop_peripheral(tu);
@@ -540,7 +540,7 @@ static ssize_t otg_mode_store(struct device *device,
        } else
                r = -EINVAL;
 
-       up(&tu->serialize);
+       mutex_unlock(&tu->serialize);
        return r;
 }
 
@@ -568,7 +568,7 @@ static int tahvo_usb_probe(struct device *dev)
 #endif
 
        INIT_WORK(&tu->irq_work, tahvo_usb_irq_work, tu);
-       init_MUTEX(&tu->serialize);
+       mutex_init(&tu->serialize);
 
        /* Set initial state, so that we generate kevents only on
         * state changes */
index 7e6f770702500d87d9bcfddafb4575bcd1ee4933..972c7efc20d7089202dcce687e589bc0e02c388f 100644 (file)
@@ -31,6 +31,7 @@
 #include <linux/poll.h>
 #include <linux/list.h>
 #include <linux/spinlock.h>
+#include <linux/mutex.h>
 
 #include <asm/uaccess.h>
 
@@ -64,7 +65,7 @@ static LIST_HEAD(tahvo_irqs_reserve);
 DECLARE_WAIT_QUEUE_HEAD(tahvo_user_waitqueue);
 
 /* Semaphore to protect irq subscription sequence */
-static struct semaphore tahvo_sem;
+static struct mutex tahvo_mutex;
 
 /* This array specifies TAHVO register types (read/write/toggle) */
 static const u8 tahvo_access_bits[] = {
@@ -120,14 +121,14 @@ static int tahvo_user_subscribe_to_irq(int id, struct file *filp)
 {
        int ret;
 
-       down(&tahvo_sem);
+       mutex_lock(&tahvo_mutex);
        if ((tahvo_irq_subscr != NULL) && (tahvo_irq_subscr != filp)) {
-               up(&tahvo_sem);
+               mutex_unlock(&tahvo_mutex);
                return -EBUSY;
        }
        /* Store the file pointer of the first user process registering IRQs */
        tahvo_irq_subscr = filp;
-       up(&tahvo_sem);
+       mutex_unlock(&tahvo_mutex);
 
        if (tahvo_irq_bits & (1 << id))
                return 0;
@@ -365,7 +366,7 @@ int tahvo_user_init(void)
        tahvo_irq_block = irq;
 
        spin_lock_init(&tahvo_irqs_lock);
-       sema_init(&tahvo_sem, 1);
+       mutex_init(&tahvo_mutex);
 
        /* Request a misc device */
        res = misc_register(&tahvo_device);
index c3a750e56c430c330d4b0c586dda5823a1d2c47d..b305e7f2ac2a0ad7e0bc8f0861a677b449485b37 100644 (file)
@@ -33,6 +33,7 @@
 #include <linux/i2c.h>
 #include <linux/interrupt.h>
 #include <linux/sched.h>
+#include <linux/mutex.h>
 
 #include <asm/mach-types.h>
 #include <asm/mach/irq.h>
@@ -133,7 +134,7 @@ I2C_CLIENT_INSMOD;
 
 struct menelaus_chip {
        unsigned long           initialized;
-       struct semaphore        lock;
+       struct mutex            lock;
        struct i2c_client       client;
        struct work_struct      work;
        int                     irq;
@@ -193,10 +194,10 @@ static void menelaus_ack_irq(int irq)
 /* Adds a handler for an interrupt. Does not run in interrupt context */
 static int menelaus_add_irq_work(int irq, void * handler)
 {
-       down(&menelaus.lock);
+       mutex_lock(&menelaus.lock);
        menelaus.handlers[irq] = handler;
        menelaus_enable_irq(irq);
-       up(&menelaus.lock);
+       mutex_unlock(&menelaus.lock);
 
        return 0;
 }
@@ -204,10 +205,10 @@ static int menelaus_add_irq_work(int irq, void * handler)
 /* Removes handler for an interrupt */
 static void menelaus_remove_irq_work(int irq)
 {
-       down(&menelaus.lock);
+       mutex_lock(&menelaus.lock);
        menelaus_disable_irq(irq);
        menelaus.handlers[irq] = NULL;
-       up(&menelaus.lock);
+       mutex_unlock(&menelaus.lock);
 }
 
 /*-----------------------------------------------------------------------*/
@@ -332,7 +333,7 @@ static void menelaus_work(void * _menelaus)
 
                for (i = 0; i < IH_MENELAUS_IRQS; i++) {
                        if (isr & (1 << i)) {
-                               down(&menelaus->lock);
+                               mutex_lock(&menelaus->lock);
                                menelaus_disable_irq(i);
                                menelaus_ack_irq(i);
                                if (menelaus->handlers[i]) {
@@ -340,7 +341,7 @@ static void menelaus_work(void * _menelaus)
                                        handler(menelaus);
                                }
                                menelaus_enable_irq(i);
-                               up(&menelaus->lock);
+                               mutex_unlock(&menelaus->lock);
                        }
                }
        }
@@ -405,7 +406,7 @@ static int menelaus_probe(struct i2c_adapter *adapter, int address, int kind)
        if (err)
                printk(KERN_ERR "Could not get Menelaus IRQ\n");
 
-       init_MUTEX(&menelaus.lock);
+       mutex_init(&menelaus.lock);
        INIT_WORK(&menelaus.work, menelaus_work, &menelaus);
 
        if (kind < 0)
index e6057faf5d749a221f4f920e2512688ce24e3b17..98bbe976c8d1c39b5ddb19eb879518198041f141 100644 (file)
@@ -32,6 +32,7 @@
 #include <linux/kernel.h>
 #include <linux/delay.h>
 #include <linux/platform_device.h>
+#include <linux/mutex.h>
 #include <asm/arch/irqs.h>
 #include <asm/arch/gpio.h>
 #include <asm/arch/hardware.h>
@@ -48,14 +49,14 @@ static void omap_kp_tasklet(unsigned long);
 static void omap_kp_timer(unsigned long);
 
 static unsigned char keypad_state[8];
-static DECLARE_MUTEX(kp_enable_mutex);
+static DEFINE_MUTEX(kp_enable_mutex);
 static int kp_enable = 1;
 static int kp_cur_group = -1;
 
 struct omap_kp {
        struct input_dev *input;
        struct timer_list timer;
-       unsigned int irq;
+       int irq;
        unsigned int rows;
        unsigned int cols;
 };
@@ -250,7 +251,7 @@ static ssize_t omap_kp_enable_store(struct device *dev, struct device_attribute
        if ((state != 1) && (state != 0))
                return -EINVAL;
 
-       down(&kp_enable_mutex);
+       mutex_lock(&kp_enable_mutex);
        if (state != kp_enable) {
                if (state)
                        enable_irq(INT_KEYBOARD);
@@ -258,7 +259,7 @@ static ssize_t omap_kp_enable_store(struct device *dev, struct device_attribute
                        disable_irq(INT_KEYBOARD);
                kp_enable = state;
        }
-       up(&kp_enable_mutex);
+       mutex_unlock(&kp_enable_mutex);
 
        return strnlen(buf, count);
 }
@@ -357,7 +358,7 @@ static int __init omap_kp_probe(struct platform_device *pdev)
        kp_tasklet.data = (unsigned long) omap_kp;
 
        omap_kp->irq = platform_get_irq(pdev, 0);
-       if (omap_kp->irq) {
+       if (omap_kp->irq >= 0) {
                if (request_irq(omap_kp->irq, omap_kp_interrupt, 0,
                                "omap-keypad", omap_kp) < 0)
                        return -EINVAL;
index c4c5a81b0d41b71d93e5ea60046e0335dde63140..10987bedf3caa6532f43fbe005b2021697cf6afc 100644 (file)
@@ -7,6 +7,7 @@ objs-yy := camera_core.o
 
 objs-y$(CONFIG_ARCH_OMAP16XX) += omap16xxcam.o
 objs-y$(CONFIG_MACH_OMAP_H3) += h3_sensor_power.o
+objs-y$(CONFIG_MACH_OMAP_H4) += h4_sensor_power.o
 
 omapcamera-objs := $(objs-yy)
 
index 12c1fd1735fd76b4b49e30a5cac254c9c24e966a..f5f916d4c94d299cd18ae2505e163c4617aa593d 100644 (file)
@@ -914,9 +914,9 @@ camera_core_open(struct inode *inode, struct file *file)
 }
 
 #ifdef CONFIG_PM
-static int camera_core_suspend(struct device *dev, pm_message_t state)
+static int camera_core_suspend(struct platform_device *pdev, pm_message_t state)
 {
-       struct camera_device *cam = dev_get_drvdata(dev);
+       struct camera_device *cam = platform_get_drvdata(pdev);
        int ret = 0;
 
        spin_lock(&cam->img_lock);
@@ -925,12 +925,13 @@ static int camera_core_suspend(struct device *dev, pm_message_t state)
        }
        cam->cam_sensor->power_off(cam->sensor_data);
        spin_unlock(&cam->img_lock);
+
        return ret;
 }
 
-static int camera_core_resume(struct device *dev)
+static int camera_core_resume(struct platform_device *pdev)
 {
-       struct camera_device *cam = dev_get_drvdata(dev);
+       struct camera_device *cam = platform_get_drvdata(pdev);
        int ret = 0;
 
        spin_lock(&cam->img_lock);
@@ -946,7 +947,7 @@ static int camera_core_resume(struct device *dev)
                camera_core_sgdma_process(cam);
        }
        spin_unlock(&cam->img_lock);
-
+       
        return ret;
 }
 #endif /* CONFIG_PM */
@@ -963,90 +964,29 @@ static struct file_operations camera_core_fops =
        .release                = camera_core_release,
 };
 
-static struct device_driver camera_core_driver = {
-       .name                   = CAM_NAME,
-       .bus                    = &platform_bus_type,
-       .probe                  = NULL,
-       .remove                 = NULL,
-#ifdef CONFIG_PM
-       .suspend                = camera_core_suspend,
-       .resume                 = camera_core_resume,
-#endif
-       .shutdown               = NULL,
-};
-
-static struct platform_device camera_core_device = {
-       .name   = CAM_NAME,
-       .dev    = {
-                       .release        = NULL,
-                 },
-       .id     = 0,
-};
-
-void
-camera_core_cleanup(void)
-{
-       struct camera_device *cam = camera_dev;
-       struct video_device *vfd;
-
-       if (!cam)
-               return;
-
-       vfd = cam->vfd;
-       if (vfd) {
-               if (vfd->minor == -1) {
-                       /* The device never got registered, so release the 
-                       ** video_device struct directly
-                       */
-                       video_device_release(vfd);
-               } else {
-                       /* The unregister function will release the video_device
-                       ** struct as well as unregistering it.
-                       */
-                       video_unregister_device(vfd);
-                       driver_unregister(&camera_core_driver);
-                       platform_device_unregister(&camera_core_device);
-               }
-               cam->vfd = NULL;
-       }
-       if (cam->overlay_base) {
-               dma_free_coherent(NULL, cam->overlay_size,
-                                       (void *)cam->overlay_base, 
-                                       cam->overlay_base_phys);
-               cam->overlay_base = 0;
-       }       
-       cam->overlay_base_phys = 0;
-
-       cam->cam_sensor->cleanup(cam->sensor_data);
-       cam->cam_hardware->cleanup(cam->hardware_data);
-       kfree(cam);
-       camera_dev = NULL;
-
-       return;
-}
-
-
-int __init 
-camera_core_init(void)
+static int __init camera_core_probe(struct platform_device *pdev)
 {
        struct camera_device *cam;
        struct video_device *vfd;
+       int     status;
 
        cam = kzalloc(sizeof(struct camera_device), GFP_KERNEL);
        if (!cam) {
                printk(KERN_ERR CAM_NAME ": could not allocate memory\n");
-               goto init_error;
+               status = -ENOMEM;
+               goto err0;
        }
-       
+
        /* Save the pointer to camera device in a global variable */
        camera_dev = cam;
-
+       
        /* initialize the video_device struct */
        vfd = cam->vfd = video_device_alloc();
        if (!vfd) {
                printk(KERN_ERR CAM_NAME 
                        ": could not allocate video device struct\n");
-               goto init_error;
+               status = -ENOMEM;
+               goto err1;
        }
        
        vfd->release = video_device_release;
@@ -1077,7 +1017,8 @@ camera_core_init(void)
                if (!cam->overlay_base) {
                        printk(KERN_ERR CAM_NAME
                                ": cannot allocate overlay framebuffer\n");
-                       goto init_error;
+                       status = -ENOMEM;
+                       goto err2;
                }
        }
        memset((void*)cam->overlay_base, 0, cam->overlay_size);
@@ -1092,7 +1033,8 @@ camera_core_init(void)
        cam->hardware_data = cam->cam_hardware->init();
        if (!cam->hardware_data) {
                printk(KERN_ERR CAM_NAME ": cannot initialize interface hardware\n");
-               goto init_error;
+               status = -ENODEV;
+               goto err3;
        }
         
        /* initialize the spinlock used to serialize access to the image 
@@ -1116,7 +1058,8 @@ camera_core_init(void)
        if (!cam->sensor_data) {
                cam->cam_hardware->disable(cam->hardware_data);
                printk(KERN_ERR CAM_NAME ": cannot initialize sensor\n");
-               goto init_error;
+               status = -ENODEV;
+               goto err4;
        }
 
        printk(KERN_INFO CAM_NAME ": %s interface with %s sensor\n",
@@ -1141,35 +1084,116 @@ camera_core_init(void)
 
        /* Disable the Camera after detection */
        cam->cam_hardware->disable(cam->hardware_data);
-
-       dev_set_drvdata(&camera_core_device.dev, (void *)cam);
-       if (platform_device_register(&camera_core_device) < 0) {
-               printk(KERN_ERR CAM_NAME
-                       ": could not register platform_device\n");
-               goto init_error;
-       }
-
-       if (driver_register(&camera_core_driver) < 0) {
-               printk(KERN_ERR CAM_NAME
-                       ": could not register driver\n");
-               platform_device_unregister(&camera_core_device);
-               goto init_error;
-       }
+       
+       platform_set_drvdata(pdev, cam);
+       
        if (video_register_device(vfd, VFL_TYPE_GRABBER, video_nr) < 0) {
                printk(KERN_ERR CAM_NAME 
                        ": could not register Video for Linux device\n");
-               platform_device_unregister(&camera_core_device);
-               driver_unregister(&camera_core_driver);
-               goto init_error;
+               status = -ENODEV;
+               goto err5;
        }
 
        printk(KERN_INFO CAM_NAME 
-               ": registered device video%d [v4l2]\n", vfd->minor);
+              ": registered device video%d [v4l2]\n", vfd->minor);
+
        return 0;
 
-init_error:
-       camera_core_cleanup();
-       return -ENODEV;
+ err5:
+       cam->cam_sensor->cleanup(cam->sensor_data);
+ err4:
+       cam->cam_hardware->cleanup(cam->hardware_data);
+ err3:
+       dma_free_coherent(NULL, cam->overlay_size,
+                               (void *)cam->overlay_base, 
+                               cam->overlay_base_phys);
+       cam->overlay_base = 0;
+ err2:
+       video_device_release(vfd);
+ err1:
+       kfree(cam);
+       camera_dev = NULL;
+ err0:
+       return status;
+}
+
+static int camera_core_remove(struct platform_device *pdev)
+{
+       struct camera_device *cam = platform_get_drvdata(pdev);
+       struct video_device *vfd;
+
+       vfd = cam->vfd;
+       if (vfd) {
+               if (vfd->minor == -1) {
+                       /* The device never got registered, so release the 
+                       ** video_device struct directly
+                       */
+                       video_device_release(vfd);
+               } else {
+                       /* The unregister function will release the video_device
+                       ** struct as well as unregistering it.
+                       */
+                       video_unregister_device(vfd);
+               }
+               cam->vfd = NULL;
+       }
+       if (cam->overlay_base) {
+               dma_free_coherent(NULL, cam->overlay_size,
+                                       (void *)cam->overlay_base, 
+                                       cam->overlay_base_phys);
+               cam->overlay_base = 0;
+       }       
+       cam->overlay_base_phys = 0;
+
+       cam->cam_sensor->cleanup(cam->sensor_data);
+       cam->cam_hardware->cleanup(cam->hardware_data);
+       kfree(cam);
+       camera_dev = NULL;
+
+       return 0;
+}
+
+static struct platform_driver camera_core_driver = {
+       .driver = {
+               .name           = CAM_NAME,
+               .owner          = THIS_MODULE,
+       },
+       .probe                  = camera_core_probe,
+       .remove                 = camera_core_remove,
+#ifdef CONFIG_PM
+       .suspend                = camera_core_suspend,
+       .resume                 = camera_core_resume,
+#endif
+};
+
+static struct platform_device camera_core_device = {
+       .name   = CAM_NAME,
+       .dev    = {
+                       .release        = NULL,
+                 },
+       .id     = 0,
+};
+
+void __exit
+camera_core_cleanup(void)
+{
+       platform_driver_unregister(&camera_core_driver);
+       platform_device_unregister(&camera_core_device);
+
+       return;
+}
+
+static char banner[] __initdata = KERN_INFO "OMAP Camera driver initialzing\n";
+
+int __init 
+camera_core_init(void)
+{
+
+       printk(banner);
+       platform_device_register(&camera_core_device);
+       platform_driver_register(&camera_core_driver);
+
+       return 0;
 }
 
 MODULE_AUTHOR("Texas Instruments.");
@@ -1185,4 +1209,3 @@ MODULE_PARM_DESC(capture_mem,
 module_init(camera_core_init);
 module_exit(camera_core_cleanup);
 
-
diff --git a/drivers/media/video/omap/h4_sensor_power.c b/drivers/media/video/omap/h4_sensor_power.c
new file mode 100644 (file)
index 0000000..f8db956
--- /dev/null
@@ -0,0 +1,76 @@
+/*
+ * drivers/media/video/omap/h4_sensor_power.c
+ *
+ * H4 sensor powerup/down functions.
+ *
+ * Author: Andy Lowe (source@mvista.com)
+ *
+ * Copyright (C) 2004 MontaVista Software, Inc.
+ * Copyright (C) 2004 Texas Instruments.
+ *
+ * This file is licensed under the terms of the GNU General Public License
+ * version 2. This program is licensed "as is" without any warranty of any
+ * kind, whether express or implied.
+ */
+
+#include <linux/module.h>
+#include <linux/types.h>
+
+#include <asm/arch/gpioexpander.h>
+
+int h4_sensor_powerup(void);
+int h4_sensor_powerdown(void);
+
+int
+h4_sensor_powerup(void)
+{
+       unsigned char expa;
+       int err;
+
+       /* read current state of GPIO EXPA outputs */
+       if ((err = read_gpio_expa(&expa, 0x20))) {
+               printk(KERN_ERR "Error reading GPIO EXPA\n");
+               return err;
+       }
+       /* Set GPIO EXPA P3 (CAMERA_MODULE_EN) to power-up sensor */
+       if ((err = write_gpio_expa(expa | 0x08, 0x20))) {
+               printk(KERN_ERR "Error writing to GPIO EXPA\n");
+               return err;
+       }
+
+       /* read current state of GPIO EXPA outputs */
+       if ((err = read_gpio_expa(&expa, 0x22))) {
+               printk(KERN_ERR "Error reading GPIO EXPA\n");
+               return err;
+       }
+       /* Clear GPIO EXPA P7 (CAM_RST) */
+       if ((err = write_gpio_expa(expa & ~0x80, 0x22))) {
+               printk(KERN_ERR "Error writing to GPIO EXPA\n");
+               return err;
+       }
+
+       return 0;
+}
+
+int
+h4_sensor_powerdown(void)
+{
+       unsigned char expa;
+       int err;
+
+       /* read current state of GPIO EXPA outputs */
+       if ((err = read_gpio_expa(&expa, 0x20))) {
+               printk(KERN_ERR "Error reading GPIO EXPA\n");
+               return err;
+       }
+       /* Clear GPIO EXPA P3 (CAMERA_MODULE_EN) to power-down sensor */
+       if ((err = write_gpio_expa(expa & ~0x08, 0x20))) {
+               printk(KERN_ERR "Error writing to GPIO EXPA\n");
+               return err;
+       }
+
+       return 0;
+}
+
+EXPORT_SYMBOL(h4_sensor_powerup);
+EXPORT_SYMBOL(h4_sensor_powerdown);
diff --git a/drivers/media/video/omap/h4sensorpower.h b/drivers/media/video/omap/h4sensorpower.h
new file mode 100644 (file)
index 0000000..4eeae11
--- /dev/null
@@ -0,0 +1,17 @@
+/*
+ * drivers/media/video/omap/h4sensorpower.h
+ *
+ * Copyright (C) 2005 Texas Instruments.
+ *
+ * This file is licensed under the terms of the GNU General Public License
+ * version 2. This program is licensed "as is" without any warranty of any
+ * kind, whether express or implied.
+ */
+
+#ifndef H4SENSORPOWER_H
+#define H4SENSORPOWER_H
+
+int h4_sensor_powerup(void);
+int h4_sensor_powerdown(void);
+
+#endif /*H4SENSORPOWER_H*/
index 788f41d008aea55a7d8189bb18fdb4d06a977904..fe071e28472fed8dc46c478f0a405d31cbb21a57 100644 (file)
@@ -24,6 +24,7 @@
 #include "sensor_if.h"
 #include "ov9640.h"
 #include "h3sensorpower.h"
+#include "h4sensorpower.h"
 
 #define CAMERA_OV9640
 #ifdef CAMERA_OV9640
@@ -31,7 +32,6 @@
 struct ov9640_sensor {
        /* I2C parameters */
        struct i2c_client client;
-       struct i2c_driver driver;
        int ver; /* OV9640 version */
 };
 
@@ -680,6 +680,12 @@ ov9640_powerup(void)
                        return err;
        }
 
+       if (machine_is_omap_h4()) {
+               err = h4_sensor_powerup();
+               if (err)
+                       return err;
+       }
+
        return 0;
 }
 static int
@@ -696,6 +702,12 @@ ov9640_powerdown(void)
                        return err;
        }
 
+       if (machine_is_omap_h4()) {
+               err = h4_sensor_powerdown();
+               if (err)
+                       return err;
+       }
+
        return 0;
 }
 
@@ -750,6 +762,8 @@ ov9640_detect(struct i2c_client *client)
        return ver;
 }
 
+static struct i2c_driver ov9640sensor_i2c_driver;
+
 /* This function registers an I2C client via i2c_attach_client() for an OV9640 
  * sensor device.  If 'probe' is non-zero, then the I2C client is only 
  * registered if the device can be detected.  If 'probe' is zero, then no 
@@ -768,7 +782,7 @@ ov9640_i2c_attach_client(struct i2c_adapter *adap, int addr, int probe)
                return -EBUSY;  /* our client is already attached */
 
        client->addr = addr;
-       client->driver = &sensor->driver;
+       client->driver = &ov9640sensor_i2c_driver;
        client->adapter = adap;
 
        err = i2c_attach_client(client);
@@ -1081,12 +1095,23 @@ ov9640sensor_cleanup(void *priv)
        struct ov9640_sensor *sensor = (struct ov9640_sensor *) priv;
 
        if (sensor) {
-               i2c_del_driver(&sensor->driver);
+               i2c_del_driver(&ov9640sensor_i2c_driver);
                ov9640_powerdown();
        }
        return 0;
 }
 
+
+static struct i2c_driver ov9640sensor_i2c_driver = {
+       .driver {
+               .name           = "ov9640",
+       },
+       .id             = I2C_DRIVERID_MISC, /*FIXME:accroding to i2c-ids.h */
+       .attach_adapter = ov9640_i2c_probe_adapter,
+       .detach_client  = ov9640_i2c_detach_client,
+};
+
+
 /* Initialize the OV9640 sensor.
  * This routine allocates and initializes the data structure for the sensor, 
  * powers up the sensor, registers the I2C driver, and sets a default image 
@@ -1099,7 +1124,6 @@ static void *
 ov9640sensor_init(struct v4l2_pix_format *pix)
 {
        struct ov9640_sensor *sensor = &ov9640;
-       struct i2c_driver *driver = &sensor->driver;
        int err;
 
        memset(sensor, 0, sizeof(*sensor));
@@ -1108,12 +1132,7 @@ ov9640sensor_init(struct v4l2_pix_format *pix)
        if (ov9640_powerup())
                return NULL;
 
-       strlcpy(driver->driver.name, "OV9640 I2C driver", sizeof(driver->driver.name));
-       driver->id = I2C_DRIVERID_MISC;
-       driver->attach_adapter = ov9640_i2c_probe_adapter;
-       driver->detach_client = ov9640_i2c_detach_client;
-
-       err = i2c_add_driver(driver);
+       err = i2c_add_driver(&ov9640sensor_i2c_driver);
        if (err) {
                printk(KERN_ERR "Failed to register OV9640 I2C client.\n");
                return NULL;
index d32ba58ddd7041266173ae6548424bd1cb83de15..7e783790f396bea91602720e05cb225d26fc097e 100644 (file)
@@ -111,12 +111,12 @@ extern struct lcd_ctrl_extif rfbi_extif;
 
 static void omapfb_rqueue_lock(struct omapfb_device *fbdev)
 {
-       down(&fbdev->rqueue_sema);
+       mutex_lock(&fbdev->rqueue_mutex);
 }
 
 static void omapfb_rqueue_unlock(struct omapfb_device *fbdev)
 {
-       up(&fbdev->rqueue_sema);
+       mutex_unlock(&fbdev->rqueue_mutex);
 }
 
 /*
@@ -1273,7 +1273,7 @@ static int omapfb_do_probe(struct platform_device *pdev, struct lcd_panel *panel
        fbdev->panel = panel;
        platform_set_drvdata(pdev, fbdev);
 
-       init_MUTEX(&fbdev->rqueue_sema);
+       mutex_init(&fbdev->rqueue_mutex);
 
 #ifdef CONFIG_ARCH_OMAP1
        fbdev->int_ctrl = &omap1_int_ctrl;
diff --git a/include/asm-arm/arch-omap/board-ams-delta.h b/include/asm-arm/arch-omap/board-ams-delta.h
new file mode 100644 (file)
index 0000000..0070f6d
--- /dev/null
@@ -0,0 +1,65 @@
+/*
+ * linux/include/asm-arm/arch-omap/board-ams-delta.h
+ *
+ * Copyright (C) 2006 Jonathan McDowell <noodles@earth.li>
+ *
+ * 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 SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN
+ * NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
+ * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+ * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * 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.,
+ * 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+#ifndef __ASM_ARCH_OMAP_AMS_DELTA_H
+#define __ASM_ARCH_OMAP_AMS_DELTA_H
+
+#if defined (CONFIG_MACH_AMS_DELTA)
+
+#define AMS_DELTA_LATCH1_PHYS          0x01000000
+#define AMS_DELTA_LATCH1_VIRT          0xEA000000
+#define AMS_DELTA_MODEM_PHYS           0x04000000
+#define AMS_DELTA_MODEM_VIRT           0xEB000000
+#define AMS_DELTA_LATCH2_PHYS          0x08000000
+#define AMS_DELTA_LATCH2_VIRT          0xEC000000
+
+#define AMS_DELTA_LATCH1_LED_CAMERA    0x01
+#define AMS_DELTA_LATCH1_LED_ADVERT    0x02
+#define AMS_DELTA_LATCH1_LED_EMAIL     0x04
+#define AMS_DELTA_LATCH1_LED_HANDSFREE 0x08
+#define AMS_DELTA_LATCH1_LED_VOICEMAIL 0x10
+#define AMS_DELTA_LATCH1_LED_VOICE     0x20
+
+#define AMS_DELTA_LATCH2_LCD_VBLEN     0x0001
+#define AMS_DELTA_LATCH2_LCD_NDISP     0x0002
+#define AMS_DELTA_LATCH2_NAND_NCE      0x0004
+#define AMS_DELTA_LATCH2_NAND_NRE      0x0008
+#define AMS_DELTA_LATCH2_NAND_NWP      0x0010
+#define AMS_DELTA_LATCH2_NAND_NWE      0x0020
+#define AMS_DELTA_LATCH2_NAND_ALE      0x0040
+#define AMS_DELTA_LATCH2_NAND_CLE      0x0080
+#define AMS_DELTA_LATCH2_MODEM_NRESET  0x1000
+#define AMS_DELTA_LATCH2_MODEM_CODEC   0x2000
+
+#define AMS_DELTA_GPIO_PIN_NAND_RB     12
+
+#ifndef __ASSEMBLY__
+void ams_delta_latch1_write(u8 mask, u8 value);
+void ams_delta_latch2_write(u16 mask, u16 value);
+#endif
+
+#endif /* CONFIG_MACH_AMS_DELTA */
+
+#endif /* __ASM_ARCH_OMAP_AMS_DELTA_H */
index 7eade7be175e0d55b4cc3f74cf13a482d90a8961..fccdb3db025ff0dc79fd08dc4c5d7a0a27f0d1d3 100644 (file)
@@ -126,6 +126,7 @@ enum omapfb_update_mode {
 #include <linux/completion.h>
 #include <linux/interrupt.h>
 #include <linux/fb.h>
+#include <linux/mutex.h>
 
 #include <asm/arch/board.h>
 
@@ -269,7 +270,7 @@ struct omapfb_device {
        int                     state;
        int                     ext_lcdc;               /* Using external
                                                            LCD controller */
-       struct semaphore        rqueue_sema;
+       struct mutex            rqueue_mutex;
 
        void                    *vram_virt_base;
        dma_addr_t              vram_phys_base;
index 13dc7aff1ab7d5c2d7f5f09349747f94194dcbd9..f8e6dacf1ff79609cac92972ecc4aa28f0abe50d 100644 (file)
@@ -33,8 +33,8 @@
 #include <linux/errno.h>
 #include <linux/sound.h>
 #include <linux/soundcard.h>
+#include <linux/mutex.h>
 
-#include <asm/semaphore.h>
 #include <asm/uaccess.h>
 #include <asm/hardware.h>
 #include <asm/arch/dma.h>
@@ -326,7 +326,7 @@ static audio_state_t tsc2101_state = {
        .hw_remove      = omap_tsc2101_remove,
        .hw_suspend     = omap_tsc2101_suspend,
        .hw_resume      = omap_tsc2101_resume,
-       .sem            = __SEMAPHORE_INIT(tsc2101_state.sem, 1),
+       .mutex          = __MUTEX_INITIALIZER(tsc2101_state.mutex),
 };
 
 /* This will be defined in the Audio.h */
index 38857007e70f7c56a11d94efe79de2efcd14c191..cc1f14a2d29bc5fa12100e154cb980d8102fafaa 100644 (file)
 #include <linux/delay.h>
 #include <linux/platform_device.h>
 #include <linux/completion.h>
+#include <linux/mutex.h>
 
 #include <asm/uaccess.h>
 #include <asm/io.h>
 #include <asm/hardware.h>
-#include <asm/semaphore.h>
 
 #include "omap-audio-dma-intfc.h"
 #include "omap-audio.h"
@@ -438,7 +438,7 @@ int audio_register_codec(audio_state_t * codec_state)
        }
 
        memcpy(&audio_state, codec_state, sizeof(audio_state_t));
-       sema_init(&audio_state.sem, 1);
+       mutex_init(&audio_state.mutex);
 
        ret = platform_device_register(&omap_audio_device);
        if (ret != 0) {
@@ -1024,7 +1024,7 @@ static int audio_open(struct inode *inode, struct file *file)
                return -ESTALE;
        }
 
-       down(&state->sem);
+       mutex_lock(&state->mutex);
 
        /* access control */
        err = -ENODEV;
@@ -1092,7 +1092,7 @@ static int audio_open(struct inode *inode, struct file *file)
        err = 0;
 
       out:
-       up(&state->sem);
+       mutex_unlock(&state->mutex);
        if (err) {
                module_put(state->owner);
                module_put(THIS_MODULE);
@@ -1114,7 +1114,7 @@ static int audio_release(struct inode *inode, struct file *file)
 
        FN_IN;
 
-       down(&state->sem);
+       mutex_lock(&state->mutex);
 
        if (file->f_mode & FMODE_READ) {
                audio_discard_buf(is);
@@ -1145,7 +1145,7 @@ static int audio_release(struct inode *inode, struct file *file)
                        state->hw_shutdown(state->data);
        }
 
-       up(&state->sem);
+       mutex_unlock(&state->mutex);
 
        module_put(state->owner);
        module_put(THIS_MODULE);
index 58eff3130c36d7a8f1acf03a31a7cb3ad72dbf73..c039dee3b148c184dc0e14b539197012925792c4 100644 (file)
@@ -101,7 +101,7 @@ typedef struct {
        int (*hw_suspend) (void);
        int (*hw_resume) (void);
        struct pm_dev *pm_dev;
-       struct semaphore sem;   /* to protect against races in attach() */
+       struct mutex mutex;     /* to protect against races in attach() */
 } audio_state_t;
 
 #ifdef AUDIO_PM