]> Pileus Git - ~andy/linux/blobdiff - arch/arm/mach-shmobile/board-kzm9g.c
Merge tag 'ecryptfs-3.10-rc5-msync' of git://git.kernel.org/pub/scm/linux/kernel...
[~andy/linux] / arch / arm / mach-shmobile / board-kzm9g.c
index d34d12ae496b34144c1a2398071f06df31b41313..e6b775a10aad8fc0f51951a551c1cd5da13fad55 100644 (file)
@@ -30,6 +30,8 @@
 #include <linux/mmc/sh_mmcif.h>
 #include <linux/mmc/sh_mobile_sdhi.h>
 #include <linux/mfd/tmio.h>
+#include <linux/pinctrl/machine.h>
+#include <linux/pinctrl/pinconf-generic.h>
 #include <linux/platform_device.h>
 #include <linux/regulator/fixed.h>
 #include <linux/regulator/machine.h>
@@ -61,8 +63,8 @@
 
 /* Dummy supplies, where voltage doesn't matter */
 static struct regulator_consumer_supply dummy_supplies[] = {
-       REGULATOR_SUPPLY("vddvario", "smsc911x"),
-       REGULATOR_SUPPLY("vdd33a", "smsc911x"),
+       REGULATOR_SUPPLY("vddvario", "smsc911x.0"),
+       REGULATOR_SUPPLY("vdd33a", "smsc911x.0"),
 };
 
 /*
@@ -155,12 +157,14 @@ static int usbhs_get_vbus(struct platform_device *pdev)
        return !((1 << 7) & __raw_readw(priv->cr2));
 }
 
-static void usbhs_phy_reset(struct platform_device *pdev)
+static int usbhs_phy_reset(struct platform_device *pdev)
 {
        struct usbhs_private *priv = usbhs_get_priv(pdev);
 
        /* init phy */
        __raw_writew(0x8a0a, priv->cr2);
+
+       return 0;
 }
 
 static int usbhs_get_id(struct platform_device *pdev)
@@ -202,7 +206,7 @@ static int usbhs_hardware_init(struct platform_device *pdev)
        return 0;
 }
 
-static void usbhs_hardware_exit(struct platform_device *pdev)
+static int usbhs_hardware_exit(struct platform_device *pdev)
 {
        struct usbhs_private *priv = usbhs_get_priv(pdev);
 
@@ -210,6 +214,8 @@ static void usbhs_hardware_exit(struct platform_device *pdev)
        __raw_writew(USB_PHY_MODE | USB_PHY_INT_CLR, priv->phy);
 
        free_irq(IRQ15, pdev);
+
+       return 0;
 }
 
 static u32 usbhs_pipe_cfg[] = {
@@ -373,13 +379,64 @@ static struct platform_device mmc_device = {
        .resource       = sh_mmcif_resources,
 };
 
-/* Fixed 2.8V regulators to be used by SDHI0 and SDHI2 */
-static struct regulator_consumer_supply fixed2v8_power_consumers[] =
+/* Fixed 3.3V regulators to be used by SDHI0 */
+static struct regulator_consumer_supply vcc_sdhi0_consumers[] =
 {
        REGULATOR_SUPPLY("vmmc", "sh_mobile_sdhi.0"),
-       REGULATOR_SUPPLY("vqmmc", "sh_mobile_sdhi.0"),
+};
+
+static struct regulator_init_data vcc_sdhi0_init_data = {
+       .constraints = {
+               .valid_ops_mask = REGULATOR_CHANGE_STATUS,
+       },
+       .num_consumer_supplies  = ARRAY_SIZE(vcc_sdhi0_consumers),
+       .consumer_supplies      = vcc_sdhi0_consumers,
+};
+
+static struct fixed_voltage_config vcc_sdhi0_info = {
+       .supply_name = "SDHI0 Vcc",
+       .microvolts = 3300000,
+       .gpio = 15,
+       .enable_high = 1,
+       .init_data = &vcc_sdhi0_init_data,
+};
+
+static struct platform_device vcc_sdhi0 = {
+       .name = "reg-fixed-voltage",
+       .id   = 0,
+       .dev  = {
+               .platform_data = &vcc_sdhi0_info,
+       },
+};
+
+/* Fixed 3.3V regulators to be used by SDHI2 */
+static struct regulator_consumer_supply vcc_sdhi2_consumers[] =
+{
        REGULATOR_SUPPLY("vmmc", "sh_mobile_sdhi.2"),
-       REGULATOR_SUPPLY("vqmmc", "sh_mobile_sdhi.2"),
+};
+
+static struct regulator_init_data vcc_sdhi2_init_data = {
+       .constraints = {
+               .valid_ops_mask = REGULATOR_CHANGE_STATUS,
+       },
+       .num_consumer_supplies  = ARRAY_SIZE(vcc_sdhi2_consumers),
+       .consumer_supplies      = vcc_sdhi2_consumers,
+};
+
+static struct fixed_voltage_config vcc_sdhi2_info = {
+       .supply_name = "SDHI2 Vcc",
+       .microvolts = 3300000,
+       .gpio = 14,
+       .enable_high = 1,
+       .init_data = &vcc_sdhi2_init_data,
+};
+
+static struct platform_device vcc_sdhi2 = {
+       .name = "reg-fixed-voltage",
+       .id   = 1,
+       .dev  = {
+               .platform_data = &vcc_sdhi2_info,
+       },
 };
 
 /* SDHI */
@@ -387,8 +444,8 @@ static struct sh_mobile_sdhi_info sdhi0_info = {
        .dma_slave_tx   = SHDMA_SLAVE_SDHI0_TX,
        .dma_slave_rx   = SHDMA_SLAVE_SDHI0_RX,
        .tmio_flags     = TMIO_MMC_HAS_IDLE_WAIT,
-       .tmio_caps      = MMC_CAP_SD_HIGHSPEED,
-       .tmio_ocr_mask  = MMC_VDD_27_28 | MMC_VDD_28_29,
+       .tmio_caps      = MMC_CAP_SD_HIGHSPEED | MMC_CAP_SDIO_IRQ |
+                         MMC_CAP_POWER_OFF_CARD,
 };
 
 static struct resource sdhi0_resources[] = {
@@ -431,9 +488,8 @@ static struct sh_mobile_sdhi_info sdhi2_info = {
        .tmio_flags     = TMIO_MMC_HAS_IDLE_WAIT |
                          TMIO_MMC_USE_GPIO_CD |
                          TMIO_MMC_WRPROTECT_DISABLE,
-       .tmio_caps      = MMC_CAP_SD_HIGHSPEED,
-       .tmio_ocr_mask  = MMC_VDD_27_28 | MMC_VDD_28_29,
-       .cd_gpio        = GPIO_PORT13,
+       .tmio_caps      = MMC_CAP_SD_HIGHSPEED | MMC_CAP_POWER_OFF_CARD,
+       .cd_gpio        = 13,
 };
 
 static struct resource sdhi2_resources[] = {
@@ -592,6 +648,8 @@ static struct platform_device *kzm_devices[] __initdata = {
        &usbhs_device,
        &lcdc_device,
        &mmc_device,
+       &vcc_sdhi0,
+       &vcc_sdhi2,
        &sdhi0_device,
        &sdhi2_device,
        &gpio_keys_device,
@@ -599,6 +657,64 @@ static struct platform_device *kzm_devices[] __initdata = {
        &fsi_ak4648_device,
 };
 
+static unsigned long pin_pullup_conf[] = {
+       PIN_CONF_PACKED(PIN_CONFIG_BIAS_PULL_UP, 0),
+};
+
+static const struct pinctrl_map kzm_pinctrl_map[] = {
+       /* FSIA (AK4648) */
+       PIN_MAP_MUX_GROUP_DEFAULT("sh_fsi2.0", "pfc-sh73a0",
+                                 "fsia_mclk_in", "fsia"),
+       PIN_MAP_MUX_GROUP_DEFAULT("sh_fsi2.0", "pfc-sh73a0",
+                                 "fsia_sclk_in", "fsia"),
+       PIN_MAP_MUX_GROUP_DEFAULT("sh_fsi2.0", "pfc-sh73a0",
+                                 "fsia_data_in", "fsia"),
+       PIN_MAP_MUX_GROUP_DEFAULT("sh_fsi2.0", "pfc-sh73a0",
+                                 "fsia_data_out", "fsia"),
+       /* I2C3 */
+       PIN_MAP_MUX_GROUP_DEFAULT("i2c-sh_mobile.3", "pfc-sh73a0",
+                                 "i2c3_1", "i2c3"),
+       /* LCD */
+       PIN_MAP_MUX_GROUP_DEFAULT("sh_mobile_lcdc_fb.0", "pfc-sh73a0",
+                                 "lcd_data24", "lcd"),
+       PIN_MAP_MUX_GROUP_DEFAULT("sh_mobile_lcdc_fb.0", "pfc-sh73a0",
+                                 "lcd_sync", "lcd"),
+       /* MMCIF */
+       PIN_MAP_MUX_GROUP_DEFAULT("sh_mmcif.0", "pfc-sh73a0",
+                                 "mmc0_data8_0", "mmc0"),
+       PIN_MAP_MUX_GROUP_DEFAULT("sh_mmcif.0", "pfc-sh73a0",
+                                 "mmc0_ctrl_0", "mmc0"),
+       PIN_MAP_CONFIGS_PIN_DEFAULT("sh_mmcif.0", "pfc-sh73a0",
+                                   "PORT279", pin_pullup_conf),
+       PIN_MAP_CONFIGS_GROUP_DEFAULT("sh_mmcif.0", "pfc-sh73a0",
+                                     "mmc0_data8_0", pin_pullup_conf),
+       /* SCIFA4 */
+       PIN_MAP_MUX_GROUP_DEFAULT("sh-sci.4", "pfc-sh73a0",
+                                 "scifa4_data", "scifa4"),
+       PIN_MAP_MUX_GROUP_DEFAULT("sh-sci.4", "pfc-sh73a0",
+                                 "scifa4_ctrl", "scifa4"),
+       /* SDHI0 */
+       PIN_MAP_MUX_GROUP_DEFAULT("sh_mobile_sdhi.0", "pfc-sh73a0",
+                                 "sdhi0_data4", "sdhi0"),
+       PIN_MAP_MUX_GROUP_DEFAULT("sh_mobile_sdhi.0", "pfc-sh73a0",
+                                 "sdhi0_ctrl", "sdhi0"),
+       PIN_MAP_MUX_GROUP_DEFAULT("sh_mobile_sdhi.0", "pfc-sh73a0",
+                                 "sdhi0_cd", "sdhi0"),
+       PIN_MAP_MUX_GROUP_DEFAULT("sh_mobile_sdhi.0", "pfc-sh73a0",
+                                 "sdhi0_wp", "sdhi0"),
+       /* SDHI2 */
+       PIN_MAP_MUX_GROUP_DEFAULT("sh_mobile_sdhi.2", "pfc-sh73a0",
+                                 "sdhi2_data4", "sdhi2"),
+       PIN_MAP_MUX_GROUP_DEFAULT("sh_mobile_sdhi.2", "pfc-sh73a0",
+                                 "sdhi2_ctrl", "sdhi2"),
+       /* SMSC */
+       PIN_MAP_MUX_GROUP_DEFAULT("smsc911x.0", "pfc-sh73a0",
+                                 "bsc_cs4", "bsc"),
+       /* USB */
+       PIN_MAP_MUX_GROUP_DEFAULT("renesas_usbhs", "pfc-sh73a0",
+                                 "usb_vbus", "usb"),
+};
+
 /*
  * FIXME
  *
@@ -654,106 +770,26 @@ device_initcall(as3711_enable_lcdc_backlight);
 
 static void __init kzm_init(void)
 {
-       regulator_register_always_on(0, "fixed-1.8V", fixed1v8_power_consumers,
+       regulator_register_always_on(2, "fixed-1.8V", fixed1v8_power_consumers,
                                     ARRAY_SIZE(fixed1v8_power_consumers), 1800000);
-       regulator_register_always_on(1, "fixed-2.8V", fixed2v8_power_consumers,
-                                    ARRAY_SIZE(fixed2v8_power_consumers), 2800000);
-       regulator_register_fixed(2, dummy_supplies, ARRAY_SIZE(dummy_supplies));
+       regulator_register_fixed(3, dummy_supplies, ARRAY_SIZE(dummy_supplies));
 
-       sh73a0_pinmux_init();
-
-       /* enable SCIFA4 */
-       gpio_request(GPIO_FN_SCIFA4_TXD, NULL);
-       gpio_request(GPIO_FN_SCIFA4_RXD, NULL);
-       gpio_request(GPIO_FN_SCIFA4_RTS_, NULL);
-       gpio_request(GPIO_FN_SCIFA4_CTS_, NULL);
+       pinctrl_register_mappings(kzm_pinctrl_map, ARRAY_SIZE(kzm_pinctrl_map));
 
-       /* CS4 for SMSC/USB */
-       gpio_request(GPIO_FN_CS4_, NULL); /* CS4 */
+       sh73a0_pinmux_init();
 
        /* SMSC */
-       gpio_request_one(GPIO_PORT224, GPIOF_IN, NULL); /* IRQ3 */
+       gpio_request_one(224, GPIOF_IN, NULL); /* IRQ3 */
 
        /* LCDC */
-       gpio_request(GPIO_FN_LCDD23,    NULL);
-       gpio_request(GPIO_FN_LCDD22,    NULL);
-       gpio_request(GPIO_FN_LCDD21,    NULL);
-       gpio_request(GPIO_FN_LCDD20,    NULL);
-       gpio_request(GPIO_FN_LCDD19,    NULL);
-       gpio_request(GPIO_FN_LCDD18,    NULL);
-       gpio_request(GPIO_FN_LCDD17,    NULL);
-       gpio_request(GPIO_FN_LCDD16,    NULL);
-       gpio_request(GPIO_FN_LCDD15,    NULL);
-       gpio_request(GPIO_FN_LCDD14,    NULL);
-       gpio_request(GPIO_FN_LCDD13,    NULL);
-       gpio_request(GPIO_FN_LCDD12,    NULL);
-       gpio_request(GPIO_FN_LCDD11,    NULL);
-       gpio_request(GPIO_FN_LCDD10,    NULL);
-       gpio_request(GPIO_FN_LCDD9,     NULL);
-       gpio_request(GPIO_FN_LCDD8,     NULL);
-       gpio_request(GPIO_FN_LCDD7,     NULL);
-       gpio_request(GPIO_FN_LCDD6,     NULL);
-       gpio_request(GPIO_FN_LCDD5,     NULL);
-       gpio_request(GPIO_FN_LCDD4,     NULL);
-       gpio_request(GPIO_FN_LCDD3,     NULL);
-       gpio_request(GPIO_FN_LCDD2,     NULL);
-       gpio_request(GPIO_FN_LCDD1,     NULL);
-       gpio_request(GPIO_FN_LCDD0,     NULL);
-       gpio_request(GPIO_FN_LCDDISP,   NULL);
-       gpio_request(GPIO_FN_LCDDCK,    NULL);
-
-       gpio_request_one(GPIO_PORT222, GPIOF_OUT_INIT_HIGH, NULL); /* LCDCDON */
-       gpio_request_one(GPIO_PORT226, GPIOF_OUT_INIT_HIGH, NULL); /* SC */
+       gpio_request_one(222, GPIOF_OUT_INIT_HIGH, NULL); /* LCDCDON */
+       gpio_request_one(226, GPIOF_OUT_INIT_HIGH, NULL); /* SC */
 
        /* Touchscreen */
-       gpio_request_one(GPIO_PORT223, GPIOF_IN, NULL); /* IRQ8 */
-
-       /* enable MMCIF */
-       gpio_request(GPIO_FN_MMCCLK0,           NULL);
-       gpio_request(GPIO_FN_MMCCMD0_PU,        NULL);
-       gpio_request(GPIO_FN_MMCD0_0_PU,        NULL);
-       gpio_request(GPIO_FN_MMCD0_1_PU,        NULL);
-       gpio_request(GPIO_FN_MMCD0_2_PU,        NULL);
-       gpio_request(GPIO_FN_MMCD0_3_PU,        NULL);
-       gpio_request(GPIO_FN_MMCD0_4_PU,        NULL);
-       gpio_request(GPIO_FN_MMCD0_5_PU,        NULL);
-       gpio_request(GPIO_FN_MMCD0_6_PU,        NULL);
-       gpio_request(GPIO_FN_MMCD0_7_PU,        NULL);
+       gpio_request_one(223, GPIOF_IN, NULL); /* IRQ8 */
 
        /* enable SD */
-       gpio_request(GPIO_FN_SDHIWP0,           NULL);
-       gpio_request(GPIO_FN_SDHICD0,           NULL);
-       gpio_request(GPIO_FN_SDHICMD0,          NULL);
-       gpio_request(GPIO_FN_SDHICLK0,          NULL);
-       gpio_request(GPIO_FN_SDHID0_3,          NULL);
-       gpio_request(GPIO_FN_SDHID0_2,          NULL);
-       gpio_request(GPIO_FN_SDHID0_1,          NULL);
-       gpio_request(GPIO_FN_SDHID0_0,          NULL);
        gpio_request(GPIO_FN_SDHI0_VCCQ_MC0_ON, NULL);
-       gpio_request_one(GPIO_PORT15, GPIOF_OUT_INIT_HIGH, NULL); /* power */
-
-       /* enable Micro SD */
-       gpio_request(GPIO_FN_SDHID2_0,          NULL);
-       gpio_request(GPIO_FN_SDHID2_1,          NULL);
-       gpio_request(GPIO_FN_SDHID2_2,          NULL);
-       gpio_request(GPIO_FN_SDHID2_3,          NULL);
-       gpio_request(GPIO_FN_SDHICMD2,          NULL);
-       gpio_request(GPIO_FN_SDHICLK2,          NULL);
-       gpio_request_one(GPIO_PORT14, GPIOF_OUT_INIT_HIGH, NULL); /* power */
-
-       /* I2C 3 */
-       gpio_request(GPIO_FN_PORT27_I2C_SCL3, NULL);
-       gpio_request(GPIO_FN_PORT28_I2C_SDA3, NULL);
-
-       /* enable FSI2 port A (ak4648) */
-       gpio_request(GPIO_FN_FSIACK,    NULL);
-       gpio_request(GPIO_FN_FSIAILR,   NULL);
-       gpio_request(GPIO_FN_FSIAIBT,   NULL);
-       gpio_request(GPIO_FN_FSIAISLD,  NULL);
-       gpio_request(GPIO_FN_FSIAOSLD,  NULL);
-
-       /* enable USB */
-       gpio_request(GPIO_FN_VBUS_0,    NULL);
 
 #ifdef CONFIG_CACHE_L2X0
        /* Early BRESP enable, Shared attribute override enable, 64K*8way */