pcmcia: soc_common: request legacy detect GPIO with active low
authorRussell King <rmk+kernel@armlinux.org.uk>
Wed, 31 Aug 2016 07:49:45 +0000 (08:49 +0100)
committerRussell King <rmk+kernel@armlinux.org.uk>
Thu, 22 Sep 2016 08:38:58 +0000 (09:38 +0100)
Request the legacy card detect signal with the active low property and
remove our own negation of the detection value.  This allows us to use
the firmware-defined polarities rather than hard-coding it into the
driver.

Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk>
drivers/pcmcia/soc_common.c

index e499c2b..4036454 100644 (file)
@@ -165,8 +165,14 @@ static int soc_pcmcia_hw_init(struct soc_pcmcia_socket *skt)
 
        for (i = 0; i < ARRAY_SIZE(skt->stat); i++) {
                if (gpio_is_valid(skt->stat[i].gpio)) {
+                       unsigned long flags = GPIOF_IN;
+
+                       /* CD is active low by default */
+                       if (i == SOC_STAT_CD)
+                               flags |= GPIOF_ACTIVE_LOW;
+
                        ret = devm_gpio_request_one(skt->socket.dev.parent,
-                                                   skt->stat[i].gpio, GPIOF_IN,
+                                                   skt->stat[i].gpio, flags,
                                                    skt->stat[i].name);
                        if (ret) {
                                __soc_pcmcia_hw_shutdown(skt, i);
@@ -233,11 +239,8 @@ static unsigned int soc_common_pcmcia_skt_state(struct soc_pcmcia_socket *skt)
        state.bvd1 = 1;
        state.bvd2 = 1;
 
-       /* CD is active low by default */
        if (skt->stat[SOC_STAT_CD].desc)
-               state.detect = !gpiod_get_raw_value(skt->stat[SOC_STAT_CD].desc);
-
-       /* RDY and BVD are active high by default */
+               state.detect = !!gpiod_get_value(skt->stat[SOC_STAT_CD].desc);
        if (skt->stat[SOC_STAT_RDY].desc)
                state.ready = !!gpiod_get_value(skt->stat[SOC_STAT_RDY].desc);
        if (skt->stat[SOC_STAT_BVD1].desc)