Thread (4 messages) 4 messages, 2 authors, 2021-10-19

Re: [PATCH v6 2/2] gpio: gpio-cascade: add generic GPIO cascade

From: Andy Shevchenko <hidden>
Date: 2021-10-19 13:13:57
Also in: linux-gpio, lkml

On Tue, Oct 19, 2021 at 4:00 PM Mauri Sandberg [off-list ref] wrote:
Adds support for building cascades of GPIO lines. That is, it allows
setups when there is one upstream line and multiple cascaded lines, out
of which one can be chosen at a time. The status of the upstream line
can be conveyed to the selected cascaded line or, vice versa, the status
of the cascaded line can be conveyed to the upstream line.

A multiplexer is being used to select, which cascaded GPIO line is being
used at any given time.

At the moment only input direction is supported. In future it should be
possible to add support for output direction, too.
Thanks for an update! My comments below.

...
+config GPIO_CASCADE
+       tristate "General GPIO cascade"
+       select MULTIPLEXER
+       help
+         Say yes here to enable support for generic GPIO cascade.
+
+         This allows building one-to-many cascades of GPIO lines using
+         different types of multiplexers readily available. At the
+         moment only input lines are supported.
Care to mention what will be the module name in the case of being
built as a module?
(Hint: there are plenty of existing examples in the kernel)

...
+#include <linux/module.h>
+#include <linux/gpio/consumer.h>
+#include <linux/gpio/driver.h>
I would move this group...
+#include <linux/slab.h>
+#include <linux/platform_device.h>
+#include <linux/mux/consumer.h>
+
...to be somewhere here to explicitly show that this is the GPIO
subsystem related driver.

...
+       mc = devm_mux_control_get(dev, NULL);
+       if (IS_ERR(mc))
+               return dev_err_probe(dev,
+                                    PTR_ERR(mc),
+                                    "unable to get mux-control\n");
Why not one line?

...
+       upstream = devm_gpiod_get(dev, "upstream",  GPIOD_IN);
+       if (IS_ERR(upstream)) {
+               dev_err(dev, "unable to claim upstream GPIO line\n");
+               return -ENODEV;
Why shadowing error code? What happens if it's deferred?
Hint: use dev_err_probe() here as well.
+       }
...
+       err = devm_gpiochip_add_data(dev, &cas->gpio_chip, NULL);
+       if (err) {
+               dev_err(dev, "unable to add gpio chip\n");
+               return err;
+       }
+
+       platform_set_drvdata(pdev, cas);
+       return 0;
I would rather do

       platform_set_drvdata(pdev, cas);

       return devm_gpiochip_add_data(dev, &cas->gpio_chip, NULL);

-- 
With Best Regards,
Andy Shevchenko
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help