]> www.pilppa.org Git - linux-2.6-omap-h63xx.git/commitdiff
Merge current mainline tree into linux-omap tree
authorTony Lindgren <tony@atomide.com>
Tue, 27 Jan 2009 21:07:22 +0000 (13:07 -0800)
committerTony Lindgren <tony@atomide.com>
Tue, 27 Jan 2009 21:07:22 +0000 (13:07 -0800)
Merge branches 'master' and 'linus'

Conflicts:

arch/arm/configs/omap3_pandora_defconfig
arch/arm/configs/omap_2430sdp_defconfig
arch/arm/configs/omap_ldp_defconfig
arch/arm/configs/overo_defconfig
arch/arm/mach-omap2/board-apollon.c
arch/arm/mach-omap2/board-omap3beagle.c
arch/arm/plat-omap/dma.c
drivers/misc/Makefile
drivers/mmc/host/omap_hsmmc.c
drivers/spi/Kconfig
include/linux/i2c-id.h

14 files changed:
1  2 
Makefile
arch/arm/configs/omap3_beagle_defconfig
arch/arm/mach-omap2/board-apollon.c
arch/arm/mach-omap2/board-omap3beagle.c
arch/arm/plat-omap/dma.c
arch/arm/plat-omap/include/mach/mcbsp.h
arch/arm/plat-omap/mcbsp.c
drivers/char/hw_random/omap-rng.c
drivers/i2c/chips/Kconfig
drivers/i2c/chips/Makefile
drivers/misc/Kconfig
drivers/misc/Makefile
drivers/spi/Kconfig
drivers/spi/Makefile

diff --combined Makefile
index b6270b88c25ded2d73c80cbd65a6f6a09a122e76,cf9e20dac86e91643761ad282bf3c21ea9d6ee8f..47bc58f6cef5c9a35b0c44ba8517535d30a2b48b
+++ b/Makefile
@@@ -16,9 -16,6 +16,9 @@@ NAME = Erotic Pickled Herrin
  # o  print "Entering directory ...";
  MAKEFLAGS += -rR --no-print-directory
  
 +# Add custom flags here to avoid conflict with updates
 +EXTRAVERSION := $(EXTRAVERSION)-omap1
 +
  # We are using a recursive build, so we need to do a little thinking
  # to get the ordering right.
  #
@@@ -174,8 -171,6 +174,8 @@@ SUBARCH := $(shell uname -m | sed -e s/
                                  -e s/ppc.*/powerpc/ -e s/mips.*/mips/ \
                                  -e s/sh.*/sh/ )
  
 +SUBARCH := arm
 +
  # Cross compiling and selecting different set of gcc/bin-utils
  # ---------------------------------------------------------------------------
  #
  # Note: Some architectures assign CROSS_COMPILE in their arch/*/Makefile
  export KBUILD_BUILDHOST := $(SUBARCH)
  ARCH          ?= $(SUBARCH)
 -CROSS_COMPILE ?=
 +CROSS_COMPILE ?= arm-linux-
  
  # Architecture as present in compile.h
  UTS_MACHINE   := $(ARCH)
@@@ -218,6 -213,10 +218,10 @@@ endi
  # Where to locate arch specific headers
  hdr-arch  := $(SRCARCH)
  
+ ifeq ($(ARCH),m68knommu)
+        hdr-arch  := m68k
+ endif
  KCONFIG_CONFIG        ?= .config
  
  # SHELL used by kbuild
@@@ -611,25 -610,20 +615,20 @@@ export  INSTALL_PATH ?= /boo
  MODLIB        = $(INSTALL_MOD_PATH)/lib/modules/$(KERNELRELEASE)
  export MODLIB
  
- strip-symbols := $(srctree)/scripts/strip-symbols \
-                $(wildcard $(srctree)/arch/$(ARCH)/scripts/strip-symbols)
  #
- # INSTALL_MOD_STRIP, if defined, will cause modules to be stripped while
- # they get installed.  If INSTALL_MOD_STRIP is '1', then the default
- # options (see below) will be used.  Otherwise, INSTALL_MOD_STRIP will
- # be used as the option(s) to the objcopy command.
+ #  INSTALL_MOD_STRIP, if defined, will cause modules to be
+ #  stripped after they are installed.  If INSTALL_MOD_STRIP is '1', then
+ #  the default option --strip-debug will be used.  Otherwise,
+ #  INSTALL_MOD_STRIP will used as the options to the strip command.
  ifdef INSTALL_MOD_STRIP
  ifeq ($(INSTALL_MOD_STRIP),1)
- mod_strip_cmd = $(OBJCOPY) --strip-debug
- ifeq ($(CONFIG_KALLSYMS_ALL),$(CONFIG_KALLSYMS_STRIP_GENERATED))
- mod_strip_cmd += --wildcard $(addprefix --strip-symbols ,$(strip-symbols))
- endif
+ mod_strip_cmd = $(STRIP) --strip-debug
  else
- mod_strip_cmd = $(OBJCOPY) $(INSTALL_MOD_STRIP)
+ mod_strip_cmd = $(STRIP) $(INSTALL_MOD_STRIP)
  endif # INSTALL_MOD_STRIP=1
  else
- mod_strip_cmd = false
+ mod_strip_cmd = true
  endif # INSTALL_MOD_STRIP
  export mod_strip_cmd
  
@@@ -759,7 -753,6 +758,6 @@@ last_kallsyms := 
  endif
  
  kallsyms.o := .tmp_kallsyms$(last_kallsyms).o
- kallsyms.h := $(wildcard include/config/kallsyms/*.h) $(wildcard include/config/kallsyms/*/*.h)
  
  define verify_kallsyms
        $(Q)$(if $($(quiet)cmd_sysmap),                                      \
@@@ -784,41 -777,24 +782,24 @@@ ende
  
  # Generate .S file with all kernel symbols
  quiet_cmd_kallsyms = KSYM    $@
-       cmd_kallsyms = { test $* -eq 0 || $(NM) -n $<; } \
-                    | $(KALLSYMS) $(if $(CONFIG_KALLSYMS_ALL),--all-symbols) >$@
+       cmd_kallsyms = $(NM) -n $< | $(KALLSYMS) \
+                      $(if $(CONFIG_KALLSYMS_ALL),--all-symbols) > $@
  
- quiet_cmd_kstrip = STRIP   $@
-       cmd_kstrip = $(OBJCOPY) --wildcard $(addprefix --strip$(if $(CONFIG_RELOCATABLE),-unneeded)-symbols ,$(filter %/scripts/strip-symbols,$^)) $< $@
- $(foreach n,0 1 2 3,.tmp_kallsyms$(n).o): KBUILD_AFLAGS += -Wa,--strip-local-absolute
- $(foreach n,0 1 2 3,.tmp_kallsyms$(n).o): %.o: %.S scripts FORCE
+ .tmp_kallsyms1.o .tmp_kallsyms2.o .tmp_kallsyms3.o: %.o: %.S scripts FORCE
        $(call if_changed_dep,as_o_S)
  
- ifeq ($(CONFIG_KALLSYMS_STRIP_GENERATED),y)
- strip-ext := .stripped
- endif
- .tmp_kallsyms%.S: .tmp_vmlinux%$(strip-ext) $(KALLSYMS) $(kallsyms.h)
+ .tmp_kallsyms%.S: .tmp_vmlinux% $(KALLSYMS)
        $(call cmd,kallsyms)
  
- # make -jN seems to have problems with intermediate files, see bug #3330.
- .SECONDARY: $(foreach n,1 2 3,.tmp_vmlinux$(n).stripped)
- .tmp_vmlinux%.stripped: .tmp_vmlinux% $(strip-symbols) $(kallsyms.h)
-       $(call cmd,kstrip)
- ifneq ($(CONFIG_DEBUG_INFO),y)
- .tmp_vmlinux%: LDFLAGS_vmlinux += -S
- endif
  # .tmp_vmlinux1 must be complete except kallsyms, so update vmlinux version
- .tmp_vmlinux%: $(vmlinux-lds) $(vmlinux-all) FORCE
-       $(if $(filter 1,$*),$(call if_changed_rule,ksym_ld),$(call if_changed,vmlinux__))
+ .tmp_vmlinux1: $(vmlinux-lds) $(vmlinux-all) FORCE
+       $(call if_changed_rule,ksym_ld)
  
- .tmp_vmlinux0$(strip-ext):
-       $(Q)echo "placeholder" >$@
+ .tmp_vmlinux2: $(vmlinux-lds) $(vmlinux-all) .tmp_kallsyms1.o FORCE
+       $(call if_changed,vmlinux__)
  
- .tmp_vmlinux1: .tmp_kallsyms0.o
- .tmp_vmlinux2: .tmp_kallsyms1.o
- .tmp_vmlinux3: .tmp_kallsyms2.o
+ .tmp_vmlinux3: $(vmlinux-lds) $(vmlinux-all) .tmp_kallsyms2.o FORCE
+       $(call if_changed,vmlinux__)
  
  # Needs to visit scripts/ before $(KALLSYMS) can be used.
  $(KALLSYMS): scripts ;
index df67296134f2fa45a7ce62036700124b263b6552,4c6fb7e959df08e189b7de30875fa4a936513795..194eafa24bd871a932c83849d9a824d4f87cf0cc
@@@ -1,7 -1,7 +1,7 @@@
  #
  # Automatically generated make config: don't edit
 -# Linux kernel version: 2.6.27-rc8
 -# Wed Oct  1 17:14:22 2008
 +# Linux kernel version: 2.6.27-omap1
 +# Fri Oct 17 14:05:39 2008
  #
  CONFIG_ARM=y
  CONFIG_SYS_SUPPORTS_APM_EMULATION=y
@@@ -183,16 -183,9 +183,16 @@@ CONFIG_ARCH_OMAP3=
  #
  # CONFIG_OMAP_DEBUG_POWERDOMAIN is not set
  # CONFIG_OMAP_DEBUG_CLOCKDOMAIN is not set
 +# CONFIG_OMAP_SMARTREFLEX is not set
  # CONFIG_OMAP_RESET_CLOCKS is not set
 +CONFIG_OMAP_BOOT_TAG=y
 +CONFIG_OMAP_BOOT_REASON=y
 +# CONFIG_OMAP_COMPONENT_VERSION is not set
 +# CONFIG_OMAP_GPIO_SWITCH is not set
  # CONFIG_OMAP_MUX is not set
  # CONFIG_OMAP_MCBSP is not set
 +# CONFIG_OMAP_MMU_FWK is not set
 +# CONFIG_OMAP_MBOX_FWK is not set
  # CONFIG_OMAP_MPU_TIMER is not set
  CONFIG_OMAP_32K_TIMER=y
  CONFIG_OMAP_32K_TIMER_HZ=128
@@@ -206,12 -199,7 +206,12 @@@ CONFIG_ARCH_OMAP3430=
  #
  # OMAP Board Type
  #
 +# CONFIG_MACH_OMAP_LDP is not set
 +# CONFIG_MACH_OMAP_3430SDP is not set
 +# CONFIG_MACH_OMAP3EVM is not set
  CONFIG_MACH_OMAP3_BEAGLE=y
 +# CONFIG_MACH_OVERO is not set
 +CONFIG_OMAP_TICK_GPTIMER=12
  
  #
  # Boot options
@@@ -263,6 -251,10 +263,6 @@@ CONFIG_TICK_ONESHOT=
  CONFIG_NO_HZ=y
  CONFIG_HIGH_RES_TIMERS=y
  CONFIG_GENERIC_CLOCKEVENTS_BUILD=y
 -CONFIG_VMSPLIT_3G=y
 -# CONFIG_VMSPLIT_2G is not set
 -# CONFIG_VMSPLIT_1G is not set
 -CONFIG_PAGE_OFFSET=0xC0000000
  # CONFIG_PREEMPT is not set
  CONFIG_HZ=128
  CONFIG_AEABI=y
@@@ -296,9 -288,10 +296,9 @@@ CONFIG_CMDLINE="root=/dev/nfs nfsroot=1
  # CONFIG_KEXEC is not set
  
  #
 -# CPU Power Management
 +# CPU Frequency scaling
  #
  # CONFIG_CPU_FREQ is not set
 -# CONFIG_CPU_IDLE is not set
  
  #
  # Floating point emulation
@@@ -324,10 -317,7 +324,10 @@@ CONFIG_BINFMT_MISC=
  #
  # Power management options
  #
 -# CONFIG_PM is not set
 +CONFIG_PM=y
 +# CONFIG_PM_DEBUG is not set
 +# CONFIG_SUSPEND is not set
 +# CONFIG_APM_EMULATION is not set
  CONFIG_ARCH_SUSPEND_POSSIBLE=y
  CONFIG_NET=y
  
@@@ -490,7 -480,6 +490,7 @@@ CONFIG_MTD_NAND=
  # CONFIG_MTD_NAND_VERIFY_WRITE is not set
  # CONFIG_MTD_NAND_ECC_SMC is not set
  # CONFIG_MTD_NAND_MUSEUM_IDS is not set
 +CONFIG_MTD_NAND_OMAP2=y
  CONFIG_MTD_NAND_IDS=y
  # CONFIG_MTD_NAND_DISKONCHIP is not set
  # CONFIG_MTD_NAND_NANDSIM is not set
@@@ -679,7 -668,6 +679,7 @@@ CONFIG_I2C_HELPER_AUTO=
  # CONFIG_I2C_GPIO is not set
  # CONFIG_I2C_OCORES is not set
  CONFIG_I2C_OMAP=y
 +# CONFIG_I2C2_OMAP_BEAGLE is not set
  # CONFIG_I2C_SIMTEC is not set
  
  #
  # Miscellaneous I2C Chip support
  #
  # CONFIG_DS1682 is not set
- # CONFIG_AT24 is not set
- # CONFIG_SENSORS_EEPROM is not set
+ # CONFIG_EEPROM_AT24 is not set
+ # CONFIG_EEPROM_LEGACY is not set
  # CONFIG_SENSORS_PCF8574 is not set
  # CONFIG_PCF8575 is not set
  # CONFIG_SENSORS_PCA9539 is not set
  # CONFIG_SENSORS_PCF8591 is not set
  # CONFIG_ISP1301_OMAP is not set
  # CONFIG_TPS65010 is not set
 +# CONFIG_SENSORS_TLV320AIC23 is not set
 +# CONFIG_TWL4030_MADC is not set
 +CONFIG_TWL4030_USB=y
 +# CONFIG_TWL4030_PWRBUTTON is not set
 +# CONFIG_TWL4030_POWEROFF is not set
  # CONFIG_SENSORS_MAX6875 is not set
  # CONFIG_SENSORS_TSL2550 is not set
 +# CONFIG_LP5521 is not set
  # CONFIG_I2C_DEBUG_CORE is not set
  # CONFIG_I2C_DEBUG_ALGO is not set
  # CONFIG_I2C_DEBUG_BUS is not set
@@@ -731,7 -713,6 +731,7 @@@ CONFIG_GPIOLIB=
  # CONFIG_GPIO_MAX732X is not set
  # CONFIG_GPIO_PCA953X is not set
  # CONFIG_GPIO_PCF857X is not set
 +CONFIG_GPIO_TWL4030=y
  
  #
  # PCI GPIO expanders:
  # CONFIG_W1 is not set
  # CONFIG_POWER_SUPPLY is not set
  # CONFIG_HWMON is not set
 -# CONFIG_THERMAL is not set
 -# CONFIG_THERMAL_HWMON is not set
  # CONFIG_WATCHDOG is not set
  
  #
@@@ -756,10 -739,9 +756,10 @@@ CONFIG_SSB_POSSIBLE=
  #
  # CONFIG_MFD_CORE is not set
  # CONFIG_MFD_SM501 is not set
 +# CONFIG_MFD_ASIC3 is not set
  # CONFIG_HTC_EGPIO is not set
  # CONFIG_HTC_PASIC3 is not set
 -# CONFIG_UCB1400_CORE is not set
 +CONFIG_TWL4030_CORE=y
  # CONFIG_MFD_TMIO is not set
  # CONFIG_MFD_T7L66XB is not set
  # CONFIG_MFD_TC6387XB is not set
@@@ -787,33 -769,7 +787,33 @@@ CONFIG_DAB=
  #
  # CONFIG_VGASTATE is not set
  # CONFIG_VIDEO_OUTPUT_CONTROL is not set
 -# CONFIG_FB is not set
 +CONFIG_FB=y
 +# CONFIG_FIRMWARE_EDID is not set
 +# CONFIG_FB_DDC is not set
 +CONFIG_FB_CFB_FILLRECT=y
 +CONFIG_FB_CFB_COPYAREA=y
 +CONFIG_FB_CFB_IMAGEBLIT=y
 +# CONFIG_FB_CFB_REV_PIXELS_IN_BYTE is not set
 +# CONFIG_FB_SYS_FILLRECT is not set
 +# CONFIG_FB_SYS_COPYAREA is not set
 +# CONFIG_FB_SYS_IMAGEBLIT is not set
 +# CONFIG_FB_FOREIGN_ENDIAN is not set
 +# CONFIG_FB_SYS_FOPS is not set
 +# CONFIG_FB_SVGALIB is not set
 +# CONFIG_FB_MACMODES is not set
 +# CONFIG_FB_BACKLIGHT is not set
 +# CONFIG_FB_MODE_HELPERS is not set
 +# CONFIG_FB_TILEBLITTING is not set
 +
 +#
 +# Frame buffer hardware drivers
 +#
 +# CONFIG_FB_S1D13XXX is not set
 +# CONFIG_FB_VIRTUAL is not set
 +CONFIG_FB_OMAP=y
 +# CONFIG_FB_OMAP_LCDC_EXTERNAL is not set
 +# CONFIG_FB_OMAP_BOOTLOADER_INIT is not set
 +CONFIG_FB_OMAP_CONSISTENT_DMA_SIZE=4
  # CONFIG_BACKLIGHT_LCD_SUPPORT is not set
  
  #
  #
  # CONFIG_VGA_CONSOLE is not set
  CONFIG_DUMMY_CONSOLE=y
 +CONFIG_FRAMEBUFFER_CONSOLE=y
 +# CONFIG_FRAMEBUFFER_CONSOLE_DETECT_PRIMARY is not set
 +CONFIG_FRAMEBUFFER_CONSOLE_ROTATION=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
 +# CONFIG_LOGO is not set
  # CONFIG_SOUND is not set
  # CONFIG_HID_SUPPORT is not set
  CONFIG_USB_SUPPORT=y
  CONFIG_USB_ARCH_HAS_HCD=y
  CONFIG_USB_ARCH_HAS_OHCI=y
 -# CONFIG_USB_ARCH_HAS_EHCI is not set
 +CONFIG_USB_ARCH_HAS_EHCI=y
  CONFIG_USB=y
  # CONFIG_USB_DEBUG is not set
  # CONFIG_USB_ANNOUNCE_NEW_DEVICES is not set
  CONFIG_USB_DEVICEFS=y
  CONFIG_USB_DEVICE_CLASS=y
  # CONFIG_USB_DYNAMIC_MINORS is not set
 -# CONFIG_USB_OTG is not set
 +CONFIG_USB_SUSPEND=y
 +CONFIG_USB_OTG=y
  # CONFIG_USB_OTG_WHITELIST is not set
  # CONFIG_USB_OTG_BLACKLIST_HUB is not set
  CONFIG_USB_MON=y
  # USB Host Controller Drivers
  #
  # CONFIG_USB_C67X00_HCD is not set
 +# CONFIG_USB_EHCI_HCD is not set
  # CONFIG_USB_ISP116X_HCD is not set
  # CONFIG_USB_ISP1760_HCD is not set
  # CONFIG_USB_OHCI_HCD is not set
@@@ -879,10 -818,10 +879,10 @@@ CONFIG_USB_MUSB_SOC=
  #
  # OMAP 343x high speed USB support
  #
 -CONFIG_USB_MUSB_HOST=y
 +# CONFIG_USB_MUSB_HOST is not set
  # CONFIG_USB_MUSB_PERIPHERAL is not set
 -# CONFIG_USB_MUSB_OTG is not set
 -# CONFIG_USB_GADGET_MUSB_HDRC is not set
 +CONFIG_USB_MUSB_OTG=y
 +CONFIG_USB_GADGET_MUSB_HDRC=y
  CONFIG_USB_MUSB_HDRC_HCD=y
  # CONFIG_MUSB_PIO_ONLY is not set
  CONFIG_USB_INVENTRA_DMA=y
@@@ -948,7 -887,8 +948,7 @@@ CONFIG_USB_GADGET_SELECTED=
  # CONFIG_USB_GADGET_FSL_USB2 is not set
  # CONFIG_USB_GADGET_NET2280 is not set
  # CONFIG_USB_GADGET_PXA25X is not set
 -CONFIG_USB_GADGET_M66592=y
 -CONFIG_USB_M66592=y
 +# CONFIG_USB_GADGET_M66592 is not set
  # CONFIG_USB_GADGET_PXA27X is not set
  # CONFIG_USB_GADGET_GOKU is not set
  # CONFIG_USB_GADGET_LH7A40X is not set
@@@ -982,7 -922,9 +982,7 @@@ CONFIG_MMC_BLOCK_BOUNCE=
  # MMC/SD Host Controller Drivers
  #
  # CONFIG_MMC_SDHCI is not set
 -# CONFIG_MMC_OMAP is not set
 -# CONFIG_MEMSTICK is not set
 -# CONFIG_ACCESSIBILITY is not set
 +CONFIG_MMC_OMAP_HS=y
  # CONFIG_NEW_LEDS is not set
  CONFIG_RTC_LIB=y
  CONFIG_RTC_CLASS=y
@@@ -1012,7 -954,6 +1012,7 @@@ CONFIG_RTC_INTF_DEV=
  # CONFIG_RTC_DRV_PCF8563 is not set
  # CONFIG_RTC_DRV_PCF8583 is not set
  # CONFIG_RTC_DRV_M41T80 is not set
 +CONFIG_RTC_DRV_TWL4030=y
  # CONFIG_RTC_DRV_S35390A is not set
  # CONFIG_RTC_DRV_FM3130 is not set
  
  # CONFIG_REGULATOR_BQ24022 is not set
  # CONFIG_UIO is not set
  
 +#
 +# CBUS support
 +#
 +# CONFIG_CBUS is not set
 +
  #
  # File systems
  #
index c2ef58ae832af4b27e28cf2f6e1d0e530e9fc955,0a7b24ba165241cbb5ea8ae6afc3b84cb766bd06..994c9478dd6a8b5b4276f1510c44c74ef6c8c8f5
@@@ -1,10 -1,10 +1,10 @@@
  /*
   * linux/arch/arm/mach-omap2/board-apollon.c
   *
 - * Copyright (C) 2005,2006 Samsung Electronics
 + * Copyright (C) 2005-2008 Samsung Electronics
   * Author: Kyungmin Park <kyungmin.park@samsung.com>
   *
 - * Modified from mach-omap/omap2/board-h4.c
 + * Modified from mach-omap2/board-h4.c
   *
   * Code for apollon OMAP2 board. Should work on many OMAP2 systems where
   * the bootloader passes the board-specific data to the kernel.
  #include <linux/mtd/mtd.h>
  #include <linux/mtd/partitions.h>
  #include <linux/mtd/onenand.h>
 +#include <linux/irq.h>
 +#include <linux/interrupt.h>
  #include <linux/delay.h>
  #include <linux/leds.h>
  #include <linux/err.h>
  #include <linux/clk.h>
 +#include <linux/spi/spi.h>
 +#include <linux/spi/tsc210x.h>
  
 +#include <asm/io.h>
  #include <mach/hardware.h>
  #include <asm/mach-types.h>
  #include <asm/mach/arch.h>
  #include <mach/board.h>
  #include <mach/common.h>
  #include <mach/gpmc.h>
 -#include <mach/control.h>
  
  /* LED & Switch macros */
  #define LED0_GPIO13           13
  #define LED1_GPIO14           14
  #define LED2_GPIO15           15
 -#define SW_ENTER_GPIO16               16
 -#define SW_UP_GPIO17          17
 -#define SW_DOWN_GPIO58                58
 +#define LED3_GPIO92           92
 +#define LED4_GPIO93           93
  
  #define APOLLON_FLASH_CS      0
  #define APOLLON_ETH_CS                1
 +#define APOLLON_NOR_CS                3
 +
 +#define APOLLON_ONENAND_CS2_ADDRESS   (0x00000e40 | (0x10000000 >> 24))
 +#define APOLLON_EXT_CS3_ADDRESS               (0x00000c40 | (0x18000000 >> 24))
  
  static struct mtd_partition apollon_partitions[] = {
        {
@@@ -114,63 -107,6 +114,63 @@@ static struct platform_device apollon_o
        .resource       = apollon_flash_resource,
  };
  
 +static struct mtd_partition apollon_nor_partitions[] = {
 +      {
 +              .name           = "U-Boot",
 +              .offset         = 0,
 +              .size           = SZ_128K,
 +              .mask_flags     = MTD_WRITEABLE,
 +      },
 +      {
 +              .name           = "params",
 +              .offset         = MTDPART_OFS_APPEND,
 +              .size           = SZ_128K,
 +      },
 +      {
 +              .name           = "kernel",
 +              .offset         = MTDPART_OFS_APPEND,
 +              .size           = SZ_2M,
 +      },
 +      {
 +              .name           = "rootfs",
 +              .offset         = MTDPART_OFS_APPEND,
 +              .size           = SZ_4M - SZ_256K,
 +      },
 +      {
 +              .name           = "application",
 +              .offset         = MTDPART_OFS_APPEND,
 +              .size           = SZ_8M + SZ_2M,
 +      },
 +      {
 +              .name           = "reserved",
 +              .offset         = MTDPART_OFS_APPEND,
 +              .size           = MTDPART_SIZ_FULL,
 +      },
 +};
 +
 +static struct flash_platform_data apollon_nor_data = {
 +      .map_name               = "cfi_probe",
 +      .width          = 2,
 +      .parts          = apollon_nor_partitions,
 +      .nr_parts       = ARRAY_SIZE(apollon_nor_partitions),
 +};
 +
 +static struct resource apollon_nor_resource[] = {
 +      [0] = {
 +              .flags  = IORESOURCE_MEM,
 +      }
 +};
 +
 +static struct platform_device apollon_nor_device = {
 +      .name           = "omapflash",
 +      .id             = -1,
 +      .dev            = {
 +              .platform_data  = &apollon_nor_data,
 +      },
 +      .num_resources  = ARRAY_SIZE(apollon_nor_resource),
 +      .resource       = apollon_nor_resource,
 +};
 +
  static void __init apollon_flash_init(void)
  {
        unsigned long base;
        }
        apollon_flash_resource[0].start = base;
        apollon_flash_resource[0].end   = base + SZ_128K - 1;
 +
 +      if (gpmc_cs_request(APOLLON_NOR_CS, SZ_32M, &base) < 0) {
 +              printk(KERN_ERR "Cannot request NOR GPMC CS\n");
 +              return;
 +      }
 +      apollon_nor_resource[0].start = base;
 +      apollon_nor_resource[0].end   = base + SZ_32M - 1;
  }
  
  static struct resource apollon_smc91x_resources[] = {
                .flags  = IORESOURCE_MEM,
        },
        [1] = {
-               .start  = gpio_to_irq(APOLLON_ETHR_GPIO_IRQ),
-               .end    = gpio_to_irq(APOLLON_ETHR_GPIO_IRQ),
+               .start  = OMAP_GPIO_IRQ(APOLLON_ETHR_GPIO_IRQ),
+               .end    = OMAP_GPIO_IRQ(APOLLON_ETHR_GPIO_IRQ),
                .flags  = IORESOURCE_IRQ | IORESOURCE_IRQ_HIGHEDGE,
        },
  };
@@@ -213,37 -142,34 +213,37 @@@ static struct platform_device apollon_l
        .id             = -1,
  };
  
 -static struct omap_led_config apollon_led_config[] = {
 +static struct gpio_led apollon_led_config[] = {
 +      {
 +              .name                   = "d2",
 +              .gpio                   = LED0_GPIO13,
 +              .default_trigger        = "heartbeat",
 +      },
        {
 -              .cdev   = {
 -                      .name   = "apollon:led0",
 -              },
 -              .gpio   = LED0_GPIO13,
 +              .name                   = "d3",
 +              .gpio                   = LED1_GPIO14,
        },
        {
 -              .cdev   = {
 -                      .name   = "apollon:led1",
 -              },
 -              .gpio   = LED1_GPIO14,
 +              .name                   = "d4",
 +              .gpio                   = LED2_GPIO15,
        },
        {
 -              .cdev   = {
 -                      .name   = "apollon:led2",
 -              },
 -              .gpio   = LED2_GPIO15,
 +              .name                   = "d5",
 +              .gpio                   = LED3_GPIO92,
 +      },
 +      {
 +              .name                   = "d6",
 +              .gpio                   = LED4_GPIO93,
        },
  };
  
 -static struct omap_led_platform_data apollon_led_data = {
 -      .nr_leds        = ARRAY_SIZE(apollon_led_config),
 +static struct gpio_led_platform_data apollon_led_data = {
 +      .num_leds       = ARRAY_SIZE(apollon_led_config),
        .leds           = apollon_led_config,
  };
  
  static struct platform_device apollon_led_device = {
 -      .name           = "omap-led",
 +      .name           = "leds-gpio",
        .id             = -1,
        .dev            = {
                .platform_data  = &apollon_led_data,
  
  static struct platform_device *apollon_devices[] __initdata = {
        &apollon_onenand_device,
 +      &apollon_nor_device,
        &apollon_smc91x_device,
        &apollon_lcd_device,
        &apollon_led_device,
  static inline void __init apollon_init_smc91x(void)
  {
        unsigned long base;
 -
        unsigned int rate;
        struct clk *gpmc_fck;
        int eth_cs;
                gpmc_cs_write_reg(eth_cs, GPMC_CS_CONFIG6, 0x000003C2);
        }
  
 -      if (gpmc_cs_request(APOLLON_ETH_CS, SZ_16M, &base) < 0) {
 +      if (gpmc_cs_request(eth_cs, SZ_16M, &base) < 0) {
                printk(KERN_ERR "Failed to request GPMC CS for smc91x\n");
                goto out;
        }
        if (gpio_request(APOLLON_ETHR_GPIO_IRQ, "SMC91x irq") < 0) {
                printk(KERN_ERR "Failed to request GPIO%d for smc91x IRQ\n",
                        APOLLON_ETHR_GPIO_IRQ);
 -              gpmc_cs_free(APOLLON_ETH_CS);
 +              gpmc_cs_free(eth_cs);
                goto out;
        }
        gpio_direction_input(APOLLON_ETHR_GPIO_IRQ);
@@@ -323,30 -249,12 +323,30 @@@ out
  
  static void __init omap_apollon_init_irq(void)
  {
 -      omap2_init_common_hw();
 +      omap2_init_common_hw(NULL);
        omap_init_irq();
        omap_gpio_init();
        apollon_init_smc91x();
  }
  
 +static struct tsc210x_config tsc_platform_data = {
 +      .use_internal           = 1,
 +      .monitor                = TSC_TEMP,
 +      .mclk                   = "sys_clkout",
 +};
 +
 +static struct spi_board_info apollon_spi_board_info[] = {
 +      [0] = {
 +              .modalias       = "tsc2101",
 +              .irq            = OMAP_GPIO_IRQ(85),
 +              .bus_num        = 1,
 +              .chip_select    = 0,
 +              .mode           = SPI_MODE_1,
 +              .max_speed_hz   = 6000000,
 +              .platform_data  = &tsc_platform_data,
 +      },
 +};
 +
  static struct omap_uart_config apollon_uart_config __initdata = {
        .enabled_uarts = (1 << 0) | (0 << 1) | (0 << 2),
  };
@@@ -362,7 -270,7 +362,7 @@@ static struct omap_lcd_config apollon_l
        .ctrl_name      = "internal",
  };
  
 -static struct omap_board_config_kernel apollon_config[] = {
 +static struct omap_board_config_kernel apollon_config[] __initdata = {
        { OMAP_TAG_UART,        &apollon_uart_config },
        { OMAP_TAG_USB,         &apollon_usb_config },
        { OMAP_TAG_LCD,         &apollon_lcd_config },
@@@ -372,18 -280,16 +372,18 @@@ static void __init apollon_led_init(voi
  {
        /* LED0 - AA10 */
        omap_cfg_reg(AA10_242X_GPIO13);
 -      gpio_request(LED0_GPIO13, "LED0");
 -      gpio_direction_output(LED0_GPIO13, 0);
        /* LED1  - AA6 */
        omap_cfg_reg(AA6_242X_GPIO14);
 -      gpio_request(LED1_GPIO14, "LED1");
 -      gpio_direction_output(LED1_GPIO14, 0);
        /* LED2  - AA4 */
        omap_cfg_reg(AA4_242X_GPIO15);
 -      gpio_request(LED2_GPIO15, "LED2");
 -      gpio_direction_output(LED2_GPIO15, 0);
 +
 +      if (apollon_plus()) {
 +              /* LED3 - M15 */
 +              omap_cfg_reg(M15_24XX_GPIO92);
 +              /* LED4 - P20 */
 +              omap_cfg_reg(P20_24XX_GPIO93);
 +      } else
 +              apollon_led_data.num_leds = 3;
  }
  
  static void __init apollon_usb_init(void)
        gpio_direction_output(12, 0);
  }
  
 -static void __init omap_apollon_init(void)
 +static void __init apollon_tsc_init(void)
 +{
 +      /* TSC2101 */
 +      omap_cfg_reg(N15_24XX_GPIO85);
 +      gpio_request(85, "tsc2101 irq");
 +      gpio_direction_input(85);
 +
 +      omap_cfg_reg(W14_24XX_SYS_CLKOUT);      /* mclk */
 +}
 +
 +static void __init apollon_cs_init(void)
  {
 -      u32 v;
 +      unsigned long base;
 +      unsigned int rate;
 +      struct clk *l3ck;
 +      u32 value;
 +      int cs, sync = 0;
 +
 +      l3ck = clk_get(NULL, "core_l3_ck");
 +      if (IS_ERR(l3ck))
 +              rate = 100000000;
 +      else
 +              rate = clk_get_rate(l3ck);
 +
 +      /* CS2: OneNAND */
 +      cs = 2;
 +      value = gpmc_cs_read_reg(0, GPMC_CS_CONFIG1);
 +      gpmc_cs_write_reg(cs, GPMC_CS_CONFIG1, value);
 +      value = gpmc_cs_read_reg(0, GPMC_CS_CONFIG2);
 +      gpmc_cs_write_reg(cs, GPMC_CS_CONFIG2, value);
 +      value = gpmc_cs_read_reg(0, GPMC_CS_CONFIG3);
 +      gpmc_cs_write_reg(cs, GPMC_CS_CONFIG3, value);
 +      value = gpmc_cs_read_reg(0, GPMC_CS_CONFIG4);
 +      gpmc_cs_write_reg(cs, GPMC_CS_CONFIG4, value);
 +      value = gpmc_cs_read_reg(0, GPMC_CS_CONFIG5);
 +      gpmc_cs_write_reg(cs, GPMC_CS_CONFIG5, value);
 +      value = gpmc_cs_read_reg(0, GPMC_CS_CONFIG6);
 +      gpmc_cs_write_reg(cs, GPMC_CS_CONFIG6, value);
 +
 +      gpmc_cs_write_reg(cs, GPMC_CS_CONFIG7, APOLLON_ONENAND_CS2_ADDRESS);
 +
 +      /* CS3: External NOR */
 +      cs = APOLLON_NOR_CS;
 +      if (rate >= 160000000) {
 +              sync = 1;
 +              gpmc_cs_write_reg(cs, GPMC_CS_CONFIG1, 0xe5011211);
 +              gpmc_cs_write_reg(cs, GPMC_CS_CONFIG2, 0x00090b01);
 +              gpmc_cs_write_reg(cs, GPMC_CS_CONFIG3, 0x00020201);
 +              gpmc_cs_write_reg(cs, GPMC_CS_CONFIG4, 0x09030b03);
 +              gpmc_cs_write_reg(cs, GPMC_CS_CONFIG5, 0x010a0a0c);
 +              gpmc_cs_write_reg(cs, GPMC_CS_CONFIG6, 0x00000000);
 +      } else if (rate >= 130000000) {
 +              /* Not yet know ... Use the async values */
 +              gpmc_cs_write_reg(cs, GPMC_CS_CONFIG1, 0x00021201);
 +              gpmc_cs_write_reg(cs, GPMC_CS_CONFIG2, 0x00121601);
 +              gpmc_cs_write_reg(cs, GPMC_CS_CONFIG3, 0x00040401);
 +              gpmc_cs_write_reg(cs, GPMC_CS_CONFIG4, 0x12061605);
 +              gpmc_cs_write_reg(cs, GPMC_CS_CONFIG5, 0x01151317);
 +              gpmc_cs_write_reg(cs, GPMC_CS_CONFIG6, 0x00000000);
 +      } else {/* rate = 100000000 */
 +              sync = 1;
 +              gpmc_cs_write_reg(cs, GPMC_CS_CONFIG1, 0xe1001202);
 +              gpmc_cs_write_reg(cs, GPMC_CS_CONFIG2, 0x00151501);
 +              gpmc_cs_write_reg(cs, GPMC_CS_CONFIG3, 0x00050501);
 +              gpmc_cs_write_reg(cs, GPMC_CS_CONFIG4, 0x0e070e07);
 +              gpmc_cs_write_reg(cs, GPMC_CS_CONFIG5, 0x01131F1F);
 +              gpmc_cs_write_reg(cs, GPMC_CS_CONFIG6, 0x00000000);
 +      }
 +
 +      gpmc_cs_write_reg(cs, GPMC_CS_CONFIG7, APOLLON_EXT_CS3_ADDRESS);
 +
 +      if (gpmc_cs_request(cs, SZ_32M, &base) < 0) {
 +              printk(KERN_ERR "Failed to request GPMC CS for external\n");
 +              return;
 +      }
  
 +      /* Synchronous mode */
 +      if (sync) {
 +              void __iomem *addr = ioremap(base, SZ_32M);
 +              writew(0xaa, addr + 0xaaa);
 +              writew(0x55, addr + 0x554);
 +              writew(0xc0, addr + 0x24aaa);
 +              iounmap(addr);
 +      }
 +
 +      gpmc_cs_free(cs);
 +}
 +
 +static void __init omap_apollon_init(void)
 +{
 +      apollon_cs_init();
        apollon_led_init();
        apollon_flash_init();
        apollon_usb_init();
 -
 -      /* REVISIT: where's the correct place */
 -      omap_cfg_reg(W19_24XX_SYS_NIRQ);
 -
 -      /* Use Interal loop-back in MMC/SDIO Module Input Clock selection */
 -      v = omap_ctrl_readl(OMAP2_CONTROL_DEVCONF0);
 -      v |= (1 << 24);
 -      omap_ctrl_writel(v, OMAP2_CONTROL_DEVCONF0);
 +      apollon_tsc_init();
  
        /*
         * Make sure the serial ports are muxed on at this point.
        omap_board_config = apollon_config;
        omap_board_config_size = ARRAY_SIZE(apollon_config);
        omap_serial_init();
 +      omap_register_i2c_bus(1, 100, NULL, 0);
 +      omap_register_i2c_bus(2, 100, NULL, 0);
 +
 +      spi_register_board_info(apollon_spi_board_info,
 +                              ARRAY_SIZE(apollon_spi_board_info));
 +
 +      apollon_mmc_init();
  }
  
  static void __init omap_apollon_map_io(void)
index fe97bab53e988574627199b3c3d74b196a981116,38c88fbe658de56f20fe6711a8043aba18c1ee0a..48cfae91509270c77d3909a1d95abd1a5c17ed97
@@@ -28,7 -28,7 +28,8 @@@
  #include <linux/mtd/partitions.h>
  #include <linux/mtd/nand.h>
  
 +#include <linux/regulator/machine.h>
+ #include <linux/i2c/twl4030.h>
  
  #include <mach/hardware.h>
  #include <asm/mach-types.h>
  #include <asm/mach/flash.h>
  
  #include <mach/board.h>
 +#include <mach/usb-musb.h>
 +#include <mach/usb-ehci.h>
  #include <mach/common.h>
  #include <mach/gpmc.h>
  #include <mach/nand.h>
  #include <mach/mux.h>
  
 +#include "twl4030-generic-scripts.h"
  #include "mmc-twl4030.h"
  
 +
  #define GPMC_CS0_BASE  0x60
  #define GPMC_CS_SIZE   0x30
  
@@@ -107,16 -103,10 +108,16 @@@ static struct platform_device omap3beag
        .resource       = &omap3beagle_nand_resource,
  };
  
 +#include "sdram-micron-mt46h32m32lf-6.h"
 +
  static struct omap_uart_config omap3_beagle_uart_config __initdata = {
        .enabled_uarts  = ((1 << 0) | (1 << 1) | (1 << 2)),
  };
  
 +static struct twl4030_usb_data beagle_usb_data = {
 +      .usb_mode       = T2_USB_MODE_ULPI,
 +};
 +
  static struct twl4030_hsmmc_info mmc[] = {
        {
                .mmc            = 1,
@@@ -164,51 -154,12 +165,51 @@@ static struct twl4030_gpio_platform_dat
        .setup          = beagle_twl_gpio_setup,
  };
  
 +/* VMMC1 for MMC1 pins CMD, CLK, DAT0..DAT3 (20 mA, plus card == max 220 mA) */
 +static struct regulator_init_data beagle_vmmc1 = {
 +      .constraints = {
 +              .valid_modes_mask = REGULATOR_MODE_NORMAL
 +                              | REGULATOR_MODE_STANDBY,
 +              .valid_ops_mask = REGULATOR_CHANGE_VOLTAGE
 +                              | REGULATOR_CHANGE_MODE
 +                              | REGULATOR_CHANGE_STATUS,
 +      },
 +};
 +
 +/* VSIM for MMC1 pins DAT4..DAT7 (2 mA, plus card == max 50 mA) */
 +static struct regulator_init_data beagle_vsim = {
 +      .constraints = {
 +              .valid_modes_mask = REGULATOR_MODE_NORMAL
 +                              | REGULATOR_MODE_STANDBY,
 +              .valid_ops_mask = REGULATOR_CHANGE_VOLTAGE
 +                              | REGULATOR_CHANGE_MODE
 +                              | REGULATOR_CHANGE_STATUS,
 +      },
 +};
 +
 +/* VDAC for DSS driving S-Video (8 mA unloaded, max 65 mA) */
 +static struct regulator_init_data beagle_vdac = {
 +      .constraints = {
 +              .min_uV                 = 1800000,
 +              .max_uV                 = 1800000,
 +              .valid_modes_mask       = REGULATOR_MODE_NORMAL
 +                                      | REGULATOR_MODE_STANDBY,
 +              .valid_ops_mask         = REGULATOR_CHANGE_MODE
 +                                      | REGULATOR_CHANGE_STATUS,
 +      },
 +};
 +
  static struct twl4030_platform_data beagle_twldata = {
        .irq_base       = TWL4030_IRQ_BASE,
        .irq_end        = TWL4030_IRQ_END,
  
        /* platform_data for children goes here */
 +      .usb            = &beagle_usb_data,
        .gpio           = &beagle_gpio_data,
 +      .power          = GENERIC3430_T2SCRIPTS_DATA,
 +      .vmmc1          = &beagle_vmmc1,
 +      .vsim           = &beagle_vsim,
 +      .vdac           = &beagle_vdac,
  };
  
  static struct i2c_board_info __initdata beagle_i2c_boardinfo[] = {
@@@ -233,7 -184,7 +234,7 @@@ static int __init omap3_beagle_i2c_init
  
  static void __init omap3_beagle_init_irq(void)
  {
 -      omap2_init_common_hw();
 +      omap2_init_common_hw(mt46h32m32lf6_sdrc_params);
        omap_init_irq();
        omap_gpio_init();
  }
@@@ -363,8 -314,6 +364,8 @@@ static void __init omap3_beagle_init(vo
        /* REVISIT leave DVI powered down until it's needed ... */
        gpio_direction_output(170, true);
  
 +      usb_musb_init();
 +      usb_ehci_init();
        omap3beagle_flash_init();
  }
  
diff --combined arch/arm/plat-omap/dma.c
index 3a50a6633f659ff14ec9310a866197dcc6e4d4cb,e77373c39f8c8a3ac76cab7b4f5c336a02ecd947..5eaa46841fe0e2ef09ce505291b96967b60fa3ca
mode 100755,100644..100755
@@@ -278,11 -278,11 +278,11 @@@ void omap_set_dma_transfer_params(int l
                u32 val;
  
                val = dma_read(CCR(lch));
-               val &= ~(3 << 19);
-               val |= ((dma_trigger & ~(0x1f)) << 14);
  
-               val &= ~(0x1f);
-               val |= (dma_trigger & 0x1f);
+               /* DMA_SYNCHRO_CONTROL_UPPER depends on the channel number */
+               val &= ~((3 << 19) | 0x1f);
+               val |= (dma_trigger & ~0x1f) << 14;
+               val |= dma_trigger & 0x1f;
  
                if (sync_mode & OMAP_DMA_SYNC_FRAME)
                        val |= 1 << 5;
@@@ -709,7 -709,6 +709,7 @@@ int omap_request_dma(int dev_id, const 
        chan->dev_name = dev_name;
        chan->callback = callback;
        chan->data = data;
 +      chan->flags = 0;
  
  #ifndef CONFIG_ARCH_OMAP1
        if (cpu_class_is_omap2()) {
@@@ -1889,11 -1888,11 +1889,11 @@@ static int omap2_dma_handle_ch(int ch
                status = dma_read(CSR(ch));
        }
  
 +      dma_write(status, CSR(ch));
 +
        if (likely(dma_chan[ch].callback != NULL))
                dma_chan[ch].callback(ch, status, dma_chan[ch].data);
  
 -      dma_write(status, CSR(ch));
 -
        return 0;
  }
  
@@@ -2417,19 -2416,6 +2417,19 @@@ static int __init omap_init_dma(void
        if (cpu_class_is_omap2())
                setup_irq(INT_24XX_SDMA_IRQ0, &omap24xx_dma_irq);
  
 +      /* Enable smartidle idlemodes and autoidle */
 +      if (cpu_is_omap34xx()) {
 +              u32 v = dma_read(OCP_SYSCONFIG);
 +              v &= ~(DMA_SYSCONFIG_MIDLEMODE_MASK |
 +                              DMA_SYSCONFIG_SIDLEMODE_MASK |
 +                              DMA_SYSCONFIG_AUTOIDLE);
 +              v |= (DMA_SYSCONFIG_MIDLEMODE(DMA_IDLEMODE_SMARTIDLE) |
 +                      DMA_SYSCONFIG_SIDLEMODE(DMA_IDLEMODE_SMARTIDLE) |
 +                      DMA_SYSCONFIG_AUTOIDLE);
 +              dma_write(v , OCP_SYSCONFIG);
 +      }
 +
 +
        /* FIXME: Update LCD DMA to work on 24xx */
        if (cpu_class_is_omap1()) {
                r = request_irq(INT_DMA_LCD, lcd_dma_irq_handler, 0,
index c727e89c43786fd558ceeaa3ba7dcf065049ae61,eef873db3d48f54f420da4b2840cf717b58b9aae..113c2466c86a7d789fa5316118dfa4fc2a02941b
  #define XPBBLK(value)         ((value)<<7)    /* Bits 7:8 */
  
  /*********************** McBSP XCCR bit definitions *************************/
+ #define EXTCLKGATE            0x8000
+ #define PPCONNECT             0x4000
+ #define DXENDLY(value)                ((value)<<12)   /* Bits 12:13 */
+ #define XFULL_CYCLE           0x0800
  #define DILB                  0x0020
  #define XDMAEN                        0x0008
  #define XDISABLE              0x0001
  
  /********************** McBSP RCCR bit definitions *************************/
+ #define RFULL_CYCLE           0x0800
  #define RDMAEN                        0x0008
  #define RDISABLE              0x0001
  
@@@ -271,6 -276,8 +276,8 @@@ struct omap_mcbsp_reg_cfg 
        u16 rcerh;
        u16 xcerg;
        u16 xcerh;
+       u16 xccr;
+       u16 rccr;
  };
  
  typedef enum {
@@@ -337,8 -344,7 +344,8 @@@ struct omap_mcbsp_platform_data 
        u8 dma_rx_sync, dma_tx_sync;
        u16 rx_irq, tx_irq;
        struct omap_mcbsp_ops *ops;
 -      char const *clk_name;
 +      char const **clk_names;
 +      int num_clks;
  };
  
  struct omap_mcbsp {
        /* Protect the field .free, while checking if the mcbsp is in use */
        spinlock_t lock;
        struct omap_mcbsp_platform_data *pdata;
 -      struct clk *clk;
 +      struct clk **clks;
 +      int num_clks;
  };
  extern struct omap_mcbsp **mcbsp_ptr;
  extern int omap_mcbsp_count;
index 6d70d2f6fc0b4696428619f9b7c4fec095db7ab7,f2401a831f991f3f2a27a1705ae32c14190b9bbc..e5842e30e534485b6a1c5faa11bbd9ce2de94272
@@@ -173,6 -173,10 +173,10 @@@ void omap_mcbsp_config(unsigned int id
        OMAP_MCBSP_WRITE(io_base, MCR2, config->mcr2);
        OMAP_MCBSP_WRITE(io_base, MCR1, config->mcr1);
        OMAP_MCBSP_WRITE(io_base, PCR0, config->pcr0);
+       if (cpu_is_omap2430() || cpu_is_omap34xx()) {
+               OMAP_MCBSP_WRITE(io_base, XCCR, config->xccr);
+               OMAP_MCBSP_WRITE(io_base, RCCR, config->rccr);
+       }
  }
  EXPORT_SYMBOL(omap_mcbsp_config);
  
@@@ -210,7 -214,6 +214,7 @@@ EXPORT_SYMBOL(omap_mcbsp_set_io_type)
  int omap_mcbsp_request(unsigned int id)
  {
        struct omap_mcbsp *mcbsp;
 +      int i;
        int err;
  
        if (!omap_mcbsp_check_valid_id(id)) {
        if (mcbsp->pdata && mcbsp->pdata->ops && mcbsp->pdata->ops->request)
                mcbsp->pdata->ops->request(id);
  
 -      clk_enable(mcbsp->clk);
 +      for (i = 0; i < mcbsp->num_clks; i++)
 +              clk_enable(mcbsp->clks[i]);
  
        spin_lock(&mcbsp->lock);
        if (!mcbsp->free) {
@@@ -274,7 -276,6 +278,7 @@@ EXPORT_SYMBOL(omap_mcbsp_request)
  void omap_mcbsp_free(unsigned int id)
  {
        struct omap_mcbsp *mcbsp;
 +      int i;
  
        if (!omap_mcbsp_check_valid_id(id)) {
                printk(KERN_ERR "%s: Invalid id (%d)\n", __func__, id + 1);
        if (mcbsp->pdata && mcbsp->pdata->ops && mcbsp->pdata->ops->free)
                mcbsp->pdata->ops->free(id);
  
 -      clk_disable(mcbsp->clk);
 +      for (i = mcbsp->num_clks - 1; i >= 0; i--)
 +              clk_disable(mcbsp->clks[i]);
  
        spin_lock(&mcbsp->lock);
        if (mcbsp->free) {
@@@ -872,7 -872,6 +876,7 @@@ static int __devinit omap_mcbsp_probe(s
        struct omap_mcbsp_platform_data *pdata = pdev->dev.platform_data;
        struct omap_mcbsp *mcbsp;
        int id = pdev->id - 1;
 +      int i;
        int ret = 0;
  
        if (!pdata) {
        mcbsp->dma_rx_sync = pdata->dma_rx_sync;
        mcbsp->dma_tx_sync = pdata->dma_tx_sync;
  
 -      if (pdata->clk_name)
 -              mcbsp->clk = clk_get(&pdev->dev, pdata->clk_name);
 -      if (IS_ERR(mcbsp->clk)) {
 -              dev_err(&pdev->dev,
 -                      "Invalid clock configuration for McBSP%d.\n",
 -                      mcbsp->id);
 -              ret = PTR_ERR(mcbsp->clk);
 -              goto err_clk;
 +      if (pdata->num_clks) {
 +              mcbsp->num_clks = pdata->num_clks;
 +              mcbsp->clks = kzalloc(mcbsp->num_clks * sizeof(struct clk *),
 +                                      GFP_KERNEL);
 +              if (!mcbsp->clks) {
 +                      ret = -ENOMEM;
 +                      goto exit;
 +              }
 +              for (i = 0; i < mcbsp->num_clks; i++) {
 +                      mcbsp->clks[i] = clk_get(&pdev->dev, pdata->clk_names[i]);
 +                      if (IS_ERR(mcbsp->clks[i])) {
 +                              dev_err(&pdev->dev,
 +                                      "Invalid %s configuration for McBSP%d.\n",
 +                                      pdata->clk_names[i], mcbsp->id);
 +                              ret = PTR_ERR(mcbsp->clks[i]);
 +                              goto err_clk;
 +                      }
 +              }
 +
        }
  
        mcbsp->pdata = pdata;
        return 0;
  
  err_clk:
 +      while (i--)
 +              clk_put(mcbsp->clks[i]);
 +      kfree(mcbsp->clks);
        iounmap(mcbsp->io_base);
  err_ioremap:
        mcbsp->free = 0;
@@@ -957,7 -942,6 +961,7 @@@ exit
  static int __devexit omap_mcbsp_remove(struct platform_device *pdev)
  {
        struct omap_mcbsp *mcbsp = platform_get_drvdata(pdev);
 +      int i;
  
        platform_set_drvdata(pdev, NULL);
        if (mcbsp) {
                                mcbsp->pdata->ops->free)
                        mcbsp->pdata->ops->free(mcbsp->id);
  
 -              clk_disable(mcbsp->clk);
 -              clk_put(mcbsp->clk);
 +              for (i = mcbsp->num_clks - 1; i >= 0; i--) {
 +                      clk_disable(mcbsp->clks[i]);
 +                      clk_put(mcbsp->clks[i]);
 +              }
  
                iounmap(mcbsp->io_base);
  
 -              mcbsp->clk = NULL;
 +              if (mcbsp->num_clks) {
 +                      kfree(mcbsp->clks);
 +                      mcbsp->clks = NULL;
 +                      mcbsp->num_clks = 0;
 +              }
                mcbsp->free = 0;
                mcbsp->dev = NULL;
        }
index dffaf46a9afd843fd90c37e0804531bfa5d662f2,ba68a4671cb548d7663f7f2d1920df1332bd192a..5bced87d823d151c1ddefab7de69d1447a2b2453
@@@ -102,7 -102,7 +102,7 @@@ static int __init omap_rng_probe(struc
                return -EBUSY;
  
        if (cpu_is_omap24xx()) {
-               rng_ick = clk_get(NULL, "rng_ick");
+               rng_ick = clk_get(&pdev->dev, "rng_ick");
                if (IS_ERR(rng_ick)) {
                        dev_err(&pdev->dev, "Could not get rng_ick\n");
                        ret = PTR_ERR(rng_ick);
@@@ -205,6 -205,7 +205,6 @@@ static struct platform_driver omap_rng_
                .name           = "omap_rng",
                .owner          = THIS_MODULE,
        },
 -      .probe          = omap_rng_probe,
        .remove         = __exit_p(omap_rng_remove),
        .suspend        = omap_rng_suspend,
        .resume         = omap_rng_resume
@@@ -215,7 -216,7 +215,7 @@@ static int __init omap_rng_init(void
        if (!cpu_is_omap16xx() && !cpu_is_omap24xx())
                return -ENODEV;
  
 -      return platform_driver_register(&omap_rng_driver);
 +      return platform_driver_probe(&omap_rng_driver, omap_rng_probe);
  }
  
  static void __exit omap_rng_exit(void)
index 4c27f8ae7d8aca8ed6d374f6478b2aa2db108a24,c80312c1f38278051f7209745bf170f5d4f35b4e..bb95b3e9e13485976959e7f22c521906ea29eb62
@@@ -16,43 -16,6 +16,6 @@@ config DS168
          This driver can also be built as a module.  If so, the module
          will be called ds1682.
  
- config AT24
-       tristate "EEPROMs from most vendors"
-       depends on SYSFS && EXPERIMENTAL
-       help
-         Enable this driver to get read/write support to most I2C EEPROMs,
-         after you configure the driver to know about each EEPROM on
-         your target board.  Use these generic chip names, instead of
-         vendor-specific ones like at24c64 or 24lc02:
-            24c00, 24c01, 24c02, spd (readonly 24c02), 24c04, 24c08,
-            24c16, 24c32, 24c64, 24c128, 24c256, 24c512, 24c1024
-         Unless you like data loss puzzles, always be sure that any chip
-         you configure as a 24c32 (32 kbit) or larger is NOT really a
-         24c16 (16 kbit) or smaller, and vice versa. Marking the chip
-         as read-only won't help recover from this. Also, if your chip
-         has any software write-protect mechanism you may want to review the
-         code to make sure this driver won't turn it on by accident.
-         If you use this with an SMBus adapter instead of an I2C adapter,
-         full functionality is not available.  Only smaller devices are
-         supported (24c16 and below, max 4 kByte).
-         This driver can also be built as a module.  If so, the module
-         will be called at24.
- config SENSORS_EEPROM
-       tristate "EEPROM reader"
-       depends on EXPERIMENTAL
-       help
-         If you say yes here you get read-only access to the EEPROM data
-         available on modern memory DIMMs and Sony Vaio laptops.  Such
-         EEPROMs could theoretically be available on other devices as well.
-         This driver can also be built as a module.  If so, the module
-         will be called eeprom.
  config SENSORS_PCF8574
        tristate "Philips PCF8574 and PCF8574A (DEPRECATED)"
        depends on EXPERIMENTAL && GPIO_PCF857X = "n"
@@@ -114,35 -77,6 +77,35 @@@ config SENSORS_PCF859
          These devices are hard to detect and rarely found on mainstream
          hardware.  If unsure, say N.
  
 +config TWL4030_MADC
 +      tristate "TWL4030 MADC Driver"
 +      depends on TWL4030_CORE
 +      help
 +        The TWL4030 Monitoring ADC driver enables the host
 +        processor to monitor analog signals using analog-to-digital
 +        conversions on the input source. TWL4030 MADC provides the
 +        following features:
 +         - Single 10-bit ADC with successive approximation register (SAR) conversion;
 +         - Analog multiplexer for 16 inputs;
 +         - Seven (of the 16) inputs are freely available;
 +         - Battery voltage monitoring;
 +         - Concurrent conversion request management;
 +         - Interrupt signal to Primary Interrupt Handler;
 +         - Averaging feature;
 +         - Selective enable/disable of the averaging feature.
 +
 +        Say 'y' here to statically link this module into the kernel or 'm'
 +        to build it as a dinamically loadable module. The module will be
 +        called twl4030-madc.ko
 +
 +config TWL4030_PWRBUTTON
 +      tristate "TWL4030 Power button Driver"
 +      depends on TWL4030_CORE
 +
 +config TWL4030_POWEROFF
 +      tristate "TWL4030 device poweroff"
 +      depends on TWL4030_CORE
 +
  config SENSORS_MAX6875
        tristate "Maxim MAX6875 Power supply supervisor"
        depends on EXPERIMENTAL
@@@ -168,31 -102,4 +131,31 @@@ config SENSORS_TSL255
          This driver can also be built as a module.  If so, the module
          will be called tsl2550.
  
 +config SENSORS_TSL2563
 +       tristate "Taos TSL2563 ambient light sensor"
 +       depends on I2C && HWMON
 +       help
 +         If you say yes here you get support for the Taos TSL2563
 +         ambient light sensor.
 +
 +         This driver can also be built as a module.  If so, the module
 +         will be called tsl2563.
 +
 +config LP5521
 +      tristate "LP5521 LED driver chip"
 +      depends on I2C
 +      help
 +        If you say yes here you get support for the National Semiconductor
 +        LP5521 LED driver.
 +
 +config MENELAUS
 +      bool "TWL92330/Menelaus PM chip"
 +      depends on I2C=y && ARCH_OMAP24XX
 +      help
 +        If you say yes here you get support for the Texas Instruments
 +        TWL92330/Menelaus Power Management chip. This include voltage
 +        regulators, Dual slot memory card tranceivers, real-time clock
 +        and other features that are often used in portable devices like
 +        cell phones and PDAs.
 +
  endmenu
index d8bef8c4f78acb621e8e1b1b839bc17485954e4a,d142f238a2de43f8af6169811b9a64e86803a9a2..32a395f7bb5e341eb8112a1f2ed3bdeea5b24124
  #
  
  obj-$(CONFIG_DS1682)          += ds1682.o
- obj-$(CONFIG_AT24)            += at24.o
- obj-$(CONFIG_SENSORS_EEPROM)  += eeprom.o
  obj-$(CONFIG_SENSORS_MAX6875) += max6875.o
  obj-$(CONFIG_SENSORS_PCA9539) += pca9539.o
  obj-$(CONFIG_SENSORS_PCF8574) += pcf8574.o
  obj-$(CONFIG_PCF8575)         += pcf8575.o
  obj-$(CONFIG_SENSORS_PCF8591) += pcf8591.o
  obj-$(CONFIG_SENSORS_TSL2550) += tsl2550.o
 +obj-$(CONFIG_TWL4030_POWEROFF)        += twl4030-poweroff.o
 +obj-$(CONFIG_TWL4030_PWRBUTTON)       += twl4030-pwrbutton.o
 +obj-$(CONFIG_TWL4030_MADC)    += twl4030-madc.o
 +obj-$(CONFIG_RTC_X1205_I2C)   += x1205.o
 +obj-$(CONFIG_LP5521)          += lp5521.o
  
  ifeq ($(CONFIG_I2C_DEBUG_CHIP),y)
  EXTRA_CFLAGS += -DDEBUG
  endif
 -
diff --combined drivers/misc/Kconfig
index f1c5f83612aa0f62b1ecf45d207a1903ce0ecf4e,56073199ceba8474d3e78321af3aca6c3a466cde..920fa20622e0e7986c105cf53fef6fb196493862
@@@ -87,14 -87,6 +87,6 @@@ config PHANTO
          If you choose to build module, its name will be phantom. If unsure,
          say N here.
  
- config EEPROM_93CX6
-       tristate "EEPROM 93CX6 support"
-       ---help---
-         This is a driver for the EEPROM chipsets 93c46 and 93c66.
-         The driver supports both read as well as write commands.
-         If unsure, say N.
  config SGI_IOC4
        tristate "SGI IOC4 Base IO support"
        depends on PCI
@@@ -158,20 -150,6 +150,20 @@@ config ATMEL_SS
  
          If unsure, say N.
  
 +config OMAP_STI
 +      bool "Serial Trace Interface support"
 +      depends on ARCH_OMAP16XX || ARCH_OMAP24XX || ARCH_OMAP34XX
 +      default n
 +      help
 +        Serial Trace Interface. The protocols suported for OMAP1/2/3 are
 +        STI/CSTI/XTIv2 correspondingly.
 +
 +config OMAP_STI_CONSOLE
 +      bool "STI console support"
 +      depends on OMAP_STI
 +      help
 +        This enables a console driver by way of STI/XTI.
 +
  config ENCLOSURE_SERVICES
        tristate "Enclosure Services"
        default n
@@@ -245,5 -223,6 +237,6 @@@ config DELL_LAPTO
        laptops.
  
  source "drivers/misc/c2port/Kconfig"
+ source "drivers/misc/eeprom/Kconfig"
  
  endif # MISC_DEVICES
diff --combined drivers/misc/Makefile
index 04399dddef3bb4ea980c5dad7530b22a9a4387cb,bc11998305544752f67b16ab587d14e725a870e2..b162e23af35c1339ee1608bff98feede664737db
@@@ -13,11 -13,10 +13,11 @@@ obj-$(CONFIG_TIFM_CORE)            += tifm_
  obj-$(CONFIG_TIFM_7XX1)               += tifm_7xx1.o
  obj-$(CONFIG_PHANTOM)         += phantom.o
  obj-$(CONFIG_SGI_IOC4)                += ioc4.o
- obj-$(CONFIG_EEPROM_93CX6)    += eeprom_93cx6.o
 +obj-$(CONFIG_OMAP_STI)                += sti/
  obj-$(CONFIG_ENCLOSURE_SERVICES) += enclosure.o
  obj-$(CONFIG_KGDB_TESTS)      += kgdbts.o
  obj-$(CONFIG_SGI_XP)          += sgi-xp/
  obj-$(CONFIG_SGI_GRU)         += sgi-gru/
  obj-$(CONFIG_HP_ILO)          += hpilo.o
  obj-$(CONFIG_C2PORT)          += c2port/
+ obj-y                         += eeprom/
diff --combined drivers/spi/Kconfig
index c203657178abd2478856067031eab348e97ea109,83a185d52961e5075cd5330de7f770fc4eb28e79..8bc6d1147217ca74a8b02795bb661494ebdcf4e9
@@@ -230,58 -230,6 +230,47 @@@ config SPI_XILIN
  #
  comment "SPI Protocol Masters"
  
- config SPI_AT25
-       tristate "SPI EEPROMs from most vendors"
-       depends on SYSFS
-       help
-         Enable this driver to get read/write support to most SPI EEPROMs,
-         after you configure the board init code to know about each eeprom
-         on your target board.
-         This driver can also be built as a module.  If so, the module
-         will be called at25.
 +config SPI_TSC210X
 +      depends on SPI_MASTER && EXPERIMENTAL
 +      tristate "TI TSC210x (TSC2101/TSC2102) support"
 +      help
 +        Say Y here if you want support for the TSC210x chips.  Some
 +        boards use these for touchscreen and audio support.
 +
 +        These are members of a family of highly integrated PDA analog
 +        interface circuit.  They include a 12-bit ADC used for battery,
 +        temperature, touchscreen, and other sensors.  They also have
 +        an audio DAC and amplifier, and in some models an audio ADC.
 +        The audio support is highly chip-specific, but most of the
 +        sensor support works the same.
 +
 +        Note that the device has to be present in the board's SPI
 +        devices table for this driver to load.  This driver doesn't
 +        automatically enable touchscreen, sensors or audio
 +        functionality - enable these in their respective menus.
 +
 +config SPI_TSC2301
 +      tristate "TSC2301 driver"
 +      depends on SPI_MASTER
 +      help
 +        Say Y here if you have a TSC2301 chip connected to an SPI
 +        bus on your board.
 +
 +        The TSC2301 is a highly integrated PDA analog interface circuit.
 +        It contains a complete 12-bit A/D resistive touch screen
 +        converter (ADC) including drivers, touch pressure measurement
 +        capability, keypad controller, and 8-bit D/A converter (DAC) output
 +        for LCD contrast control.
 +
 +        To compile this driver as a module, choose M here: the
 +        module will be called tsc2301.
 +
 +config SPI_TSC2301_AUDIO
 +      boolean "TSC2301 audio support"
 +      depends on SPI_TSC2301 && SND
 +      help
 +        Say Y here for if you are using the audio features of TSC2301.
 +
  config SPI_SPIDEV
        tristate "User mode SPI device driver support"
        depends on EXPERIMENTAL
diff --combined drivers/spi/Makefile
index 525abc3dcb9fe9c656192cdc70c0070369ac9c97,5d0451936d8625eebd4f70dd59f65ab69c2db333..2b8af98787376f6f5edf164dc8a6aae6d47a209b
@@@ -33,12 -33,8 +33,11 @@@ obj-$(CONFIG_SPI_SH_SCI)            += spi_sh_sci
  #     ... add above this line ...
  
  # SPI protocol drivers (device/link on bus)
- obj-$(CONFIG_SPI_AT25)                += at25.o
  obj-$(CONFIG_SPI_SPIDEV)      += spidev.o
  obj-$(CONFIG_SPI_TLE62X0)     += tle62x0.o
 +obj-$(CONFIG_SPI_TSC210X)     += tsc210x.o
 +obj-$(CONFIG_SPI_TSC2301)     += tsc2301.o
 +tsc2301-objs                  := tsc2301-core.o
  #     ... add above this line ...
  
  # SPI slave controller drivers (upstream link)