]> bbs.cooldavid.org Git - net-next-2.6.git/commitdiff
Merge branch 'for-rmk' of git://git.pengutronix.de/git/imx/linux-2.6 into devel-stable
authorRussell King <rmk+kernel@arm.linux.org.uk>
Thu, 28 Oct 2010 10:13:00 +0000 (11:13 +0100)
committerRussell King <rmk+kernel@arm.linux.org.uk>
Thu, 28 Oct 2010 10:13:00 +0000 (11:13 +0100)
1  2 
arch/arm/Kconfig
arch/arm/mach-imx/mach-mx27_3ds.c
arch/arm/mach-mx25/mach-mx25_3ds.c
arch/arm/mach-mx3/mach-mx31_3ds.c
arch/arm/mach-mx3/mach-mx35_3ds.c
arch/arm/mach-mx5/board-mx51_babbage.c

diff --combined arch/arm/Kconfig
index bf7273f3dc64efa359ece26eed3a7e19192e7bf2,12115ffbbb309bc1799bc8760069de1ac8bc33dd..9b2ef2fb3caea4e10caa6d4688c3c04518973590
@@@ -19,17 -19,13 +19,17 @@@ config AR
        select HAVE_KPROBES if (!XIP_KERNEL)
        select HAVE_KRETPROBES if (HAVE_KPROBES)
        select HAVE_FUNCTION_TRACER if (!XIP_KERNEL)
 +      select HAVE_FTRACE_MCOUNT_RECORD if (!XIP_KERNEL)
 +      select HAVE_DYNAMIC_FTRACE if (!XIP_KERNEL)
        select HAVE_GENERIC_DMA_COHERENT
        select HAVE_KERNEL_GZIP
        select HAVE_KERNEL_LZO
        select HAVE_KERNEL_LZMA
 +      select HAVE_IRQ_WORK
        select HAVE_PERF_EVENTS
        select PERF_USE_VMALLOC
        select HAVE_REGS_AND_STACK_ACCESS_API
 +      select HAVE_HW_BREAKPOINT if (PERF_EVENTS && (CPU_V6 || CPU_V7))
        help
          The ARM series is a line of low-power-consumption RISC chip designs
          licensed by ARM Ltd and targeted at embedded applications and
@@@ -149,9 -145,6 +149,9 @@@ config ARCH_HAS_CPUFRE
          and that the relevant menu configurations are displayed for
          it.
  
 +config ARCH_HAS_CPU_IDLE_WAIT
 +       def_bool y
 +
  config GENERIC_HWEIGHT
        bool
        default y
@@@ -278,6 -271,7 +278,6 @@@ config ARCH_AT9
        bool "Atmel AT91"
        select ARCH_REQUIRE_GPIOLIB
        select HAVE_CLK
 -      select ARCH_USES_GETTIMEOFFSET
        help
          This enables support for systems based on the Atmel AT91RM9200,
          AT91SAM9 and AT91CAP9 processors.
@@@ -517,7 -511,6 +517,7 @@@ config ARCH_MM
        select GENERIC_CLOCKEVENTS
        select TICK_ONESHOT
        select PLAT_PXA
 +      select SPARSE_IRQ
        help
          Support for Marvell's PXA168/PXA910(MMP) and MMP2 processor line.
  
@@@ -573,7 -566,6 +573,7 @@@ config ARCH_TEGR
        select HAVE_CLK
        select COMMON_CLKDEV
        select ARCH_HAS_BARRIERS if CACHE_L2X0
 +      select ARCH_HAS_CPUFREQ
        help
          This enables support for NVIDIA Tegra based systems (Tegra APX,
          Tegra 6xx and Tegra 2 series).
@@@ -596,7 -588,6 +596,7 @@@ config ARCH_PX
        select GENERIC_CLOCKEVENTS
        select TICK_ONESHOT
        select PLAT_PXA
 +      select SPARSE_IRQ
        help
          Support for Intel/Marvell's PXA2xx/PXA3xx processor line.
  
@@@ -688,8 -679,8 +688,8 @@@ config ARCH_S3C64X
        help
          Samsung S3C64XX series based systems
  
 -config ARCH_S5P6440
 -      bool "Samsung S5P6440"
 +config ARCH_S5P64X0
 +      bool "Samsung S5P6440 S5P6450"
        select CPU_V6
        select GENERIC_GPIO
        select HAVE_CLK
        select HAVE_S3C2410_I2C
        select HAVE_S3C_RTC
        help
 -        Samsung S5P6440 CPU based systems
 +        Samsung S5P64X0 CPU based systems, such as the Samsung SMDK6440,
 +        SMDK6450.
  
  config ARCH_S5P6442
        bool "Samsung S5P6442"
@@@ -758,15 -748,6 +758,15 @@@ config ARCH_SHAR
          Support for the StrongARM based Digital DNARD machine, also known
          as "Shark" (<http://www.shark-linux.de/shark.html>).
  
 +config ARCH_TCC_926
 +      bool "Telechips TCC ARM926-based systems"
 +      select CPU_ARM926T
 +      select HAVE_CLK
 +      select COMMON_CLKDEV
 +      select GENERIC_CLOCKEVENTS
 +      help
 +        Support for Telechips TCC ARM926-based systems.
 +
  config ARCH_LH7A40X
        bool "Sharp LH7A40X"
        select CPU_ARM922T
@@@ -832,7 -813,7 +832,7 @@@ config ARCH_OMA
        select GENERIC_CLOCKEVENTS
        select ARCH_HAS_HOLES_MEMORYMODEL
        help
 -        Support for TI's OMAP platform (OMAP1 and OMAP2).
 +        Support for TI's OMAP platform (OMAP1/2/3/4).
  
  config PLAT_SPEAR
        bool "ST SPEAr"
@@@ -935,8 -916,6 +935,8 @@@ source "arch/arm/plat-s5p/Kconfig
  
  source "arch/arm/plat-spear/Kconfig"
  
 +source "arch/arm/plat-tcc/Kconfig"
 +
  if ARCH_S3C2410
  source "arch/arm/mach-s3c2400/Kconfig"
  source "arch/arm/mach-s3c2410/Kconfig"
@@@ -950,7 -929,7 +950,7 @@@ if ARCH_S3C64X
  source "arch/arm/mach-s3c64xx/Kconfig"
  endif
  
 -source "arch/arm/mach-s5p6440/Kconfig"
 +source "arch/arm/mach-s5p64x0/Kconfig"
  
  source "arch/arm/mach-s5p6442/Kconfig"
  
@@@ -1024,7 -1003,7 +1024,7 @@@ endi
  
  config ARM_ERRATA_411920
        bool "ARM errata: Invalidation of the Instruction Cache operation can fail"
 -      depends on CPU_V6 && !SMP
 +      depends on CPU_V6
        help
          Invalidation of the Instruction Cache operation can
          fail. This erratum is present in 1136 (before r1p4), 1156 and 1176.
@@@ -1072,32 -1051,6 +1072,32 @@@ config ARM_ERRATA_46007
          ACTLR register. Note that setting specific bits in the ACTLR register
          may not be available in non-secure mode.
  
 +config ARM_ERRATA_742230
 +      bool "ARM errata: DMB operation may be faulty"
 +      depends on CPU_V7 && SMP
 +      help
 +        This option enables the workaround for the 742230 Cortex-A9
 +        (r1p0..r2p2) erratum. Under rare circumstances, a DMB instruction
 +        between two write operations may not ensure the correct visibility
 +        ordering of the two writes. This workaround sets a specific bit in
 +        the diagnostic register of the Cortex-A9 which causes the DMB
 +        instruction to behave as a DSB, ensuring the correct behaviour of
 +        the two writes.
 +
 +config ARM_ERRATA_742231
 +      bool "ARM errata: Incorrect hazard handling in the SCU may lead to data corruption"
 +      depends on CPU_V7 && SMP
 +      help
 +        This option enables the workaround for the 742231 Cortex-A9
 +        (r2p0..r2p2) erratum. Under certain conditions, specific to the
 +        Cortex-A9 MPCore micro-architecture, two CPUs working in SMP mode,
 +        accessing some data located in the same cache line, may get corrupted
 +        data due to bad handling of the address hazard when the line gets
 +        replaced from one of the CPUs at the same time as another CPU is
 +        accessing it. This workaround sets specific bits in the diagnostic
 +        register of the Cortex-A9 which reduces the linefill issuing
 +        capabilities of the processor.
 +
  config PL310_ERRATA_588369
        bool "Clean & Invalidate maintenance operations do not invalidate clean lines"
        depends on CACHE_L2X0 && ARCH_OMAP4
@@@ -1123,20 -1076,6 +1123,20 @@@ config ARM_ERRATA_72078
          invalidated are not, resulting in an incoherency in the system page
          tables. The workaround changes the TLB flushing routines to invalidate
          entries regardless of the ASID.
 +
 +config ARM_ERRATA_743622
 +      bool "ARM errata: Faulty hazard checking in the Store Buffer may lead to data corruption"
 +      depends on CPU_V7
 +      help
 +        This option enables the workaround for the 743622 Cortex-A9
 +        (r2p0..r2p2) erratum. Under very rare conditions, a faulty
 +        optimisation in the Cortex-A9 Store Buffer may lead to data
 +        corruption. This workaround sets a specific bit in the diagnostic
 +        register of the Cortex-A9 which disables the Store Buffer
 +        optimisation, preventing the defect from occurring. This has no
 +        visible impact on the overall performance or power consumption of the
 +        processor.
 +
  endmenu
  
  source "arch/arm/common/Kconfig"
@@@ -1203,13 -1142,13 +1203,13 @@@ source "kernel/time/Kconfig
  
  config SMP
        bool "Symmetric Multi-Processing (EXPERIMENTAL)"
 -      depends on EXPERIMENTAL && (REALVIEW_EB_ARM11MP || REALVIEW_EB_A9MP ||\
 -               MACH_REALVIEW_PB11MP || MACH_REALVIEW_PBX || ARCH_OMAP4 ||\
 -               ARCH_S5PV310 || ARCH_TEGRA || ARCH_U8500 || ARCH_VEXPRESS_CA9X4)
 +      depends on EXPERIMENTAL
        depends on GENERIC_CLOCKEVENTS
 +      depends on REALVIEW_EB_ARM11MP || REALVIEW_EB_A9MP || \
 +               MACH_REALVIEW_PB11MP || MACH_REALVIEW_PBX || ARCH_OMAP4 ||\
 +               ARCH_S5PV310 || ARCH_TEGRA || ARCH_U8500 || ARCH_VEXPRESS_CA9X4
        select USE_GENERIC_SMP_HELPERS
 -      select HAVE_ARM_SCU if ARCH_REALVIEW || ARCH_OMAP4 || ARCH_S5PV310 ||\
 -               ARCH_TEGRA || ARCH_U8500 || ARCH_VEXPRESS_CA9X4
 +      select HAVE_ARM_SCU
        help
          This enables support for systems with more than one CPU. If you have
          a system with only one CPU, like most personal computers, say N. If
  
          See also <file:Documentation/i386/IO-APIC.txt>,
          <file:Documentation/nmi_watchdog.txt> and the SMP-HOWTO available at
 -        <http://www.linuxdoc.org/docs.html#howto>.
 +        <http://tldp.org/HOWTO/SMP-HOWTO.html>.
  
          If you don't know what to do here, say N.
  
 +config SMP_ON_UP
 +      bool "Allow booting SMP kernel on uniprocessor systems (EXPERIMENTAL)"
 +      depends on EXPERIMENTAL
 +      depends on SMP && !XIP && !THUMB2_KERNEL
 +      default y
 +      help
 +        SMP kernels contain instructions which fail on non-SMP processors.
 +        Enabling this option allows the kernel to modify itself to make
 +        these instructions safe.  Disabling it allows about 1K of space
 +        savings.
 +
 +        If you don't know what to do here, say Y.
 +
  config HAVE_ARM_SCU
        bool
        depends on SMP
@@@ -1290,9 -1216,12 +1290,9 @@@ config HOTPLUG_CP
  
  config LOCAL_TIMERS
        bool "Use local timer interrupts"
 -      depends on SMP && (REALVIEW_EB_ARM11MP || MACH_REALVIEW_PB11MP || \
 -              REALVIEW_EB_A9MP || MACH_REALVIEW_PBX || ARCH_OMAP4 || \
 -              ARCH_S5PV310 || ARCH_TEGRA || ARCH_U8500 || ARCH_VEXPRESS_CA9X4)
 +      depends on SMP
        default y
 -      select HAVE_ARM_TWD if ARCH_REALVIEW || ARCH_OMAP4 || ARCH_S5PV310 || \
 -              ARCH_TEGRA || ARCH_U8500 || ARCH_VEXPRESS
 +      select HAVE_ARM_TWD
        help
          Enable support for local timers on SMP platforms, rather then the
          legacy IPI broadcast method.  Local timers allows the system
@@@ -1303,7 -1232,7 +1303,7 @@@ source kernel/Kconfig.preemp
  
  config HZ
        int
 -      default 200 if ARCH_EBSA110 || ARCH_S3C2410 || ARCH_S5P6440 || \
 +      default 200 if ARCH_EBSA110 || ARCH_S3C2410 || ARCH_S5P64X0 || \
                ARCH_S5P6442 || ARCH_S5PV210 || ARCH_S5PV310
        default OMAP_32K_TIMER_HZ if ARCH_OMAP && OMAP_32K_TIMER
        default AT91_TIMER_HZ if ARCH_AT91
@@@ -1509,20 -1438,6 +1509,20 @@@ config UACCESS_WITH_MEMCP
          However, if the CPU data cache is using a write-allocate mode,
          this option is unlikely to provide any performance gain.
  
 +config SECCOMP
 +      bool
 +      prompt "Enable seccomp to safely compute untrusted bytecode"
 +      ---help---
 +        This kernel feature is useful for number crunching applications
 +        that may need to compute untrusted bytecode during their
 +        execution. By using pipes or other transports made available to
 +        the process as file descriptors supporting the read/write
 +        syscalls, it's possible to isolate those applications in
 +        their own address space using seccomp. Once seccomp is
 +        enabled via prctl(PR_SET_SECCOMP), it cannot be disabled
 +        and the task is only allowed to execute a few safe syscalls
 +        defined by each seccomp mode.
 +
  config CC_STACKPROTECTOR
        bool "Enable -fstack-protector buffer overflow detection (EXPERIMENTAL)"
        help
@@@ -1669,6 -1584,12 +1669,12 @@@ if ARCH_HAS_CPUFRE
  
  source "drivers/cpufreq/Kconfig"
  
+ config CPU_FREQ_IMX
+       tristate "CPUfreq driver for i.MX CPUs"
+       depends on ARCH_MXC && CPU_FREQ
+       help
+         This enables the CPUfreq driver for i.MX CPUs.
  config CPU_FREQ_SA1100
        bool
  
index b8bbd31aa850c4332a602d92a79e0d8749afe4fb,a02a00adb7c48db27c4afd1dba169f887f960049..84a5ba03f1bae3d2275743b741a30267cd9ee03a
  #include <linux/platform_device.h>
  #include <linux/gpio.h>
  #include <linux/input/matrix_keypad.h>
+ #include <linux/irq.h>
  #include <asm/mach-types.h>
  #include <asm/mach/arch.h>
  #include <asm/mach/time.h>
  #include <mach/hardware.h>
  #include <mach/common.h>
  #include <mach/iomux-mx27.h>
+ #include <mach/mmc.h>
  
  #include "devices-imx27.h"
  #include "devices.h"
  
+ #define SD1_EN_GPIO (GPIO_PORTB + 25)
  static const int mx27pdk_pins[] __initconst = {
        /* UART1 */
        PE12_PF_UART1_TXD,
        PD15_AOUT_FEC_COL,
        PD16_AIN_FEC_TX_ER,
        PF23_AIN_FEC_TX_EN,
+       /* SDHC1 */
+       PE18_PF_SD1_D0,
+       PE19_PF_SD1_D1,
+       PE20_PF_SD1_D2,
+       PE21_PF_SD1_D3,
+       PE22_PF_SD1_CMD,
+       PE23_PF_SD1_CLK,
+       SD1_EN_GPIO | GPIO_GPIO | GPIO_OUT,
  };
  
  static const struct imxuart_platform_data uart_pdata __initconst = {
@@@ -85,13 -97,39 +97,39 @@@ static struct matrix_keymap_data mx27_3
        .keymap_size    = ARRAY_SIZE(mx27_3ds_keymap),
  };
  
+ static int mx27_3ds_sdhc1_init(struct device *dev, irq_handler_t detect_irq,
+                               void *data)
+ {
+       return request_irq(IRQ_GPIOB(26), detect_irq, IRQF_TRIGGER_FALLING |
+                       IRQF_TRIGGER_RISING, "sdhc1-card-detect", data);
+ }
+ static void mx27_3ds_sdhc1_exit(struct device *dev, void *data)
+ {
+       free_irq(IRQ_GPIOB(26), data);
+ }
+ static struct imxmmc_platform_data sdhc1_pdata = {
+       .init = mx27_3ds_sdhc1_init,
+       .exit = mx27_3ds_sdhc1_exit,
+ };
+ static void mx27_3ds_sdhc1_enable_level_translator(void)
+ {
+       /* Turn on TXB0108 OE pin */
+       gpio_request(SD1_EN_GPIO, "sd1_enable");
+       gpio_direction_output(SD1_EN_GPIO, 1);
+ }
  static void __init mx27pdk_init(void)
  {
        mxc_gpio_setup_multiple_pins(mx27pdk_pins, ARRAY_SIZE(mx27pdk_pins),
                "mx27pdk");
+       mx27_3ds_sdhc1_enable_level_translator();
        imx27_add_imx_uart0(&uart_pdata);
        imx27_add_fec(NULL);
        mxc_register_device(&imx_kpp_device, &mx27_3ds_keymap_data);
+       mxc_register_device(&mxc_sdhc_device0, &sdhc1_pdata);
  }
  
  static void __init mx27pdk_timer_init(void)
@@@ -105,6 -143,8 +143,6 @@@ static struct sys_timer mx27pdk_timer 
  
  MACHINE_START(MX27_3DS, "Freescale MX27PDK")
        /* maintainer: Freescale Semiconductor, Inc. */
 -      .phys_io        = MX27_AIPI_BASE_ADDR,
 -      .io_pg_offst    = ((MX27_AIPI_BASE_ADDR_VIRT) >> 18) & 0xfffc,
        .boot_params    = MX27_PHYS_OFFSET + 0x100,
        .map_io         = mx27_map_io,
        .init_irq       = mx27_init_irq,
index 80805107a73eb74bbf7b18d2e22fd7b18e194965,d3d83228cdb1fbef7a505d06dd6122680962ff8f..f8be1eb0c062685eb6193dd2664bc544a46f1458
@@@ -96,6 -96,14 +96,14 @@@ static struct pad_desc mx25pdk_pads[] 
        MX25_PAD_KPP_COL1__KPP_COL1,
        MX25_PAD_KPP_COL2__KPP_COL2,
        MX25_PAD_KPP_COL3__KPP_COL3,
+       /* SD1 */
+       MX25_PAD_SD1_CMD__SD1_CMD,
+       MX25_PAD_SD1_CLK__SD1_CLK,
+       MX25_PAD_SD1_DATA0__SD1_DATA0,
+       MX25_PAD_SD1_DATA1__SD1_DATA1,
+       MX25_PAD_SD1_DATA2__SD1_DATA2,
+       MX25_PAD_SD1_DATA3__SD1_DATA3,
  };
  
  static const struct fec_platform_data mx25_fec_pdata __initconst = {
@@@ -193,6 -201,8 +201,8 @@@ static void __init mx25pdk_init(void
        mx25pdk_fec_reset();
        imx25_add_fec(&mx25_fec_pdata);
        mxc_register_device(&mx25_kpp_device, &mx25pdk_keymap_data);
+       imx25_add_esdhc(0, NULL);
  }
  
  static void __init mx25pdk_timer_init(void)
@@@ -206,6 -216,8 +216,6 @@@ static struct sys_timer mx25pdk_timer 
  
  MACHINE_START(MX25_3DS, "Freescale MX25PDK (3DS)")
        /* Maintainer: Freescale Semiconductor, Inc. */
 -      .phys_io        = MX25_AIPS1_BASE_ADDR,
 -      .io_pg_offst    = ((MX25_AIPS1_BASE_ADDR_VIRT) >> 18) & 0xfffc,
        .boot_params    = MX25_PHYS_OFFSET + 0x100,
        .map_io         = mx25_map_io,
        .init_irq       = mx25_init_irq,
index 5c1d0e86c91e16fd22e0ed2f4d1c190eb87f3a58,f93af46215880ccba074549451a9dacc37dda876..0ad9e78210826a37e0883707df6a1078c2d868ce
  #include "devices-imx31.h"
  #include "devices.h"
  
- /* Definitions for components on the Debug board */
- /* Base address of CPLD controller on the Debug board */
- #define DEBUG_BASE_ADDRESS            CS5_IO_ADDRESS(MX3x_CS5_BASE_ADDR)
- /* LAN9217 ethernet base address */
- #define LAN9217_BASE_ADDR             MX3x_CS5_BASE_ADDR
- /* CPLD config and interrupt base address */
- #define CPLD_ADDR                     (DEBUG_BASE_ADDRESS + 0x20000)
- /* status, interrupt */
- #define CPLD_INT_STATUS_REG           (CPLD_ADDR + 0x10)
- #define CPLD_INT_MASK_REG             (CPLD_ADDR + 0x38)
- #define CPLD_INT_RESET_REG            (CPLD_ADDR + 0x20)
- /* magic word for debug CPLD */
- #define CPLD_MAGIC_NUMBER1_REG                (CPLD_ADDR + 0x40)
- #define CPLD_MAGIC_NUMBER2_REG                (CPLD_ADDR + 0x48)
- /* CPLD code version */
- #define CPLD_CODE_VER_REG             (CPLD_ADDR + 0x50)
- /* magic word for debug CPLD */
- #define CPLD_MAGIC_NUMBER3_REG                (CPLD_ADDR + 0x58)
  /* CPLD IRQ line for external uart, external ethernet etc */
  #define EXPIO_PARENT_INT      IOMUX_TO_IRQ(MX31_PIN_GPIO1_1)
  
- #define MXC_EXP_IO_BASE               (MXC_BOARD_IRQ_START)
- #define MXC_IRQ_TO_EXPIO(irq) ((irq) - MXC_EXP_IO_BASE)
- #define EXPIO_INT_ENET                (MXC_EXP_IO_BASE + 0)
- #define MXC_MAX_EXP_IO_LINES  16
  /*
   * This file contains the board-specific initialization routines.
   */
@@@ -272,7 -242,7 +242,7 @@@ static void __init mxc_board_init(void
        imx31_add_imx_uart0(&uart_pdata);
        imx31_add_mxc_nand(&mx31_3ds_nand_board_info);
  
-       imx31_add_spi_imx0(&spi1_pdata);
+       imx31_add_spi_imx1(&spi1_pdata);
        spi_register_board_info(mx31_3ds_spi_devs,
                                                ARRAY_SIZE(mx31_3ds_spi_devs));
  
        mx31_3ds_usbotg_init();
        mxc_register_device(&mxc_otg_udc_device, &usbotg_pdata);
  
-       if (!mxc_expio_init(CS5_BASE_ADDR, EXPIO_PARENT_INT))
-               printk(KERN_WARNING "Init of the debugboard failed, all "
-                                   "devices on the board are unusable.\n");
+       if (mxc_expio_init(MX31_CS5_BASE_ADDR, EXPIO_PARENT_INT))
+               printk(KERN_WARNING "Init of the debug board failed, all "
+                                   "devices on the debug board are unusable.\n");
  }
  
  static void __init mx31_3ds_timer_init(void)
@@@ -301,6 -271,8 +271,6 @@@ static struct sys_timer mx31_3ds_timer 
   */
  MACHINE_START(MX31_3DS, "Freescale MX31PDK (3DS)")
        /* Maintainer: Freescale Semiconductor, Inc. */
 -      .phys_io        = MX31_AIPS1_BASE_ADDR,
 -      .io_pg_offst    = (MX31_AIPS1_BASE_ADDR_VIRT >> 18) & 0xfffc,
        .boot_params    = MX3x_PHYS_OFFSET + 0x100,
        .map_io         = mx31_3ds_map_io,
        .init_irq       = mx31_init_irq,
index 05f628d907250b5118c4e1ecb2df4e2e40a3c33c,b248c6a6dfb6c42b37ca7e3a5737ad00e034535e..b66a75aa2e88d185de011c28f0fe4a2efd627cfb
  #include <mach/hardware.h>
  #include <mach/common.h>
  #include <mach/iomux-mx35.h>
+ #include <mach/irqs.h>
+ #include <mach/3ds_debugboard.h>
  #include <mach/mxc_ehci.h>
  
  #include "devices-imx35.h"
  #include "devices.h"
  
+ #define EXPIO_PARENT_INT      (MXC_INTERNAL_IRQS + GPIO_PORTA + 1)
  static const struct imxuart_platform_data uart_pdata __initconst = {
        .flags = IMXUART_HAVE_RTSCTS,
  };
@@@ -108,6 -112,13 +112,13 @@@ static struct pad_desc mx35pdk_pads[] 
        /* USBH1 */
        MX35_PAD_I2C2_CLK__USB_TOP_USBH2_PWR,
        MX35_PAD_I2C2_DAT__USB_TOP_USBH2_OC,
+       /* SDCARD */
+       MX35_PAD_SD1_CMD__ESDHC1_CMD,
+       MX35_PAD_SD1_CLK__ESDHC1_CLK,
+       MX35_PAD_SD1_DATA0__ESDHC1_DAT0,
+       MX35_PAD_SD1_DATA1__ESDHC1_DAT1,
+       MX35_PAD_SD1_DATA2__ESDHC1_DAT2,
+       MX35_PAD_SD1_DATA3__ESDHC1_DAT3,
  };
  
  /* OTG config */
@@@ -140,6 -151,11 +151,11 @@@ static void __init mxc_board_init(void
        mxc_register_device(&mxc_usbh1, &usb_host_pdata);
  
        imx35_add_mxc_nand(&mx35pdk_nand_board_info);
+       imx35_add_esdhc(0, NULL);
+       if (mxc_expio_init(MX35_CS5_BASE_ADDR, EXPIO_PARENT_INT))
+               pr_warn("Init of the debugboard failed, all "
+                               "devices on the debugboard are unusable.\n");
  }
  
  static void __init mx35pdk_timer_init(void)
@@@ -153,6 -169,8 +169,6 @@@ struct sys_timer mx35pdk_timer = 
  
  MACHINE_START(MX35_3DS, "Freescale MX35PDK")
        /* Maintainer: Freescale Semiconductor, Inc */
 -      .phys_io        = MX35_AIPS1_BASE_ADDR,
 -      .io_pg_offst    = ((MX35_AIPS1_BASE_ADDR_VIRT) >> 18) & 0xfffc,
        .boot_params    = MX3x_PHYS_OFFSET + 0x100,
        .map_io         = mx35_map_io,
        .init_irq       = mx35_init_irq,
index 0821fe9b3b27c01afe9942a9137e1a0627fe46d9,1ea54e992774d73b2a055fed5141af9df5a0ef99..acbe30df2e6913f7a06bb4402ba47f4b503cb0a0
@@@ -1,5 -1,5 +1,5 @@@
  /*
-  * Copyright 2009 Freescale Semiconductor, Inc. All Rights Reserved.
+  * Copyright 2009-2010 Freescale Semiconductor, Inc. All Rights Reserved.
   * Copyright (C) 2009-2010 Amit Kucheria <amit.kucheria@canonical.com>
   *
   * The code contained herein is licensed under the GNU General Public
@@@ -18,6 -18,8 +18,8 @@@
  #include <linux/io.h>
  #include <linux/fsl_devices.h>
  #include <linux/fec.h>
+ #include <linux/gpio_keys.h>
+ #include <linux/input.h>
  
  #include <mach/common.h>
  #include <mach/hardware.h>
  
  #include "devices-imx51.h"
  #include "devices.h"
+ #include "cpu_op-mx51.h"
  
  #define BABBAGE_USB_HUB_RESET (0*32 + 7)      /* GPIO_1_7 */
  #define BABBAGE_USBH1_STP     (0*32 + 27)     /* GPIO_1_27 */
  #define BABBAGE_PHY_RESET     (1*32 + 5)      /* GPIO_2_5 */
  #define BABBAGE_FEC_PHY_RESET (1*32 + 14)     /* GPIO_2_14 */
+ #define BABBAGE_POWER_KEY     (1*32 + 21)     /* GPIO_2_21 */
  
  /* USB_CTRL_1 */
  #define MX51_USB_CTRL_1_OFFSET                        0x10
  #define       MX51_USB_PLL_DIV_19_2_MHZ       0x01
  #define       MX51_USB_PLL_DIV_24_MHZ 0x02
  
+ static struct gpio_keys_button babbage_buttons[] = {
+       {
+               .gpio           = BABBAGE_POWER_KEY,
+               .code           = BTN_0,
+               .desc           = "PWR",
+               .active_low     = 1,
+               .wakeup         = 1,
+       },
+ };
+ static const struct gpio_keys_platform_data imx_button_data __initconst = {
+       .buttons        = babbage_buttons,
+       .nbuttons       = ARRAY_SIZE(babbage_buttons),
+ };
  static struct pad_desc mx51babbage_pads[] = {
        /* UART1 */
        MX51_PAD_UART1_RXD__UART1_RXD,
  
        /* FEC PHY reset line */
        MX51_PAD_EIM_A20__GPIO_2_14,
+       /* SD 1 */
+       MX51_PAD_SD1_CMD__SD1_CMD,
+       MX51_PAD_SD1_CLK__SD1_CLK,
+       MX51_PAD_SD1_DATA0__SD1_DATA0,
+       MX51_PAD_SD1_DATA1__SD1_DATA1,
+       MX51_PAD_SD1_DATA2__SD1_DATA2,
+       MX51_PAD_SD1_DATA3__SD1_DATA3,
+       /* SD 2 */
+       MX51_PAD_SD2_CMD__SD2_CMD,
+       MX51_PAD_SD2_CLK__SD2_CLK,
+       MX51_PAD_SD2_DATA0__SD2_DATA0,
+       MX51_PAD_SD2_DATA1__SD2_DATA1,
+       MX51_PAD_SD2_DATA2__SD2_DATA2,
+       MX51_PAD_SD2_DATA3__SD2_DATA3,
  };
  
  /* Serial ports */
@@@ -281,13 -316,22 +316,22 @@@ __setup("otg_mode=", babbage_otg_mode)
  static void __init mxc_board_init(void)
  {
        struct pad_desc usbh1stp = MX51_PAD_USBH1_STP__USBH1_STP;
+       struct pad_desc power_key = MX51_PAD_EIM_A27__GPIO_2_21;
  
+ #if defined(CONFIG_CPU_FREQ_IMX)
+       get_cpu_op = mx51_get_cpu_op;
+ #endif
        mxc_iomux_v3_setup_multiple_pads(mx51babbage_pads,
                                        ARRAY_SIZE(mx51babbage_pads));
        mxc_init_imx_uart();
        babbage_fec_reset();
        imx51_add_fec(NULL);
  
+       /* Set the PAD settings for the pwr key. */
+       power_key.pad_ctrl = MX51_GPIO_PAD_CTRL_2;
+       mxc_iomux_v3_setup_pad(&power_key);
+       imx51_add_gpio_keys(&imx_button_data);
        imx51_add_imx_i2c(0, &babbage_i2c_data);
        imx51_add_imx_i2c(1, &babbage_i2c_data);
        mxc_register_device(&mxc_hsi2c_device, &babbage_hsi2c_data);
        /* setback USBH1_STP to be function */
        mxc_iomux_v3_setup_pad(&usbh1stp);
        babbage_usbhub_reset();
+       imx51_add_esdhc(0, NULL);
+       imx51_add_esdhc(1, NULL);
  }
  
  static void __init mx51_babbage_timer_init(void)
@@@ -317,6 -364,8 +364,6 @@@ static struct sys_timer mxc_timer = 
  
  MACHINE_START(MX51_BABBAGE, "Freescale MX51 Babbage Board")
        /* Maintainer: Amit Kucheria <amit.kucheria@canonical.com> */
 -      .phys_io = MX51_AIPS1_BASE_ADDR,
 -      .io_pg_offst = ((MX51_AIPS1_BASE_ADDR_VIRT) >> 18) & 0xfffc,
        .boot_params = MX51_PHYS_OFFSET + 0x100,
        .map_io = mx51_map_io,
        .init_irq = mx51_init_irq,