Thread (97 messages) 97 messages, 8 authors, 2016-09-14

[PATCH 10/33] pcmcia: soc_common: switch to using gpio_descs

From: Linus Walleij <hidden>
Date: 2016-09-14 11:29:06
Also in: linux-gpio

On Mon, Aug 29, 2016 at 12:24 PM, Russell King
[off-list ref] wrote:
Switch to using the gpiod_* consumer API rather than the legacy API.

Signed-off-by: Russell King <redacted>
(...)
+int soc_pcmcia_request_gpiods(struct soc_pcmcia_socket *skt)
+{
+       int i;
+
+       for (i = 0; i < ARRAY_SIZE(skt->stat); i++) {
+               struct gpio_desc *desc;
+
Here I inserted:

        /* Skip over unnamed GPIOs, assume unused */
        if (!skt->stat[i].name)
            continue;

to get it working again on h3600.
+               desc = gpiod_get(skt->socket.dev.parent,
+                                skt->stat[i].name, GPIOD_IN);
+               if (IS_ERR(desc)) {
+                       dev_err(skt->socket.dev.parent,
+                               "Failed to get GPIO for %s: %ld\n",
+                               skt->stat[i].name, PTR_ERR(desc));
+                       __soc_pcmcia_hw_shutdown(skt, i);
+                       return PTR_ERR(desc);
+               }

It bugs out for me on the legacy h3600, since it only defines
two of these pins not all of the ARRAY_SIZE(skt->stat) pins
will succeed and we get an error message like this:

sa11x0-pcmcia sa11x0-pcmcia: Failed to get GPIO for (null): -2
sa11x0-pcmcia: probe of sa11x0-pcmcia failed with error -2

With the patch above it goes away and the log is silent.
The debugfs gpio file looks like this:

cat gpio
gpiochip0: GPIOs 0-27, gpio:
 gpio-0   (                    |Power Button        ) in  hi
 gpio-10  (                    |pcmcia1-detect      ) in  hi
 gpio-11  (                    |pcmcia1-ready       ) in  hi
 gpio-17  (                    |pcmcia0-detect      ) in  hi
 gpio-18  (                    |Action button       ) in  hi
 gpio-21  (                    |pcmcia0-ready       ) in  hi
 gpio-23  (                    |dcd                 ) in  hi
 gpio-25  (                    |cts                 ) in  lo
 gpio-26  (                    |rts                 ) out lo

gpiochip1: GPIOs 28-43, parent: platform/htc-egpio, htc-egpio:
 gpio-28  (                    |Flash Vpp           ) out lo
 gpio-29  (                    |PCMCIA CARD RESET   ) out lo
 gpio-30  (                    |OPT RESET           ) out lo
 gpio-32  (                    |OPT NVRAM ON        ) out lo
 gpio-33  (                    |OPT ON              ) out lo
 gpio-34  (                    |LCD power           ) out lo
 gpio-36  (                    |LCD control         ) out lo
 gpio-42  (                    |LCD 5v              ) out lo
 gpio-43  (                    |LCD 9v/-6.5v        ) out lo

Which seems like before the patch series.

I still suspect the PCMCIA is not really working but I have
limited experience of the bus so I don't really know how
to test it deeply or have my PCMCIA ethernet or harddrive
probe properly.

There are no regressions however, so with something like
the above patch applied:
Tested-by: Linus Walleij <redacted>

For the whole patch series on H3600.

Yours,
Linus Walleij
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help