Merge branch 'cleanup-part-2' into devel-board
authorTony Lindgren <tony@atomide.com>
Sun, 10 Jul 2011 18:48:26 +0000 (11:48 -0700)
committerTony Lindgren <tony@atomide.com>
Sun, 10 Jul 2011 18:48:26 +0000 (11:48 -0700)
Conflicts:
arch/arm/mach-omap2/board-4430sdp.c
arch/arm/mach-omap2/board-rx51-peripherals.c

16 files changed:
arch/arm/mach-omap2/Kconfig
arch/arm/mach-omap2/board-4430sdp.c
arch/arm/mach-omap2/board-cm-t35.c
arch/arm/mach-omap2/board-omap3beagle.c
arch/arm/mach-omap2/board-overo.c
arch/arm/mach-omap2/board-rx51-peripherals.c
arch/arm/mach-omap2/board-zoom-debugboard.c
arch/arm/mach-omap2/clock.c
arch/arm/mach-omap2/devices.c
arch/arm/mach-omap2/hsmmc.c
arch/arm/mach-omap2/iommu2.c
arch/arm/mach-omap2/omap-iommu.c
arch/arm/plat-omap/dmtimer.c
arch/arm/plat-omap/include/plat/omap4-keypad.h
arch/arm/plat-omap/include/plat/uncompress.h
arch/arm/plat-omap/iovmm.c

index 19d5891c48e325f6afe8e1a101dfdfbca3ad0a68..4ae6257b39a40e40d99005d7f61216c062efe890 100644 (file)
@@ -266,9 +266,10 @@ config MACH_OMAP_ZOOM3
        select REGULATOR_FIXED_VOLTAGE
 
 config MACH_CM_T35
-       bool "CompuLab CM-T35 module"
+       bool "CompuLab CM-T35/CM-T3730 modules"
        depends on ARCH_OMAP3
        default y
+       select MACH_CM_T3730
        select OMAP_PACKAGE_CUS
 
 config MACH_CM_T3517
@@ -277,6 +278,9 @@ config MACH_CM_T3517
        default y
        select OMAP_PACKAGE_CBB
 
+config MACH_CM_T3730
+       bool
+
 config MACH_IGEP0020
        bool "IGEP v2 board"
        depends on ARCH_OMAP3
index 933b25bb10de14458758665c3c07e00e46d13164..a7c0b31fd0849930a71141aae1bb8a1c3587f0b5 100644 (file)
@@ -22,6 +22,7 @@
 #include <linux/i2c/twl.h>
 #include <linux/gpio_keys.h>
 #include <linux/regulator/machine.h>
+#include <linux/regulator/fixed.h>
 #include <linux/leds.h>
 #include <linux/leds_pwm.h>
 
@@ -37,6 +38,7 @@
 #include <plat/mmc.h>
 #include <plat/omap4-keypad.h>
 #include <video/omapdss.h>
+#include <linux/wl12xx.h>
 
 #include "mux.h"
 #include "hsmmc.h"
@@ -51,6 +53,9 @@
 #define HDMI_GPIO_HPD 60 /* Hot plug pin for HDMI */
 #define HDMI_GPIO_LS_OE 41 /* Level shifter for HDMI */
 
+#define GPIO_WIFI_PMENA                54
+#define GPIO_WIFI_IRQ          53
+
 static const int sdp4430_keymap[] = {
        KEY(0, 0, KEY_E),
        KEY(0, 1, KEY_R),
@@ -124,6 +129,64 @@ static const int sdp4430_keymap[] = {
        KEY(7, 6, KEY_OK),
        KEY(7, 7, KEY_DOWN),
 };
+static struct omap_device_pad keypad_pads[] __initdata = {
+       {       .name   = "kpd_col1.kpd_col1",
+               .enable = OMAP_WAKEUP_EN | OMAP_MUX_MODE1,
+       },
+       {       .name   = "kpd_col1.kpd_col1",
+               .enable = OMAP_WAKEUP_EN | OMAP_MUX_MODE1,
+       },
+       {       .name   = "kpd_col2.kpd_col2",
+               .enable = OMAP_WAKEUP_EN | OMAP_MUX_MODE1,
+       },
+       {       .name   = "kpd_col3.kpd_col3",
+               .enable = OMAP_WAKEUP_EN | OMAP_MUX_MODE1,
+       },
+       {       .name   = "kpd_col4.kpd_col4",
+               .enable = OMAP_WAKEUP_EN | OMAP_MUX_MODE1,
+       },
+       {       .name   = "kpd_col5.kpd_col5",
+               .enable = OMAP_WAKEUP_EN | OMAP_MUX_MODE1,
+       },
+       {       .name   = "gpmc_a23.kpd_col7",
+               .enable = OMAP_WAKEUP_EN | OMAP_MUX_MODE1,
+       },
+       {       .name   = "gpmc_a22.kpd_col6",
+               .enable = OMAP_WAKEUP_EN | OMAP_MUX_MODE1,
+       },
+       {       .name   = "kpd_row0.kpd_row0",
+               .enable = OMAP_PULL_ENA | OMAP_PULL_UP | OMAP_WAKEUP_EN |
+                       OMAP_MUX_MODE1 | OMAP_INPUT_EN,
+       },
+       {       .name   = "kpd_row1.kpd_row1",
+               .enable = OMAP_PULL_ENA | OMAP_PULL_UP | OMAP_WAKEUP_EN |
+                       OMAP_MUX_MODE1 | OMAP_INPUT_EN,
+       },
+       {       .name   = "kpd_row2.kpd_row2",
+               .enable = OMAP_PULL_ENA | OMAP_PULL_UP | OMAP_WAKEUP_EN |
+                       OMAP_MUX_MODE1 | OMAP_INPUT_EN,
+       },
+       {       .name   = "kpd_row3.kpd_row3",
+               .enable = OMAP_PULL_ENA | OMAP_PULL_UP | OMAP_WAKEUP_EN |
+                       OMAP_MUX_MODE1 | OMAP_INPUT_EN,
+       },
+       {       .name   = "kpd_row4.kpd_row4",
+               .enable = OMAP_PULL_ENA | OMAP_PULL_UP | OMAP_WAKEUP_EN |
+                       OMAP_MUX_MODE1 | OMAP_INPUT_EN,
+       },
+       {       .name   = "kpd_row5.kpd_row5",
+               .enable = OMAP_PULL_ENA | OMAP_PULL_UP | OMAP_WAKEUP_EN |
+                       OMAP_MUX_MODE1 | OMAP_INPUT_EN,
+       },
+       {       .name   = "gpmc_a18.kpd_row6",
+               .enable = OMAP_PULL_ENA | OMAP_PULL_UP | OMAP_WAKEUP_EN |
+                       OMAP_MUX_MODE1 | OMAP_INPUT_EN,
+       },
+       {       .name   = "gpmc_a19.kpd_row7",
+               .enable = OMAP_PULL_ENA | OMAP_PULL_UP | OMAP_WAKEUP_EN |
+                       OMAP_MUX_MODE1 | OMAP_INPUT_EN,
+       },
+};
 
 static struct matrix_keymap_data sdp4430_keymap_data = {
        .keymap                 = sdp4430_keymap,
@@ -135,6 +198,13 @@ static struct omap4_keypad_platform_data sdp4430_keypad_data = {
        .rows                   = 8,
        .cols                   = 8,
 };
+
+static struct omap_board_data keypad_data = {
+       .id                     = 1,
+       .pads                   = keypad_pads,
+       .pads_cnt               = ARRAY_SIZE(keypad_pads),
+};
+
 static struct gpio_led sdp4430_gpio_leds[] = {
        {
                .name   = "omap4:green:debug0",
@@ -315,8 +385,17 @@ static struct omap2_hsmmc_info mmc[] = {
        {
                .mmc            = 1,
                .caps           = MMC_CAP_4_BIT_DATA | MMC_CAP_8_BIT_DATA,
+               .gpio_cd        = -EINVAL,
                .gpio_wp        = -EINVAL,
        },
+       {
+               .mmc            = 5,
+               .caps           = MMC_CAP_4_BIT_DATA | MMC_CAP_POWER_OFF_CARD,
+               .gpio_cd        = -EINVAL,
+               .gpio_wp        = -EINVAL,
+               .ocr_mask       = MMC_VDD_165_195,
+               .nonremovable   = true,
+       },
        {}      /* Terminator */
 };
 
@@ -324,6 +403,37 @@ static struct regulator_consumer_supply sdp4430_vaux_supply[] = {
        REGULATOR_SUPPLY("vmmc", "omap_hsmmc.1"),
 };
 
+static struct regulator_consumer_supply omap4_sdp4430_vmmc5_supply = {
+       .supply = "vmmc",
+       .dev_name = "omap_hsmmc.4",
+};
+
+static struct regulator_init_data sdp4430_vmmc5 = {
+       .constraints = {
+               .valid_ops_mask = REGULATOR_CHANGE_STATUS,
+       },
+       .num_consumer_supplies = 1,
+       .consumer_supplies = &omap4_sdp4430_vmmc5_supply,
+};
+
+static struct fixed_voltage_config sdp4430_vwlan = {
+       .supply_name            = "vwl1271",
+       .microvolts             = 1800000, /* 1.8V */
+       .gpio                   = GPIO_WIFI_PMENA,
+       .startup_delay          = 70000, /* 70msec */
+       .enable_high            = 1,
+       .enabled_at_boot        = 0,
+       .init_data              = &sdp4430_vmmc5,
+};
+
+static struct platform_device omap_vwlan_device = {
+       .name           = "reg-fixed-voltage",
+       .id             = 1,
+       .dev = {
+               .platform_data = &sdp4430_vwlan,
+       },
+};
+
 static int omap4_twl6030_hsmmc_late_init(struct device *dev)
 {
        int ret = 0;
@@ -593,6 +703,41 @@ static inline void board_serial_init(void)
 }
  #endif
 
+static void omap4_sdp4430_wifi_mux_init(void)
+{
+       omap_mux_init_gpio(GPIO_WIFI_IRQ, OMAP_PIN_INPUT |
+                               OMAP_PIN_OFF_WAKEUPENABLE);
+       omap_mux_init_gpio(GPIO_WIFI_PMENA, OMAP_PIN_OUTPUT);
+
+       omap_mux_init_signal("sdmmc5_cmd.sdmmc5_cmd",
+                               OMAP_MUX_MODE0 | OMAP_PIN_INPUT_PULLUP);
+       omap_mux_init_signal("sdmmc5_clk.sdmmc5_clk",
+                               OMAP_MUX_MODE0 | OMAP_PIN_INPUT_PULLUP);
+       omap_mux_init_signal("sdmmc5_dat0.sdmmc5_dat0",
+                               OMAP_MUX_MODE0 | OMAP_PIN_INPUT_PULLUP);
+       omap_mux_init_signal("sdmmc5_dat1.sdmmc5_dat1",
+                               OMAP_MUX_MODE0 | OMAP_PIN_INPUT_PULLUP);
+       omap_mux_init_signal("sdmmc5_dat2.sdmmc5_dat2",
+                               OMAP_MUX_MODE0 | OMAP_PIN_INPUT_PULLUP);
+       omap_mux_init_signal("sdmmc5_dat3.sdmmc5_dat3",
+                               OMAP_MUX_MODE0 | OMAP_PIN_INPUT_PULLUP);
+
+}
+
+static struct wl12xx_platform_data omap4_sdp4430_wlan_data __initdata = {
+       .irq = OMAP_GPIO_IRQ(GPIO_WIFI_IRQ),
+       .board_ref_clock = WL12XX_REFCLOCK_26,
+       .board_tcxo_clock = WL12XX_TCXOCLOCK_26,
+};
+
+static void omap4_sdp4430_wifi_init(void)
+{
+       omap4_sdp4430_wifi_mux_init();
+       if (wl12xx_set_platform_data(&omap4_sdp4430_wlan_data))
+               pr_err("Error setting wl12xx data\n");
+       platform_device_register(&omap_vwlan_device);
+}
+
 static void __init omap_4430sdp_init(void)
 {
        int status;
@@ -609,6 +754,7 @@ static void __init omap_4430sdp_init(void)
        omap_sfh7741prox_init();
        platform_add_devices(sdp4430_devices, ARRAY_SIZE(sdp4430_devices));
        board_serial_init();
+       omap4_sdp4430_wifi_init();
        omap4_twl6030_hsmmc_init(mmc);
 
        usb_musb_init(&musb_board_data);
@@ -622,7 +768,7 @@ static void __init omap_4430sdp_init(void)
                                ARRAY_SIZE(sdp4430_spi_board_info));
        }
 
-       status = omap4_keyboard_init(&sdp4430_keypad_data);
+       status = omap4_keyboard_init(&sdp4430_keypad_data, &keypad_data);
        if (status)
                pr_err("Keypad initialization failed: %d\n", status);
 
index 35891d49c631991ac5e69ac995507b1e08b25624..3af8aab435b5e01439dd987605fd4a65f51ec41d 100644 (file)
@@ -1,8 +1,9 @@
 /*
- * board-cm-t35.c (CompuLab CM-T35 module)
+ * CompuLab CM-T35/CM-T3730 modules support
  *
- * Copyright (C) 2009 CompuLab, Ltd.
- * Author: Mike Rapoport <mike@compulab.co.il>
+ * Copyright (C) 2009-2011 CompuLab, Ltd.
+ * Authors: Mike Rapoport <mike@compulab.co.il>
+ *         Igor Grinberg <grinberg@compulab.co.il>
  *
  * This program is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
  * General Public License for more details.
  *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
- * 02110-1301 USA
- *
  */
 
 #include <linux/kernel.h>
@@ -149,12 +145,12 @@ static struct mtd_partition cm_t35_nand_partitions[] = {
        },
        {
                .name           = "linux",
-               .offset         = MTDPART_OFS_APPEND,   /* Offset = 0x280000 */
+               .offset         = MTDPART_OFS_APPEND,   /* Offset = 0x2A0000 */
                .size           = 32 * NAND_BLOCK_SIZE,
        },
        {
                .name           = "rootfs",
-               .offset         = MTDPART_OFS_APPEND,   /* Offset = 0x680000 */
+               .offset         = MTDPART_OFS_APPEND,   /* Offset = 0x6A0000 */
                .size           = MTDPART_SIZ_FULL,
        },
 };
@@ -433,9 +429,9 @@ static int cm_t35_twl_gpio_setup(struct device *dev, unsigned gpio,
        if (gpio_request_one(wlan_rst, GPIOF_OUT_INIT_HIGH, "WLAN RST") == 0) {
                gpio_export(wlan_rst, 0);
                udelay(10);
-               gpio_set_value(wlan_rst, 0);
+               gpio_set_value_cansleep(wlan_rst, 0);
                udelay(10);
-               gpio_set_value(wlan_rst, 1);
+               gpio_set_value_cansleep(wlan_rst, 1);
        } else {
                pr_err("CM-T35: could not obtain gpio for WiFi reset\n");
        }
@@ -539,17 +535,11 @@ static struct omap_board_mux board_mux[] __initdata = {
        OMAP3_MUX(UART1_TX, OMAP_MUX_MODE0 | OMAP_PIN_OUTPUT),
        OMAP3_MUX(UART1_RX, OMAP_MUX_MODE0 | OMAP_PIN_INPUT),
 
-       /* DSS */
+       /* common DSS */
        OMAP3_MUX(DSS_PCLK, OMAP_MUX_MODE0 | OMAP_PIN_OUTPUT),
        OMAP3_MUX(DSS_HSYNC, OMAP_MUX_MODE0 | OMAP_PIN_OUTPUT),
        OMAP3_MUX(DSS_VSYNC, OMAP_MUX_MODE0 | OMAP_PIN_OUTPUT),
        OMAP3_MUX(DSS_ACBIAS, OMAP_MUX_MODE0 | OMAP_PIN_OUTPUT),
-       OMAP3_MUX(DSS_DATA0, OMAP_MUX_MODE0 | OMAP_PIN_OUTPUT),
-       OMAP3_MUX(DSS_DATA1, OMAP_MUX_MODE0 | OMAP_PIN_OUTPUT),
-       OMAP3_MUX(DSS_DATA2, OMAP_MUX_MODE0 | OMAP_PIN_OUTPUT),
-       OMAP3_MUX(DSS_DATA3, OMAP_MUX_MODE0 | OMAP_PIN_OUTPUT),
-       OMAP3_MUX(DSS_DATA4, OMAP_MUX_MODE0 | OMAP_PIN_OUTPUT),
-       OMAP3_MUX(DSS_DATA5, OMAP_MUX_MODE0 | OMAP_PIN_OUTPUT),
        OMAP3_MUX(DSS_DATA6, OMAP_MUX_MODE0 | OMAP_PIN_OUTPUT),
        OMAP3_MUX(DSS_DATA7, OMAP_MUX_MODE0 | OMAP_PIN_OUTPUT),
        OMAP3_MUX(DSS_DATA8, OMAP_MUX_MODE0 | OMAP_PIN_OUTPUT),
@@ -562,12 +552,6 @@ static struct omap_board_mux board_mux[] __initdata = {
        OMAP3_MUX(DSS_DATA15, OMAP_MUX_MODE0 | OMAP_PIN_OUTPUT),
        OMAP3_MUX(DSS_DATA16, OMAP_MUX_MODE0 | OMAP_PIN_OUTPUT),
        OMAP3_MUX(DSS_DATA17, OMAP_MUX_MODE0 | OMAP_PIN_OUTPUT),
-       OMAP3_MUX(DSS_DATA18, OMAP_MUX_MODE0 | OMAP_PIN_OUTPUT),
-       OMAP3_MUX(DSS_DATA19, OMAP_MUX_MODE0 | OMAP_PIN_OUTPUT),
-       OMAP3_MUX(DSS_DATA20, OMAP_MUX_MODE0 | OMAP_PIN_OUTPUT),
-       OMAP3_MUX(DSS_DATA21, OMAP_MUX_MODE0 | OMAP_PIN_OUTPUT),
-       OMAP3_MUX(DSS_DATA22, OMAP_MUX_MODE0 | OMAP_PIN_OUTPUT),
-       OMAP3_MUX(DSS_DATA23, OMAP_MUX_MODE0 | OMAP_PIN_OUTPUT),
 
        /* display controls */
        OMAP3_MUX(MCBSP1_FSR, OMAP_MUX_MODE4 | OMAP_PIN_OUTPUT),
@@ -580,19 +564,53 @@ static struct omap_board_mux board_mux[] __initdata = {
 
        { .reg_offset = OMAP_MUX_TERMINATOR },
 };
+
+static void __init cm_t3x_common_dss_mux_init(int mux_mode)
+{
+       omap_mux_init_signal("dss_data18", mux_mode);
+       omap_mux_init_signal("dss_data19", mux_mode);
+       omap_mux_init_signal("dss_data20", mux_mode);
+       omap_mux_init_signal("dss_data21", mux_mode);
+       omap_mux_init_signal("dss_data22", mux_mode);
+       omap_mux_init_signal("dss_data23", mux_mode);
+}
+
+static void __init cm_t35_init_mux(void)
+{
+       omap_mux_init_signal("gpio_70", OMAP_MUX_MODE0 | OMAP_PIN_OUTPUT);
+       omap_mux_init_signal("gpio_71", OMAP_MUX_MODE0 | OMAP_PIN_OUTPUT);
+       omap_mux_init_signal("gpio_72", OMAP_MUX_MODE0 | OMAP_PIN_OUTPUT);
+       omap_mux_init_signal("gpio_73", OMAP_MUX_MODE0 | OMAP_PIN_OUTPUT);
+       omap_mux_init_signal("gpio_74", OMAP_MUX_MODE0 | OMAP_PIN_OUTPUT);
+       omap_mux_init_signal("gpio_75", OMAP_MUX_MODE0 | OMAP_PIN_OUTPUT);
+       cm_t3x_common_dss_mux_init(OMAP_MUX_MODE0 | OMAP_PIN_OUTPUT);
+}
+
+static void __init cm_t3730_init_mux(void)
+{
+       omap_mux_init_signal("sys_boot0", OMAP_MUX_MODE3 | OMAP_PIN_OUTPUT);
+       omap_mux_init_signal("sys_boot1", OMAP_MUX_MODE3 | OMAP_PIN_OUTPUT);
+       omap_mux_init_signal("sys_boot3", OMAP_MUX_MODE3 | OMAP_PIN_OUTPUT);
+       omap_mux_init_signal("sys_boot4", OMAP_MUX_MODE3 | OMAP_PIN_OUTPUT);
+       omap_mux_init_signal("sys_boot5", OMAP_MUX_MODE3 | OMAP_PIN_OUTPUT);
+       omap_mux_init_signal("sys_boot6", OMAP_MUX_MODE3 | OMAP_PIN_OUTPUT);
+       cm_t3x_common_dss_mux_init(OMAP_MUX_MODE3 | OMAP_PIN_OUTPUT);
+}
+#else
+static inline void cm_t35_init_mux(void) {}
+static inline void cm_t3730_init_mux(void) {}
 #endif
 
 static struct omap_board_config_kernel cm_t35_config[] __initdata = {
 };
 
-static void __init cm_t35_init(void)
+static void __init cm_t3x_common_init(void)
 {
        omap_board_config = cm_t35_config;
        omap_board_config_size = ARRAY_SIZE(cm_t35_config);
        omap3_mux_init(board_mux, OMAP_PACKAGE_CUS);
        omap_serial_init();
        cm_t35_init_i2c();
-       cm_t35_init_nand();
        omap_ads7846_init(1, CM_T35_GPIO_PENDOWN, 0, NULL);
        cm_t35_init_ethernet();
        cm_t35_init_led();
@@ -602,6 +620,19 @@ static void __init cm_t35_init(void)
        usbhs_init(&usbhs_bdata);
 }
 
+static void __init cm_t35_init(void)
+{
+       cm_t3x_common_init();
+       cm_t35_init_mux();
+       cm_t35_init_nand();
+}
+
+static void __init cm_t3730_init(void)
+{
+       cm_t3x_common_init();
+       cm_t3730_init_mux();
+}
+
 MACHINE_START(CM_T35, "Compulab CM-T35")
        .boot_params    = 0x80000100,
        .reserve        = omap_reserve,
@@ -611,3 +642,13 @@ MACHINE_START(CM_T35, "Compulab CM-T35")
        .init_machine   = cm_t35_init,
        .timer          = &omap3_timer,
 MACHINE_END
+
+MACHINE_START(CM_T3730, "Compulab CM-T3730")
+       .boot_params    = 0x80000100,
+       .reserve        = omap_reserve,
+       .map_io         = omap3_map_io,
+       .init_early     = cm_t35_init_early,
+       .init_irq       = omap3_init_irq,
+       .init_machine   = cm_t3730_init,
+       .timer          = &omap3_timer,
+MACHINE_END
index 34f841112768bd31cf96e2352981ee2ef2434a8b..32f5f895568a0c01e0b4566a3dfe600130ff87a9 100644 (file)
@@ -60,7 +60,8 @@
  *     AXBX    = GPIO173, GPIO172, GPIO171: 1 1 1
  *     C1_3    = GPIO173, GPIO172, GPIO171: 1 1 0
  *     C4      = GPIO173, GPIO172, GPIO171: 1 0 1
- *     XM      = GPIO173, GPIO172, GPIO171: 0 0 0
+ *     XMA/XMB = GPIO173, GPIO172, GPIO171: 0 0 0
+ *     XMC = GPIO173, GPIO172, GPIO171: 0 1 0
  */
 enum {
        OMAP3BEAGLE_BOARD_UNKN = 0,
@@ -68,14 +69,26 @@ enum {
        OMAP3BEAGLE_BOARD_C1_3,
        OMAP3BEAGLE_BOARD_C4,
        OMAP3BEAGLE_BOARD_XM,
+       OMAP3BEAGLE_BOARD_XMC,
 };
 
 static u8 omap3_beagle_version;
 
-static u8 omap3_beagle_get_rev(void)
-{
-       return omap3_beagle_version;
-}
+/*
+ * Board-specific configuration
+ * Defaults to BeagleBoard-xMC
+ */
+static struct {
+       int mmc1_gpio_wp;
+       int usb_pwr_level;
+       int reset_gpio;
+       int usr_button_gpio;
+} beagle_config = {
+       .mmc1_gpio_wp = -EINVAL,
+       .usb_pwr_level = GPIOF_OUT_INIT_LOW,
+       .reset_gpio = 129,
+       .usr_button_gpio = 4,
+};
 
 static struct gpio omap3_beagle_rev_gpios[] __initdata = {
        { 171, GPIOF_IN, "rev_id_0"    },
@@ -110,18 +123,32 @@ static void __init omap3_beagle_init_rev(void)
        case 7:
                printk(KERN_INFO "OMAP3 Beagle Rev: Ax/Bx\n");
                omap3_beagle_version = OMAP3BEAGLE_BOARD_AXBX;
+               beagle_config.mmc1_gpio_wp = 29;
+               beagle_config.reset_gpio = 170;
+               beagle_config.usr_button_gpio = 7;
                break;
        case 6:
                printk(KERN_INFO "OMAP3 Beagle Rev: C1/C2/C3\n");
                omap3_beagle_version = OMAP3BEAGLE_BOARD_C1_3;
+               beagle_config.mmc1_gpio_wp = 23;
+               beagle_config.reset_gpio = 170;
+               beagle_config.usr_button_gpio = 7;
                break;
        case 5:
                printk(KERN_INFO "OMAP3 Beagle Rev: C4\n");
                omap3_beagle_version = OMAP3BEAGLE_BOARD_C4;
+               beagle_config.mmc1_gpio_wp = 23;
+               beagle_config.reset_gpio = 170;
+               beagle_config.usr_button_gpio = 7;
                break;
        case 0:
-               printk(KERN_INFO "OMAP3 Beagle Rev: xM\n");
+               printk(KERN_INFO "OMAP3 Beagle Rev: xM Ax/Bx\n");
                omap3_beagle_version = OMAP3BEAGLE_BOARD_XM;
+               beagle_config.usb_pwr_level = GPIOF_OUT_INIT_HIGH;
+               break;
+       case 2:
+               printk(KERN_INFO "OMAP3 Beagle Rev: xM C\n");
+               omap3_beagle_version = OMAP3BEAGLE_BOARD_XMC;
                break;
        default:
                printk(KERN_INFO "OMAP3 Beagle Rev: unknown %hd\n", beagle_rev);
@@ -225,7 +252,7 @@ static struct omap2_hsmmc_info mmc[] = {
        {
                .mmc            = 1,
                .caps           = MMC_CAP_4_BIT_DATA | MMC_CAP_8_BIT_DATA,
-               .gpio_wp        = 29,
+               .gpio_wp        = -EINVAL,
        },
        {}      /* Terminator */
 };
@@ -243,17 +270,11 @@ static struct gpio_led gpio_leds[];
 static int beagle_twl_gpio_setup(struct device *dev,
                unsigned gpio, unsigned ngpio)
 {
-       int r, usb_pwr_level;
-
-       if (omap3_beagle_get_rev() == OMAP3BEAGLE_BOARD_XM) {
-               mmc[0].gpio_wp = -EINVAL;
-       } else if ((omap3_beagle_get_rev() == OMAP3BEAGLE_BOARD_C1_3) ||
-               (omap3_beagle_get_rev() == OMAP3BEAGLE_BOARD_C4)) {
-               omap_mux_init_gpio(23, OMAP_PIN_INPUT);
-               mmc[0].gpio_wp = 23;
-       } else {
-               omap_mux_init_gpio(29, OMAP_PIN_INPUT);
-       }
+       int r;
+
+       if (beagle_config.mmc1_gpio_wp != -EINVAL)
+               omap_mux_init_gpio(beagle_config.mmc1_gpio_wp, OMAP_PIN_INPUT);
+       mmc[0].gpio_wp = beagle_config.mmc1_gpio_wp;
        /* gpio + 0 is "mmc0_cd" (input/IRQ) */
        mmc[0].gpio_cd = gpio + 0;
        omap2_hsmmc_init(mmc);
@@ -263,9 +284,8 @@ static int beagle_twl_gpio_setup(struct device *dev,
         * high / others active low)
         * DVI reset GPIO is different between beagle revisions
         */
-       if (omap3_beagle_get_rev() == OMAP3BEAGLE_BOARD_XM) {
-               usb_pwr_level = GPIOF_OUT_INIT_HIGH;
-               beagle_dvi_device.reset_gpio = 129;
+       /* Valid for all -xM revisions */
+       if (cpu_is_omap3630()) {
                /*
                 * gpio + 1 on Xm controls the TFP410's enable line (active low)
                 * gpio + 2 control varies depending on the board rev as below:
@@ -283,8 +303,6 @@ static int beagle_twl_gpio_setup(struct device *dev,
                        pr_err("%s: unable to configure DVI_LDO_EN\n",
                                __func__);
        } else {
-               usb_pwr_level = GPIOF_OUT_INIT_LOW;
-               beagle_dvi_device.reset_gpio = 170;
                /*
                 * REVISIT: need ehci-omap hooks for external VBUS
                 * power switch and overcurrent detect
@@ -292,8 +310,10 @@ static int beagle_twl_gpio_setup(struct device *dev,
                if (gpio_request_one(gpio + 1, GPIOF_IN, "EHCI_nOC"))
                        pr_err("%s: unable to configure EHCI_nOC\n", __func__);
        }
+       beagle_dvi_device.reset_gpio = beagle_config.reset_gpio;
 
-       gpio_request_one(gpio + TWL4030_GPIO_MAX, usb_pwr_level, "nEN_USB_PWR");
+       gpio_request_one(gpio + TWL4030_GPIO_MAX, beagle_config.usb_pwr_level,
+                       "nEN_USB_PWR");
 
        /* TWL4030_GPIO_MAX + 1 == ledB, PMU_STAT (out, active low LED) */
        gpio_leds[2].gpio = gpio + TWL4030_GPIO_MAX + 1;
@@ -404,7 +424,8 @@ static struct platform_device leds_gpio = {
 static struct gpio_keys_button gpio_buttons[] = {
        {
                .code                   = BTN_EXTRA,
-               .gpio                   = 7,
+               /* Dynamically assigned depending on board */
+               .gpio                   = -EINVAL,
                .desc                   = "user",
                .wakeup                 = 1,
        },
@@ -468,8 +489,8 @@ static void __init beagle_opp_init(void)
                return;
        }
 
-       /* Custom OPP enabled for XM */
-       if (omap3_beagle_get_rev() == OMAP3BEAGLE_BOARD_XM) {
+       /* Custom OPP enabled for all xM versions */
+       if (cpu_is_omap3630()) {
                struct omap_hwmod *mh = omap_hwmod_lookup("mpu");
                struct omap_hwmod *dh = omap_hwmod_lookup("iva");
                struct device *dev;
@@ -509,6 +530,9 @@ static void __init omap3_beagle_init(void)
        omap3_mux_init(board_mux, OMAP_PACKAGE_CBB);
        omap3_beagle_init_rev();
        omap3_beagle_i2c_init();
+
+       gpio_buttons[0].gpio = beagle_config.usr_button_gpio;
+
        platform_add_devices(omap3_beagle_devices,
                        ARRAY_SIZE(omap3_beagle_devices));
        omap_display_init(&beagle_dss_data);
index f1f18d03d24c082bebc78b33c683bdc67657b072..f949a9954d761a7e291d5dee6284aabcd74049f8 100644 (file)
@@ -519,7 +519,6 @@ static void __init overo_init(void)
        usb_musb_init(NULL);
        usbhs_init(&usbhs_bdata);
        overo_spi_init();
-       overo_ads7846_init();
        overo_init_smsc911x();
        overo_display_init();
        overo_init_led();
index 6140290721a0046a8fe2ca4d6386bac744c8d5ca..8946d7232f3cb8bc90d445d2481f4f071d2edb52 100644 (file)
@@ -39,6 +39,7 @@
 #include <sound/tpa6130a2-plat.h>
 #include <media/radio-si4713.h>
 #include <media/si4713.h>
+#include <linux/leds-lp5523.h>
 
 #include <../drivers/staging/iio/light/tsl2563.h>
 
@@ -53,6 +54,7 @@
 #define RX51_WL1251_IRQ_GPIO           42
 #define RX51_FMTX_RESET_GPIO           163
 #define RX51_FMTX_IRQ                  53
+#define RX51_LP5523_CHIP_EN_GPIO       41
 
 #define RX51_USB_TRANSCEIVER_RST_GPIO  67
 
@@ -71,6 +73,64 @@ static struct tsl2563_platform_data rx51_tsl2563_platform_data = {
 };
 #endif
 
+#if defined(CONFIG_LEDS_LP5523) || defined(CONFIG_LEDS_LP5523_MODULE)
+static struct lp5523_led_config rx51_lp5523_led_config[] = {
+       {
+               .chan_nr        = 0,
+               .led_current    = 50,
+       }, {
+               .chan_nr        = 1,
+               .led_current    = 50,
+       }, {
+               .chan_nr        = 2,
+               .led_current    = 50,
+       }, {
+               .chan_nr        = 3,
+               .led_current    = 50,
+       }, {
+               .chan_nr        = 4,
+               .led_current    = 50,
+       }, {
+               .chan_nr        = 5,
+               .led_current    = 50,
+       }, {
+               .chan_nr        = 6,
+               .led_current    = 50,
+       }, {
+               .chan_nr        = 7,
+               .led_current    = 50,
+       }, {
+               .chan_nr        = 8,
+               .led_current    = 50,
+       }
+};
+
+static int rx51_lp5523_setup(void)
+{
+       return gpio_request_one(RX51_LP5523_CHIP_EN_GPIO, GPIOF_DIR_OUT,
+                       "lp5523_enable");
+}
+
+static void rx51_lp5523_release(void)
+{
+       gpio_free(RX51_LP5523_CHIP_EN_GPIO);
+}
+
+static void rx51_lp5523_enable(bool state)
+{
+       gpio_set_value(RX51_LP5523_CHIP_EN_GPIO, !!state);
+}
+
+static struct lp5523_platform_data rx51_lp5523_platform_data = {
+       .led_config             = rx51_lp5523_led_config,
+       .num_channels           = ARRAY_SIZE(rx51_lp5523_led_config),
+       .clock_mode             = LP5523_CLOCK_AUTO,
+       .setup_resources        = rx51_lp5523_setup,
+       .release_resources      = rx51_lp5523_release,
+       .enable                 = rx51_lp5523_enable,
+};
+#endif
+
 static struct omap2_mcspi_device_config wl1251_mcspi_config = {
        .turbo_mode     = 0,
        .single_channel = 1,
@@ -495,6 +555,32 @@ static struct regulator_init_data rx51_vmmc2 = {
        .consumer_supplies      = rx51_vmmc2_supplies,
 };
 
+static struct regulator_init_data rx51_vpll1 = {
+       .constraints = {
+               .name                   = "VPLL",
+               .min_uV                 = 1800000,
+               .max_uV                 = 1800000,
+               .apply_uV               = true,
+               .always_on              = true,
+               .valid_modes_mask       = REGULATOR_MODE_NORMAL
+                                       | REGULATOR_MODE_STANDBY,
+               .valid_ops_mask         = REGULATOR_CHANGE_MODE,
+       },
+};
+
+static struct regulator_init_data rx51_vpll2 = {
+       .constraints = {
+               .name                   = "VSDI_CSI",
+               .min_uV                 = 1800000,
+               .max_uV                 = 1800000,
+               .apply_uV               = true,
+               .always_on              = true,
+               .valid_modes_mask       = REGULATOR_MODE_NORMAL
+                                       | REGULATOR_MODE_STANDBY,
+               .valid_ops_mask         = REGULATOR_CHANGE_MODE,
+       },
+};
+
 static struct regulator_init_data rx51_vsim = {
        .constraints = {
                .name                   = "VMMC2_IO_18",
@@ -524,6 +610,43 @@ static struct regulator_init_data rx51_vio = {
        .consumer_supplies      = rx51_vio_supplies,
 };
 
+static struct regulator_init_data rx51_vintana1 = {
+       .constraints = {
+               .name                   = "VINTANA1",
+               .min_uV                 = 1500000,
+               .max_uV                 = 1500000,
+               .always_on              = true,
+               .valid_modes_mask       = REGULATOR_MODE_NORMAL
+                                       | REGULATOR_MODE_STANDBY,
+               .valid_ops_mask         = REGULATOR_CHANGE_MODE,
+       },
+};
+
+static struct regulator_init_data rx51_vintana2 = {
+       .constraints = {
+               .name                   = "VINTANA2",
+               .min_uV                 = 2750000,
+               .max_uV                 = 2750000,
+               .apply_uV               = true,
+               .always_on              = true,
+               .valid_modes_mask       = REGULATOR_MODE_NORMAL
+                                       | REGULATOR_MODE_STANDBY,
+               .valid_ops_mask         = REGULATOR_CHANGE_MODE,
+       },
+};
+
+static struct regulator_init_data rx51_vintdig = {
+       .constraints = {
+               .name                   = "VINTDIG",
+               .min_uV                 = 1500000,
+               .max_uV                 = 1500000,
+               .always_on              = true,
+               .valid_modes_mask       = REGULATOR_MODE_NORMAL
+                                       | REGULATOR_MODE_STANDBY,
+               .valid_ops_mask         = REGULATOR_CHANGE_MODE,
+       },
+};
+
 static struct si4713_platform_data rx51_si4713_i2c_data __initdata_or_module = {
        .gpio_reset     = RX51_FMTX_RESET_GPIO,
 };
@@ -761,7 +884,12 @@ static struct twl4030_platform_data rx51_twldata __initdata = {
        .vaux2                  = &rx51_vaux2,
        .vaux4                  = &rx51_vaux4,
        .vmmc1                  = &rx51_vmmc1,
+       .vpll1                  = &rx51_vpll1,
+       .vpll2                  = &rx51_vpll2,
        .vsim                   = &rx51_vsim,
+       .vintana1               = &rx51_vintana1,
+       .vintana2               = &rx51_vintana2,
+       .vintdig                = &rx51_vintdig,
        .vio                    = &rx51_vio,
 };
 
@@ -799,6 +927,12 @@ static struct i2c_board_info __initdata rx51_peripherals_i2c_board_info_2[] = {
                I2C_BOARD_INFO("tsl2563", 0x29),
                .platform_data = &rx51_tsl2563_platform_data,
        },
+#endif
+#if defined(CONFIG_LEDS_LP5523) || defined(CONFIG_LEDS_LP5523_MODULE)
+       {
+               I2C_BOARD_INFO("lp5523", 0x32),
+               .platform_data  = &rx51_lp5523_platform_data,
+       },
 #endif
        {
                I2C_BOARD_INFO("tpa6130a2", 0x60),
@@ -950,6 +1084,7 @@ error:
 void __init rx51_peripherals_init(void)
 {
        rx51_i2c_init();
+       regulator_has_full_constraints();
        gpmc_onenand_init(board_onenand_data);
        board_smc91x_init();
        rx51_add_gpio_keys();
index 6402e781c458c7ebbdd48017acc9527e038f6ef4..369c2eb7715b30de41323fb4dceb04c1b957c2f0 100644 (file)
@@ -23,6 +23,7 @@
 #define ZOOM_SMSC911X_GPIO     158
 #define ZOOM_QUADUART_CS       3
 #define ZOOM_QUADUART_GPIO     102
+#define ZOOM_QUADUART_RST_GPIO 152
 #define QUART_CLK              1843200
 #define DEBUG_BASE             0x08000000
 #define ZOOM_ETHR_START        DEBUG_BASE
@@ -67,6 +68,14 @@ static inline void __init zoom_init_quaduart(void)
        unsigned long cs_mem_base;
        int quart_gpio = 0;
 
+       if (gpio_request_one(ZOOM_QUADUART_RST_GPIO,
+                               GPIOF_OUT_INIT_LOW,
+                               "TL16CP754C GPIO") < 0) {
+               pr_err("Failed to request GPIO%d for TL16CP754C\n",
+                       ZOOM_QUADUART_RST_GPIO);
+               return;
+       }
+
        quart_cs = ZOOM_QUADUART_CS;
 
        if (gpmc_cs_request(quart_cs, SZ_1M, &cs_mem_base) < 0) {
index 180299e4a838c05a2e2ce30afdfdbd49f6cd1524..bf9c36c7dffd55d073702597dd8e95f31544207d 100644 (file)
@@ -453,6 +453,7 @@ int __init omap2_clk_switch_mpurate_at_boot(const char *mpurate_ck_name)
        if (IS_ERR_VALUE(r)) {
                WARN(1, "clock: %s: unable to set MPU rate to %d: %d\n",
                     mpurate_ck->name, mpurate, r);
+               clk_put(mpurate_ck);
                return -EINVAL;
        }
 
index 5b8ca680ed93d2e9f919548cca05cb656f4ee787..1077ad663f936e5174f0f3c7a137bee3f57a2972 100644 (file)
@@ -230,7 +230,7 @@ struct omap_device_pm_latency omap_keyboard_latency[] = {
 };
 
 int __init omap4_keyboard_init(struct omap4_keypad_platform_data
-                                               *sdp4430_keypad_data)
+                       *sdp4430_keypad_data, struct omap_board_data *bdata)
 {
        struct omap_device *od;
        struct omap_hwmod *oh;
@@ -257,6 +257,7 @@ int __init omap4_keyboard_init(struct omap4_keypad_platform_data
                                                name, oh->name);
                return PTR_ERR(od);
        }
+       oh->mux = omap_hwmod_mux_init(bdata->pads, bdata->pads_cnt);
 
        return 0;
 }
index 66868c5d5a29b8207da355ef7163e941296f615c..a9b45c76e1d36a59dc2ad288cbbf2f87cdfe4a1b 100644 (file)
@@ -13,6 +13,7 @@
 #include <linux/slab.h>
 #include <linux/string.h>
 #include <linux/delay.h>
+#include <linux/gpio.h>
 #include <mach/hardware.h>
 #include <plat/mmc.h>
 #include <plat/omap-pm.h>
@@ -213,12 +214,10 @@ static int nop_mmc_set_power(struct device *dev, int slot, int power_on,
 static inline void omap_hsmmc_mux(struct omap_mmc_platform_data *mmc_controller,
                        int controller_nr)
 {
-       if ((mmc_controller->slots[0].switch_pin > 0) && \
-               (mmc_controller->slots[0].switch_pin < OMAP_MAX_GPIO_LINES))
+       if (gpio_is_valid(mmc_controller->slots[0].switch_pin))
                omap_mux_init_gpio(mmc_controller->slots[0].switch_pin,
                                        OMAP_PIN_INPUT_PULLUP);
-       if ((mmc_controller->slots[0].gpio_wp > 0) && \
-               (mmc_controller->slots[0].gpio_wp < OMAP_MAX_GPIO_LINES))
+       if (gpio_is_valid(mmc_controller->slots[0].gpio_wp))
                omap_mux_init_gpio(mmc_controller->slots[0].gpio_wp,
                                        OMAP_PIN_INPUT_PULLUP);
        if (cpu_is_omap34xx()) {
index adb083e41acd13bc05c6b7cc54de8b6130dee370..f286012783c6c99a9e1cbed453aecdeed43b5e3c 100644 (file)
@@ -225,8 +225,8 @@ static u32 omap2_get_pte_attr(struct iotlb_entry *e)
        attr = e->mixed << 5;
        attr |= e->endian;
        attr |= e->elsz >> 3;
-       attr <<= ((e->pgsz & MMU_CAM_PGSZ_4K) ? 0 : 6);
-
+       attr <<= (((e->pgsz == MMU_CAM_PGSZ_4K) ||
+                       (e->pgsz == MMU_CAM_PGSZ_64K)) ? 0 : 6);
        return attr;
 }
 
index 3fc5dc7233da29ca0eb0c603527da9b46fc13f46..e61feadcda4ee6438b64eb5418871d1733dfebad 100644 (file)
@@ -67,7 +67,7 @@ static struct iommu_device omap4_devices[] = {
                .pdata = {
                        .name = "ducati",
                        .nr_tlb_entries = 32,
-                       .clk_name = "ducati_ick",
+                       .clk_name = "ipu_fck",
                        .da_start = 0x0,
                        .da_end = 0xFFFFF000,
                },
index 8dfb8186b2c21515245f8229a8886a3f04759158..75a847dd776a3d24ccca85c29aab32b90bbbe3e7 100644 (file)
@@ -209,8 +209,8 @@ static void omap_dm_timer_reset(struct omap_dm_timer *timer)
        }
        omap_dm_timer_set_source(timer, OMAP_TIMER_SRC_32_KHZ);
 
-       /* Enable autoidle on OMAP2 / OMAP3 */
-       if (cpu_is_omap24xx() || cpu_is_omap34xx())
+       /* Enable autoidle on OMAP2+ */
+       if (cpu_class_is_omap2())
                autoidle = 1;
 
        /*
index 2b1d9bc1eebb89b8f65571cb2e21d66e3fdfe8cf..9fe6c8783236e755c5e48194c3185e8a2b357a06 100644 (file)
@@ -10,5 +10,6 @@ struct omap4_keypad_platform_data {
        u8 cols;
 };
 
-extern int omap4_keyboard_init(struct omap4_keypad_platform_data *);
+extern int omap4_keyboard_init(struct omap4_keypad_platform_data *,
+                               struct omap_board_data *);
 #endif
index ac4b60d9aa299c86208e66cdbe00df1432b6a650..a067484cc4a245c3dd28a3af46ec0ca3426f46d0 100644 (file)
@@ -148,6 +148,7 @@ static inline void __arch_decomp_setup(unsigned long arch_id)
                /* omap3 based boards using UART3 */
                DEBUG_LL_OMAP3(3, cm_t35);
                DEBUG_LL_OMAP3(3, cm_t3517);
+               DEBUG_LL_OMAP3(3, cm_t3730);
                DEBUG_LL_OMAP3(3, craneboard);
                DEBUG_LL_OMAP3(3, devkit8000);
                DEBUG_LL_OMAP3(3, igep0020);
index 83a37c54342f414573d942c2c28f5bb9459b4ec7..c60737c49a32fae14b445ce938c59975998d7ae4 100644 (file)
@@ -72,7 +72,7 @@ static size_t sgtable_len(const struct sg_table *sgt)
        for_each_sg(sgt->sgl, sg, sgt->nents, i) {
                size_t bytes;
 
-               bytes = sg_dma_len(sg);
+               bytes = sg->length;
 
                if (!iopgsz_ok(bytes)) {
                        pr_err("%s: sg[%d] not iommu pagesize(%x)\n",
@@ -198,7 +198,7 @@ static void *vmap_sg(const struct sg_table *sgt)
                int err;
 
                pa = sg_phys(sg);
-               bytes = sg_dma_len(sg);
+               bytes = sg->length;
 
                BUG_ON(bytes != PAGE_SIZE);
 
@@ -476,7 +476,7 @@ static int map_iovm_area(struct iommu *obj, struct iovm_struct *new,
                struct iotlb_entry e;
 
                pa = sg_phys(sg);
-               bytes = sg_dma_len(sg);
+               bytes = sg->length;
 
                flags &= ~IOVMF_PGSZ_MASK;
                pgsz = bytes_to_iopgsz(bytes);