mmc: pxa: Use GPIO descriptor for power
authorLinus Walleij <linus.walleij@linaro.org>
Sun, 2 Dec 2018 08:43:27 +0000 (09:43 +0100)
committerUlf Hansson <ulf.hansson@linaro.org>
Mon, 17 Dec 2018 07:26:24 +0000 (08:26 +0100)
After converting the PXA driver to use GPIO descriptors for
card detect and write protect it is relatively simple to
convert it to also use a descriptor for getting the optional
power control GPIO.

The polarity inversion flag can also go away from the platform
data since this is indicated in the GPIO machine descriptor
table.

Cc: Daniel Mack <daniel@zonque.org>
Cc: Robert Jarzmik <robert.jarzmik@free.fr>
Cc: Bartosz Golaszewski <brgl@bgdev.pl>
Cc: Andrea Adami <andrea.adami@gmail.com>
Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
Acked-by: Robert Jarzmik <robert.jarzmik@free.fr>
Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org>
37 files changed:
arch/arm/mach-pxa/balloon3.c
arch/arm/mach-pxa/cm-x270.c
arch/arm/mach-pxa/cm-x300.c
arch/arm/mach-pxa/colibri-pxa270-income.c
arch/arm/mach-pxa/corgi.c
arch/arm/mach-pxa/csb726.c
arch/arm/mach-pxa/em-x270.c
arch/arm/mach-pxa/gumstix.c
arch/arm/mach-pxa/idp.c
arch/arm/mach-pxa/littleton.c
arch/arm/mach-pxa/lubbock.c
arch/arm/mach-pxa/magician.c
arch/arm/mach-pxa/mainstone.c
arch/arm/mach-pxa/mioa701.c
arch/arm/mach-pxa/mxm8x10.c
arch/arm/mach-pxa/palm27x.c
arch/arm/mach-pxa/palm27x.h
arch/arm/mach-pxa/palmld.c
arch/arm/mach-pxa/palmt5.c
arch/arm/mach-pxa/palmtc.c
arch/arm/mach-pxa/palmte2.c
arch/arm/mach-pxa/palmtreo.c
arch/arm/mach-pxa/palmtx.c
arch/arm/mach-pxa/palmz72.c
arch/arm/mach-pxa/pcm990-baseboard.c
arch/arm/mach-pxa/poodle.c
arch/arm/mach-pxa/raumfeld.c
arch/arm/mach-pxa/spitz.c
arch/arm/mach-pxa/stargate2.c
arch/arm/mach-pxa/tosa.c
arch/arm/mach-pxa/trizeps4.c
arch/arm/mach-pxa/vpac270.c
arch/arm/mach-pxa/z2.c
arch/arm/mach-pxa/zeus.c
arch/arm/mach-pxa/zylonite.c
drivers/mmc/host/pxamci.c
include/linux/platform_data/mmc-pxamci.h

index 612109c515dae2bb9a28ecbe3c2b10e6de93e439..4bcbd3d55b367108a372a4fcd95d6ff199473f1c 100644 (file)
@@ -290,7 +290,6 @@ static unsigned long balloon3_mmc_pin_config[] __initdata = {
 
 static struct pxamci_platform_data balloon3_mci_platform_data = {
        .ocr_mask               = MMC_VDD_32_33 | MMC_VDD_33_34,
-       .gpio_power             = -1,
        .detect_delay_ms        = 200,
 };
 
index 18a3d935897045446eae2b2119abfd78cfe81e2d..f7081a50dc67052ba27364847eaade6b919fa8c7 100644 (file)
@@ -289,8 +289,6 @@ static inline void cmx270_init_ohci(void) {}
 #if defined(CONFIG_MMC) || defined(CONFIG_MMC_MODULE)
 static struct pxamci_platform_data cmx270_mci_platform_data = {
        .ocr_mask               = MMC_VDD_32_33|MMC_VDD_33_34,
-       .gpio_power             = GPIO105_MMC_POWER,
-       .gpio_power_invert      = 1,
 };
 
 static struct gpiod_lookup_table cmx270_mci_gpio_table = {
@@ -298,6 +296,9 @@ static struct gpiod_lookup_table cmx270_mci_gpio_table = {
        .table = {
                /* Card detect on GPIO 83 */
                GPIO_LOOKUP("gpio-pxa", GPIO83_MMC_IRQ, "cd", GPIO_ACTIVE_LOW),
+               /* Power on GPIO 105 */
+               GPIO_LOOKUP("gpio-pxa", GPIO105_MMC_POWER,
+                           "power", GPIO_ACTIVE_LOW),
                { },
        },
 };
index da6680e5c30262249537ae284681d1e84bf7ba7e..109fab292f946070d30163a14a1bbcf21a1f25df 100644 (file)
@@ -459,7 +459,6 @@ static inline void cm_x300_init_nand(void) {}
 static struct pxamci_platform_data cm_x300_mci_platform_data = {
        .detect_delay_ms        = 200,
        .ocr_mask               = MMC_VDD_32_33|MMC_VDD_33_34,
-       .gpio_power             = -1,
 };
 
 static struct gpiod_lookup_table cm_x300_mci_gpio_table = {
@@ -491,7 +490,6 @@ static struct pxamci_platform_data cm_x300_mci2_platform_data = {
        .ocr_mask               = MMC_VDD_32_33|MMC_VDD_33_34,
        .init                   = cm_x300_mci2_init,
        .exit                   = cm_x300_mci2_exit,
-       .gpio_power             = -1,
 };
 
 static void __init cm_x300_init_mmc(void)
index 7ec71403a1f9c4fbd7d60c1eb1a6d03dcb40e6e8..d203dd30cdd0121e35606e6d0fe67a9e5df85916 100644 (file)
@@ -51,7 +51,6 @@
 #if defined(CONFIG_MMC_PXA) || defined(CONFIG_MMC_PXA_MODULE)
 static struct pxamci_platform_data income_mci_platform_data = {
        .ocr_mask               = MMC_VDD_32_33 | MMC_VDD_33_34,
-       .gpio_power             = -1,
        .detect_delay_ms        = 200,
 };
 
index d57a3738a200ff48062d9aa534e99d481d05324b..c9732cace5e3e236b1c6108d673250c1f33e100c 100644 (file)
@@ -494,7 +494,6 @@ static struct platform_device corgi_audio_device = {
 static struct pxamci_platform_data corgi_mci_platform_data = {
        .detect_delay_ms        = 250,
        .ocr_mask               = MMC_VDD_32_33|MMC_VDD_33_34,
-       .gpio_power             = CORGI_GPIO_SD_PWR,
 };
 
 static struct gpiod_lookup_table corgi_mci_gpio_table = {
@@ -506,6 +505,9 @@ static struct gpiod_lookup_table corgi_mci_gpio_table = {
                /* Write protect on GPIO 7 */
                GPIO_LOOKUP("gpio-pxa", CORGI_GPIO_nSD_WP,
                            "wp", GPIO_ACTIVE_LOW),
+               /* Power on GPIO 33 */
+               GPIO_LOOKUP("gpio-pxa", CORGI_GPIO_SD_PWR,
+                           "power", GPIO_ACTIVE_HIGH),
                { },
        },
 };
index f00e0c12f63e2be61df3c00180b3bb3d4703cf90..e26e7e60a169a91261acc86b52fe42cf4a1aaf82 100644 (file)
@@ -129,7 +129,6 @@ static struct pxamci_platform_data csb726_mci = {
        .detect_delay_ms        = 500,
        .ocr_mask               = MMC_VDD_32_33|MMC_VDD_33_34,
        /* FIXME setpower */
-       .gpio_power             = -1,
 };
 
 static struct gpiod_lookup_table csb726_mci_gpio_table = {
index e41d94e3c2c320d091d27b91cec71f46a19a5b77..32c1edeb3f1423ca5eeb7177c5e40a7a25d40f0a 100644 (file)
@@ -630,7 +630,6 @@ static struct pxamci_platform_data em_x270_mci_platform_data = {
        .init                   = em_x270_mci_init,
        .setpower               = em_x270_mci_setpower,
        .exit                   = em_x270_mci_exit,
-       .gpio_power             = -1,
 };
 
 static void __init em_x270_init_mmc(void)
index fef80dc401de9eb44e6b8ff0918638dcd218dc6c..4764acca548007bb3944cc8dc27d8496cd7f5cc3 100644 (file)
@@ -90,7 +90,6 @@ static struct platform_device *devices[] __initdata = {
 #ifdef CONFIG_MMC_PXA
 static struct pxamci_platform_data gumstix_mci_platform_data = {
        .ocr_mask               = MMC_VDD_32_33|MMC_VDD_33_34,
-       .gpio_power             = -1,
 };
 
 static void __init gumstix_mmc_init(void)
index a03b23c2fee92d30b940e91931ef2f7a2e5521b7..7bfc246a1d75201d070ea907a291d69a005f70c0 100644 (file)
@@ -160,7 +160,6 @@ static struct pxafb_mach_info sharp_lm8v31 = {
 
 static struct pxamci_platform_data idp_mci_platform_data = {
        .ocr_mask               = MMC_VDD_32_33|MMC_VDD_33_34,
-       .gpio_power             = -1,
 };
 
 static void __init idp_init(void)
index ee6acd4404df1cdb4e50646277d8f0c45deff381..8e0b60a33026964efe6849166f104d79a4d4d5ab 100644 (file)
@@ -276,7 +276,6 @@ static inline void littleton_init_keypad(void) {}
 static struct pxamci_platform_data littleton_mci_platform_data = {
        .detect_delay_ms        = 200,
        .ocr_mask               = MMC_VDD_32_33 | MMC_VDD_33_34,
-       .gpio_power             = -1,
 };
 
 static struct gpiod_lookup_table littleton_mci_gpio_table = {
index 469cbc6b747fa00886e0aacaa8675c5bc6373b76..c576e8462043c998009095b6e169b0a3f30641a7 100644 (file)
@@ -440,7 +440,6 @@ static struct pxamci_platform_data lubbock_mci_platform_data = {
        .init                   = lubbock_mci_init,
        .get_ro                 = lubbock_mci_get_ro,
        .exit                   = lubbock_mci_exit,
-       .gpio_power             = -1,
 };
 
 static void lubbock_irda_transceiver_mode(struct device *dev, int mode)
index 8668e0bf2a1b00440be6b2283b85e2a5cfa1c5cc..08b079653c3f9017c621047af79f836a06a9c430 100644 (file)
@@ -776,7 +776,6 @@ static struct pxamci_platform_data magician_mci_info = {
        .init                   = magician_mci_init,
        .exit                   = magician_mci_exit,
        .gpio_card_ro_invert    = 1,
-       .gpio_power             = EGPIO_MAGICIAN_SD_POWER,
 };
 
 /*
@@ -785,12 +784,19 @@ static struct pxamci_platform_data magician_mci_info = {
  * particular chip.
  */
 #define EGPIO_MAGICIAN_nSD_READONLY_OFFSET 12
+/*
+ * Power on EGPIO register 2 index 0, so this is on the first HTC EGPIO chip
+ * starting at register 0 so we need offset 2*8+0 = 16 on that chip.
+ */
+#define EGPIO_MAGICIAN_nSD_POWER_OFFSET 16
 
 static struct gpiod_lookup_table magician_mci_gpio_table = {
        .dev_id = "pxa2xx-mci.0",
        .table = {
                GPIO_LOOKUP("htc-egpio-1", EGPIO_MAGICIAN_nSD_READONLY_OFFSET,
                            "wp", GPIO_ACTIVE_HIGH),
+               GPIO_LOOKUP("htc-egpio-0", EGPIO_MAGICIAN_nSD_POWER_OFFSET,
+                           "power", GPIO_ACTIVE_HIGH),
                { },
        },
 };
index 31142b17d845e4ceae1d396a794e5ecb6166cccd..9e39fc2ad2d97c6188aeda052067fdfda1329d49 100644 (file)
@@ -361,7 +361,6 @@ static struct pxamci_platform_data mainstone_mci_platform_data = {
        .init                   = mainstone_mci_init,
        .setpower               = mainstone_mci_setpower,
        .exit                   = mainstone_mci_exit,
-       .gpio_power             = -1,
 };
 
 static void mainstone_irda_transceiver_mode(struct device *dev, int mode)
index d47cd204806dff5729366a04dff2d8a793995f52..d0fa5c72622d60beb15255332b5bce272abb1bb7 100644 (file)
@@ -398,7 +398,6 @@ struct gpio_vbus_mach_info gpio_vbus_data = {
 static struct pxamci_platform_data mioa701_mci_info = {
        .detect_delay_ms        = 250,
        .ocr_mask               = MMC_VDD_32_33 | MMC_VDD_33_34,
-       .gpio_power             = GPIO91_SDIO_EN,
 };
 
 static struct gpiod_lookup_table mioa701_mci_gpio_table = {
@@ -410,6 +409,9 @@ static struct gpiod_lookup_table mioa701_mci_gpio_table = {
                /* Write protect on GPIO 78 */
                GPIO_LOOKUP("gpio-pxa", GPIO78_SDIO_RO,
                            "wp", GPIO_ACTIVE_LOW),
+               /* Power on GPIO 91 */
+               GPIO_LOOKUP("gpio-pxa", GPIO91_SDIO_EN,
+                           "power", GPIO_ACTIVE_HIGH),
                { },
        },
 };
index 197c6cdc0efc05a5f3c7bfb057173326d2c89c67..e4248a3a8dfc193e36a849c501d299e9bbce85f6 100644 (file)
@@ -326,7 +326,6 @@ static mfp_cfg_t mfp_cfg[] __initdata = {
 static struct pxamci_platform_data mxm_8x10_mci_platform_data = {
        .ocr_mask = MMC_VDD_32_33 | MMC_VDD_33_34,
        .detect_delay_ms = 10,
-       .gpio_power = -1
 };
 
 static struct gpiod_lookup_table mxm_8x10_mci_gpio_table = {
index 095b25394f61de350c1b50eb639e09bb483f5728..b94c45f652156604564497172e9014dd7d203077 100644 (file)
@@ -49,13 +49,8 @@ static struct pxamci_platform_data palm27x_mci_platform_data = {
        .detect_delay_ms        = 200,
 };
 
-void __init palm27x_mmc_init(struct gpiod_lookup_table *gtable,
-                            int power,
-                            int power_inverted)
+void __init palm27x_mmc_init(struct gpiod_lookup_table *gtable)
 {
-       palm27x_mci_platform_data.gpio_power            = power;
-       palm27x_mci_platform_data.gpio_power_invert     = power_inverted;
-
        if (gtable)
                gpiod_add_lookup_table(gtable);
        pxa_set_mci_info(&palm27x_mci_platform_data);
index 05e3f04c11e272fae9e6a934866f08d9e0fa141b..cd071f87613255faca179a909dcd3806c9aa778a 100644 (file)
 #include <linux/gpio/machine.h>
 
 #if defined(CONFIG_MMC_PXA) || defined(CONFIG_MMC_PXA_MODULE)
-extern void __init palm27x_mmc_init(struct gpiod_lookup_table *gtable,
-                                   int power,
-                                   int power_inverted);
+extern void __init palm27x_mmc_init(struct gpiod_lookup_table *gtable);
 #else
-static inline void palm27x_mmc_init(struct gpiod_lookup_table *gtable,
-                                   int power,
-                                   int power_inverted)
+static inline void palm27x_mmc_init(struct gpiod_lookup_table *gtable)
 {}
 #endif
 
index 63d81c1a3103286ac96d9732a2184d7689483243..93d1124d21c248be5733f8befe46d0e72d2153a2 100644 (file)
@@ -327,6 +327,8 @@ static struct gpiod_lookup_table palmld_mci_gpio_table = {
                            "cd", GPIO_ACTIVE_LOW),
                GPIO_LOOKUP("gpio-pxa", GPIO_NR_PALMLD_SD_READONLY,
                            "wp", GPIO_ACTIVE_LOW),
+               GPIO_LOOKUP("gpio-pxa", GPIO_NR_PALMLD_SD_POWER,
+                           "power", GPIO_ACTIVE_HIGH),
                { },
        },
 };
@@ -338,8 +340,7 @@ static void __init palmld_init(void)
        pxa_set_btuart_info(NULL);
        pxa_set_stuart_info(NULL);
 
-       palm27x_mmc_init(&palmld_mci_gpio_table,
-                        GPIO_NR_PALMLD_SD_POWER, 0);
+       palm27x_mmc_init(&palmld_mci_gpio_table);
        palm27x_pm_init(PALMLD_STR_BASE);
        palm27x_lcd_init(-1, &palm_320x480_lcd_mode);
        palm27x_irda_init(GPIO_NR_PALMLD_IR_DISABLE);
index 81a37116081b537b7dfca0f358a602788c7b7fcc..8811f11f670ea82052c0863c08030b6ce361a46a 100644 (file)
@@ -189,6 +189,8 @@ static struct gpiod_lookup_table palmt5_mci_gpio_table = {
                            "cd", GPIO_ACTIVE_LOW),
                GPIO_LOOKUP("gpio-pxa", GPIO_NR_PALMT5_SD_READONLY,
                            "wp", GPIO_ACTIVE_LOW),
+               GPIO_LOOKUP("gpio-pxa", GPIO_NR_PALMT5_SD_POWER,
+                           "power", GPIO_ACTIVE_HIGH),
                { },
        },
 };
@@ -200,8 +202,7 @@ static void __init palmt5_init(void)
        pxa_set_btuart_info(NULL);
        pxa_set_stuart_info(NULL);
 
-       palm27x_mmc_init(&palmt5_mci_gpio_table,
-                        GPIO_NR_PALMT5_SD_POWER, 0);
+       palm27x_mmc_init(&palmt5_mci_gpio_table);
        palm27x_pm_init(PALMT5_STR_BASE);
        palm27x_lcd_init(-1, &palm_320x480_lcd_mode);
        palm27x_udc_init(GPIO_NR_PALMT5_USB_DETECT_N,
index 7b4c686de8c2a817e794f1eb925b938725178a09..7ce4fc287115aa44c92e6f127d6f5d63264ab76a 100644 (file)
@@ -120,7 +120,6 @@ static unsigned long palmtc_pin_config[] __initdata = {
 #if defined(CONFIG_MMC_PXA) || defined(CONFIG_MMC_PXA_MODULE)
 static struct pxamci_platform_data palmtc_mci_platform_data = {
        .ocr_mask               = MMC_VDD_32_33 | MMC_VDD_33_34,
-       .gpio_power             = GPIO_NR_PALMTC_SD_POWER,
        .detect_delay_ms        = 200,
 };
 
@@ -131,6 +130,8 @@ static struct gpiod_lookup_table palmtc_mci_gpio_table = {
                            "cd", GPIO_ACTIVE_LOW),
                GPIO_LOOKUP("gpio-pxa", GPIO_NR_PALMTC_SD_READONLY,
                            "wp", GPIO_ACTIVE_LOW),
+               GPIO_LOOKUP("gpio-pxa", GPIO_NR_PALMTC_SD_POWER,
+                           "power", GPIO_ACTIVE_HIGH),
                { },
        },
 };
index 77cb2d98cbddc7c933efb2631b954b7efc35d923..e830005af8d0c6089908baa3052f900562f90eb8 100644 (file)
@@ -102,7 +102,6 @@ static unsigned long palmte2_pin_config[] __initdata = {
  ******************************************************************************/
 static struct pxamci_platform_data palmte2_mci_platform_data = {
        .ocr_mask               = MMC_VDD_32_33 | MMC_VDD_33_34,
-       .gpio_power             = GPIO_NR_PALMTE2_SD_POWER,
 };
 
 static struct gpiod_lookup_table palmte2_mci_gpio_table = {
@@ -112,6 +111,8 @@ static struct gpiod_lookup_table palmte2_mci_gpio_table = {
                            "cd", GPIO_ACTIVE_LOW),
                GPIO_LOOKUP("gpio-pxa", GPIO_NR_PALMTE2_SD_READONLY,
                            "wp", GPIO_ACTIVE_LOW),
+               GPIO_LOOKUP("gpio-pxa", GPIO_NR_PALMTE2_SD_POWER,
+                           "power", GPIO_ACTIVE_HIGH),
                { },
        },
 };
index ea44f699240ffbf0c8011cb9b1abe60ecc416d7a..70f1a8a3aa9427b26da6934edaa550425020c8fa 100644 (file)
@@ -487,6 +487,8 @@ static struct gpiod_lookup_table treo680_mci_gpio_table = {
                            "cd", GPIO_ACTIVE_LOW),
                GPIO_LOOKUP("gpio-pxa", GPIO_NR_TREO680_SD_READONLY,
                            "wp", GPIO_ACTIVE_LOW),
+               GPIO_LOOKUP("gpio-pxa", GPIO_NR_TREO680_SD_POWER,
+                           "power", GPIO_ACTIVE_HIGH),
                { },
        },
 };
@@ -496,8 +498,7 @@ static void __init treo680_init(void)
        pxa2xx_mfp_config(ARRAY_AND_SIZE(treo680_pin_config));
        palmphone_common_init();
        treo680_gpio_init();
-       palm27x_mmc_init(&treo680_mci_gpio_table,
-                        GPIO_NR_TREO680_SD_POWER, 0);
+       palm27x_mmc_init(&treo680_mci_gpio_table);
 }
 #endif
 
@@ -508,6 +509,8 @@ static struct gpiod_lookup_table centro685_mci_gpio_table = {
        .table = {
                GPIO_LOOKUP("gpio-pxa", GPIO_NR_TREO_SD_DETECT_N,
                            "cd", GPIO_ACTIVE_LOW),
+               GPIO_LOOKUP("gpio-pxa", GPIO_NR_CENTRO_SD_POWER,
+                           "power", GPIO_ACTIVE_LOW),
                { },
        },
 };
@@ -516,8 +519,7 @@ static void __init centro_init(void)
 {
        pxa2xx_mfp_config(ARRAY_AND_SIZE(centro685_pin_config));
        palmphone_common_init();
-       palm27x_mmc_init(&centro685_mci_gpio_table,
-                        GPIO_NR_CENTRO_SD_POWER, 1);
+       palm27x_mmc_init(&centro685_mci_gpio_table);
 }
 #endif
 
index 9df7cd84ba7b8e7cc21e13abec37259cf506ec0f..ef71bf2abb4761bea3591b618eee1f17b3d40141 100644 (file)
@@ -344,6 +344,8 @@ static struct gpiod_lookup_table palmtx_mci_gpio_table = {
                            "cd", GPIO_ACTIVE_LOW),
                GPIO_LOOKUP("gpio-pxa", GPIO_NR_PALMTX_SD_READONLY,
                            "wp", GPIO_ACTIVE_LOW),
+               GPIO_LOOKUP("gpio-pxa", GPIO_NR_PALMTX_SD_POWER,
+                           "power", GPIO_ACTIVE_HIGH),
                { },
        },
 };
@@ -355,8 +357,7 @@ static void __init palmtx_init(void)
        pxa_set_btuart_info(NULL);
        pxa_set_stuart_info(NULL);
 
-       palm27x_mmc_init(&palmtx_mci_gpio_table,
-                        GPIO_NR_PALMTX_SD_POWER, 0);
+       palm27x_mmc_init(&palmtx_mci_gpio_table);
        palm27x_pm_init(PALMTX_STR_BASE);
        palm27x_lcd_init(-1, &palm_320x480_lcd_mode);
        palm27x_udc_init(GPIO_NR_PALMTX_USB_DETECT_N,
index febf5aadbde68ccdfd5e56ad489f3d3ffbb994af..ea1c7b2ed8d45c82b683e57b2b8f431fd3042607 100644 (file)
@@ -393,6 +393,8 @@ static struct gpiod_lookup_table palmz72_mci_gpio_table = {
                            "cd", GPIO_ACTIVE_LOW),
                GPIO_LOOKUP("gpio-pxa", GPIO_NR_PALMZ72_SD_RO,
                            "wp", GPIO_ACTIVE_LOW),
+               GPIO_LOOKUP("gpio-pxa", GPIO_NR_PALMZ72_SD_POWER_N,
+                           "power", GPIO_ACTIVE_LOW),
                { },
        },
 };
@@ -407,8 +409,7 @@ static void __init palmz72_init(void)
        pxa_set_btuart_info(NULL);
        pxa_set_stuart_info(NULL);
 
-       palm27x_mmc_init(&palmz72_mci_gpio_table,
-                        GPIO_NR_PALMZ72_SD_POWER_N, 1);
+       palm27x_mmc_init(&palmz72_mci_gpio_table);
        palm27x_lcd_init(-1, &palm_320x320_lcd_mode);
        palm27x_udc_init(GPIO_NR_PALMZ72_USB_DETECT_N,
                        GPIO_NR_PALMZ72_USB_PULLUP, 0);
index f76d7665420e816d2b22bb12df22d2a065af3aca..be19e3a4eaccc448849b492e4bc0a0acd78861dc 100644 (file)
@@ -370,7 +370,6 @@ static struct pxamci_platform_data pcm990_mci_platform_data = {
        .init                   = pcm990_mci_init,
        .setpower               = pcm990_mci_setpower,
        .exit                   = pcm990_mci_exit,
-       .gpio_power             = -1,
 };
 
 static struct pxaohci_platform_data pcm990_ohci_platform_data = {
index 9b8663ac532f32fb540cfbcd7646db1f0cbe2238..c2a43d4cfd3efb3069d3f1e3b733a119d007b39e 100644 (file)
@@ -289,7 +289,6 @@ static struct pxamci_platform_data poodle_mci_platform_data = {
        .init                   = poodle_mci_init,
        .setpower               = poodle_mci_setpower,
        .exit                   = poodle_mci_exit,
-       .gpio_power             = -1,
 };
 
 static struct gpiod_lookup_table poodle_mci_gpio_table = {
index 19b988d6dc4410acf31b6d76b47fd4d97e67a1b3..e1db072756f255dd79bc7d54226fa5bb9ad11e8d 100644 (file)
@@ -749,7 +749,6 @@ static struct pxamci_platform_data raumfeld_mci_platform_data = {
        .init                   = raumfeld_mci_init,
        .exit                   = raumfeld_mci_exit,
        .detect_delay_ms        = 200,
-       .gpio_power             = -1,
 };
 
 /*
index 7a9fe1749d7a27825d024c3bd27e2caea5683031..306818e2cf545fdba9ab1c990cf2802211180b29 100644 (file)
@@ -616,7 +616,6 @@ static struct pxamci_platform_data spitz_mci_platform_data = {
        .detect_delay_ms        = 250,
        .ocr_mask               = MMC_VDD_32_33|MMC_VDD_33_34,
        .setpower               = spitz_mci_setpower,
-       .gpio_power             = -1,
 };
 
 static struct gpiod_lookup_table spitz_mci_gpio_table = {
index 0bdb414daedd8769c53f8344c4c6ef871a307af9..e0d6c872270af0d36a199c776962903010531e00 100644 (file)
@@ -436,7 +436,6 @@ static int imote2_mci_get_ro(struct device *dev)
 static struct pxamci_platform_data imote2_mci_platform_data = {
        .ocr_mask = MMC_VDD_32_33 | MMC_VDD_33_34, /* default anyway */
        .get_ro = imote2_mci_get_ro,
-       .gpio_power = -1,
 };
 
 static struct gpio_led imote2_led_pins[] = {
index 934338b574da3bb2036318d2111c6658ac48de75..e8a93c088c35e684eb5db7c58230fba3a2b5e1ac 100644 (file)
@@ -292,7 +292,6 @@ static struct pxamci_platform_data tosa_mci_platform_data = {
        .ocr_mask               = MMC_VDD_32_33|MMC_VDD_33_34,
        .init                   = tosa_mci_init,
        .exit                   = tosa_mci_exit,
-       .gpio_power             = TOSA_GPIO_PWR_ON,
 };
 
 static struct gpiod_lookup_table tosa_mci_gpio_table = {
@@ -302,6 +301,8 @@ static struct gpiod_lookup_table tosa_mci_gpio_table = {
                            "cd", GPIO_ACTIVE_LOW),
                GPIO_LOOKUP("gpio-pxa", TOSA_GPIO_SD_WP,
                            "wp", GPIO_ACTIVE_LOW),
+               GPIO_LOOKUP("gpio-pxa", TOSA_GPIO_PWR_ON,
+                           "power", GPIO_ACTIVE_HIGH),
                { },
        },
 };
index 849f8b0e6651f8b260f3ffb976d15d951881773f..c76f1daecfc95209c824bd39294451751485ddf3 100644 (file)
@@ -355,7 +355,6 @@ static struct pxamci_platform_data trizeps4_mci_platform_data = {
        .exit           = trizeps4_mci_exit,
        .get_ro         = NULL, /* write-protection not supported */
        .setpower       = NULL, /* power-switching not supported */
-       .gpio_power     = -1,
 };
 
 /****************************************************************************
index 186c75161df88b079e72d01801a38f1a383a75a0..829284406fa3f64dda2c727339fb27341e9120c3 100644 (file)
@@ -241,7 +241,6 @@ static void __init vpac270_onenand_init(void) {}
 #if defined(CONFIG_MMC_PXA) || defined(CONFIG_MMC_PXA_MODULE)
 static struct pxamci_platform_data vpac270_mci_platform_data = {
        .ocr_mask               = MMC_VDD_32_33 | MMC_VDD_33_34,
-       .gpio_power             = -1,
        .detect_delay_ms        = 200,
 };
 
index d2a63c16404eef5fab65daba443b6ae0ac3d5913..e2353e75bb283291bc7cad821e6b62f479820921 100644 (file)
@@ -291,7 +291,6 @@ static inline void z2_lcd_init(void) {}
 #if defined(CONFIG_MMC_PXA) || defined(CONFIG_MMC_PXA_MODULE)
 static struct pxamci_platform_data z2_mci_platform_data = {
        .ocr_mask               = MMC_VDD_32_33 | MMC_VDD_33_34,
-       .gpio_power             = -1,
        .detect_delay_ms        = 200,
 };
 
index 8c71e47e33c4ef111406ce9672d5062c660f909d..897ef59fbe0ca4cbab37c2d57b2d080ccc4248a1 100644 (file)
@@ -664,7 +664,6 @@ static struct pxamci_platform_data zeus_mci_platform_data = {
        .ocr_mask               = MMC_VDD_32_33|MMC_VDD_33_34,
        .detect_delay_ms        = 250,
        .gpio_card_ro_invert    = 1,
-       .gpio_power             = -1
 };
 
 static struct gpiod_lookup_table zeus_mci_gpio_table = {
index d4df4efa9a4a9d6aeaf327c5b23c87b8155efd67..1f88d7bae84947f10581c937ec9474972a2a4496 100644 (file)
@@ -227,7 +227,6 @@ static inline void zylonite_init_lcd(void) {}
 static struct pxamci_platform_data zylonite_mci_platform_data = {
        .detect_delay_ms= 200,
        .ocr_mask       = MMC_VDD_32_33|MMC_VDD_33_34,
-       .gpio_power     = -1,
 };
 
 #define PCA9539A_MCI_CD 0
@@ -251,7 +250,6 @@ static struct gpiod_lookup_table zylonite_mci_gpio_table = {
 static struct pxamci_platform_data zylonite_mci2_platform_data = {
        .detect_delay_ms= 200,
        .ocr_mask       = MMC_VDD_32_33|MMC_VDD_33_34,
-       .gpio_power     = -1,
 };
 
 static struct gpiod_lookup_table zylonite_mci2_gpio_table = {
@@ -268,7 +266,6 @@ static struct gpiod_lookup_table zylonite_mci2_gpio_table = {
 static struct pxamci_platform_data zylonite_mci3_platform_data = {
        .detect_delay_ms= 200,
        .ocr_mask       = MMC_VDD_32_33|MMC_VDD_33_34,
-       .gpio_power     = -1,
 };
 
 static struct gpiod_lookup_table zylonite_mci3_gpio_table = {
index a8b6c14f26870a877f5505232bd08ec0d3cbe262..8779bbaa6b697441fe50bc2c39d1337cfc0b43bf 100644 (file)
@@ -30,7 +30,7 @@
 #include <linux/mmc/slot-gpio.h>
 #include <linux/io.h>
 #include <linux/regulator/consumer.h>
-#include <linux/gpio.h>
+#include <linux/gpio/consumer.h>
 #include <linux/gfp.h>
 #include <linux/of.h>
 #include <linux/of_device.h>
@@ -63,6 +63,7 @@ struct pxamci_host {
        unsigned int            power_mode;
        unsigned long           detect_delay_ms;
        bool                    use_ro_gpio;
+       struct gpio_desc        *power;
        struct pxamci_platform_data *pdata;
 
        struct mmc_request      *mrq;
@@ -101,16 +102,13 @@ static inline int pxamci_set_power(struct pxamci_host *host,
 {
        struct mmc_host *mmc = host->mmc;
        struct regulator *supply = mmc->supply.vmmc;
-       int on;
 
        if (!IS_ERR(supply))
                return mmc_regulator_set_ocr(mmc, supply, vdd);
 
-       if (host->pdata &&
-           gpio_is_valid(host->pdata->gpio_power)) {
-               on = ((1 << vdd) & host->pdata->ocr_mask);
-               gpio_set_value(host->pdata->gpio_power,
-                              !!on ^ host->pdata->gpio_power_invert);
+       if (host->power) {
+               bool on = !!((1 << vdd) & host->pdata->ocr_mask);
+               gpiod_set_value(host->power, on);
        }
 
        if (host->pdata && host->pdata->setpower)
@@ -730,21 +728,12 @@ static int pxamci_probe(struct platform_device *pdev)
        }
 
        if (host->pdata) {
-               int gpio_power = host->pdata->gpio_power;
-
                host->detect_delay_ms = host->pdata->detect_delay_ms;
 
-               if (gpio_is_valid(gpio_power)) {
-                       ret = devm_gpio_request(dev, gpio_power,
-                                               "mmc card power");
-                       if (ret) {
-                               dev_err(dev,
-                                       "Failed requesting gpio_power %d\n",
-                                       gpio_power);
-                               goto out;
-                       }
-                       gpio_direction_output(gpio_power,
-                                             host->pdata->gpio_power_invert);
+               host->power = devm_gpiod_get_optional(dev, "power", GPIOD_OUT_LOW);
+               if (IS_ERR(host->power)) {
+                       dev_err(dev, "Failed requesting gpio_power\n");
+                       goto out;
                }
 
                /* FIXME: should we pass detection delay to debounce? */
@@ -768,7 +757,7 @@ static int pxamci_probe(struct platform_device *pdev)
                if (host->pdata->init)
                        host->pdata->init(dev, pxamci_detect_irq, mmc);
 
-               if (gpio_is_valid(gpio_power) && host->pdata->setpower)
+               if (host->power && host->pdata->setpower)
                        dev_warn(dev, "gpio_power and setpower() both defined\n");
                if (host->use_ro_gpio && host->pdata->get_ro)
                        dev_warn(dev, "gpio_ro and get_ro() both defined\n");
index db6c247d42d1fca2814de55131cd11258adaad63..7e44e84e7150904635ae0505a7608ec5a045534e 100644 (file)
@@ -16,8 +16,6 @@ struct pxamci_platform_data {
        int (*setpower)(struct device *, unsigned int);
        void (*exit)(struct device *, void *);
        bool gpio_card_ro_invert;               /* gpio ro is inverted */
-       int gpio_power;                         /* gpio powering up MMC bus */
-       bool gpio_power_invert;                 /* gpio power is inverted */
 };
 
 extern void pxa_set_mci_info(struct pxamci_platform_data *info);