* [RFC] Driver for the NXP 74HC153 chip
@ 2021-02-23 19:53 Mauri Sandberg
2021-02-23 19:53 ` [PATCH] gpio: driver " Mauri Sandberg
0 siblings, 1 reply; 11+ messages in thread
From: Mauri Sandberg @ 2021-02-23 19:53 UTC (permalink / raw)
To: linux-gpio
Initiating a round of reviews for this GPIO expander if it could be
eventually merged in the kernel tree.
Basically I would like to hear how does it look and what is it missing.
Should something be added about device-tree binding, etc.
-- Mauri Sandberg
^ permalink raw reply [flat|nested] 11+ messages in thread
* [PATCH] gpio: driver for the NXP 74HC153 chip
2021-02-23 19:53 [RFC] Driver for the NXP 74HC153 chip Mauri Sandberg
@ 2021-02-23 19:53 ` Mauri Sandberg
2021-02-23 23:22 ` kernel test robot
` (2 more replies)
0 siblings, 3 replies; 11+ messages in thread
From: Mauri Sandberg @ 2021-02-23 19:53 UTC (permalink / raw)
To: linux-gpio; +Cc: Mauri Sandberg
Support for NXP 74HC153 Dual 4-input Multiplexer. This provides a GPIO
interface supporting input mode only
74HCT153 is a dual 4-input multiplexer. The device features independent
enable inputs (nE) and common data select inputs (S0 and S1). For each
multiplexer, the select inputs select one of the four binary inputs and
routes it to the multiplexer output (nY).
Signed-off-by: Mauri Sandberg <sandberg@mailfence.com>
---
drivers/gpio/Kconfig | 8 +
drivers/gpio/Makefile | 1 +
drivers/gpio/gpio-nxp-74hc153.c | 291 ++++++++++++++++++++++++++++++++
3 files changed, 300 insertions(+)
create mode 100644 drivers/gpio/gpio-nxp-74hc153.c
diff --git a/drivers/gpio/Kconfig b/drivers/gpio/Kconfig
index fa225175e68d..62c3aa34ae6e 100644
--- a/drivers/gpio/Kconfig
+++ b/drivers/gpio/Kconfig
@@ -1645,4 +1645,12 @@ config GPIO_MOCKUP
endmenu
+comment "Other GPIO expanders"
+
+config GPIO_NXP_74HC153
+ tristate "NXP 74HC153 Dual 4-input multiplexer"
+ help
+ Support for NXP 74HC153 Dual 4-input Multiplexer. This
+ provides a GPIO interface supporting input mode only.
+
endif
diff --git a/drivers/gpio/Makefile b/drivers/gpio/Makefile
index 35e3b6026665..3e4f48e7fd61 100644
--- a/drivers/gpio/Makefile
+++ b/drivers/gpio/Makefile
@@ -108,6 +108,7 @@ obj-$(CONFIG_GPIO_MT7621) += gpio-mt7621.o
obj-$(CONFIG_GPIO_MVEBU) += gpio-mvebu.o
obj-$(CONFIG_GPIO_MXC) += gpio-mxc.o
obj-$(CONFIG_GPIO_MXS) += gpio-mxs.o
+obj-$(CONFIG_GPIO_NXP_74HC153) += gpio-nxp-74hc153.o
obj-$(CONFIG_GPIO_OCTEON) += gpio-octeon.o
obj-$(CONFIG_GPIO_OMAP) += gpio-omap.o
obj-$(CONFIG_GPIO_PALMAS) += gpio-palmas.o
diff --git a/drivers/gpio/gpio-nxp-74hc153.c b/drivers/gpio/gpio-nxp-74hc153.c
new file mode 100644
index 000000000000..f683547cfd6b
--- /dev/null
+++ b/drivers/gpio/gpio-nxp-74hc153.c
@@ -0,0 +1,291 @@
+/*
+ * NXP 74HC153 - Dual 4-input multiplexer GPIO driver
+ *
+ * Copyright (C) 2010 Gabor Juhos <juhosg@openwrt.org>
+ * Copyright (C) 2020 Mauri Sandberg <sandberg@mailfence.com>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation.
+ *
+ * Example device tree definition:
+ *
+ * gpio-extender {
+ * compatible = "nxp,74hc153-gpio";
+ * gpio-controller;
+ * #gpio-cells = <2>;
+ *
+ * // GPIOs used by this node
+ * gpio-s0 = <&gpio 9 GPIO_ACTIVE_HIGH>;
+ * gpio-s1 = <&gpio 11 GPIO_ACTIVE_HIGH>;
+ * gpio-1y = <&gpio 12 GPIO_ACTIVE_HIGH>;
+ * gpio-2y = <&gpio 14 GPIO_ACTIVE_HIGH>;
+ * };
+ *
+ */
+
+#include <linux/version.h>
+#include <linux/module.h>
+#include <linux/init.h>
+#include <linux/gpio.h>
+#include <linux/slab.h>
+#include <linux/platform_device.h>
+#include <linux/of_gpio.h>
+
+#define NXP_74HC153_NUM_GPIOS 8
+#define NXP_74HC153_S0_MASK 0x1
+#define NXP_74HC153_S1_MASK 0x2
+#define NXP_74HC153_BANK_MASK 0x4
+
+#define NXP_74HC153_DRIVER_NAME "nxp-74hc153"
+
+struct nxp_74hc153_config {
+ unsigned gpio_pin_s0;
+ unsigned gpio_pin_s1;
+ unsigned gpio_pin_1y;
+ unsigned gpio_pin_2y;
+};
+
+struct nxp_74hc153_chip {
+ struct device *parent;
+ struct gpio_chip gpio_chip;
+ struct mutex lock;
+ struct nxp_74hc153_config config;
+};
+
+static struct nxp_74hc153_chip *gpio_to_nxp(struct gpio_chip *gc)
+{
+ return container_of(gc, struct nxp_74hc153_chip, gpio_chip);
+}
+
+static int nxp_74hc153_direction_input(struct gpio_chip *gc, unsigned offset)
+{
+ return 0;
+}
+
+static int nxp_74hc153_direction_output(struct gpio_chip *gc,
+ unsigned offset, int val)
+{
+ return -EINVAL;
+}
+
+static int nxp_74hc153_get_value(struct gpio_chip *gc, unsigned offset)
+{
+ struct nxp_74hc153_chip *nxp;
+ struct nxp_74hc153_platform_data *pdata;
+ unsigned s0;
+ unsigned s1;
+ unsigned pin;
+ int ret;
+
+ nxp = gpio_to_nxp(gc);
+ pdata = nxp->parent->platform_data;
+
+ s0 = !!(offset & NXP_74HC153_S0_MASK);
+ s1 = !!(offset & NXP_74HC153_S1_MASK);
+ pin = (offset & NXP_74HC153_BANK_MASK) ? nxp->config.gpio_pin_2y
+ : nxp->config.gpio_pin_1y;
+
+ mutex_lock(&nxp->lock);
+ gpio_set_value(nxp->config.gpio_pin_s0, s0);
+ gpio_set_value(nxp->config.gpio_pin_s1, s1);
+ ret = gpio_get_value(pin);
+ mutex_unlock(&nxp->lock);
+
+ return ret;
+}
+
+static void nxp_74hc153_set_value(struct gpio_chip *gc,
+ unsigned offset, int val)
+{
+ /* not supported */
+}
+
+static int nxp_74hc153_probe(struct platform_device *pdev)
+{
+ struct device_node *np = pdev->dev.of_node;
+ struct nxp_74hc153_chip *nxp;
+ struct gpio_chip *gc;
+ int err;
+ unsigned gpio_s0;
+ unsigned gpio_s1;
+ unsigned gpio_1y;
+ unsigned gpio_2y;
+
+ nxp = kzalloc(sizeof(struct nxp_74hc153_chip), GFP_KERNEL);
+ if (nxp == NULL) {
+ dev_err(&pdev->dev, "no memory for private data\n");
+ return -ENOMEM;
+ }
+
+ gpio_s0 = of_get_named_gpio(np, "gpio-s0", 0);
+ gpio_s1 = of_get_named_gpio(np, "gpio-s1", 0);
+ gpio_1y = of_get_named_gpio(np, "gpio-1y", 0);
+ gpio_2y = of_get_named_gpio(np, "gpio-2y", 0);
+
+ if (!gpio_is_valid(gpio_s0) || !gpio_is_valid(gpio_s1) ||
+ !gpio_is_valid(gpio_1y) || !gpio_is_valid(gpio_2y)) {
+
+ dev_err(&pdev->dev, "control GPIO(s) are missing\n");
+ err = -EINVAL;
+ goto err_free_nxp;
+ } else {
+ nxp->config.gpio_pin_s0 = gpio_s0;
+ nxp->config.gpio_pin_s1 = gpio_s1;
+ nxp->config.gpio_pin_1y = gpio_1y;
+ nxp->config.gpio_pin_2y = gpio_2y;
+ }
+
+ // apply pin configuration
+ err = gpio_request(nxp->config.gpio_pin_s0, dev_name(&pdev->dev));
+ if (err) {
+ dev_err(&pdev->dev, "unable to claim gpio %u, err=%d\n",
+ nxp->config.gpio_pin_s0, err);
+ goto err_free_nxp;
+ }
+
+ err = gpio_request(nxp->config.gpio_pin_s1, dev_name(&pdev->dev));
+ if (err) {
+ dev_err(&pdev->dev, "unable to claim gpio %u, err=%d\n",
+ nxp->config.gpio_pin_s1, err);
+ goto err_free_s0;
+ }
+
+ err = gpio_request(nxp->config.gpio_pin_1y, dev_name(&pdev->dev));
+ if (err) {
+ dev_err(&pdev->dev, "unable to claim gpio %u, err=%d\n",
+ nxp->config.gpio_pin_1y, err);
+ goto err_free_s1;
+ }
+
+ err = gpio_request(nxp->config.gpio_pin_2y, dev_name(&pdev->dev));
+ if (err) {
+ dev_err(&pdev->dev, "unable to claim gpio %u, err=%d\n",
+ nxp->config.gpio_pin_2y, err);
+ goto err_free_1y;
+ }
+
+ err = gpio_direction_output(nxp->config.gpio_pin_s0, 0);
+ if (err) {
+ dev_err(&pdev->dev,
+ "unable to set direction of gpio %u, err=%d\n",
+ nxp->config.gpio_pin_s0, err);
+ goto err_free_2y;
+ }
+
+ err = gpio_direction_output(nxp->config.gpio_pin_s1, 0);
+ if (err) {
+ dev_err(&pdev->dev,
+ "unable to set direction of gpio %u, err=%d\n",
+ nxp->config.gpio_pin_s1, err);
+ goto err_free_2y;
+ }
+
+ err = gpio_direction_input(nxp->config.gpio_pin_1y);
+ if (err) {
+ dev_err(&pdev->dev,
+ "unable to set direction of gpio %u, err=%d\n",
+ nxp->config.gpio_pin_1y, err);
+ goto err_free_2y;
+ }
+
+ err = gpio_direction_input(nxp->config.gpio_pin_2y);
+ if (err) {
+ dev_err(&pdev->dev,
+ "unable to set direction of gpio %u, err=%d\n",
+ nxp->config.gpio_pin_2y, err);
+ goto err_free_2y;
+ }
+
+ nxp->parent = &pdev->dev;
+ mutex_init(&nxp->lock);
+
+ gc = &nxp->gpio_chip;
+
+ gc->direction_input = nxp_74hc153_direction_input;
+ gc->direction_output = nxp_74hc153_direction_output;
+ gc->get = nxp_74hc153_get_value;
+ gc->set = nxp_74hc153_set_value;
+ gc->can_sleep = 1;
+
+ gc->base = -1;
+ gc->ngpio = NXP_74HC153_NUM_GPIOS;
+ gc->label = dev_name(nxp->parent);
+ gc->parent = nxp->parent;
+ gc->owner = THIS_MODULE;
+ gc->of_node = np;
+
+ err = gpiochip_add(&nxp->gpio_chip);
+ if (err) {
+ dev_err(&pdev->dev, "unable to add gpio chip, err=%d\n", err);
+ goto err_free_2y;
+ }
+
+ platform_set_drvdata(pdev, nxp);
+ return 0;
+
+err_free_2y:
+ gpio_free(nxp->config.gpio_pin_2y);
+err_free_1y:
+ gpio_free(nxp->config.gpio_pin_1y);
+err_free_s1:
+ gpio_free(nxp->config.gpio_pin_s1);
+err_free_s0:
+ gpio_free(nxp->config.gpio_pin_s0);
+err_free_nxp:
+ kfree(nxp);
+ return err;
+}
+
+static int nxp_74hc153_remove(struct platform_device *pdev)
+{
+ struct nxp_74hc153_chip *nxp = platform_get_drvdata(pdev);
+
+ if (nxp) {
+ gpiochip_remove(&nxp->gpio_chip);
+ gpio_free(nxp->config.gpio_pin_2y);
+ gpio_free(nxp->config.gpio_pin_1y);
+ gpio_free(nxp->config.gpio_pin_s1);
+ gpio_free(nxp->config.gpio_pin_s0);
+
+ kfree(nxp);
+ platform_set_drvdata(pdev, NULL);
+ }
+
+ return 0;
+}
+
+static struct of_device_id nxp_74hc153_id[] = {
+ {
+ .compatible = "nxp,74hc153-gpio",
+ .data = NULL,
+ }, { /* sentinel */ }
+};
+MODULE_DEVICE_TABLE(of, nxp_74hc153_id);
+
+static struct platform_driver nxp_74hc153_driver = {
+ .probe = nxp_74hc153_probe,
+ .remove = nxp_74hc153_remove,
+ .driver = {
+ .name = NXP_74HC153_DRIVER_NAME,
+ .owner = THIS_MODULE,
+ .of_match_table = nxp_74hc153_id,
+ },
+};
+
+static int __init nxp_74hc153_init(void)
+{
+ return platform_driver_register(&nxp_74hc153_driver);
+}
+subsys_initcall(nxp_74hc153_init);
+
+static void __exit nxp_74hc153_exit(void)
+{
+ platform_driver_unregister(&nxp_74hc153_driver);
+}
+module_exit(nxp_74hc153_exit);
+
+MODULE_AUTHOR("Gabor Juhos <juhosg@openwrt.org>");
+MODULE_DESCRIPTION("GPIO expander driver for NXP 74HC153");
+MODULE_LICENSE("GPL v2");
+MODULE_ALIAS("platform:" NXP_74HC153_DRIVER_NAME);
--
2.25.1
^ permalink raw reply related [flat|nested] 11+ messages in thread
* Re: [PATCH] gpio: driver for the NXP 74HC153 chip
2021-02-23 19:53 ` [PATCH] gpio: driver " Mauri Sandberg
@ 2021-02-23 23:22 ` kernel test robot
2021-04-03 9:39 ` Andy Shevchenko
2021-02-23 23:47 ` kernel test robot
2021-04-02 20:27 ` Drew Fustini
2 siblings, 1 reply; 11+ messages in thread
From: kernel test robot @ 2021-02-23 23:22 UTC (permalink / raw)
To: Mauri Sandberg, linux-gpio; +Cc: kbuild-all, Mauri Sandberg
[-- Attachment #1: Type: text/plain, Size: 2746 bytes --]
Hi Mauri,
Thank you for the patch! Perhaps something to improve:
[auto build test WARNING on gpio/for-next]
[also build test WARNING on v5.11 next-20210223]
[If your patch is applied to the wrong git tree, kindly drop us a note.
And when submitting patch, we suggest to use '--base' as documented in
https://git-scm.com/docs/git-format-patch]
url: https://github.com/0day-ci/linux/commits/Mauri-Sandberg/gpio-driver-for-the-NXP-74HC153-chip/20210224-040026
base: https://git.kernel.org/pub/scm/linux/kernel/git/linusw/linux-gpio.git for-next
config: arm64-allyesconfig (attached as .config)
compiler: aarch64-linux-gcc (GCC) 9.3.0
reproduce (this is a W=1 build):
wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross
chmod +x ~/bin/make.cross
# https://github.com/0day-ci/linux/commit/04cf14b1b4dad0702e35202513962925fdf8113f
git remote add linux-review https://github.com/0day-ci/linux
git fetch --no-tags linux-review Mauri-Sandberg/gpio-driver-for-the-NXP-74HC153-chip/20210224-040026
git checkout 04cf14b1b4dad0702e35202513962925fdf8113f
# save the attached .config to linux build tree
COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-9.3.0 make.cross ARCH=arm64
If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <lkp@intel.com>
All warnings (new ones prefixed by >>):
drivers/gpio/gpio-nxp-74hc153.c: In function 'nxp_74hc153_get_value':
>> drivers/gpio/gpio-nxp-74hc153.c:75:36: warning: variable 'pdata' set but not used [-Wunused-but-set-variable]
75 | struct nxp_74hc153_platform_data *pdata;
| ^~~~~
vim +/pdata +75 drivers/gpio/gpio-nxp-74hc153.c
71
72 static int nxp_74hc153_get_value(struct gpio_chip *gc, unsigned offset)
73 {
74 struct nxp_74hc153_chip *nxp;
> 75 struct nxp_74hc153_platform_data *pdata;
76 unsigned s0;
77 unsigned s1;
78 unsigned pin;
79 int ret;
80
81 nxp = gpio_to_nxp(gc);
82 pdata = nxp->parent->platform_data;
83
84 s0 = !!(offset & NXP_74HC153_S0_MASK);
85 s1 = !!(offset & NXP_74HC153_S1_MASK);
86 pin = (offset & NXP_74HC153_BANK_MASK) ? nxp->config.gpio_pin_2y
87 : nxp->config.gpio_pin_1y;
88
89 mutex_lock(&nxp->lock);
90 gpio_set_value(nxp->config.gpio_pin_s0, s0);
91 gpio_set_value(nxp->config.gpio_pin_s1, s1);
92 ret = gpio_get_value(pin);
93 mutex_unlock(&nxp->lock);
94
95 return ret;
96 }
97
---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all@lists.01.org
[-- Attachment #2: .config.gz --]
[-- Type: application/gzip, Size: 75513 bytes --]
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [PATCH] gpio: driver for the NXP 74HC153 chip
2021-02-23 19:53 ` [PATCH] gpio: driver " Mauri Sandberg
2021-02-23 23:22 ` kernel test robot
@ 2021-02-23 23:47 ` kernel test robot
2021-04-02 20:27 ` Drew Fustini
2 siblings, 0 replies; 11+ messages in thread
From: kernel test robot @ 2021-02-23 23:47 UTC (permalink / raw)
To: Mauri Sandberg, linux-gpio; +Cc: kbuild-all, Mauri Sandberg
[-- Attachment #1: Type: text/plain, Size: 6499 bytes --]
Hi Mauri,
Thank you for the patch! Yet something to improve:
[auto build test ERROR on gpio/for-next]
[also build test ERROR on v5.11 next-20210223]
[If your patch is applied to the wrong git tree, kindly drop us a note.
And when submitting patch, we suggest to use '--base' as documented in
https://git-scm.com/docs/git-format-patch]
url: https://github.com/0day-ci/linux/commits/Mauri-Sandberg/gpio-driver-for-the-NXP-74HC153-chip/20210224-040026
base: https://git.kernel.org/pub/scm/linux/kernel/git/linusw/linux-gpio.git for-next
config: s390-allmodconfig (attached as .config)
compiler: s390-linux-gcc (GCC) 9.3.0
reproduce (this is a W=1 build):
wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross
chmod +x ~/bin/make.cross
# https://github.com/0day-ci/linux/commit/04cf14b1b4dad0702e35202513962925fdf8113f
git remote add linux-review https://github.com/0day-ci/linux
git fetch --no-tags linux-review Mauri-Sandberg/gpio-driver-for-the-NXP-74HC153-chip/20210224-040026
git checkout 04cf14b1b4dad0702e35202513962925fdf8113f
# save the attached .config to linux build tree
COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-9.3.0 make.cross ARCH=s390
If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <lkp@intel.com>
All errors (new ones prefixed by >>):
drivers/gpio/gpio-nxp-74hc153.c: In function 'nxp_74hc153_get_value':
drivers/gpio/gpio-nxp-74hc153.c:75:36: warning: variable 'pdata' set but not used [-Wunused-but-set-variable]
75 | struct nxp_74hc153_platform_data *pdata;
| ^~~~~
drivers/gpio/gpio-nxp-74hc153.c: In function 'nxp_74hc153_probe':
>> drivers/gpio/gpio-nxp-74hc153.c:216:4: error: 'struct gpio_chip' has no member named 'of_node'
216 | gc->of_node = np;
| ^~
vim +216 drivers/gpio/gpio-nxp-74hc153.c
103
104 static int nxp_74hc153_probe(struct platform_device *pdev)
105 {
106 struct device_node *np = pdev->dev.of_node;
107 struct nxp_74hc153_chip *nxp;
108 struct gpio_chip *gc;
109 int err;
110 unsigned gpio_s0;
111 unsigned gpio_s1;
112 unsigned gpio_1y;
113 unsigned gpio_2y;
114
115 nxp = kzalloc(sizeof(struct nxp_74hc153_chip), GFP_KERNEL);
116 if (nxp == NULL) {
117 dev_err(&pdev->dev, "no memory for private data\n");
118 return -ENOMEM;
119 }
120
121 gpio_s0 = of_get_named_gpio(np, "gpio-s0", 0);
122 gpio_s1 = of_get_named_gpio(np, "gpio-s1", 0);
123 gpio_1y = of_get_named_gpio(np, "gpio-1y", 0);
124 gpio_2y = of_get_named_gpio(np, "gpio-2y", 0);
125
126 if (!gpio_is_valid(gpio_s0) || !gpio_is_valid(gpio_s1) ||
127 !gpio_is_valid(gpio_1y) || !gpio_is_valid(gpio_2y)) {
128
129 dev_err(&pdev->dev, "control GPIO(s) are missing\n");
130 err = -EINVAL;
131 goto err_free_nxp;
132 } else {
133 nxp->config.gpio_pin_s0 = gpio_s0;
134 nxp->config.gpio_pin_s1 = gpio_s1;
135 nxp->config.gpio_pin_1y = gpio_1y;
136 nxp->config.gpio_pin_2y = gpio_2y;
137 }
138
139 // apply pin configuration
140 err = gpio_request(nxp->config.gpio_pin_s0, dev_name(&pdev->dev));
141 if (err) {
142 dev_err(&pdev->dev, "unable to claim gpio %u, err=%d\n",
143 nxp->config.gpio_pin_s0, err);
144 goto err_free_nxp;
145 }
146
147 err = gpio_request(nxp->config.gpio_pin_s1, dev_name(&pdev->dev));
148 if (err) {
149 dev_err(&pdev->dev, "unable to claim gpio %u, err=%d\n",
150 nxp->config.gpio_pin_s1, err);
151 goto err_free_s0;
152 }
153
154 err = gpio_request(nxp->config.gpio_pin_1y, dev_name(&pdev->dev));
155 if (err) {
156 dev_err(&pdev->dev, "unable to claim gpio %u, err=%d\n",
157 nxp->config.gpio_pin_1y, err);
158 goto err_free_s1;
159 }
160
161 err = gpio_request(nxp->config.gpio_pin_2y, dev_name(&pdev->dev));
162 if (err) {
163 dev_err(&pdev->dev, "unable to claim gpio %u, err=%d\n",
164 nxp->config.gpio_pin_2y, err);
165 goto err_free_1y;
166 }
167
168 err = gpio_direction_output(nxp->config.gpio_pin_s0, 0);
169 if (err) {
170 dev_err(&pdev->dev,
171 "unable to set direction of gpio %u, err=%d\n",
172 nxp->config.gpio_pin_s0, err);
173 goto err_free_2y;
174 }
175
176 err = gpio_direction_output(nxp->config.gpio_pin_s1, 0);
177 if (err) {
178 dev_err(&pdev->dev,
179 "unable to set direction of gpio %u, err=%d\n",
180 nxp->config.gpio_pin_s1, err);
181 goto err_free_2y;
182 }
183
184 err = gpio_direction_input(nxp->config.gpio_pin_1y);
185 if (err) {
186 dev_err(&pdev->dev,
187 "unable to set direction of gpio %u, err=%d\n",
188 nxp->config.gpio_pin_1y, err);
189 goto err_free_2y;
190 }
191
192 err = gpio_direction_input(nxp->config.gpio_pin_2y);
193 if (err) {
194 dev_err(&pdev->dev,
195 "unable to set direction of gpio %u, err=%d\n",
196 nxp->config.gpio_pin_2y, err);
197 goto err_free_2y;
198 }
199
200 nxp->parent = &pdev->dev;
201 mutex_init(&nxp->lock);
202
203 gc = &nxp->gpio_chip;
204
205 gc->direction_input = nxp_74hc153_direction_input;
206 gc->direction_output = nxp_74hc153_direction_output;
207 gc->get = nxp_74hc153_get_value;
208 gc->set = nxp_74hc153_set_value;
209 gc->can_sleep = 1;
210
211 gc->base = -1;
212 gc->ngpio = NXP_74HC153_NUM_GPIOS;
213 gc->label = dev_name(nxp->parent);
214 gc->parent = nxp->parent;
215 gc->owner = THIS_MODULE;
> 216 gc->of_node = np;
217
218 err = gpiochip_add(&nxp->gpio_chip);
219 if (err) {
220 dev_err(&pdev->dev, "unable to add gpio chip, err=%d\n", err);
221 goto err_free_2y;
222 }
223
224 platform_set_drvdata(pdev, nxp);
225 return 0;
226
227 err_free_2y:
228 gpio_free(nxp->config.gpio_pin_2y);
229 err_free_1y:
230 gpio_free(nxp->config.gpio_pin_1y);
231 err_free_s1:
232 gpio_free(nxp->config.gpio_pin_s1);
233 err_free_s0:
234 gpio_free(nxp->config.gpio_pin_s0);
235 err_free_nxp:
236 kfree(nxp);
237 return err;
238 }
239
---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all@lists.01.org
[-- Attachment #2: .config.gz --]
[-- Type: application/gzip, Size: 27811 bytes --]
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [PATCH] gpio: driver for the NXP 74HC153 chip
2021-02-23 19:53 ` [PATCH] gpio: driver " Mauri Sandberg
2021-02-23 23:22 ` kernel test robot
2021-02-23 23:47 ` kernel test robot
@ 2021-04-02 20:27 ` Drew Fustini
2021-04-04 14:30 ` Mauri Sandberg
2 siblings, 1 reply; 11+ messages in thread
From: Drew Fustini @ 2021-04-02 20:27 UTC (permalink / raw)
To: Mauri Sandberg; +Cc: open list:GPIO SUBSYSTEM
On Tue, Feb 23, 2021 at 11:56 AM Mauri Sandberg <sandberg@mailfence.com> wrote:
>
> Support for NXP 74HC153 Dual 4-input Multiplexer. This provides a GPIO
> interface supporting input mode only
I would like to try this out. This seems like a commodity part so I
looked for it in a DIP package. I only see that from TI in the
SN74HC153N. Do you anticipate a different vendor being a problem?
thanks,
drew
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [PATCH] gpio: driver for the NXP 74HC153 chip
2021-02-23 23:22 ` kernel test robot
@ 2021-04-03 9:39 ` Andy Shevchenko
0 siblings, 0 replies; 11+ messages in thread
From: Andy Shevchenko @ 2021-04-03 9:39 UTC (permalink / raw)
To: kernel test robot; +Cc: Mauri Sandberg, open list:GPIO SUBSYSTEM, kbuild-all
On Wed, Feb 24, 2021 at 2:56 AM kernel test robot <lkp@intel.com> wrote:
>
> Hi Mauri,
Mauri, besides kbuild bot complaints, this patch has several major issues:
- it doesn't use gpio-mux and mux APIs
- it supports a single mux chip (or similar ones, like 4->2), however
we would like to have something more generic
- it uses outdated GPIO APIs
- it doesn't use managed resources API
- it has traces of legacy platform data (kbuild bot)
Sorry, but NAK from me. Please, reconsider the design, that we may
discuss even without code. When settled, we may have the first
implementations done.
--
With Best Regards,
Andy Shevchenko
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [PATCH] gpio: driver for the NXP 74HC153 chip
2021-04-02 20:27 ` Drew Fustini
@ 2021-04-04 14:30 ` Mauri Sandberg
2021-04-04 15:35 ` Drew Fustini
0 siblings, 1 reply; 11+ messages in thread
From: Mauri Sandberg @ 2021-04-04 14:30 UTC (permalink / raw)
To: Andy Shevchenko, Drew Fustini; +Cc: open list:GPIO SUBSYSTEM
> ----------------------------------------
> From: Drew Fustini <drew@beagleboard.org>
> On Tue, Feb 23, 2021 at 11:56 AM Mauri Sandberg <sandberg@mailfence.com> wrote:
> >
> > Support for NXP 74HC153 Dual 4-input Multiplexer. This provides a GPIO
> > interface supporting input mode only
>
> I would like to try this out. This seems like a commodity part so I
> looked for it in a DIP package. I only see that from TI in the
> SN74HC153N. Do you anticipate a different vendor being a problem?
Oh I am so sorry you guys had to see this. This is based on something I found and assumed to be up to
standards and thought of trying to upstream it with modifications to device tree functionality only. Soon
afterwards I realised its shortcomings in the GPIO api department and being too specific and sent a proposal
what's now known as 'gpio-mux-input'. No further efforts should be put into this.
I do not know how to withdraw a patch. Also, maybe I should have used the same thread with v2 instead
of sending a new patch with new title.
Apologies once again,
Mauri
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [PATCH] gpio: driver for the NXP 74HC153 chip
2021-04-04 14:30 ` Mauri Sandberg
@ 2021-04-04 15:35 ` Drew Fustini
2021-04-04 17:17 ` Andy Shevchenko
0 siblings, 1 reply; 11+ messages in thread
From: Drew Fustini @ 2021-04-04 15:35 UTC (permalink / raw)
To: Mauri Sandberg; +Cc: Andy Shevchenko, open list:GPIO SUBSYSTEM
On Sun, Apr 4, 2021, 07:30 Mauri Sandberg <sandberg@mailfence.com> wrote:
>
> > ----------------------------------------
> > From: Drew Fustini <drew@beagleboard.org>
> > On Tue, Feb 23, 2021 at 11:56 AM Mauri Sandberg <sandberg@mailfence.com> wrote:
> > >
> > > Support for NXP 74HC153 Dual 4-input Multiplexer. This provides a GPIO
> > > interface supporting input mode only
> >
> > I would like to try this out. This seems like a commodity part so I
> > looked for it in a DIP package. I only see that from TI in the
> > SN74HC153N. Do you anticipate a different vendor being a problem?
>
> Oh I am so sorry you guys had to see this. This is based on something I found and assumed to be up to
> standards and thought of trying to upstream it with modifications to device tree functionality only. Soon
> afterwards I realised its shortcomings in the GPIO api department and being too specific and sent a proposal
> what's now known as 'gpio-mux-input'. No further efforts should be put into this.
>
> I do not know how to withdraw a patch. Also, maybe I should have used the same thread with v2 instead
> of sending a new patch with new title.
No problem, I should not have replied to this old email, I had just
searched for the mention of the IC.
Do you think TI SN74HC153N should be ok for testing the gpio input
multiplexer patch [1]?
Thanks,
Drew
[1] https://lore.kernel.org/linux-gpio/20210325122832.119147-1-sandberg@mailfence.com/
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [PATCH] gpio: driver for the NXP 74HC153 chip
2021-04-04 15:35 ` Drew Fustini
@ 2021-04-04 17:17 ` Andy Shevchenko
2021-04-05 8:25 ` Mauri Sandberg
0 siblings, 1 reply; 11+ messages in thread
From: Andy Shevchenko @ 2021-04-04 17:17 UTC (permalink / raw)
To: Drew Fustini; +Cc: Mauri Sandberg, open list:GPIO SUBSYSTEM
On Sun, Apr 4, 2021 at 6:36 PM Drew Fustini <drew@beagleboard.org> wrote:
> On Sun, Apr 4, 2021, 07:30 Mauri Sandberg <sandberg@mailfence.com> wrote:
...
> Do you think TI SN74HC153N should be ok for testing the gpio input
> multiplexer patch [1]?
Functionally all those *4xxx153yyy are all analogous.
You even may try soviet copy of it, i.e. 555КП11 (cyrillic letters!,
555 can be 1533 or a few more variants).
> [1] https://lore.kernel.org/linux-gpio/20210325122832.119147-1-sandberg@mailfence.com/
--
With Best Regards,
Andy Shevchenko
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [PATCH] gpio: driver for the NXP 74HC153 chip
2021-04-04 17:17 ` Andy Shevchenko
@ 2021-04-05 8:25 ` Mauri Sandberg
2021-04-05 9:11 ` Andy Shevchenko
0 siblings, 1 reply; 11+ messages in thread
From: Mauri Sandberg @ 2021-04-05 8:25 UTC (permalink / raw)
To: Andy Shevchenko, Drew Fustini; +Cc: open list:GPIO SUBSYSTEM
> ----------------------------------------
> From: Andy Shevchenko <andy.shevchenko@gmail.com>
> On Sun, Apr 4, 2021 at 6:36 PM Drew Fustini <drew@beagleboard.org> wrote:
> > Do you think TI SN74HC153N should be ok for testing the gpio input
> > multiplexer patch [1]?
>
> Functionally all those *4xxx153yyy are all analogous.
> You even may try soviet copy of it, i.e. 555КП11 (cyrillic letters!,
> 555 can be 1533 or a few more variants).
I really do hope so. The reason for going for [1] is that it should provide a generic mechanism and
be manufacturer independent. :)
> > [1] https://lore.kernel.org/linux-gpio/20210325122832.119147-1-sandberg@mailfence.com/
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [PATCH] gpio: driver for the NXP 74HC153 chip
2021-04-05 8:25 ` Mauri Sandberg
@ 2021-04-05 9:11 ` Andy Shevchenko
0 siblings, 0 replies; 11+ messages in thread
From: Andy Shevchenko @ 2021-04-05 9:11 UTC (permalink / raw)
To: Mauri Sandberg; +Cc: Drew Fustini, open list:GPIO SUBSYSTEM
On Mon, Apr 5, 2021 at 11:25 AM Mauri Sandberg <sandberg@mailfence.com> wrote:
> > From: Andy Shevchenko <andy.shevchenko@gmail.com>
> > On Sun, Apr 4, 2021 at 6:36 PM Drew Fustini <drew@beagleboard.org> wrote:
> I really do hope so. The reason for going for [1] is that it should provide a generic mechanism and
> be manufacturer independent. :)
For some reason I don't see the latest in my mailbox, nevertheless I
have downloaded copy from lore and I'll try to review it sooner than
later.
> > > [1] https://lore.kernel.org/linux-gpio/20210325122832.119147-1-sandberg@mailfence.com/
--
With Best Regards,
Andy Shevchenko
^ permalink raw reply [flat|nested] 11+ messages in thread
end of thread, other threads:[~2021-04-05 9:12 UTC | newest]
Thread overview: 11+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-02-23 19:53 [RFC] Driver for the NXP 74HC153 chip Mauri Sandberg
2021-02-23 19:53 ` [PATCH] gpio: driver " Mauri Sandberg
2021-02-23 23:22 ` kernel test robot
2021-04-03 9:39 ` Andy Shevchenko
2021-02-23 23:47 ` kernel test robot
2021-04-02 20:27 ` Drew Fustini
2021-04-04 14:30 ` Mauri Sandberg
2021-04-04 15:35 ` Drew Fustini
2021-04-04 17:17 ` Andy Shevchenko
2021-04-05 8:25 ` Mauri Sandberg
2021-04-05 9:11 ` Andy Shevchenko
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).