Merge tag 'boards' of git://git.kernel.org/pub/scm/linux/kernel/git/arm/arm-soc
authorLinus Torvalds <torvalds@linux-foundation.org>
Tue, 27 Mar 2012 23:27:28 +0000 (16:27 -0700)
committerLinus Torvalds <torvalds@linux-foundation.org>
Tue, 27 Mar 2012 23:27:28 +0000 (16:27 -0700)
Pull "ARM: board specific updates" from Arnd Bergmann/Olof Johansson:
 "These changes are all specific to one board only.  We're trying to
  keep the number of board files low, but generally board level updates
  are ok on platforms that are working on moving towards DT based
  probing, which will eventually lead to removing them.

  The board-ams-delta.c board file gets a conflict between the removal
  of ams_delta_config and the addition of a lot of other data.  The
  Kconfig file has two changes in the same line, and in exynos, the
  power domain cleanup conflicts with the addition of the image sensor
  device.

Signed-off-by: Arnd Bergmann <arnd@arndb.de>
  [olof: Amended a fix for a mismerge to board-omap4panda.c]
Signed-off-by: Olof Johansson <olof@lixom.net>"
Fixed up some fairly trivial conflicts manually.

* tag 'boards' of git://git.kernel.org/pub/scm/linux/kernel/git/arm/arm-soc: (82 commits)
  i.MX35-PDK: Add Camera support
  ARM : mx35: 3ds-board: add framebuffer device
  pxa/hx4700: Remove pcmcia platform_device structure
  ARM: pxa/hx4700: Reduce sleep mode battery discharge by 35%
  ARM: pxa/hx4700: Remove unwanted request for GPIO105
  ARM: EXYNOS: support Exynos4210-bus Devfreq driver on Nuri board
  ARM: EXYNOS: Register JPEG on nuri
  ARM: EXYNOS: Register JPEG on universal_c210
  ARM: S5PV210: Enable JPEG on SMDKV210
  ARM: S5PV210: Add JPEG board definition
  ARM: EXYNOS: Enable JPEG on Origen
  ARM: EXYNOS: Enable JPEG on SMDKV310
  ARM: EXYNOS: Add __init attribute to universal_camera_init()
  ARM: EXYNOS: Add __init attribute to nuri_camera_init()
  ARM: S5PV210: Enable FIMC on SMDKC110
  ARM: S5PV210: Enable FIMC on SMDKV210
  ARM: S5PV210: Enable MFC on SMDKC110
  ARM: S5PV210: Enable MFC on SMDKV210
  ARM: EXYNOS: Enable G2D on SMDKV310
  ARM: tegra: update defconfig
  ...

25 files changed:
1  2 
arch/arm/Kconfig
arch/arm/mach-exynos/Kconfig
arch/arm/mach-exynos/mach-nuri.c
arch/arm/mach-exynos/mach-origen.c
arch/arm/mach-exynos/mach-smdkv310.c
arch/arm/mach-exynos/mach-universal_c210.c
arch/arm/mach-omap1/Kconfig
arch/arm/mach-omap1/board-ams-delta.c
arch/arm/mach-omap2/Kconfig
arch/arm/mach-omap2/Makefile
arch/arm/mach-omap2/board-4430sdp.c
arch/arm/mach-omap2/board-am3517evm.c
arch/arm/mach-omap2/board-omap3logic.c
arch/arm/mach-omap2/board-omap3pandora.c
arch/arm/mach-omap2/board-omap4panda.c
arch/arm/mach-omap2/board-rm680.c
arch/arm/mach-omap2/board-rx51-peripherals.c
arch/arm/mach-s3c64xx/Kconfig
arch/arm/mach-s3c64xx/mach-crag6410.c
arch/arm/mach-s5pv210/Kconfig
arch/arm/mach-s5pv210/mach-smdkv210.c
arch/arm/mach-tegra/board-dt-tegra30.c
drivers/leds/Kconfig
drivers/leds/Makefile
sound/soc/omap/ams-delta.c

diff --combined arch/arm/Kconfig
@@@ -186,9 -186,6 +186,9 @@@ config GENERIC_ISA_DM
  config FIQ
        bool
  
 +config NEED_RET_TO_USER
 +      bool
 +
  config ARCH_MTD_XIP
        bool
  
@@@ -327,7 -324,7 +327,7 @@@ config ARCH_AT9
        select CLKDEV_LOOKUP
        help
          This enables support for systems based on the Atmel AT91RM9200,
 -        AT91SAM9 and AT91CAP9 processors.
 +        AT91SAM9 processors.
  
  config ARCH_BCMRING
        bool "Broadcom BCMRING"
@@@ -482,7 -479,6 +482,7 @@@ config ARCH_IOP13X
        select ARCH_SUPPORTS_MSI
        select VMSPLIT_1G
        select NEED_MACH_MEMORY_H
 +      select NEED_RET_TO_USER
        help
          Support for Intel's IOP13XX (XScale) family of processors.
  
@@@ -490,7 -486,6 +490,7 @@@ config ARCH_IOP32
        bool "IOP32x-based"
        depends on MMU
        select CPU_XSCALE
 +      select NEED_RET_TO_USER
        select PLAT_IOP
        select PCI
        select ARCH_REQUIRE_GPIOLIB
@@@ -502,7 -497,6 +502,7 @@@ config ARCH_IOP33
        bool "IOP33x-based"
        depends on MMU
        select CPU_XSCALE
 +      select NEED_RET_TO_USER
        select PLAT_IOP
        select PCI
        select ARCH_REQUIRE_GPIOLIB
@@@ -769,21 -763,22 +769,21 @@@ config ARCH_SA110
        help
          Support for StrongARM 11x0 based boards.
  
 -config ARCH_S3C2410
 -      bool "Samsung S3C2410, S3C2412, S3C2413, S3C2416, S3C2440, S3C2442, S3C2443, S3C2450"
 +config ARCH_S3C24XX
 +      bool "Samsung S3C24XX SoCs"
        select GENERIC_GPIO
        select ARCH_HAS_CPUFREQ
        select HAVE_CLK
        select CLKDEV_LOOKUP
        select ARCH_USES_GETTIMEOFFSET
        select HAVE_S3C2410_I2C if I2C
 +      select HAVE_S3C_RTC if RTC_CLASS
 +      select HAVE_S3C2410_WATCHDOG if WATCHDOG
        help
 -        Samsung S3C2410X CPU based systems, such as the Simtec Electronics
 -        BAST (<http://www.simtec.co.uk/products/EB110ITX/>), the IPAQ 1940 or
 -        the Samsung SMDK2410 development board (and derivatives).
 -
 -        Note, the S3C2416 and the S3C2450 are so close that they even share
 -        the same SoC ID code. This means that there is no separate machine
 -        directory (no arch/arm/mach-s3c2450) as the S3C2416 was first.
 +        Samsung S3C2410, S3C2412, S3C2413, S3C2416, S3C2440, S3C2442, S3C2443
 +        and S3C2450 SoCs based systems, such as the Simtec Electronics BAST
 +        (<http://www.simtec.co.uk/products/EB110ITX/>), the IPAQ 1940 or the
 +        Samsung SMDK2410 development board (and derivatives).
  
  config ARCH_S3C64XX
        bool "Samsung S3C64XX"
@@@ -906,7 -901,6 +906,7 @@@ config ARCH_U30
  
  config ARCH_U8500
        bool "ST-Ericsson U8500 Series"
 +      depends on MMU
        select CPU_V7
        select ARM_AMBA
        select GENERIC_CLOCKEVENTS
@@@ -1072,10 -1066,12 +1072,10 @@@ source "arch/arm/plat-s5p/Kconfig
  
  source "arch/arm/plat-spear/Kconfig"
  
 -if ARCH_S3C2410
 -source "arch/arm/mach-s3c2410/Kconfig"
 +source "arch/arm/mach-s3c24xx/Kconfig"
 +if ARCH_S3C24XX
  source "arch/arm/mach-s3c2412/Kconfig"
 -source "arch/arm/mach-s3c2416/Kconfig"
  source "arch/arm/mach-s3c2440/Kconfig"
 -source "arch/arm/mach-s3c2443/Kconfig"
  endif
  
  if ARCH_S3C64XX
@@@ -1131,7 -1127,6 +1131,7 @@@ config PLAT_VERSATIL
  config ARM_TIMER_SP804
        bool
        select CLKSRC_MMIO
 +      select HAVE_SCHED_CLOCK
  
  source arch/arm/mm/Kconfig
  
@@@ -1582,7 -1577,8 +1582,8 @@@ config LOCAL_TIMER
  config ARCH_NR_GPIO
        int
        default 1024 if ARCH_SHMOBILE || ARCH_TEGRA
 -      default 350 if ARCH_U8500
 +      default 355 if ARCH_U8500
+       default 264 if MACH_H4700
        default 0
        help
          Maximum number of GPIOs in the system.
@@@ -1593,7 -1589,7 +1594,7 @@@ source kernel/Kconfig.preemp
  
  config HZ
        int
 -      default 200 if ARCH_EBSA110 || ARCH_S3C2410 || ARCH_S5P64X0 || \
 +      default 200 if ARCH_EBSA110 || ARCH_S3C24XX || ARCH_S5P64X0 || \
                ARCH_S5PV210 || ARCH_EXYNOS4
        default OMAP_32K_TIMER_HZ if ARCH_OMAP && OMAP_32K_TIMER
        default AT91_TIMER_HZ if ARCH_AT91
@@@ -2119,7 -2115,7 +2120,7 @@@ config CPU_FREQ_S3
  
  config CPU_FREQ_S3C24XX
        bool "CPUfreq driver for Samsung S3C24XX series CPUs (EXPERIMENTAL)"
 -      depends on ARCH_S3C2410 && CPU_FREQ && EXPERIMENTAL
 +      depends on ARCH_S3C24XX && CPU_FREQ && EXPERIMENTAL
        select CPU_FREQ_S3C
        help
          This enables the CPUfreq driver for the Samsung S3C24XX family
@@@ -34,7 -34,6 +34,7 @@@ config CPU_EXYNOS421
        select ARM_CPU_SUSPEND if PM
        select S5P_PM if PM
        select S5P_SLEEP if PM
 +      select PM_GENERIC_DOMAINS
        help
          Enable EXYNOS4210 CPU support
  
@@@ -75,6 -74,11 +75,6 @@@ config EXYNOS4_SETUP_FIMD
        help
          Common setup code for FIMD0.
  
 -config EXYNOS4_DEV_PD
 -      bool
 -      help
 -        Compile in platform device definitions for Power Domain
 -
  config EXYNOS4_DEV_SYSMMU
        bool
        help
@@@ -179,7 -183,9 +179,9 @@@ config MACH_SMDKV31
        select S5P_DEV_FIMC1
        select S5P_DEV_FIMC2
        select S5P_DEV_FIMC3
+       select S5P_DEV_G2D
        select S5P_DEV_I2C_HDMIPHY
+       select S5P_DEV_JPEG
        select S5P_DEV_MFC
        select S5P_DEV_TV
        select S5P_DEV_USB_EHCI
        select EXYNOS4_DEV_AHCI
        select SAMSUNG_DEV_KEYPAD
        select EXYNOS4_DEV_DMA
 -      select EXYNOS4_DEV_PD
        select SAMSUNG_DEV_PWM
        select EXYNOS4_DEV_USB_OHCI
        select EXYNOS4_DEV_SYSMMU
@@@ -225,7 -232,9 +227,9 @@@ config MACH_UNIVERSAL_C21
        select S5P_DEV_FIMC1
        select S5P_DEV_FIMC2
        select S5P_DEV_FIMC3
+       select S5P_DEV_G2D
        select S5P_DEV_CSIS0
+       select S5P_DEV_JPEG
        select S5P_DEV_FIMD0
        select S3C_DEV_HSMMC
        select S3C_DEV_HSMMC2
        select S5P_DEV_ONENAND
        select S5P_DEV_TV
        select EXYNOS4_DEV_DMA
 -      select EXYNOS4_DEV_PD
        select EXYNOS4_SETUP_FIMD0
        select EXYNOS4_SETUP_I2C1
        select EXYNOS4_SETUP_I2C3
@@@ -262,20 -272,25 +266,24 @@@ config MACH_NUR
        select S3C_DEV_I2C1
        select S3C_DEV_I2C3
        select S3C_DEV_I2C5
+       select S3C_DEV_I2C6
        select S5P_DEV_CSIS0
+       select S5P_DEV_JPEG
        select S5P_DEV_FIMC0
        select S5P_DEV_FIMC1
        select S5P_DEV_FIMC2
        select S5P_DEV_FIMC3
+       select S5P_DEV_G2D
        select S5P_DEV_MFC
        select S5P_DEV_USB_EHCI
        select S5P_SETUP_MIPIPHY
        select EXYNOS4_DEV_DMA
 -      select EXYNOS4_DEV_PD
        select EXYNOS4_SETUP_FIMC
        select EXYNOS4_SETUP_FIMD0
        select EXYNOS4_SETUP_I2C1
        select EXYNOS4_SETUP_I2C3
        select EXYNOS4_SETUP_I2C5
+       select EXYNOS4_SETUP_I2C6
        select EXYNOS4_SETUP_SDHCI
        select EXYNOS4_SETUP_USB_PHY
        select S5P_SETUP_MIPIPHY
@@@ -296,13 -311,16 +304,15 @@@ config MACH_ORIGE
        select S5P_DEV_FIMC2
        select S5P_DEV_FIMC3
        select S5P_DEV_FIMD0
+       select S5P_DEV_G2D
        select S5P_DEV_I2C_HDMIPHY
+       select S5P_DEV_JPEG
        select S5P_DEV_MFC
        select S5P_DEV_TV
        select S5P_DEV_USB_EHCI
        select SAMSUNG_DEV_BACKLIGHT
        select SAMSUNG_DEV_PWM
        select EXYNOS4_DEV_DMA
 -      select EXYNOS4_DEV_PD
        select EXYNOS4_DEV_USB_OHCI
        select EXYNOS4_SETUP_FIMD0
        select EXYNOS4_SETUP_SDHCI
@@@ -28,6 -28,7 +28,7 @@@
  
  #include <video/platform_lcd.h>
  #include <media/m5mols.h>
+ #include <media/s5k6aa.h>
  #include <media/s5p_fimc.h>
  #include <media/v4l2-mediabus.h>
  
@@@ -75,6 -76,7 +76,7 @@@ enum fixed_regulator_id 
        FIXED_REG_ID_MAX8903,
        FIXED_REG_ID_CAM_A28V,
        FIXED_REG_ID_CAM_12V,
+       FIXED_REG_ID_CAM_VT_15V,
  };
  
  static struct s3c2410_uartcfg nuri_uartcfgs[] __initdata = {
@@@ -399,6 -401,9 +401,9 @@@ static struct regulator_consumer_suppl
  static struct regulator_consumer_supply __initdata max8997_ldo5_[] = {
        REGULATOR_SUPPLY("vhsic", "modemctl"), /* MODEM */
  };
+ static struct regulator_consumer_supply nuri_max8997_ldo6_consumer[] = {
+       REGULATOR_SUPPLY("vdd_reg", "6-003c"), /* S5K6AA camera */
+ };
  static struct regulator_consumer_supply __initdata max8997_ldo7_[] = {
        REGULATOR_SUPPLY("dig_18", "0-001f"), /* HCD803 */
  };
@@@ -431,7 -436,7 +436,7 @@@ static struct regulator_consumer_suppl
        REGULATOR_SUPPLY("vdd_arm", NULL), /* CPUFREQ */
  };
  static struct regulator_consumer_supply __initdata max8997_buck2_[] = {
-       REGULATOR_SUPPLY("vdd_int", NULL), /* CPUFREQ */
+       REGULATOR_SUPPLY("vdd_int", "exynos4210-busfreq.0"), /* CPUFREQ */
  };
  static struct regulator_consumer_supply __initdata max8997_buck3_[] = {
        REGULATOR_SUPPLY("vdd", "mali_dev.0"), /* G3D of Exynos 4 */
@@@ -546,6 -551,8 +551,8 @@@ static struct regulator_init_data __ini
                        .enabled        = 1,
                },
        },
+       .num_consumer_supplies  = ARRAY_SIZE(nuri_max8997_ldo6_consumer),
+       .consumer_supplies      = nuri_max8997_ldo6_consumer,
  };
  
  static struct regulator_init_data __initdata max8997_ldo7_data = {
@@@ -742,7 -749,7 +749,7 @@@ static struct regulator_init_data __ini
        .constraints    = {
                .name           = "VINT_1.1V_C210",
                .min_uV         = 900000,
-               .max_uV         = 1100000,
+               .max_uV         = 1200000,
                .valid_ops_mask = REGULATOR_CHANGE_VOLTAGE,
                .always_on      = 1,
                .state_mem      = {
@@@ -957,7 -964,6 +964,6 @@@ static struct max8997_platform_data __i
        .regulators             = nuri_max8997_regulators,
  
        .buck125_gpios = { EXYNOS4_GPX0(5), EXYNOS4_GPX0(6), EXYNOS4_GPL0(0) },
-       .buck2_gpiodvs = true,
  
        .buck1_voltage[0] = 1350000, /* 1.35V */
        .buck1_voltage[1] = 1300000, /* 1.3V */
@@@ -1116,7 -1122,30 +1122,30 @@@ static void __init nuri_ehci_init(void
  }
  
  /* CAMERA */
+ static struct regulator_consumer_supply cam_vt_cam15_supply =
+       REGULATOR_SUPPLY("vdd_core", "6-003c");
+ static struct regulator_init_data cam_vt_cam15_reg_init_data = {
+       .constraints = { .valid_ops_mask = REGULATOR_CHANGE_STATUS },
+       .num_consumer_supplies = 1,
+       .consumer_supplies = &cam_vt_cam15_supply,
+ };
+ static struct fixed_voltage_config cam_vt_cam15_fixed_voltage_cfg = {
+       .supply_name    = "VT_CAM_1.5V",
+       .microvolts     = 1500000,
+       .gpio           = EXYNOS4_GPE2(2), /* VT_CAM_1.5V_EN */
+       .enable_high    = 1,
+       .init_data      = &cam_vt_cam15_reg_init_data,
+ };
+ static struct platform_device cam_vt_cam15_fixed_rdev = {
+       .name = "reg-fixed-voltage", .id = FIXED_REG_ID_CAM_VT_15V,
+       .dev = { .platform_data = &cam_vt_cam15_fixed_voltage_cfg },
+ };
  static struct regulator_consumer_supply cam_vdda_supply[] = {
+       REGULATOR_SUPPLY("vdda", "6-003c"),
        REGULATOR_SUPPLY("a_sensor", "0-001f"),
  };
  
@@@ -1173,6 -1202,21 +1202,21 @@@ static struct s5p_platform_mipi_csis mi
  
  #define GPIO_CAM_MEGA_RST     EXYNOS4_GPY3(7) /* ISP_RESET */
  #define GPIO_CAM_8M_ISP_INT   EXYNOS4_GPL2(5)
+ #define GPIO_CAM_VT_NSTBY     EXYNOS4_GPL2(0)
+ #define GPIO_CAM_VT_NRST      EXYNOS4_GPL2(1)
+ static struct s5k6aa_platform_data s5k6aa_pldata = {
+       .mclk_frequency = 24000000UL,
+       .gpio_reset     = { GPIO_CAM_VT_NRST, 0 },
+       .gpio_stby      = { GPIO_CAM_VT_NSTBY, 0 },
+       .bus_type       = V4L2_MBUS_PARALLEL,
+       .horiz_flip     = 1,
+ };
+ static struct i2c_board_info s5k6aa_board_info = {
+       I2C_BOARD_INFO("S5K6AA", 0x3c),
+       .platform_data = &s5k6aa_pldata,
+ };
  
  static struct m5mols_platform_data m5mols_platdata = {
        .gpio_reset = GPIO_CAM_MEGA_RST,
@@@ -1185,6 -1229,13 +1229,13 @@@ static struct i2c_board_info m5mols_boa
  
  static struct s5p_fimc_isp_info nuri_camera_sensors[] = {
        {
+               .flags          = V4L2_MBUS_PCLK_SAMPLE_RISING |
+                                 V4L2_MBUS_VSYNC_ACTIVE_LOW,
+               .bus_type       = FIMC_ITU_601,
+               .board_info     = &s5k6aa_board_info,
+               .clk_frequency  = 24000000UL,
+               .i2c_bus_num    = 6,
+       }, {
                .flags          = V4L2_MBUS_PCLK_SAMPLE_FALLING |
                                  V4L2_MBUS_VSYNC_ACTIVE_LOW,
                .bus_type       = FIMC_MIPI_CSI2,
@@@ -1200,11 -1251,13 +1251,13 @@@ static struct s5p_platform_fimc fimc_md
  };
  
  static struct gpio nuri_camera_gpios[] = {
+       { GPIO_CAM_VT_NSTBY,    GPIOF_OUT_INIT_LOW, "CAM_VGA_NSTBY" },
+       { GPIO_CAM_VT_NRST,     GPIOF_OUT_INIT_LOW, "CAM_VGA_NRST"  },
        { GPIO_CAM_8M_ISP_INT,  GPIOF_IN,           "8M_ISP_INT"  },
        { GPIO_CAM_MEGA_RST,    GPIOF_OUT_INIT_LOW, "CAM_8M_NRST" },
  };
  
- static void nuri_camera_init(void)
+ static void __init nuri_camera_init(void)
  {
        s3c_set_platdata(&mipi_csis_platdata, sizeof(mipi_csis_platdata),
                         &s5p_device_mipi_csis0);
                pr_err("%s: Failed to configure 8M_ISP_INT GPIO\n", __func__);
  
        /* Free GPIOs controlled directly by the sensor drivers. */
+       gpio_free(GPIO_CAM_VT_NRST);
+       gpio_free(GPIO_CAM_VT_NSTBY);
        gpio_free(GPIO_CAM_MEGA_RST);
  
        if (exynos4_fimc_setup_gpio(S5P_CAMPORT_A)) {
        s5p_gpio_set_drvstr(EXYNOS4_GPJ1(3), S5P_GPIO_DRVSTR_LV4);
  }
  
+ static struct s3c2410_platform_i2c nuri_i2c6_platdata __initdata = {
+       .frequency      = 400000U,
+       .sda_delay      = 200,
+       .bus_num        = 6,
+ };
  static struct s3c2410_platform_i2c nuri_i2c0_platdata __initdata = {
        .frequency      = 400000U,
        .sda_delay      = 200,
  };
  
+ /* DEVFREQ controlling memory/bus */
+ static struct platform_device exynos4_bus_devfreq = {
+       .name                   = "exynos4210-busfreq",
+ };
  static struct platform_device *nuri_devices[] __initdata = {
        /* Samsung Platform Devices */
        &s3c_device_i2c5, /* PMIC should initialize first */
        &s3c_device_i2c0,
+       &s3c_device_i2c6,
        &emmc_fixed_voltage,
        &s5p_device_mipi_csis0,
        &s5p_device_fimc0,
        &s3c_device_i2c3,
        &i2c9_gpio,
        &s3c_device_adc,
+       &s5p_device_g2d,
+       &s5p_device_jpeg,
        &s3c_device_rtc,
        &s5p_device_mfc,
        &s5p_device_mfc_l,
        &s5p_device_mfc_r,
 -      &exynos4_device_pd[PD_MFC],
 -      &exynos4_device_pd[PD_LCD0],
 -      &exynos4_device_pd[PD_CAM],
        &s5p_device_fimc_md,
  
        /* NURI Devices */
        &nuri_backlight_device,
        &max8903_fixed_reg_dev,
        &nuri_max8903_device,
+       &cam_vt_cam15_fixed_rdev,
        &cam_vdda_fixed_rdev,
        &cam_8m_12v_fixed_rdev,
+       &exynos4_bus_devfreq,
  };
  
  static void __init nuri_map_io(void)
@@@ -1302,6 -1376,7 +1373,7 @@@ static void __init nuri_machine_init(vo
        i2c_register_board_info(5, i2c5_devs, ARRAY_SIZE(i2c5_devs));
        i2c9_devs[I2C9_MAX17042].irq = gpio_to_irq(EXYNOS4_GPX2(3));
        i2c_register_board_info(9, i2c9_devs, ARRAY_SIZE(i2c9_devs));
+       s3c_i2c6_set_platdata(&nuri_i2c6_platdata);
  
        s5p_fimd0_set_platdata(&nuri_fb_pdata);
  
  
        /* Last */
        platform_add_devices(nuri_devices, ARRAY_SIZE(nuri_devices));
 -      s5p_device_mfc.dev.parent = &exynos4_device_pd[PD_MFC].dev;
 -      s5p_device_fimd0.dev.parent = &exynos4_device_pd[PD_LCD0].dev;
 -
 -      s5p_device_fimc0.dev.parent = &exynos4_device_pd[PD_CAM].dev;
 -      s5p_device_fimc1.dev.parent = &exynos4_device_pd[PD_CAM].dev;
 -      s5p_device_fimc2.dev.parent = &exynos4_device_pd[PD_CAM].dev;
 -      s5p_device_fimc3.dev.parent = &exynos4_device_pd[PD_CAM].dev;
 -      s5p_device_mipi_csis0.dev.parent = &exynos4_device_pd[PD_CAM].dev;
  }
  
  MACHINE_START(NURI, "NURI")
@@@ -20,6 -20,7 +20,7 @@@
  #include <linux/regulator/machine.h>
  #include <linux/mfd/max8997.h>
  #include <linux/lcd.h>
+ #include <linux/rfkill-gpio.h>
  
  #include <asm/mach/arch.h>
  #include <asm/hardware/gic.h>
@@@ -235,6 -236,7 +236,7 @@@ static struct regulator_init_data __ini
                .min_uV         = 2800000,
                .max_uV         = 2800000,
                .apply_uV       = 1,
+               .always_on      = 1,
                .valid_ops_mask = REGULATOR_CHANGE_STATUS,
                .state_mem      = {
                        .disabled       = 1,
@@@ -278,6 -280,7 +280,7 @@@ static struct regulator_init_data __ini
                .min_uV         = 1800000,
                .max_uV         = 1800000,
                .apply_uV       = 1,
+               .always_on      = 1,
                .valid_ops_mask = REGULATOR_CHANGE_STATUS,
                .state_mem      = {
                        .disabled       = 1,
@@@ -293,6 -296,7 +296,7 @@@ static struct regulator_init_data __ini
                .min_uV         = 3300000,
                .max_uV         = 3300000,
                .apply_uV       = 1,
+               .always_on      = 1,
                .valid_ops_mask = REGULATOR_CHANGE_STATUS,
                .state_mem      = {
                        .disabled       = 1,
@@@ -412,7 -416,7 +416,7 @@@ static struct max8997_regulator_data __
        { MAX8997_BUCK7,        &max8997_buck7_data },
  };
  
 -struct max8997_platform_data __initdata origen_max8997_pdata = {
 +static struct max8997_platform_data __initdata origen_max8997_pdata = {
        .num_regulators = ARRAY_SIZE(origen_max8997_regulators),
        .regulators     = origen_max8997_regulators,
  
@@@ -602,6 -606,23 +606,23 @@@ static struct s3c_fb_platdata origen_lc
        .setup_gpio     = exynos4_fimd0_gpio_setup_24bpp,
  };
  
+ /* Bluetooth rfkill gpio platform data */
+ struct rfkill_gpio_platform_data origen_bt_pdata = {
+       .reset_gpio     = EXYNOS4_GPX2(2),
+       .shutdown_gpio  = -1,
+       .type           = RFKILL_TYPE_BLUETOOTH,
+       .name           = "origen-bt",
+ };
+ /* Bluetooth Platform device */
+ static struct platform_device origen_device_bluetooth = {
+       .name           = "rfkill_gpio",
+       .id             = -1,
+       .dev            = {
+               .platform_data  = &origen_bt_pdata,
+       },
+ };
  static struct platform_device *origen_devices[] __initdata = {
        &s3c_device_hsmmc2,
        &s3c_device_hsmmc0,
        &s5p_device_fimc1,
        &s5p_device_fimc2,
        &s5p_device_fimc3,
+       &s5p_device_fimc_md,
        &s5p_device_fimd0,
+       &s5p_device_g2d,
        &s5p_device_hdmi,
        &s5p_device_i2c_hdmiphy,
+       &s5p_device_jpeg,
        &s5p_device_mfc,
        &s5p_device_mfc_l,
        &s5p_device_mfc_r,
        &s5p_device_mixer,
        &exynos4_device_ohci,
 -      &exynos4_device_pd[PD_LCD0],
 -      &exynos4_device_pd[PD_TV],
 -      &exynos4_device_pd[PD_G3D],
 -      &exynos4_device_pd[PD_LCD1],
 -      &exynos4_device_pd[PD_CAM],
 -      &exynos4_device_pd[PD_GPS],
 -      &exynos4_device_pd[PD_MFC],
        &origen_device_gpiokeys,
        &origen_lcd_hv070wsa,
+       &origen_device_bluetooth,
  };
  
  /* LCD Backlight data */
@@@ -636,6 -668,16 +661,16 @@@ static struct platform_pwm_backlight_da
        .pwm_period_ns  = 1000,
  };
  
+ static void __init origen_bt_setup(void)
+ {
+       gpio_request(EXYNOS4_GPA0(0), "GPIO BT_UART");
+       /* 4 UART Pins configuration */
+       s3c_gpio_cfgrange_nopull(EXYNOS4_GPA0(0), 4, S3C_GPIO_SFN(2));
+       /* Setup BT Reset, this gpio will be requesed by rfkill-gpio */
+       s3c_gpio_cfgpin(EXYNOS4_GPX2(2), S3C_GPIO_OUTPUT);
+       s3c_gpio_setpull(EXYNOS4_GPX2(2), S3C_GPIO_PULL_NONE);
+ }
  static void s5p_tv_setup(void)
  {
        /* Direct HPD to HDMI chip */
@@@ -688,7 -730,16 +723,9 @@@ static void __init origen_machine_init(
  
        platform_add_devices(origen_devices, ARRAY_SIZE(origen_devices));
  
 -      s5p_device_fimd0.dev.parent = &exynos4_device_pd[PD_LCD0].dev;
 -
 -      s5p_device_hdmi.dev.parent = &exynos4_device_pd[PD_TV].dev;
 -      s5p_device_mixer.dev.parent = &exynos4_device_pd[PD_TV].dev;
 -
 -      s5p_device_mfc.dev.parent = &exynos4_device_pd[PD_MFC].dev;
 -
        samsung_bl_set(&origen_bl_gpio_info, &origen_bl_data);
+       origen_bt_setup();
  }
  
  MACHINE_START(ORIGEN, "ORIGEN")
@@@ -270,6 -270,9 +270,9 @@@ static struct platform_device *smdkv310
        &s5p_device_fimc1,
        &s5p_device_fimc2,
        &s5p_device_fimc3,
+       &s5p_device_fimc_md,
+       &s5p_device_g2d,
+       &s5p_device_jpeg,
        &exynos4_device_ac97,
        &exynos4_device_i2s0,
        &exynos4_device_ohci,
        &s5p_device_mfc,
        &s5p_device_mfc_l,
        &s5p_device_mfc_r,
 -      &exynos4_device_pd[PD_MFC],
 -      &exynos4_device_pd[PD_G3D],
 -      &exynos4_device_pd[PD_LCD0],
 -      &exynos4_device_pd[PD_LCD1],
 -      &exynos4_device_pd[PD_CAM],
 -      &exynos4_device_pd[PD_TV],
 -      &exynos4_device_pd[PD_GPS],
        &exynos4_device_spdif,
        &exynos4_device_sysmmu,
        &samsung_asoc_dma,
@@@ -329,6 -339,10 +332,6 @@@ static void s5p_tv_setup(void
        WARN_ON(gpio_request_one(EXYNOS4_GPX3(7), GPIOF_IN, "hpd-plug"));
        s3c_gpio_cfgpin(EXYNOS4_GPX3(7), S3C_GPIO_SFN(0x3));
        s3c_gpio_setpull(EXYNOS4_GPX3(7), S3C_GPIO_PULL_NONE);
 -
 -      /* setup dependencies between TV devices */
 -      s5p_device_hdmi.dev.parent = &exynos4_device_pd[PD_TV].dev;
 -      s5p_device_mixer.dev.parent = &exynos4_device_pd[PD_TV].dev;
  }
  
  static void __init smdkv310_map_io(void)
@@@ -368,6 -382,7 +371,6 @@@ static void __init smdkv310_machine_ini
        clk_xusbxti.rate = 24000000;
  
        platform_add_devices(smdkv310_devices, ARRAY_SIZE(smdkv310_devices));
 -      s5p_device_mfc.dev.parent = &exynos4_device_pd[PD_MFC].dev;
  }
  
  MACHINE_START(SMDKV310, "SMDKV310")
@@@ -47,6 -47,7 +47,7 @@@
  #include <media/v4l2-mediabus.h>
  #include <media/s5p_fimc.h>
  #include <media/m5mols.h>
+ #include <media/s5k6aa.h>
  
  #include "common.h"
  
@@@ -123,8 -124,10 +124,10 @@@ static struct regulator_consumer_suppl
  static struct regulator_consumer_supply lp3974_buck2_consumer =
        REGULATOR_SUPPLY("vddg3d", NULL);
  
- static struct regulator_consumer_supply lp3974_buck3_consumer =
-       REGULATOR_SUPPLY("vdet", "s5p-sdo");
+ static struct regulator_consumer_supply lp3974_buck3_consumer[] = {
+       REGULATOR_SUPPLY("vdet", "s5p-sdo"),
+       REGULATOR_SUPPLY("vdd_reg", "0-003c"),
+ };
  
  static struct regulator_init_data lp3974_buck1_data = {
        .constraints    = {
@@@ -169,8 -172,8 +172,8 @@@ static struct regulator_init_data lp397
                        .enabled        = 1,
                },
        },
-       .num_consumer_supplies = 1,
-       .consumer_supplies = &lp3974_buck3_consumer,
+       .num_consumer_supplies = ARRAY_SIZE(lp3974_buck3_consumer),
+       .consumer_supplies = lp3974_buck3_consumer,
  };
  
  static struct regulator_init_data lp3974_buck4_data = {
@@@ -303,6 -306,9 +306,9 @@@ static struct regulator_init_data lp397
        .consumer_supplies = lp3974_ldo8_consumer,
  };
  
+ static struct regulator_consumer_supply lp3974_ldo9_consumer =
+       REGULATOR_SUPPLY("vddio", "0-003c");
  static struct regulator_init_data lp3974_ldo9_data = {
        .constraints    = {
                .name           = "VCC_2.8V",
                        .enabled        = 1,
                },
        },
+       .num_consumer_supplies  = 1,
+       .consumer_supplies      = &lp3974_ldo9_consumer,
  };
  
  static struct regulator_init_data lp3974_ldo10_data = {
@@@ -412,6 -420,7 +420,7 @@@ static struct regulator_init_data lp397
  };
  
  static struct regulator_consumer_supply lp3974_ldo16_consumer[] = {
+       REGULATOR_SUPPLY("vdda", "0-003c"),
        REGULATOR_SUPPLY("a_sensor", "0-001f"),
  };
  
@@@ -819,6 -828,8 +828,8 @@@ static struct s3c_fb_pd_win universal_f
        },
        .max_bpp        = 32,
        .default_bpp    = 16,
+       .virtual_x      = 480,
+       .virtual_y      = 2 * 800,
  };
  
  static struct s3c_fb_platdata universal_lcd_pdata __initdata = {
        .setup_gpio     = exynos4_fimd0_gpio_setup_24bpp,
  };
  
+ static struct regulator_consumer_supply cam_vt_dio_supply =
+       REGULATOR_SUPPLY("vdd_core", "0-003c");
+ static struct regulator_init_data cam_vt_dio_reg_init_data = {
+       .constraints = { .valid_ops_mask = REGULATOR_CHANGE_STATUS },
+       .num_consumer_supplies = 1,
+       .consumer_supplies = &cam_vt_dio_supply,
+ };
+ static struct fixed_voltage_config cam_vt_dio_fixed_voltage_cfg = {
+       .supply_name    = "CAM_VT_D_IO",
+       .microvolts     = 2800000,
+       .gpio           = EXYNOS4_GPE2(1), /* CAM_PWR_EN2 */
+       .enable_high    = 1,
+       .init_data      = &cam_vt_dio_reg_init_data,
+ };
+ static struct platform_device cam_vt_dio_fixed_reg_dev = {
+       .name = "reg-fixed-voltage", .id = FIXED_REG_ID_CAM_VT_DIO,
+       .dev = { .platform_data = &cam_vt_dio_fixed_voltage_cfg },
+ };
  static struct regulator_consumer_supply cam_i_core_supply =
        REGULATOR_SUPPLY("core", "0-001f");
  
@@@ -885,6 -918,28 +918,28 @@@ static struct s5p_platform_mipi_csis mi
  #define GPIO_CAM_LEVEL_EN(n)  EXYNOS4_GPE4(n + 3)
  #define GPIO_CAM_8M_ISP_INT   EXYNOS4_GPX1(5) /* XEINT_13 */
  #define GPIO_CAM_MEGA_nRST    EXYNOS4_GPE2(5)
+ #define GPIO_CAM_VGA_NRST     EXYNOS4_GPE4(7)
+ #define GPIO_CAM_VGA_NSTBY    EXYNOS4_GPE4(6)
+ static int s5k6aa_set_power(int on)
+ {
+       gpio_set_value(GPIO_CAM_LEVEL_EN(2), !!on);
+       return 0;
+ }
+ static struct s5k6aa_platform_data s5k6aa_platdata = {
+       .mclk_frequency = 21600000UL,
+       .gpio_reset     = { GPIO_CAM_VGA_NRST, 0 },
+       .gpio_stby      = { GPIO_CAM_VGA_NSTBY, 0 },
+       .bus_type       = V4L2_MBUS_PARALLEL,
+       .horiz_flip     = 1,
+       .set_power      = s5k6aa_set_power,
+ };
+ static struct i2c_board_info s5k6aa_board_info = {
+       I2C_BOARD_INFO("S5K6AA", 0x3C),
+       .platform_data = &s5k6aa_platdata,
+ };
  
  static int m5mols_set_power(struct device *dev, int on)
  {
@@@ -909,6 -964,14 +964,14 @@@ static struct s5p_fimc_isp_info univers
                .mux_id         = 0,
                .flags          = V4L2_MBUS_PCLK_SAMPLE_FALLING |
                                  V4L2_MBUS_VSYNC_ACTIVE_LOW,
+               .bus_type       = FIMC_ITU_601,
+               .board_info     = &s5k6aa_board_info,
+               .i2c_bus_num    = 0,
+               .clk_frequency  = 24000000UL,
+       }, {
+               .mux_id         = 0,
+               .flags          = V4L2_MBUS_PCLK_SAMPLE_FALLING |
+                                 V4L2_MBUS_VSYNC_ACTIVE_LOW,
                .bus_type       = FIMC_MIPI_CSI2,
                .board_info     = &m5mols_board_info,
                .i2c_bus_num    = 0,
@@@ -927,9 -990,11 +990,11 @@@ static struct gpio universal_camera_gpi
        { GPIO_CAM_LEVEL_EN(2), GPIOF_OUT_INIT_LOW,  "CAM_LVL_EN2" },
        { GPIO_CAM_8M_ISP_INT,  GPIOF_IN,            "8M_ISP_INT"  },
        { GPIO_CAM_MEGA_nRST,   GPIOF_OUT_INIT_LOW,  "CAM_8M_NRST" },
+       { GPIO_CAM_VGA_NRST,    GPIOF_OUT_INIT_LOW,  "CAM_VGA_NRST"  },
+       { GPIO_CAM_VGA_NSTBY,   GPIOF_OUT_INIT_LOW,  "CAM_VGA_NSTBY" },
  };
  
- static void universal_camera_init(void)
+ static void __init universal_camera_init(void)
  {
        s3c_set_platdata(&mipi_csis_platdata, sizeof(mipi_csis_platdata),
                         &s5p_device_mipi_csis0);
        /* Free GPIOs controlled directly by the sensor drivers. */
        gpio_free(GPIO_CAM_MEGA_nRST);
        gpio_free(GPIO_CAM_8M_ISP_INT);
+       gpio_free(GPIO_CAM_VGA_NRST);
+       gpio_free(GPIO_CAM_VGA_NSTBY);
  
        if (exynos4_fimc_setup_gpio(S5P_CAMPORT_A))
                pr_err("Camera port A setup failed\n");
@@@ -962,6 -1029,7 +1029,7 @@@ static struct platform_device *universa
        &s5p_device_fimc1,
        &s5p_device_fimc2,
        &s5p_device_fimc3,
+       &s5p_device_g2d,
        &mmc0_fixed_voltage,
        &s3c_device_hsmmc0,
        &s3c_device_hsmmc2,
        &s3c_device_i2c5,
        &s5p_device_i2c_hdmiphy,
        &hdmi_fixed_voltage,
 -      &exynos4_device_pd[PD_TV],
        &s5p_device_hdmi,
        &s5p_device_sdo,
        &s5p_device_mixer,
        &universal_gpio_keys,
        &s5p_device_onenand,
        &s5p_device_fimd0,
+       &s5p_device_jpeg,
        &s5p_device_mfc,
        &s5p_device_mfc_l,
        &s5p_device_mfc_r,
 -      &exynos4_device_pd[PD_MFC],
 -      &exynos4_device_pd[PD_LCD0],
 -      &exynos4_device_pd[PD_CAM],
+       &cam_vt_dio_fixed_reg_dev,
        &cam_i_core_fixed_reg_dev,
        &cam_s_if_fixed_reg_dev,
        &s5p_device_fimc_md,
@@@ -995,12 -1069,16 +1065,12 @@@ static void __init universal_map_io(voi
        s3c24xx_init_uarts(universal_uartcfgs, ARRAY_SIZE(universal_uartcfgs));
  }
  
 -void s5p_tv_setup(void)
 +static void s5p_tv_setup(void)
  {
        /* direct HPD to HDMI chip */
        gpio_request_one(EXYNOS4_GPX3(7), GPIOF_IN, "hpd-plug");
        s3c_gpio_cfgpin(EXYNOS4_GPX3(7), S3C_GPIO_SFN(0x3));
        s3c_gpio_setpull(EXYNOS4_GPX3(7), S3C_GPIO_PULL_NONE);
 -
 -      /* setup dependencies between TV devices */
 -      s5p_device_hdmi.dev.parent = &exynos4_device_pd[PD_TV].dev;
 -      s5p_device_mixer.dev.parent = &exynos4_device_pd[PD_TV].dev;
  }
  
  static void __init universal_reserve(void)
@@@ -1034,6 -1112,15 +1104,6 @@@ static void __init universal_machine_in
  
        /* Last */
        platform_add_devices(universal_devices, ARRAY_SIZE(universal_devices));
 -
 -      s5p_device_mfc.dev.parent = &exynos4_device_pd[PD_MFC].dev;
 -      s5p_device_fimd0.dev.parent = &exynos4_device_pd[PD_LCD0].dev;
 -
 -      s5p_device_fimc0.dev.parent = &exynos4_device_pd[PD_CAM].dev;
 -      s5p_device_fimc1.dev.parent = &exynos4_device_pd[PD_CAM].dev;
 -      s5p_device_fimc2.dev.parent = &exynos4_device_pd[PD_CAM].dev;
 -      s5p_device_fimc3.dev.parent = &exynos4_device_pd[PD_CAM].dev;
 -      s5p_device_mipi_csis0.dev.parent = &exynos4_device_pd[PD_CAM].dev;
  }
  
  MACHINE_START(UNIVERSAL_C210, "UNIVERSAL_C210")
@@@ -37,6 -37,7 +37,6 @@@ comment "OMAP Board Type
  config MACH_OMAP_INNOVATOR
        bool "TI Innovator"
        depends on ARCH_OMAP1 && (ARCH_OMAP15XX || ARCH_OMAP16XX)
 -      select OMAP_MCBSP
        help
            TI OMAP 1510 or 1610 Innovator board support. Say Y here if you
            have such a board.
@@@ -44,6 -45,7 +44,6 @@@
  config MACH_OMAP_H2
        bool "TI H2 Support"
        depends on ARCH_OMAP1 && ARCH_OMAP16XX
 -      select OMAP_MCBSP
        help
          TI OMAP 1610/1611B H2 board support. Say Y here if you have such
          a board.
@@@ -70,6 -72,7 +70,6 @@@ config MACH_HERAL
  config MACH_OMAP_OSK
        bool "TI OSK Support"
        depends on ARCH_OMAP1 && ARCH_OMAP16XX
 -      select OMAP_MCBSP
        help
          TI OMAP 5912 OSK (OMAP Starter Kit) board support. Say Y here
            if you have such a board.
@@@ -152,6 -155,10 +152,10 @@@ config MACH_AMS_DELT
        bool "Amstrad E3 (Delta)"
        depends on ARCH_OMAP1 && ARCH_OMAP15XX
        select FIQ
+       select GPIO_GENERIC_PLATFORM
+       select LEDS_GPIO_REGISTER
+       select REGULATOR
+       select REGULATOR_FIXED_VOLTAGE
        help
          Support for the Amstrad E3 (codename Delta) videophone. Say Y here
          if you have such a device.
@@@ -11,6 -11,7 +11,7 @@@
   * it under the terms of the GNU General Public License version 2 as
   * published by the Free Software Foundation.
   */
+ #include <linux/basic_mmio_gpio.h>
  #include <linux/gpio.h>
  #include <linux/kernel.h>
  #include <linux/init.h>
  #include <linux/interrupt.h>
  #include <linux/leds.h>
  #include <linux/platform_device.h>
+ #include <linux/regulator/consumer.h>
+ #include <linux/regulator/fixed.h>
+ #include <linux/regulator/machine.h>
  #include <linux/serial_8250.h>
  #include <linux/export.h>
 +#include <linux/omapfb.h>
 +#include <linux/io.h>
  
  #include <media/soc_camera.h>
  
  #include <asm/serial.h>
 -#include <mach/hardware.h>
  #include <asm/mach-types.h>
  #include <asm/mach/arch.h>
  #include <asm/mach/map.h>
  
 -#include <plat/io.h>
  #include <plat/board-ams-delta.h>
  #include <plat/keypad.h>
  #include <plat/mux.h>
  #include <plat/usb.h>
  #include <plat/board.h>
 -#include "common.h"
 -#include <mach/camera.h>
  
 +#include <mach/hardware.h>
  #include <mach/ams-delta-fiq.h>
 +#include <mach/camera.h>
 +
 +#include "iomap.h"
 +#include "common.h"
  
- static u8 ams_delta_latch1_reg;
- static u16 ams_delta_latch2_reg;
  static const unsigned int ams_delta_keymap[] = {
        KEY(0, 0, KEY_F1),              /* Advert    */
  
        KEY(7, 3, KEY_LEFTCTRL),        /* Vol down  */
  };
  
- 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;
- }
+ #define LATCH1_PHYS   0x01000000
+ #define LATCH1_VIRT   0xEA000000
+ #define MODEM_PHYS    0x04000000
+ #define MODEM_VIRT    0xEB000000
+ #define LATCH2_PHYS   0x08000000
+ #define LATCH2_VIRT   0xEC000000
  
  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),
+               .virtual        = LATCH1_VIRT,
+               .pfn            = __phys_to_pfn(LATCH1_PHYS),
                .length         = 0x01000000,
                .type           = MT_DEVICE
        },
        /* AMS_DELTA_LATCH2 */
        {
-               .virtual        = AMS_DELTA_LATCH2_VIRT,
-               .pfn            = __phys_to_pfn(AMS_DELTA_LATCH2_PHYS),
+               .virtual        = LATCH2_VIRT,
+               .pfn            = __phys_to_pfn(LATCH2_PHYS),
                .length         = 0x01000000,
                .type           = MT_DEVICE
        },
        /* AMS_DELTA_MODEM */
        {
-               .virtual        = AMS_DELTA_MODEM_VIRT,
-               .pfn            = __phys_to_pfn(AMS_DELTA_MODEM_PHYS),
+               .virtual        = MODEM_VIRT,
+               .pfn            = __phys_to_pfn(MODEM_PHYS),
                .length         = 0x01000000,
                .type           = MT_DEVICE
        }
  };
  
- static struct omap_lcd_config ams_delta_lcd_config = {
+ static struct omap_lcd_config ams_delta_lcd_config __initdata = {
        .ctrl_name      = "internal",
  };
  
- static struct omap_usb_config ams_delta_usb_config __initdata = {
+ static struct omap_usb_config ams_delta_usb_config = {
        .register_host  = 1,
        .hmc_mode       = 16,
        .pins[0]        = 2,
  };
  
 -static struct omap_board_config_kernel ams_delta_config[] __initdata = {
 -      { OMAP_TAG_LCD,         &ams_delta_lcd_config },
 -};
 -
+ #define LATCH1_GPIO_BASE      232
+ #define LATCH1_NGPIO          8
+ static struct resource latch1_resources[] = {
+       [0] = {
+               .name   = "dat",
+               .start  = LATCH1_PHYS,
+               .end    = LATCH1_PHYS + (LATCH1_NGPIO - 1) / 8,
+               .flags  = IORESOURCE_MEM,
+       },
+ };
+ static struct bgpio_pdata latch1_pdata = {
+       .base   = LATCH1_GPIO_BASE,
+       .ngpio  = LATCH1_NGPIO,
+ };
+ static struct platform_device latch1_gpio_device = {
+       .name           = "basic-mmio-gpio",
+       .id             = 0,
+       .resource       = latch1_resources,
+       .num_resources  = ARRAY_SIZE(latch1_resources),
+       .dev            = {
+               .platform_data  = &latch1_pdata,
+       },
+ };
+ static struct resource latch2_resources[] = {
+       [0] = {
+               .name   = "dat",
+               .start  = LATCH2_PHYS,
+               .end    = LATCH2_PHYS + (AMS_DELTA_LATCH2_NGPIO - 1) / 8,
+               .flags  = IORESOURCE_MEM,
+       },
+ };
+ static struct bgpio_pdata latch2_pdata = {
+       .base   = AMS_DELTA_LATCH2_GPIO_BASE,
+       .ngpio  = AMS_DELTA_LATCH2_NGPIO,
+ };
+ static struct platform_device latch2_gpio_device = {
+       .name           = "basic-mmio-gpio",
+       .id             = 1,
+       .resource       = latch2_resources,
+       .num_resources  = ARRAY_SIZE(latch2_resources),
+       .dev            = {
+               .platform_data  = &latch2_pdata,
+       },
+ };
+ static const struct gpio latch_gpios[] __initconst = {
+       {
+               .gpio   = LATCH1_GPIO_BASE + 6,
+               .flags  = GPIOF_OUT_INIT_LOW,
+               .label  = "dockit1",
+       },
+       {
+               .gpio   = LATCH1_GPIO_BASE + 7,
+               .flags  = GPIOF_OUT_INIT_LOW,
+               .label  = "dockit2",
+       },
+       {
+               .gpio   = AMS_DELTA_GPIO_PIN_SCARD_RSTIN,
+               .flags  = GPIOF_OUT_INIT_LOW,
+               .label  = "scard_rstin",
+       },
+       {
+               .gpio   = AMS_DELTA_GPIO_PIN_SCARD_CMDVCC,
+               .flags  = GPIOF_OUT_INIT_LOW,
+               .label  = "scard_cmdvcc",
+       },
+       {
+               .gpio   = AMS_DELTA_GPIO_PIN_MODEM_CODEC,
+               .flags  = GPIOF_OUT_INIT_LOW,
+               .label  = "modem_codec",
+       },
+       {
+               .gpio   = AMS_DELTA_LATCH2_GPIO_BASE + 14,
+               .flags  = GPIOF_OUT_INIT_LOW,
+               .label  = "hookflash1",
+       },
+       {
+               .gpio   = AMS_DELTA_LATCH2_GPIO_BASE + 15,
+               .flags  = GPIOF_OUT_INIT_LOW,
+               .label  = "hookflash2",
+       },
+ };
+ static struct regulator_consumer_supply modem_nreset_consumers[] = {
+       REGULATOR_SUPPLY("RESET#", "serial8250.1"),
+       REGULATOR_SUPPLY("POR", "cx20442-codec"),
+ };
+ static struct regulator_init_data modem_nreset_data = {
+       .constraints            = {
+               .valid_ops_mask         = REGULATOR_CHANGE_STATUS,
+               .boot_on                = 1,
+       },
+       .num_consumer_supplies  = ARRAY_SIZE(modem_nreset_consumers),
+       .consumer_supplies      = modem_nreset_consumers,
+ };
+ static struct fixed_voltage_config modem_nreset_config = {
+       .supply_name            = "modem_nreset",
+       .microvolts             = 3300000,
+       .gpio                   = AMS_DELTA_GPIO_PIN_MODEM_NRESET,
+       .startup_delay          = 25000,
+       .enable_high            = 1,
+       .enabled_at_boot        = 1,
+       .init_data              = &modem_nreset_data,
+ };
+ static struct platform_device modem_nreset_device = {
+       .name   = "reg-fixed-voltage",
+       .id     = -1,
+       .dev    = {
+               .platform_data  = &modem_nreset_config,
+       },
+ };
+ struct modem_private_data {
+       struct regulator *regulator;
+ };
+ static struct modem_private_data modem_priv;
+ void ams_delta_latch_write(int base, int ngpio, u16 mask, u16 value)
+ {
+       int bit = 0;
+       u16 bitpos = 1 << bit;
+       for (; bit < ngpio; bit++, bitpos = bitpos << 1) {
+               if (!(mask & bitpos))
+                       continue;
+               else
+                       gpio_set_value(base + bit, (value & bitpos) != 0);
+       }
+ }
+ EXPORT_SYMBOL(ams_delta_latch_write);
  static struct resource ams_delta_nand_resources[] = {
        [0] = {
                .start  = OMAP1_MPUIO_BASE,
@@@ -201,7 -337,7 +336,7 @@@ static const struct matrix_keymap_data 
        .keymap_size    = ARRAY_SIZE(ams_delta_keymap),
  };
  
- static struct omap_kp_platform_data ams_delta_kp_data __initdata = {
+ static struct omap_kp_platform_data ams_delta_kp_data = {
        .rows           = 8,
        .cols           = 8,
        .keymap_data    = &ams_delta_keymap_data,
@@@ -223,9 -359,45 +358,45 @@@ static struct platform_device ams_delta
        .id     = -1,
  };
  
- static struct platform_device ams_delta_led_device = {
-       .name   = "ams-delta-led",
-       .id     = -1
+ static const struct gpio_led gpio_leds[] __initconst = {
+       {
+               .name            = "camera",
+               .gpio            = LATCH1_GPIO_BASE + 0,
+               .default_state   = LEDS_GPIO_DEFSTATE_OFF,
+ #ifdef CONFIG_LEDS_TRIGGERS
+               .default_trigger = "ams_delta_camera",
+ #endif
+       },
+       {
+               .name            = "advert",
+               .gpio            = LATCH1_GPIO_BASE + 1,
+               .default_state   = LEDS_GPIO_DEFSTATE_OFF,
+       },
+       {
+               .name            = "email",
+               .gpio            = LATCH1_GPIO_BASE + 2,
+               .default_state   = LEDS_GPIO_DEFSTATE_OFF,
+       },
+       {
+               .name            = "handsfree",
+               .gpio            = LATCH1_GPIO_BASE + 3,
+               .default_state   = LEDS_GPIO_DEFSTATE_OFF,
+       },
+       {
+               .name            = "voicemail",
+               .gpio            = LATCH1_GPIO_BASE + 4,
+               .default_state   = LEDS_GPIO_DEFSTATE_OFF,
+       },
+       {
+               .name            = "voice",
+               .gpio            = LATCH1_GPIO_BASE + 5,
+               .default_state   = LEDS_GPIO_DEFSTATE_OFF,
+       },
+ };
+ static const struct gpio_led_platform_data leds_pdata __initconst = {
+       .leds           = gpio_leds,
+       .num_leds       = ARRAY_SIZE(gpio_leds),
  };
  
  static struct i2c_board_info ams_delta_camera_board_info[] = {
@@@ -274,13 -446,17 +445,17 @@@ static struct omap1_cam_platform_data a
  };
  
  static struct platform_device *ams_delta_devices[] __initdata = {
-       &ams_delta_nand_device,
+       &latch1_gpio_device,
+       &latch2_gpio_device,
        &ams_delta_kp_device,
-       &ams_delta_lcd_device,
-       &ams_delta_led_device,
        &ams_delta_camera_device,
  };
  
+ static struct platform_device *late_devices[] __initdata = {
+       &ams_delta_nand_device,
+       &ams_delta_lcd_device,
+ };
  static void __init ams_delta_init(void)
  {
        /* mux pins for uarts */
        omap_cfg_reg(J19_1610_CAM_D6);
        omap_cfg_reg(J18_1610_CAM_D7);
  
 -      omap_board_config = ams_delta_config;
 -      omap_board_config_size = ARRAY_SIZE(ams_delta_config);
        omap_serial_init();
        omap_register_i2c_bus(1, 100, NULL, 0);
  
-       /* Clear latch2 (NAND, LCD, modem enable) */
-       ams_delta_latch2_write(~0, 0);
        omap1_usb_init(&ams_delta_usb_config);
        omap1_set_camera_info(&ams_delta_camera_platform_data);
  #ifdef CONFIG_LEDS_TRIGGERS
        led_trigger_register_simple("ams_delta_camera",
                        &ams_delta_camera_led_trigger);
  #endif
+       gpio_led_register_device(-1, &leds_pdata);
        platform_add_devices(ams_delta_devices, ARRAY_SIZE(ams_delta_devices));
  
        ams_delta_init_fiq();
  
        omap_writew(omap_readw(ARM_RSTCT1) | 0x0004, ARM_RSTCT1);
 +
 +      omapfb_set_lcd_config(&ams_delta_lcd_config);
  }
  
+ static void modem_pm(struct uart_port *port, unsigned int state, unsigned old)
+ {
+       struct modem_private_data *priv = port->private_data;
+       if (IS_ERR(priv->regulator))
+               return;
+       if (state == old)
+               return;
+       if (state == 0)
+               regulator_enable(priv->regulator);
+       else if (old == 0)
+               regulator_disable(priv->regulator);
+ }
  static struct plat_serial8250_port ams_delta_modem_ports[] = {
        {
-               .membase        = IOMEM(AMS_DELTA_MODEM_VIRT),
-               .mapbase        = AMS_DELTA_MODEM_PHYS,
+               .membase        = IOMEM(MODEM_VIRT),
+               .mapbase        = MODEM_PHYS,
                .irq            = -EINVAL, /* changed later */
                .flags          = UPF_BOOT_AUTOCONF,
                .irqflags       = IRQF_TRIGGER_RISING,
                .iotype         = UPIO_MEM,
                .regshift       = 1,
                .uartclk        = BASE_BAUD * 16,
+               .pm             = modem_pm,
+               .private_data   = &modem_priv,
        },
        { },
  };
@@@ -344,13 -536,27 +535,27 @@@ static struct platform_device ams_delta
        },
  };
  
- static int __init ams_delta_modem_init(void)
+ static int __init late_init(void)
  {
        int err;
  
        if (!machine_is_ams_delta())
                return -ENODEV;
  
+       err = gpio_request_array(latch_gpios, ARRAY_SIZE(latch_gpios));
+       if (err) {
+               pr_err("Couldn't take over latch1/latch2 GPIO pins\n");
+               return err;
+       }
+       platform_add_devices(late_devices, ARRAY_SIZE(late_devices));
+       err = platform_device_register(&modem_nreset_device);
+       if (err) {
+               pr_err("Couldn't register the modem regulator device\n");
+               return err;
+       }
        omap_cfg_reg(M14_1510_GPIO2);
        ams_delta_modem_ports[0].irq =
                        gpio_to_irq(AMS_DELTA_GPIO_PIN_MODEM_IRQ);
        }
        gpio_direction_input(AMS_DELTA_GPIO_PIN_MODEM_IRQ);
  
-       ams_delta_latch2_write(
-               AMS_DELTA_LATCH2_MODEM_NRESET | AMS_DELTA_LATCH2_MODEM_CODEC,
-               AMS_DELTA_LATCH2_MODEM_NRESET | AMS_DELTA_LATCH2_MODEM_CODEC);
+       /* Initialize the modem_nreset regulator consumer before use */
+       modem_priv.regulator = ERR_PTR(-ENODEV);
+       ams_delta_latch2_write(AMS_DELTA_LATCH2_MODEM_CODEC,
+                       AMS_DELTA_LATCH2_MODEM_CODEC);
+       err = platform_device_register(&ams_delta_modem_device);
+       if (err)
+               goto gpio_free;
  
-       return platform_device_register(&ams_delta_modem_device);
+       /*
+        * Once the modem device is registered, the modem_nreset
+        * regulator can be requested on behalf of that device.
+        */
+       modem_priv.regulator = regulator_get(&ams_delta_modem_device.dev,
+                       "RESET#");
+       if (IS_ERR(modem_priv.regulator)) {
+               err = PTR_ERR(modem_priv.regulator);
+               goto unregister;
+       }
+       return 0;
+ unregister:
+       platform_device_unregister(&ams_delta_modem_device);
+ gpio_free:
+       gpio_free(AMS_DELTA_GPIO_PIN_MODEM_IRQ);
+       return err;
  }
arch_initcall(ams_delta_modem_init);
late_initcall(late_init);
  
  static void __init ams_delta_map_io(void)
  {
@@@ -387,6 -615,3 +614,3 @@@ MACHINE_START(AMS_DELTA, "Amstrad E3 (D
        .timer          = &omap1_timer,
        .restart        = omap1_restart,
  MACHINE_END
- EXPORT_SYMBOL(ams_delta_latch1_write);
- EXPORT_SYMBOL(ams_delta_latch2_write);
@@@ -32,7 -32,7 +32,7 @@@ config ARCH_OMAP
        depends on ARCH_OMAP2PLUS
        default y
        select CPU_V7
 -      select USB_ARCH_HAS_EHCI
 +      select USB_ARCH_HAS_EHCI if USB_SUPPORT
        select ARCH_HAS_OPP
        select PM_OPP if PM
        select ARM_CPU_SUSPEND if PM
@@@ -52,7 -52,7 +52,7 @@@ config ARCH_OMAP
        select ARM_ERRATA_720789
        select ARCH_HAS_OPP
        select PM_OPP if PM
 -      select USB_ARCH_HAS_EHCI
 +      select USB_ARCH_HAS_EHCI if USB_SUPPORT
        select ARM_CPU_SUSPEND if PM
  
  comment "OMAP Core Type"
@@@ -245,10 -245,11 +245,11 @@@ config MACH_NOKIA_N8X
        select MACH_NOKIA_N810_WIMAX
  
  config MACH_NOKIA_RM680
-       bool "Nokia RM-680 board"
+       bool "Nokia RM-680/696 board"
        depends on ARCH_OMAP3
        default y
        select OMAP_PACKAGE_CBB
+       select MACH_NOKIA_RM696
  
  config MACH_NOKIA_RX51
        bool "Nokia RX-51 board"
@@@ -4,7 -4,7 +4,7 @@@
  
  # Common support
  obj-y := id.o io.o control.o mux.o devices.o serial.o gpmc.o timer.o pm.o \
 -       common.o gpio.o dma.o wd_timer.o display.o
 +       common.o gpio.o dma.o wd_timer.o display.o i2c.o
  
  omap-2-3-common                               = irq.o sdrc.o
  hwmod-common                          = omap_hwmod.o \
@@@ -17,14 -17,13 +17,14 @@@ obj-$(CONFIG_ARCH_OMAP2) += $(omap-2-3-
  obj-$(CONFIG_ARCH_OMAP3) += $(omap-2-3-common) $(hwmod-common) $(secure-common)
  obj-$(CONFIG_ARCH_OMAP4) += prm44xx.o $(hwmod-common) $(secure-common)
  
 -obj-$(CONFIG_OMAP_MCBSP) += mcbsp.o
 +ifneq ($(CONFIG_SND_OMAP_SOC_MCBSP),)
 +obj-y += mcbsp.o
 +endif
  
  obj-$(CONFIG_TWL4030_CORE) += omap_twl.o
  
  # SMP support ONLY available for OMAP4
  obj-$(CONFIG_SMP)                     += omap-smp.o omap-headsmp.o
 -obj-$(CONFIG_LOCAL_TIMERS)            += timer-mpu.o
  obj-$(CONFIG_HOTPLUG_CPU)             += omap-hotplug.o
  obj-$(CONFIG_ARCH_OMAP4)              += omap4-common.o omap-wakeupgen.o \
                                           sleep44xx.o
@@@ -183,6 -182,9 +183,6 @@@ obj-$(CONFIG_OMAP_IOMMU)           += iommu2.
  iommu-$(CONFIG_OMAP_IOMMU)            := omap-iommu.o
  obj-y                                 += $(iommu-m) $(iommu-y)
  
 -i2c-omap-$(CONFIG_I2C_OMAP)           := i2c.o
 -obj-y                                 += $(i2c-omap-m) $(i2c-omap-y)
 -
  ifneq ($(CONFIG_TIDSPBRIDGE),)
  obj-y                                 += dsp.o
  endif
@@@ -266,8 -268,9 +266,11 @@@ obj-y                                     += $(smc91x-m) $(smc91x-y
  
  smsc911x-$(CONFIG_SMSC911X)           := gpmc-smsc911x.o
  obj-y                                 += $(smsc911x-m) $(smsc911x-y)
 -obj-$(CONFIG_ARCH_OMAP4)              += hwspinlock.o
 +ifneq ($(CONFIG_HWSPINLOCK_OMAP),)
 +obj-y                                 += hwspinlock.o
 +endif
  
+ emac-$(CONFIG_TI_DAVINCI_EMAC)                := am35xx-emac.o
+ obj-y                                 += $(emac-m) $(emac-y)
  obj-y                                 += common-board-devices.o twl-common.o
@@@ -25,7 -25,6 +25,7 @@@
  #include <linux/regulator/fixed.h>
  #include <linux/leds.h>
  #include <linux/leds_pwm.h>
 +#include <linux/platform_data/omap4-keypad.h>
  
  #include <mach/hardware.h>
  #include <asm/hardware/gic.h>
@@@ -324,7 -323,10 +324,10 @@@ static struct spi_board_info sdp4430_sp
                .bus_num                = 1,
                .chip_select            = 0,
                .max_speed_hz           = 24000000,
-               .irq                    = ETH_KS8851_IRQ,
+               /*
+                * .irq is set to gpio_to_irq(ETH_KS8851_IRQ)
+                * in omap_4430sdp_init
+                */
        },
  };
  
@@@ -521,9 -523,9 +524,9 @@@ static int __init omap4_twl6030_hsmmc_i
  {
        struct omap2_hsmmc_info *c;
  
 -      omap2_hsmmc_init(controllers);
 +      omap_hsmmc_init(controllers);
        for (c = controllers; c->mmc; c++)
 -              omap4_twl6030_hsmmc_set_late_init(c->dev);
 +              omap4_twl6030_hsmmc_set_late_init(&c->pdev->dev);
  
        return 0;
  }
  #include <video/omap-panel-generic-dpi.h>
  #include <video/omap-panel-dvi.h>
  
+ #include "am35xx-emac.h"
  #include "mux.h"
  #include "control.h"
  #include "hsmmc.h"
  
- #define AM35XX_EVM_MDIO_FREQUENCY     (1000000)
- static struct mdio_platform_data am3517_evm_mdio_pdata = {
-       .bus_freq       = AM35XX_EVM_MDIO_FREQUENCY,
- };
- static struct resource am3517_mdio_resources[] = {
-       {
-               .start  = AM35XX_IPSS_EMAC_BASE + AM35XX_EMAC_MDIO_OFFSET,
-               .end    = AM35XX_IPSS_EMAC_BASE + AM35XX_EMAC_MDIO_OFFSET +
-                         SZ_4K - 1,
-               .flags  = IORESOURCE_MEM,
-       },
- };
- static struct platform_device am3517_mdio_device = {
-       .name           = "davinci_mdio",
-       .id             = 0,
-       .num_resources  = ARRAY_SIZE(am3517_mdio_resources),
-       .resource       = am3517_mdio_resources,
-       .dev.platform_data = &am3517_evm_mdio_pdata,
- };
- static struct emac_platform_data am3517_evm_emac_pdata = {
-       .rmii_en        = 1,
- };
- static struct resource am3517_emac_resources[] = {
-       {
-               .start  = AM35XX_IPSS_EMAC_BASE,
-               .end    = AM35XX_IPSS_EMAC_BASE + 0x2FFFF,
-               .flags  = IORESOURCE_MEM,
-       },
-       {
-               .start  = INT_35XX_EMAC_C0_RXTHRESH_IRQ,
-               .end    = INT_35XX_EMAC_C0_RXTHRESH_IRQ,
-               .flags  = IORESOURCE_IRQ,
-       },
-       {
-               .start  = INT_35XX_EMAC_C0_RX_PULSE_IRQ,
-               .end    = INT_35XX_EMAC_C0_RX_PULSE_IRQ,
-               .flags  = IORESOURCE_IRQ,
-       },
-       {
-               .start  = INT_35XX_EMAC_C0_TX_PULSE_IRQ,
-               .end    = INT_35XX_EMAC_C0_TX_PULSE_IRQ,
-               .flags  = IORESOURCE_IRQ,
-       },
-       {
-               .start  = INT_35XX_EMAC_C0_MISC_PULSE_IRQ,
-               .end    = INT_35XX_EMAC_C0_MISC_PULSE_IRQ,
-               .flags  = IORESOURCE_IRQ,
-       },
- };
- static struct platform_device am3517_emac_device = {
-       .name           = "davinci_emac",
-       .id             = -1,
-       .num_resources  = ARRAY_SIZE(am3517_emac_resources),
-       .resource       = am3517_emac_resources,
- };
- static void am3517_enable_ethernet_int(void)
- {
-       u32 regval;
-       regval = omap_ctrl_readl(AM35XX_CONTROL_LVL_INTR_CLEAR);
-       regval = (regval | AM35XX_CPGMAC_C0_RX_PULSE_CLR |
-               AM35XX_CPGMAC_C0_TX_PULSE_CLR |
-               AM35XX_CPGMAC_C0_MISC_PULSE_CLR |
-               AM35XX_CPGMAC_C0_RX_THRESH_CLR);
-       omap_ctrl_writel(regval, AM35XX_CONTROL_LVL_INTR_CLEAR);
-       regval = omap_ctrl_readl(AM35XX_CONTROL_LVL_INTR_CLEAR);
- }
- static void am3517_disable_ethernet_int(void)
- {
-       u32 regval;
-       regval = omap_ctrl_readl(AM35XX_CONTROL_LVL_INTR_CLEAR);
-       regval = (regval | AM35XX_CPGMAC_C0_RX_PULSE_CLR |
-               AM35XX_CPGMAC_C0_TX_PULSE_CLR);
-       omap_ctrl_writel(regval, AM35XX_CONTROL_LVL_INTR_CLEAR);
-       regval = omap_ctrl_readl(AM35XX_CONTROL_LVL_INTR_CLEAR);
- }
- static void am3517_evm_ethernet_init(struct emac_platform_data *pdata)
- {
-       unsigned int regval;
-       pdata->ctrl_reg_offset          = AM35XX_EMAC_CNTRL_OFFSET;
-       pdata->ctrl_mod_reg_offset      = AM35XX_EMAC_CNTRL_MOD_OFFSET;
-       pdata->ctrl_ram_offset          = AM35XX_EMAC_CNTRL_RAM_OFFSET;
-       pdata->ctrl_ram_size            = AM35XX_EMAC_CNTRL_RAM_SIZE;
-       pdata->version                  = EMAC_VERSION_2;
-       pdata->hw_ram_addr              = AM35XX_EMAC_HW_RAM_ADDR;
-       pdata->interrupt_enable         = am3517_enable_ethernet_int;
-       pdata->interrupt_disable        = am3517_disable_ethernet_int;
-       am3517_emac_device.dev.platform_data    = pdata;
-       platform_device_register(&am3517_emac_device);
-       platform_device_register(&am3517_mdio_device);
-       clk_add_alias(NULL, dev_name(&am3517_mdio_device.dev),
-                     NULL, &am3517_emac_device.dev);
-       regval = omap_ctrl_readl(AM35XX_CONTROL_IP_SW_RESET);
-       regval = regval & (~(AM35XX_CPGMACSS_SW_RST));
-       omap_ctrl_writel(regval, AM35XX_CONTROL_IP_SW_RESET);
-       regval = omap_ctrl_readl(AM35XX_CONTROL_IP_SW_RESET);
-       return ;
- }
  #define LCD_PANEL_PWR         176
  #define LCD_PANEL_BKLIGHT_PWR 182
  #define LCD_PANEL_PWM         181
@@@ -498,13 -385,13 +385,13 @@@ static void __init am3517_evm_init(void
        i2c_register_board_info(1, am3517evm_i2c1_boardinfo,
                                ARRAY_SIZE(am3517evm_i2c1_boardinfo));
        /*Ethernet*/
-       am3517_evm_ethernet_init(&am3517_evm_emac_pdata);
+       am35xx_emac_init(AM35XX_DEFAULT_MDIO_FREQUENCY, 1);
  
        /* MUSB */
        am3517_evm_musb_init();
  
        /* MMC init function */
 -      omap2_hsmmc_init(mmc);
 +      omap_hsmmc_init(mmc);
  }
  
  MACHINE_START(OMAP3517EVM, "OMAP3517/AM3517 EVM")
@@@ -128,7 -128,7 +128,7 @@@ static void __init board_mmc_init(void
                return;
        }
  
 -      omap2_hsmmc_init(board_mmc_info);
 +      omap_hsmmc_init(board_mmc_info);
  }
  
  static struct omap_smsc911x_platform_data __initdata board_smsc911x_data = {
@@@ -205,6 -205,7 +205,7 @@@ static void __init omap3logic_init(void
  
  MACHINE_START(OMAP3_TORPEDO, "Logic OMAP3 Torpedo board")
        .atag_offset    = 0x100,
+       .reserve        = omap_reserve,
        .map_io         = omap3_map_io,
        .init_early     = omap35xx_init_early,
        .init_irq       = omap3_init_irq,
@@@ -216,6 -217,7 +217,7 @@@ MACHINE_EN
  
  MACHINE_START(OMAP3530_LV_SOM, "OMAP Logic 3530 LV SOM board")
        .atag_offset    = 0x100,
+       .reserve        = omap_reserve,
        .map_io         = omap3_map_io,
        .init_early     = omap35xx_init_early,
        .init_irq       = omap3_init_irq,
@@@ -121,6 -121,11 +121,11 @@@ static struct platform_device pandora_l
        },
  };
  
+ static struct platform_device pandora_backlight = {
+       .name   = "pandora-backlight",
+       .id     = -1,
+ };
  #define GPIO_BUTTON(gpio_num, ev_type, ev_code, act_low, descr)       \
  {                                                             \
        .gpio           = gpio_num,                             \
@@@ -273,7 -278,6 +278,7 @@@ static struct omap2_hsmmc_info omap3pan
                .gpio_cd        = -EINVAL,
                .gpio_wp        = 126,
                .ext_clock      = 0,
 +              .deferred       = true,
        },
        {
                .mmc            = 2,
                .gpio_wp        = 127,
                .ext_clock      = 1,
                .transceiver    = true,
 +              .deferred       = true,
        },
        {
                .mmc            = 3,
@@@ -302,7 -305,7 +307,7 @@@ static int omap3pandora_twl_gpio_setup(
        /* gpio + {0,1} is "mmc{0,1}_cd" (input/IRQ) */
        omap3pandora_mmc[0].gpio_cd = gpio + 0;
        omap3pandora_mmc[1].gpio_cd = gpio + 1;
 -      omap2_hsmmc_init(omap3pandora_mmc);
 +      omap_hsmmc_late_init(omap3pandora_mmc);
  
        /* gpio + 13 drives 32kHz buffer for wifi module */
        gpio_32khz = gpio + 13;
@@@ -345,7 -348,7 +350,7 @@@ static struct regulator_consumer_suppl
  };
  
  static struct regulator_consumer_supply pandora_usb_phy_supply[] = {
 -      REGULATOR_SUPPLY("hsusb0", "ehci-omap.0"),
 +      REGULATOR_SUPPLY("hsusb1", "ehci-omap.0"),
  };
  
  /* ads7846 on SPI and 2 nub controllers on I2C */
@@@ -478,6 -481,10 +483,10 @@@ static struct platform_device pandora_v
  
  static struct twl4030_bci_platform_data pandora_bci_data;
  
+ static struct twl4030_power_data pandora_power_data = {
+       .use_poweroff   = true,
+ };
  static struct twl4030_platform_data omap3pandora_twldata = {
        .gpio           = &omap3pandora_gpio_data,
        .vmmc1          = &pandora_vmmc1,
        .vsim           = &pandora_vsim,
        .keypad         = &pandora_kp_data,
        .bci            = &pandora_bci_data,
+       .power          = &pandora_power_data,
  };
  
  static struct i2c_board_info __initdata omap3pandora_i2c3_boardinfo[] = {
@@@ -559,17 -567,18 +569,18 @@@ static struct platform_device *omap3pan
        &pandora_leds_gpio,
        &pandora_keys_gpio,
        &pandora_vwlan_device,
+       &pandora_backlight,
  };
  
  static const struct usbhs_omap_board_data usbhs_bdata __initconst = {
  
 -      .port_mode[0] = OMAP_EHCI_PORT_MODE_PHY,
 -      .port_mode[1] = OMAP_USBHS_PORT_MODE_UNUSED,
 +      .port_mode[0] = OMAP_USBHS_PORT_MODE_UNUSED,
 +      .port_mode[1] = OMAP_EHCI_PORT_MODE_PHY,
        .port_mode[2] = OMAP_USBHS_PORT_MODE_UNUSED,
  
        .phy_reset  = true,
 -      .reset_gpio_port[0]  = 16,
 -      .reset_gpio_port[1]  = -EINVAL,
 +      .reset_gpio_port[0]  = -EINVAL,
 +      .reset_gpio_port[1]  = 16,
        .reset_gpio_port[2]  = -EINVAL
  };
  
@@@ -582,7 -591,6 +593,7 @@@ static struct omap_board_mux board_mux[
  static void __init omap3pandora_init(void)
  {
        omap3_mux_init(board_mux, OMAP_PACKAGE_CBB);
 +      omap_hsmmc_init(omap3pandora_mmc);
        omap3pandora_i2c_init();
        pandora_wl1251_init();
        platform_add_devices(omap3pandora_devices,
@@@ -116,10 -116,16 +116,16 @@@ static struct platform_device panda_abe
        },
  };
  
+ static struct platform_device btwilink_device = {
+       .name   = "btwilink",
+       .id     = -1,
+ };
  static struct platform_device *panda_devices[] __initdata = {
        &leds_gpio,
        &wl1271_device,
        &panda_abe_audio,
+       &btwilink_device,
  };
  
  static const struct usbhs_omap_board_data usbhs_bdata __initconst = {
@@@ -271,9 -277,9 +277,9 @@@ static int __init omap4_twl6030_hsmmc_i
  {
        struct omap2_hsmmc_info *c;
  
 -      omap2_hsmmc_init(controllers);
 +      omap_hsmmc_init(controllers);
        for (c = controllers; c->mmc; c++)
 -              omap4_twl6030_hsmmc_set_late_init(c->dev);
 +              omap4_twl6030_hsmmc_set_late_init(&c->pdev->dev);
  
        return 0;
  }
@@@ -504,7 -510,7 +510,7 @@@ static struct omap_dss_board_info omap4
        .default_device = &omap4_panda_dvi_device,
  };
  
 -void omap4_panda_display_init(void)
 +void __init omap4_panda_display_init(void)
  {
        int r;
  
  
  static void omap4_panda_init_rev(void)
  {
 -      if (cpu_is_omap4430()) {
 +      if (cpu_is_omap443x()) {
                /* PandaBoard 4430 */
                /* ASoC audio configuration */
                panda_abe_audio_data.card_name = "PandaBoard";
@@@ -1,5 -1,5 +1,5 @@@
  /*
-  * Board support file for Nokia RM-680.
+  * Board support file for Nokia RM-680/696.
   *
   * Copyright (C) 2010 Nokia
   *
@@@ -120,7 -120,7 +120,7 @@@ static void __init rm680_peripherals_in
                                ARRAY_SIZE(rm680_peripherals_devices));
        rm680_i2c_init();
        gpmc_onenand_init(board_onenand_data);
 -      omap2_hsmmc_init(mmc);
 +      omap_hsmmc_init(mmc);
  }
  
  #ifdef CONFIG_OMAP_MUX
@@@ -154,3 -154,15 +154,15 @@@ MACHINE_START(NOKIA_RM680, "Nokia RM-68
        .timer          = &omap3_timer,
        .restart        = omap_prcm_restart,
  MACHINE_END
+ MACHINE_START(NOKIA_RM696, "Nokia RM-696 board")
+       .atag_offset    = 0x100,
+       .reserve        = omap_reserve,
+       .map_io         = omap3_map_io,
+       .init_early     = omap3630_init_early,
+       .init_irq       = omap3_init_irq,
+       .handle_irq     = omap3_intc_handle_irq,
+       .init_machine   = rm680_init,
+       .timer          = &omap3_timer,
+       .restart        = omap_prcm_restart,
+ MACHINE_END
@@@ -138,14 -138,17 +138,14 @@@ static struct lp5523_platform_data rx51
  
  static struct omap2_mcspi_device_config wl1251_mcspi_config = {
        .turbo_mode     = 0,
 -      .single_channel = 1,
  };
  
  static struct omap2_mcspi_device_config mipid_mcspi_config = {
        .turbo_mode     = 0,
 -      .single_channel = 1,
  };
  
  static struct omap2_mcspi_device_config tsc2005_mcspi_config = {
        .turbo_mode     = 0,
 -      .single_channel = 1,
  };
  
  static struct spi_board_info rx51_peripherals_spi_board_info[] __initdata = {
@@@ -1102,6 -1105,11 +1102,11 @@@ static struct tsc2005_platform_data tsc
        .esd_timeout_ms         = 8000,
  };
  
+ static struct gpio rx51_tsc2005_gpios[] __initdata = {
+       { RX51_TSC2005_IRQ_GPIO,   GPIOF_IN,            "tsc2005 IRQ"   },
+       { RX51_TSC2005_RESET_GPIO, GPIOF_OUT_INIT_HIGH, "tsc2005 reset" },
+ };
  static void rx51_tsc2005_set_reset(bool enable)
  {
        gpio_set_value(RX51_TSC2005_RESET_GPIO, enable);
@@@ -1111,20 -1119,18 +1116,18 @@@ static void __init rx51_init_tsc2005(vo
  {
        int r;
  
-       r = gpio_request_one(RX51_TSC2005_IRQ_GPIO, GPIOF_IN, "tsc2005 IRQ");
-       if (r < 0) {
-               printk(KERN_ERR "unable to get %s GPIO\n", "tsc2005 IRQ");
-               rx51_peripherals_spi_board_info[RX51_SPI_TSC2005].irq = 0;
-       }
+       omap_mux_init_gpio(RX51_TSC2005_RESET_GPIO, OMAP_PIN_OUTPUT);
+       omap_mux_init_gpio(RX51_TSC2005_IRQ_GPIO, OMAP_PIN_INPUT_PULLUP);
  
-       r = gpio_request_one(RX51_TSC2005_RESET_GPIO, GPIOF_OUT_INIT_HIGH,
-               "tsc2005 reset");
-       if (r >= 0) {
-               tsc2005_pdata.set_reset = rx51_tsc2005_set_reset;
-       } else {
-               printk(KERN_ERR "unable to get %s GPIO\n", "tsc2005 reset");
+       r = gpio_request_array(rx51_tsc2005_gpios,
+                              ARRAY_SIZE(rx51_tsc2005_gpios));
+       if (r < 0) {
+               printk(KERN_ERR "tsc2005 board initialization failed\n");
                tsc2005_pdata.esd_timeout_ms = 0;
+               return;
        }
+       tsc2005_pdata.set_reset = rx51_tsc2005_set_reset;
  }
  
  void __init rx51_peripherals_init(void)
  
        partition = omap_mux_get("core");
        if (partition)
 -              omap2_hsmmc_init(mmc);
 +              omap_hsmmc_init(mmc);
  
        rx51_charger_init();
  }
@@@ -83,11 -83,6 +83,11 @@@ config S3C64XX_SETUP_SP
        help
         Common setup code for SPI GPIO configurations
  
 +config S3C64XX_SETUP_USB_PHY
 +      bool
 +      help
 +        Common setup code for USB PHY controller
 +
  # S36400 Macchine support
  
  config MACH_SMDK6400
@@@ -162,7 -157,6 +162,7 @@@ config MACH_SMDK641
        select S3C64XX_SETUP_IDE
        select S3C64XX_SETUP_FB_24BPP
        select S3C64XX_SETUP_KEYPAD
 +      select S3C64XX_SETUP_USB_PHY
        help
          Machine support for the Samsung SMDK6410
  
@@@ -262,7 -256,6 +262,7 @@@ config MACH_SMART
        select S3C_DEV_USB_HOST
        select S3C64XX_SETUP_SDHCI
        select S3C64XX_SETUP_FB_24BPP
 +      select S3C64XX_SETUP_USB_PHY
        select SAMSUNG_DEV_ADC
        select SAMSUNG_DEV_PWM
        select SAMSUNG_DEV_TS
@@@ -290,7 -283,6 +290,7 @@@ config MACH_WLF_CRAGG_641
        select S3C64XX_SETUP_FB_24BPP
        select S3C64XX_SETUP_KEYPAD
        select S3C64XX_SETUP_SPI
 +      select S3C64XX_SETUP_USB_PHY
        select SAMSUNG_DEV_ADC
        select SAMSUNG_DEV_KEYPAD
        select S3C_DEV_USB_HOST
        select S3C64XX_DEV_SPI0
        select SAMSUNG_GPIO_EXTRA128
        select I2C
+       select LEDS_GPIO_REGISTER
        help
          Machine support for the Wolfson Cragganmore S3C6410 variant.
@@@ -19,7 -19,9 +19,9 @@@
  #include <linux/io.h>
  #include <linux/init.h>
  #include <linux/gpio.h>
+ #include <linux/leds.h>
  #include <linux/delay.h>
+ #include <linux/mmc/host.h>
  #include <linux/regulator/machine.h>
  #include <linux/regulator/fixed.h>
  #include <linux/pwm_backlight.h>
@@@ -59,7 -61,6 +61,7 @@@
  #include <plat/sdhci.h>
  #include <plat/gpio-cfg.h>
  #include <plat/s3c64xx-spi.h>
 +#include <plat/udc-hs.h>
  
  #include <plat/keypad.h>
  #include <plat/clock.h>
@@@ -299,6 -300,7 +301,7 @@@ static struct platform_device littlemil
  };
  
  static struct regulator_consumer_supply wallvdd_consumers[] = {
+       REGULATOR_SUPPLY("SPKVDD", "1-001a"),
        REGULATOR_SUPPLY("SPKVDD1", "1-001a"),
        REGULATOR_SUPPLY("SPKVDD2", "1-001a"),
        REGULATOR_SUPPLY("SPKVDDL", "1-001a"),
@@@ -575,11 -577,19 +578,19 @@@ static struct s3c2410_platform_i2c i2c0
        .frequency = 400000,
  };
  
+ static struct regulator_consumer_supply pvdd_1v2_consumers[] __initdata = {
+       REGULATOR_SUPPLY("DCVDD", "spi0.0"),
+       REGULATOR_SUPPLY("AVDD", "spi0.0"),
+ };
  static struct regulator_init_data pvdd_1v2 __initdata = {
        .constraints = {
                .name = "PVDD_1V2",
-               .always_on = 1,
+               .valid_ops_mask = REGULATOR_CHANGE_STATUS,
        },
+       .consumer_supplies = pvdd_1v2_consumers,
+       .num_consumer_supplies = ARRAY_SIZE(pvdd_1v2_consumers),
  };
  
  static struct regulator_consumer_supply pvdd_1v8_consumers[] __initdata = {
        REGULATOR_SUPPLY("AVDD2", "1-001a"),
        REGULATOR_SUPPLY("DCVDD", "1-001a"),
        REGULATOR_SUPPLY("AVDD", "1-001a"),
+       REGULATOR_SUPPLY("DBVDD", "spi0.0"),
  };
  
  static struct regulator_init_data pvdd_1v8 __initdata = {
@@@ -682,6 -693,7 +694,7 @@@ static void __init crag6410_map_io(void
  static struct s3c_sdhci_platdata crag6410_hsmmc2_pdata = {
        .max_width              = 4,
        .cd_type                = S3C_SDHCI_CD_PERMANENT,
+       .host_caps              = MMC_CAP_POWER_OFF_CARD,
  };
  
  static void crag6410_cfg_sdhci0(struct platform_device *dev, int width)
@@@ -697,10 -709,57 +710,59 @@@ static struct s3c_sdhci_platdata crag64
        .max_width              = 4,
        .cd_type                = S3C_SDHCI_CD_INTERNAL,
        .cfg_gpio               = crag6410_cfg_sdhci0,
+       .host_caps              = MMC_CAP_POWER_OFF_CARD,
+ };
+ static const struct gpio_led gpio_leds[] = {
+       {
+               .name = "d13:green:",
+               .gpio = MMGPIO_GPIO_BASE + 0,
+               .default_state = LEDS_GPIO_DEFSTATE_ON,
+       },
+       {
+               .name = "d14:green:",
+               .gpio = MMGPIO_GPIO_BASE + 1,
+               .default_state = LEDS_GPIO_DEFSTATE_ON,
+       },
+       {
+               .name = "d15:green:",
+               .gpio = MMGPIO_GPIO_BASE + 2,
+               .default_state = LEDS_GPIO_DEFSTATE_ON,
+       },
+       {
+               .name = "d16:green:",
+               .gpio = MMGPIO_GPIO_BASE + 3,
+               .default_state = LEDS_GPIO_DEFSTATE_ON,
+       },
+       {
+               .name = "d17:green:",
+               .gpio = MMGPIO_GPIO_BASE + 4,
+               .default_state = LEDS_GPIO_DEFSTATE_ON,
+       },
+       {
+               .name = "d18:green:",
+               .gpio = MMGPIO_GPIO_BASE + 5,
+               .default_state = LEDS_GPIO_DEFSTATE_ON,
+       },
+       {
+               .name = "d19:green:",
+               .gpio = MMGPIO_GPIO_BASE + 6,
+               .default_state = LEDS_GPIO_DEFSTATE_ON,
+       },
+       {
+               .name = "d20:green:",
+               .gpio = MMGPIO_GPIO_BASE + 7,
+               .default_state = LEDS_GPIO_DEFSTATE_ON,
+       },
+ };
+ static const struct gpio_led_platform_data gpio_leds_pdata = {
+       .leds = gpio_leds,
+       .num_leds = ARRAY_SIZE(gpio_leds),
  };
  
 +static struct s3c_hsotg_plat crag6410_hsotg_pdata;
 +
  static void __init crag6410_machine_init(void)
  {
        /* Open drain IRQs need pullups */
        s3c_i2c0_set_platdata(&i2c0_pdata);
        s3c_i2c1_set_platdata(&i2c1_pdata);
        s3c_fb_set_platdata(&crag6410_lcd_pdata);
 +      s3c_hsotg_set_platdata(&crag6410_hsotg_pdata);
  
        i2c_register_board_info(0, i2c_devs0, ARRAY_SIZE(i2c_devs0));
        i2c_register_board_info(1, i2c_devs1, ARRAY_SIZE(i2c_devs1));
  
        samsung_keypad_set_platdata(&crag6410_keypad_data);
+       s3c64xx_spi0_set_platdata(&s3c64xx_spi0_pdata, 0, 1);
  
        platform_add_devices(crag6410_devices, ARRAY_SIZE(crag6410_devices));
  
+       gpio_led_register_device(-1, &gpio_leds_pdata);
        regulator_has_full_constraints();
  
        s3c64xx_pm_init();
@@@ -65,11 -65,6 +65,11 @@@ config S5PV210_SETUP_SP
        help
          Common setup code for SPI GPIO configurations.
  
 +config S5PV210_SETUP_USB_PHY
 +      bool
 +      help
 +        Common setup code for USB PHY controller
 +
  menu "S5PC110 Machines"
  
  config MACH_AQUILA
@@@ -112,7 -107,6 +112,7 @@@ config MACH_GON
        select S5PV210_SETUP_KEYPAD
        select S5PV210_SETUP_SDHCI
        select S5PV210_SETUP_FIMC
 +      select S5PV210_SETUP_USB_PHY
        help
          Machine support for Samsung GONI board
          S5PC110(MCP) is one of package option of S5PV210
@@@ -124,6 -118,10 +124,10 @@@ config MACH_SMDKC11
        select S3C_DEV_I2C2
        select S3C_DEV_RTC
        select S3C_DEV_WDT
+       select S5P_DEV_FIMC0
+       select S5P_DEV_FIMC1
+       select S5P_DEV_FIMC2
+       select S5P_DEV_MFC
        select SAMSUNG_DEV_IDE
        select S5PV210_SETUP_I2C1
        select S5PV210_SETUP_I2C2
@@@ -148,6 -146,11 +152,11 @@@ config MACH_SMDKV21
        select S3C_DEV_I2C2
        select S3C_DEV_RTC
        select S3C_DEV_WDT
+       select S5P_DEV_FIMC0
+       select S5P_DEV_FIMC1
+       select S5P_DEV_FIMC2
+       select S5P_DEV_JPEG
+       select S5P_DEV_MFC
        select SAMSUNG_DEV_ADC
        select SAMSUNG_DEV_BACKLIGHT
        select SAMSUNG_DEV_IDE
@@@ -46,6 -46,7 +46,7 @@@
  #include <plat/s5p-time.h>
  #include <plat/backlight.h>
  #include <plat/regs-fb-v4.h>
+ #include <plat/mfc.h>
  
  #include "common.h"
  
@@@ -140,7 -141,7 +141,7 @@@ static struct dm9000_plat_data smdkv210
        .dev_addr       = { 0x00, 0x09, 0xc0, 0xff, 0xec, 0x48 },
  };
  
 -struct platform_device smdkv210_dm9000 = {
 +static struct platform_device smdkv210_dm9000 = {
        .name           = "dm9000",
        .id             = -1,
        .num_resources  = ARRAY_SIZE(smdkv210_dm9000_resources),
@@@ -223,6 -224,14 +224,14 @@@ static struct platform_device *smdkv210
        &s3c_device_rtc,
        &s3c_device_ts,
        &s3c_device_wdt,
+       &s5p_device_fimc0,
+       &s5p_device_fimc1,
+       &s5p_device_fimc2,
+       &s5p_device_fimc_md,
+       &s5p_device_jpeg,
+       &s5p_device_mfc,
+       &s5p_device_mfc_l,
+       &s5p_device_mfc_r,
        &s5pv210_device_ac97,
        &s5pv210_device_iis0,
        &s5pv210_device_spdif,
@@@ -282,6 -291,11 +291,11 @@@ static void __init smdkv210_map_io(void
        s5p_set_timer_source(S5P_PWM2, S5P_PWM4);
  }
  
+ static void __init smdkv210_reserve(void)
+ {
+       s5p_mfc_reserve_mem(0x43000000, 8 << 20, 0x51000000, 8 << 20);
+ }
  static void __init smdkv210_machine_init(void)
  {
        s3c_pm_init();
@@@ -319,4 -333,5 +333,5 @@@ MACHINE_START(SMDKV210, "SMDKV210"
        .init_machine   = smdkv210_machine_init,
        .timer          = &s5p_timer,
        .restart        = s5pv210_restart,
+       .reserve        = &smdkv210_reserve,
  MACHINE_END
  #include <asm/hardware/gic.h>
  
  #include "board.h"
 +#include "clock.h"
  
  static struct of_device_id tegra_dt_match_table[] __initdata = {
        { .compatible = "simple-bus", },
        {}
  };
  
 +struct of_dev_auxdata tegra30_auxdata_lookup[] __initdata = {
 +      OF_DEV_AUXDATA("nvidia,tegra20-sdhci", 0x78000000, "sdhci-tegra.0", NULL),
 +      OF_DEV_AUXDATA("nvidia,tegra20-sdhci", 0x78000200, "sdhci-tegra.1", NULL),
 +      OF_DEV_AUXDATA("nvidia,tegra20-sdhci", 0x78000400, "sdhci-tegra.2", NULL),
 +      OF_DEV_AUXDATA("nvidia,tegra20-sdhci", 0x78000600, "sdhci-tegra.3", NULL),
 +      OF_DEV_AUXDATA("nvidia,tegra20-i2c", 0x7000C000, "tegra-i2c.0", NULL),
 +      OF_DEV_AUXDATA("nvidia,tegra20-i2c", 0x7000C400, "tegra-i2c.1", NULL),
 +      OF_DEV_AUXDATA("nvidia,tegra20-i2c", 0x7000C500, "tegra-i2c.2", NULL),
 +      OF_DEV_AUXDATA("nvidia,tegra20-i2c", 0x7000C700, "tegra-i2c.3", NULL),
 +      OF_DEV_AUXDATA("nvidia,tegra20-i2c", 0x7000D000, "tegra-i2c.4", NULL),
 +      {}
 +};
 +
 +static __initdata struct tegra_clk_init_table tegra_dt_clk_init_table[] = {
 +      /* name         parent          rate            enabled */
 +      { "uartd",      "pll_p",        408000000,      true },
 +      { NULL,         NULL,           0,              0},
 +};
 +
  static void __init tegra30_dt_init(void)
  {
 +      tegra_clk_init_from_table(tegra_dt_clk_init_table);
 +
        of_platform_populate(NULL, tegra_dt_match_table,
 -                              NULL, NULL);
 +                              tegra30_auxdata_lookup, NULL);
  }
  
  static const char *tegra30_dt_board_compat[] = {
-       "nvidia,cardhu",
+       "nvidia,tegra30",
        NULL
  };
  
diff --combined drivers/leds/Kconfig
@@@ -17,7 -17,7 +17,7 @@@ menuconfig NEW_LED
  if NEW_LEDS
  
  config LEDS_CLASS
 -      bool "LED Class Support"
 +      tristate "LED Class Support"
        help
          This option enables the led sysfs class in /sys/class/leds.  You'll
          need this to do anything useful with LEDs.  If unsure, say N.
@@@ -69,18 -69,11 +69,11 @@@ config LEDS_MIKROTIK_RB53
  config LEDS_S3C24XX
        tristate "LED Support for Samsung S3C24XX GPIO LEDs"
        depends on LEDS_CLASS
 -      depends on ARCH_S3C2410
 +      depends on ARCH_S3C24XX
        help
          This option enables support for LEDs connected to GPIO lines
          on Samsung S3C24XX series CPUs, such as the S3C2410 and S3C2440.
  
- config LEDS_AMS_DELTA
-       tristate "LED Support for the Amstrad Delta (E3)"
-       depends on LEDS_CLASS
-       depends on MACH_AMS_DELTA
-       help
-         This option enables support for the LEDs on Amstrad Delta (E3).
  config LEDS_NET48XX
        tristate "LED Support for Soekris net48xx series Error LED"
        depends on LEDS_CLASS
          This option enables support for the Soekris net4801 and net4826 error
          LED.
  
 -config LEDS_NET5501
 -      tristate "LED Support for Soekris net5501 series Error LED"
 -      depends on LEDS_TRIGGERS
 -      depends on X86 && GPIO_CS5535
 -      select LEDS_TRIGGER_DEFAULT_ON
 -      default n
 -      help
 -        Add support for the Soekris net5501 board (detection, error led
 -        and GPIO).
 -
  config LEDS_FSG
        tristate "LED Support for the Freecom FSG-3"
        depends on LEDS_CLASS
@@@ -234,14 -237,6 +227,14 @@@ config LEDS_PCA955
          LED driver chips accessed via the I2C bus.  Supported
          devices include PCA9550, PCA9551, PCA9552, and PCA9553.
  
 +config LEDS_PCA9633
 +      tristate "LED support for PCA9633 I2C chip"
 +      depends on LEDS_CLASS
 +      depends on I2C
 +      help
 +        This option enables support for LEDs connected to the PCA9633
 +        LED driver chip accessed via the I2C bus.
 +
  config LEDS_WM831X_STATUS
        tristate "LED support for status LEDs on WM831x PMICs"
        depends on LEDS_CLASS
diff --combined drivers/leds/Makefile
@@@ -12,8 -12,8 +12,7 @@@ obj-$(CONFIG_LEDS_LOCOMO)             += leds-loco
  obj-$(CONFIG_LEDS_LM3530)             += leds-lm3530.o
  obj-$(CONFIG_LEDS_MIKROTIK_RB532)     += leds-rb532.o
  obj-$(CONFIG_LEDS_S3C24XX)            += leds-s3c24xx.o
- obj-$(CONFIG_LEDS_AMS_DELTA)          += leds-ams-delta.o
  obj-$(CONFIG_LEDS_NET48XX)            += leds-net48xx.o
 -obj-$(CONFIG_LEDS_NET5501)            += leds-net5501.o
  obj-$(CONFIG_LEDS_WRAP)                       += leds-wrap.o
  obj-$(CONFIG_LEDS_COBALT_QUBE)                += leds-cobalt-qube.o
  obj-$(CONFIG_LEDS_COBALT_RAQ)         += leds-cobalt-raq.o
@@@ -30,7 -30,6 +29,7 @@@ obj-$(CONFIG_LEDS_HP6XX)              += leds-hp6xx
  obj-$(CONFIG_LEDS_OT200)              += leds-ot200.o
  obj-$(CONFIG_LEDS_FSG)                        += leds-fsg.o
  obj-$(CONFIG_LEDS_PCA955X)            += leds-pca955x.o
 +obj-$(CONFIG_LEDS_PCA9633)            += leds-pca9633.o
  obj-$(CONFIG_LEDS_DA903X)             += leds-da903x.o
  obj-$(CONFIG_LEDS_WM831X_STATUS)      += leds-wm831x-status.o
  obj-$(CONFIG_LEDS_WM8350)             += leds-wm8350.o
@@@ -426,29 -426,6 +426,6 @@@ static struct snd_soc_ops ams_delta_op
  };
  
  
- /* Board specific codec bias level control */
- static int ams_delta_set_bias_level(struct snd_soc_card *card,
-                                   struct snd_soc_dapm_context *dapm,
-                                   enum snd_soc_bias_level level)
- {
-       switch (level) {
-       case SND_SOC_BIAS_ON:
-       case SND_SOC_BIAS_PREPARE:
-       case SND_SOC_BIAS_STANDBY:
-               if (card->dapm.bias_level == SND_SOC_BIAS_OFF)
-                       ams_delta_latch2_write(AMS_DELTA_LATCH2_MODEM_NRESET,
-                                               AMS_DELTA_LATCH2_MODEM_NRESET);
-               break;
-       case SND_SOC_BIAS_OFF:
-               if (card->dapm.bias_level != SND_SOC_BIAS_OFF)
-                       ams_delta_latch2_write(AMS_DELTA_LATCH2_MODEM_NRESET,
-                                               0);
-       }
-       card->dapm.bias_level = level;
-       return 0;
- }
  /* Digital mute implemented using modem/CPU multiplexer.
   * Shares hardware with codec config pulse generation */
  static bool ams_delta_muted = 1;
@@@ -512,9 -489,6 +489,6 @@@ static int ams_delta_cx20442_init(struc
                ams_delta_ops.shutdown = ams_delta_shutdown;
        }
  
-       /* Set codec bias level */
-       ams_delta_set_bias_level(card, dapm, SND_SOC_BIAS_STANDBY);
        /* Add hook switch - can be used to control the codec from userspace
         * even if line discipline fails */
        ret = snd_soc_jack_new(rtd->codec, "hook_switch",
  static struct snd_soc_dai_link ams_delta_dai_link = {
        .name = "CX20442",
        .stream_name = "CX20442",
 -      .cpu_dai_name ="omap-mcbsp-dai.0",
 +      .cpu_dai_name = "omap-mcbsp.1",
        .codec_dai_name = "cx20442-voice",
        .init = ams_delta_cx20442_init,
        .platform_name = "omap-pcm-audio",
@@@ -598,7 -572,6 +572,6 @@@ static struct snd_soc_card ams_delta_au
        .owner = THIS_MODULE,
        .dai_link = &ams_delta_dai_link,
        .num_links = 1,
-       .set_bias_level = ams_delta_set_bias_level,
  };
  
  /* Module init/exit */
@@@ -635,7 -608,7 +608,7 @@@ err
        platform_device_put(ams_delta_audio_platform_device);
        return ret;
  }
module_init(ams_delta_module_init);
late_initcall(ams_delta_module_init);
  
  static void __exit ams_delta_module_exit(void)
  {
                        ARRAY_SIZE(ams_delta_hook_switch_gpios),
                        ams_delta_hook_switch_gpios);
  
-       /* Keep modem power on */
-       ams_delta_set_bias_level(&ams_delta_audio_card,
-                                &ams_delta_audio_card.rtd[0].codec->dapm,
-                                SND_SOC_BIAS_STANDBY);
        platform_device_unregister(cx20442_platform_device);
        platform_device_unregister(ams_delta_audio_platform_device);
  }