* gpio-keys-polled improvements @ 2019-04-16 19:57 Enrico Weigelt, metux IT consult 2019-04-16 19:57 ` [PATCH 1/4] mod_devicetable: helper macro for declaring oftree module device table Enrico Weigelt, metux IT consult ` (3 more replies) 0 siblings, 4 replies; 13+ messages in thread From: Enrico Weigelt, metux IT consult @ 2019-04-16 19:57 UTC (permalink / raw) To: linux-kernel; +Cc: dmitry.torokhov, linux-input Hello folks, here're some improvements for the gpio-keys-polled driver. The first patch isn't in the driver itself, but adds a little module helper for conditionally declaring oftree module table if oftree is enabled (only needed for the last patch) have fun. --mtx ^ permalink raw reply [flat|nested] 13+ messages in thread
* [PATCH 1/4] mod_devicetable: helper macro for declaring oftree module device table 2019-04-16 19:57 gpio-keys-polled improvements Enrico Weigelt, metux IT consult @ 2019-04-16 19:57 ` Enrico Weigelt, metux IT consult 2019-04-19 7:40 ` Dmitry Torokhov 2019-04-16 19:57 ` [PATCH 2/4] input: keyboard: gpio-keys-polled: use input name from pdata if available Enrico Weigelt, metux IT consult ` (2 subsequent siblings) 3 siblings, 1 reply; 13+ messages in thread From: Enrico Weigelt, metux IT consult @ 2019-04-16 19:57 UTC (permalink / raw) To: linux-kernel; +Cc: dmitry.torokhov, linux-input Little helper macro that declares an oftree module device table, if CONFIG_OF is enabled. Otherwise it's just noop. This is also helpful if some drivers can be built w/ or w/o oftree support. Signed-off-by: Enrico Weigelt, metux IT consult <info@metux.net> --- include/linux/mod_devicetable.h | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/include/linux/mod_devicetable.h b/include/linux/mod_devicetable.h index 448621c..853e301 100644 --- a/include/linux/mod_devicetable.h +++ b/include/linux/mod_devicetable.h @@ -245,6 +245,15 @@ struct of_device_id { const void *data; }; +/* + * macro for adding the of module device table only if CONFIG_OF enabled + */ +#ifdef CONFIG_OF +#define MODULE_DEVICE_TABLE_OF(name) MODULE_DEVICE_TABLE(of,name) +#else +#define MODULE_DEVICE_TABLE_OF(name) +#endif /* CONFIG_OF */ + /* VIO */ struct vio_device_id { char type[32]; -- 1.9.1 ^ permalink raw reply related [flat|nested] 13+ messages in thread
* Re: [PATCH 1/4] mod_devicetable: helper macro for declaring oftree module device table 2019-04-16 19:57 ` [PATCH 1/4] mod_devicetable: helper macro for declaring oftree module device table Enrico Weigelt, metux IT consult @ 2019-04-19 7:40 ` Dmitry Torokhov 2019-04-24 10:48 ` Enrico Weigelt, metux IT consult 0 siblings, 1 reply; 13+ messages in thread From: Dmitry Torokhov @ 2019-04-19 7:40 UTC (permalink / raw) To: Enrico Weigelt, metux IT consult; +Cc: linux-kernel, linux-input Hi Enrico, On Tue, Apr 16, 2019 at 09:57:22PM +0200, Enrico Weigelt, metux IT consult wrote: > Little helper macro that declares an oftree module device table, > if CONFIG_OF is enabled. Otherwise it's just noop. > > This is also helpful if some drivers can be built w/ or w/o > oftree support. This should go to OF folks, please. > > Signed-off-by: Enrico Weigelt, metux IT consult <info@metux.net> > --- > include/linux/mod_devicetable.h | 9 +++++++++ > 1 file changed, 9 insertions(+) > > diff --git a/include/linux/mod_devicetable.h b/include/linux/mod_devicetable.h > index 448621c..853e301 100644 > --- a/include/linux/mod_devicetable.h > +++ b/include/linux/mod_devicetable.h > @@ -245,6 +245,15 @@ struct of_device_id { > const void *data; > }; > > +/* > + * macro for adding the of module device table only if CONFIG_OF enabled > + */ > +#ifdef CONFIG_OF > +#define MODULE_DEVICE_TABLE_OF(name) MODULE_DEVICE_TABLE(of,name) > +#else > +#define MODULE_DEVICE_TABLE_OF(name) > +#endif /* CONFIG_OF */ > + > /* VIO */ > struct vio_device_id { > char type[32]; > -- > 1.9.1 > -- Dmitry ^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [PATCH 1/4] mod_devicetable: helper macro for declaring oftree module device table 2019-04-19 7:40 ` Dmitry Torokhov @ 2019-04-24 10:48 ` Enrico Weigelt, metux IT consult 2019-04-29 19:48 ` Frank Rowand 0 siblings, 1 reply; 13+ messages in thread From: Enrico Weigelt, metux IT consult @ 2019-04-24 10:48 UTC (permalink / raw) To: Dmitry Torokhov, Enrico Weigelt, metux IT consult Cc: linux-kernel, linux-input On 19.04.19 09:40, Dmitry Torokhov wrote: > Hi Enrico, > > On Tue, Apr 16, 2019 at 09:57:22PM +0200, Enrico Weigelt, metux IT consult wrote: >> Little helper macro that declares an oftree module device table, >> if CONFIG_OF is enabled. Otherwise it's just noop. >> >> This is also helpful if some drivers can be built w/ or w/o >> oftree support. > > This should go to OF folks, please. hmm, they should be CCed, if my script works right. This one is only needed for the 4th patch (skip oftree...). --mtx -- Enrico Weigelt, metux IT consult Free software and Linux embedded engineering info@metux.net -- +49-151-27565287 ^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [PATCH 1/4] mod_devicetable: helper macro for declaring oftree module device table 2019-04-24 10:48 ` Enrico Weigelt, metux IT consult @ 2019-04-29 19:48 ` Frank Rowand 0 siblings, 0 replies; 13+ messages in thread From: Frank Rowand @ 2019-04-29 19:48 UTC (permalink / raw) To: Enrico Weigelt, metux IT consult, Dmitry Torokhov, Enrico Weigelt, metux IT consult Cc: linux-kernel, linux-input On 4/24/19 3:48 AM, Enrico Weigelt, metux IT consult wrote: > On 19.04.19 09:40, Dmitry Torokhov wrote: >> Hi Enrico, >> >> On Tue, Apr 16, 2019 at 09:57:22PM +0200, Enrico Weigelt, metux IT consult wrote: >>> Little helper macro that declares an oftree module device table, >>> if CONFIG_OF is enabled. Otherwise it's just noop. >>> >>> This is also helpful if some drivers can be built w/ or w/o >>> oftree support. >> >> This should go to OF folks, please. > > hmm, they should be CCed, if my script works right. > This one is only needed for the 4th patch (skip oftree...). Your script did not work (BTDT). I just happened to notice this on lkml. -Frank > > > --mtx > ^ permalink raw reply [flat|nested] 13+ messages in thread
* [PATCH 2/4] input: keyboard: gpio-keys-polled: use input name from pdata if available 2019-04-16 19:57 gpio-keys-polled improvements Enrico Weigelt, metux IT consult 2019-04-16 19:57 ` [PATCH 1/4] mod_devicetable: helper macro for declaring oftree module device table Enrico Weigelt, metux IT consult @ 2019-04-16 19:57 ` Enrico Weigelt, metux IT consult 2019-04-16 19:57 ` [PATCH 3/4] input: keyboard: gpio_keys_polled: use gpio lookup table Enrico Weigelt, metux IT consult 2019-04-16 19:57 ` [PATCH 4/4] input: keyboard: gpio-keys-polled: skip oftree code when CONFIG_OF disabled Enrico Weigelt, metux IT consult 3 siblings, 0 replies; 13+ messages in thread From: Enrico Weigelt, metux IT consult @ 2019-04-16 19:57 UTC (permalink / raw) To: linux-kernel; +Cc: dmitry.torokhov, linux-input Instead of hardcoding the input name to the driver name ('gpio-keys-polled'), allow the passing a name via platform data ('name' field was already present), but default to old behaviour in case of NULL. Cc: Dmitry Torokhov <dmitry.torokhov@gmail.com> Cc: linux-input@vger.kernel.org Signed-off-by: Enrico Weigelt, metux IT consult <info@metux.net> --- drivers/input/keyboard/gpio_keys_polled.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/drivers/input/keyboard/gpio_keys_polled.c b/drivers/input/keyboard/gpio_keys_polled.c index edc7262..3312186 100644 --- a/drivers/input/keyboard/gpio_keys_polled.c +++ b/drivers/input/keyboard/gpio_keys_polled.c @@ -272,7 +272,7 @@ static int gpio_keys_polled_probe(struct platform_device *pdev) input = poll_dev->input; - input->name = pdev->name; + input->name = (pdata->name ? pdata->name : pdev->name); input->phys = DRV_NAME"/input0"; input->id.bustype = BUS_HOST; -- 1.9.1 ^ permalink raw reply related [flat|nested] 13+ messages in thread
* [PATCH 3/4] input: keyboard: gpio_keys_polled: use gpio lookup table 2019-04-16 19:57 gpio-keys-polled improvements Enrico Weigelt, metux IT consult 2019-04-16 19:57 ` [PATCH 1/4] mod_devicetable: helper macro for declaring oftree module device table Enrico Weigelt, metux IT consult 2019-04-16 19:57 ` [PATCH 2/4] input: keyboard: gpio-keys-polled: use input name from pdata if available Enrico Weigelt, metux IT consult @ 2019-04-16 19:57 ` Enrico Weigelt, metux IT consult 2019-04-19 7:48 ` Dmitry Torokhov 2019-04-16 19:57 ` [PATCH 4/4] input: keyboard: gpio-keys-polled: skip oftree code when CONFIG_OF disabled Enrico Weigelt, metux IT consult 3 siblings, 1 reply; 13+ messages in thread From: Enrico Weigelt, metux IT consult @ 2019-04-16 19:57 UTC (permalink / raw) To: linux-kernel; +Cc: dmitry.torokhov, linux-input Support the recently introduced gpio lookup tables for attaching to gpio lines. So, harcoded gpio numbers aren't needed anymore. Cc: Dmitry Torokhov <dmitry.torokhov@gmail.com> Cc: linux-input@vger.kernel.org Signed-off-by: Enrico Weigelt, metux IT consult <info@metux.net> --- drivers/input/keyboard/gpio_keys_polled.c | 167 +++++++++++++++++++++--------- 1 file changed, 119 insertions(+), 48 deletions(-) diff --git a/drivers/input/keyboard/gpio_keys_polled.c b/drivers/input/keyboard/gpio_keys_polled.c index 3312186..3f773b2 100644 --- a/drivers/input/keyboard/gpio_keys_polled.c +++ b/drivers/input/keyboard/gpio_keys_polled.c @@ -24,6 +24,7 @@ #include <linux/platform_device.h> #include <linux/gpio.h> #include <linux/gpio/consumer.h> +#include <linux/gpio/machine.h> #include <linux/gpio_keys.h> #include <linux/property.h> @@ -227,6 +228,119 @@ static void gpio_keys_polled_set_abs_params(struct input_dev *input, }; MODULE_DEVICE_TABLE(of, gpio_keys_polled_of_match); +static struct gpio_desc *gpio_keys_polled_get_gpiod_fwnode( + struct device *dev, + int idx, + const char *desc) +{ + struct gpio_desc *gpiod; + struct fwnode_handle *child; + int x; + + /* get the idx'th child node */ + child = device_get_next_child_node(dev, NULL); + while (child && x) { + child = device_get_next_child_node(dev, child); + x--; + } + + if (!child) { + dev_err(dev, "missing oftree child node #%d\n", idx); + return ERR_PTR(-EINVAL); + } + + gpiod = devm_fwnode_get_gpiod_from_child(dev, + NULL, + child, + GPIOD_IN, + desc); + if (IS_ERR(gpiod)) { + if (PTR_ERR(gpiod) != -EPROBE_DEFER) + dev_err(dev, + "failed to get gpio: %ld\n", + PTR_ERR(gpiod)); + fwnode_handle_put(child); + return gpiod; + } + + return gpiod; +} + +static struct gpio_desc *gpio_keys_polled_get_gpiod_legacy( + struct device *dev, + int idx, + const struct gpio_keys_button *button) +{ + /* + * Legacy GPIO number so request the GPIO here and + * convert it to descriptor. + */ + unsigned int flags = GPIOF_IN; + struct gpio_desc *gpiod; + int error; + + dev_info(dev, "hardcoded gpio IDs are deprecated.\n"); + + if (button->active_low) + flags |= GPIOF_ACTIVE_LOW; + + error = devm_gpio_request_one(dev, button->gpio, + flags, button->desc ? : DRV_NAME); + if (error) { + dev_err(dev, + "unable to claim gpio %u, err=%d\n", + button->gpio, error); + return ERR_PTR(error); + } + + gpiod = gpio_to_desc(button->gpio); + if (!gpiod) { + dev_err(dev, + "unable to convert gpio %u to descriptor\n", + button->gpio); + return ERR_PTR(-EINVAL); + } + + return gpiod; +} + +static struct gpio_desc *gpio_keys_polled_get_gpiod( + struct device *dev, + int idx, + const struct gpio_keys_button *button) +{ + struct gpio_desc *gpiod = NULL; + int error; + + /* No legacy static platform data - use oftree */ + if (!dev_get_platdata(dev)) { + return gpio_keys_polled_get_gpiod_fwnode( + dev, idx, button->desc); + } + + gpiod = devm_gpiod_get_index(dev, NULL, idx, GPIOF_IN); + + if (!IS_ERR(gpiod)) { + dev_info(dev, "picked gpiod idx %d from gpio table\n", idx); + gpiod_set_consumer_name(gpiod, button->desc ? : DRV_NAME); + return gpiod; + } + + if (PTR_ERR(gpiod) != -ENOENT) { + dev_err(dev, "failed fetching gpiod #%d: %d\n", + idx, PTR_ERR(gpiod)); + return gpiod; + } + + /* Use legacy gpio id, if defined */ + if (gpio_is_valid(button->gpio)) { + return gpio_keys_polled_get_gpiod_legacy( + dev, idx, button); + } + + return ERR_PTR(-ENOENT); +} + static int gpio_keys_polled_probe(struct platform_device *pdev) { struct device *dev = &pdev->dev; @@ -291,57 +405,14 @@ static int gpio_keys_polled_probe(struct platform_device *pdev) if (button->wakeup) { dev_err(dev, DRV_NAME " does not support wakeup\n"); - fwnode_handle_put(child); return -EINVAL; } - if (!dev_get_platdata(dev)) { - /* No legacy static platform data */ - child = device_get_next_child_node(dev, child); - if (!child) { - dev_err(dev, "missing child device node\n"); - return -EINVAL; - } - - bdata->gpiod = devm_fwnode_get_gpiod_from_child(dev, - NULL, child, - GPIOD_IN, - button->desc); - if (IS_ERR(bdata->gpiod)) { - error = PTR_ERR(bdata->gpiod); - if (error != -EPROBE_DEFER) - dev_err(dev, - "failed to get gpio: %d\n", - error); - fwnode_handle_put(child); - return error; - } - } else if (gpio_is_valid(button->gpio)) { - /* - * Legacy GPIO number so request the GPIO here and - * convert it to descriptor. - */ - unsigned flags = GPIOF_IN; - - if (button->active_low) - flags |= GPIOF_ACTIVE_LOW; - - error = devm_gpio_request_one(dev, button->gpio, - flags, button->desc ? : DRV_NAME); - if (error) { - dev_err(dev, - "unable to claim gpio %u, err=%d\n", - button->gpio, error); - return error; - } - - bdata->gpiod = gpio_to_desc(button->gpio); - if (!bdata->gpiod) { - dev_err(dev, - "unable to convert gpio %u to descriptor\n", - button->gpio); - return -EINVAL; - } + bdata->gpiod = gpio_keys_polled_get_gpiod(dev, i, button); + + if (IS_ERR(bdata->gpiod)) { + dev_err(dev, "failed to fetch gpiod #%d\n", i); + return PTR_ERR(bdata->gpiod); } bdata->last_state = -1; -- 1.9.1 ^ permalink raw reply related [flat|nested] 13+ messages in thread
* Re: [PATCH 3/4] input: keyboard: gpio_keys_polled: use gpio lookup table 2019-04-16 19:57 ` [PATCH 3/4] input: keyboard: gpio_keys_polled: use gpio lookup table Enrico Weigelt, metux IT consult @ 2019-04-19 7:48 ` Dmitry Torokhov 2019-04-24 10:59 ` Enrico Weigelt, metux IT consult 0 siblings, 1 reply; 13+ messages in thread From: Dmitry Torokhov @ 2019-04-19 7:48 UTC (permalink / raw) To: Enrico Weigelt, metux IT consult; +Cc: linux-kernel, linux-input Hi Enrico, On Tue, Apr 16, 2019 at 09:57:24PM +0200, Enrico Weigelt, metux IT consult wrote: > Support the recently introduced gpio lookup tables for > attaching to gpio lines. So, harcoded gpio numbers aren't > needed anymore. I would prefer if gpiod API could parse static board data/gpio lookup tables for child nodes, instead of adding this to gpio-keys. Now that Heikki Krogerus work on software nodes has landed I need to resurrect my patch to gpiolib. Thanks. -- Dmitry ^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [PATCH 3/4] input: keyboard: gpio_keys_polled: use gpio lookup table 2019-04-19 7:48 ` Dmitry Torokhov @ 2019-04-24 10:59 ` Enrico Weigelt, metux IT consult 0 siblings, 0 replies; 13+ messages in thread From: Enrico Weigelt, metux IT consult @ 2019-04-24 10:59 UTC (permalink / raw) To: Dmitry Torokhov, Enrico Weigelt, metux IT consult Cc: linux-kernel, linux-input On 19.04.19 09:48, Dmitry Torokhov wrote: > I would prefer if gpiod API could parse static board data/gpio lookup > tables for child nodes, instead of adding this to gpio-keys. Now that > Heikki Krogerus work on software nodes has landed I need to resurrect > my patch to gpiolib. Of course, a more generic approach would be better. I did it that way I wasn't that aware that a more generic approach is in the pipeline, and I needed something usable now. The patch is already used in the field and seems to work quite well, but if I'm alway open for better solutions. I figure that the generic solution will still take some time, so can we take this one for the next merge window and rework it in the next one ? --mtx -- Enrico Weigelt, metux IT consult Free software and Linux embedded engineering info@metux.net -- +49-151-27565287 ^ permalink raw reply [flat|nested] 13+ messages in thread
* [PATCH 4/4] input: keyboard: gpio-keys-polled: skip oftree code when CONFIG_OF disabled 2019-04-16 19:57 gpio-keys-polled improvements Enrico Weigelt, metux IT consult ` (2 preceding siblings ...) 2019-04-16 19:57 ` [PATCH 3/4] input: keyboard: gpio_keys_polled: use gpio lookup table Enrico Weigelt, metux IT consult @ 2019-04-16 19:57 ` Enrico Weigelt, metux IT consult 2019-04-29 19:44 ` Frank Rowand 3 siblings, 1 reply; 13+ messages in thread From: Enrico Weigelt, metux IT consult @ 2019-04-16 19:57 UTC (permalink / raw) To: linux-kernel; +Cc: dmitry.torokhov, linux-input we don't need to build in oftree probing stuff when oftree isn't enabled at all. Signed-off-by: Enrico Weigelt, metux IT consult <info@metux.net> --- drivers/input/keyboard/gpio_keys_polled.c | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/drivers/input/keyboard/gpio_keys_polled.c b/drivers/input/keyboard/gpio_keys_polled.c index 3f773b2..fbccb89 100644 --- a/drivers/input/keyboard/gpio_keys_polled.c +++ b/drivers/input/keyboard/gpio_keys_polled.c @@ -147,6 +147,7 @@ static void gpio_keys_polled_close(struct input_polled_dev *dev) static struct gpio_keys_platform_data * gpio_keys_polled_get_devtree_pdata(struct device *dev) { +#ifdef CONFIG_OF struct gpio_keys_platform_data *pdata; struct gpio_keys_button *button; struct fwnode_handle *child; @@ -200,6 +201,9 @@ static void gpio_keys_polled_close(struct input_polled_dev *dev) } return pdata; +#else /* CONFIG_OF */ + return ERR_PTR(-ENOENT); +#endif /* CONFIG_OF */ } static void gpio_keys_polled_set_abs_params(struct input_dev *input, @@ -226,7 +230,7 @@ static void gpio_keys_polled_set_abs_params(struct input_dev *input, { .compatible = "gpio-keys-polled", }, { }, }; -MODULE_DEVICE_TABLE(of, gpio_keys_polled_of_match); +MODULE_DEVICE_TABLE_OF(gpio_keys_polled_of_match); static struct gpio_desc *gpio_keys_polled_get_gpiod_fwnode( struct device *dev, @@ -452,7 +456,9 @@ static int gpio_keys_polled_probe(struct platform_device *pdev) .probe = gpio_keys_polled_probe, .driver = { .name = DRV_NAME, +#ifdef CONFIG_OF .of_match_table = gpio_keys_polled_of_match, +#endif /* CONFIG_OF */ }, }; module_platform_driver(gpio_keys_polled_driver); -- 1.9.1 ^ permalink raw reply related [flat|nested] 13+ messages in thread
* Re: [PATCH 4/4] input: keyboard: gpio-keys-polled: skip oftree code when CONFIG_OF disabled 2019-04-16 19:57 ` [PATCH 4/4] input: keyboard: gpio-keys-polled: skip oftree code when CONFIG_OF disabled Enrico Weigelt, metux IT consult @ 2019-04-29 19:44 ` Frank Rowand 2019-04-29 21:40 ` Enrico Weigelt, metux IT consult 0 siblings, 1 reply; 13+ messages in thread From: Frank Rowand @ 2019-04-29 19:44 UTC (permalink / raw) To: Enrico Weigelt, metux IT consult, linux-kernel Cc: dmitry.torokhov, linux-input On 4/16/19 12:57 PM, Enrico Weigelt, metux IT consult wrote: > we don't need to build in oftree probing stuff when oftree isn't > enabled at all. > > Signed-off-by: Enrico Weigelt, metux IT consult <info@metux.net> > --- > drivers/input/keyboard/gpio_keys_polled.c | 8 +++++++- > 1 file changed, 7 insertions(+), 1 deletion(-) > > diff --git a/drivers/input/keyboard/gpio_keys_polled.c b/drivers/input/keyboard/gpio_keys_polled.c > index 3f773b2..fbccb89 100644 > --- a/drivers/input/keyboard/gpio_keys_polled.c > +++ b/drivers/input/keyboard/gpio_keys_polled.c > @@ -147,6 +147,7 @@ static void gpio_keys_polled_close(struct input_polled_dev *dev) > static struct gpio_keys_platform_data * > gpio_keys_polled_get_devtree_pdata(struct device *dev) > { > +#ifdef CONFIG_OF > struct gpio_keys_platform_data *pdata; > struct gpio_keys_button *button; > struct fwnode_handle *child; > @@ -200,6 +201,9 @@ static void gpio_keys_polled_close(struct input_polled_dev *dev) > } > > return pdata; > +#else /* CONFIG_OF */ > + return ERR_PTR(-ENOENT); > +#endif /* CONFIG_OF */ > } > > static void gpio_keys_polled_set_abs_params(struct input_dev *input, > @@ -226,7 +230,7 @@ static void gpio_keys_polled_set_abs_params(struct input_dev *input, > { .compatible = "gpio-keys-polled", }, > { }, > }; > -MODULE_DEVICE_TABLE(of, gpio_keys_polled_of_match); > +MODULE_DEVICE_TABLE_OF(gpio_keys_polled_of_match); Not needed, when you use of_match_ptr() -- see below. > > static struct gpio_desc *gpio_keys_polled_get_gpiod_fwnode( > struct device *dev, > @@ -452,7 +456,9 @@ static int gpio_keys_polled_probe(struct platform_device *pdev) > .probe = gpio_keys_polled_probe, > .driver = { > .name = DRV_NAME, > +#ifdef CONFIG_OF > .of_match_table = gpio_keys_polled_of_match, > +#endif /* CONFIG_OF */ No need for the #ifdef, use of_match_ptr(): .of_match_table = of_match_ptr(gpio_keys_polled_of_match), > }, > }; > module_platform_driver(gpio_keys_polled_driver); > ^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [PATCH 4/4] input: keyboard: gpio-keys-polled: skip oftree code when CONFIG_OF disabled 2019-04-29 19:44 ` Frank Rowand @ 2019-04-29 21:40 ` Enrico Weigelt, metux IT consult 0 siblings, 0 replies; 13+ messages in thread From: Enrico Weigelt, metux IT consult @ 2019-04-29 21:40 UTC (permalink / raw) To: Frank Rowand, Enrico Weigelt, metux IT consult, linux-kernel Cc: dmitry.torokhov, linux-input On 29.04.19 21:44, Frank Rowand wrote: > On 4/16/19 12:57 PM, Enrico Weigelt, metux IT consult wrote: >> we don't need to build in oftree probing stuff when oftree isn't >> enabled at all. >> >> Signed-off-by: Enrico Weigelt, metux IT consult <info@metux.net> >> --- >> drivers/input/keyboard/gpio_keys_polled.c | 8 +++++++- >> 1 file changed, 7 insertions(+), 1 deletion(-) >> >> diff --git a/drivers/input/keyboard/gpio_keys_polled.c b/drivers/input/keyboard/gpio_keys_polled.c >> index 3f773b2..fbccb89 100644 >> --- a/drivers/input/keyboard/gpio_keys_polled.c >> +++ b/drivers/input/keyboard/gpio_keys_polled.c >> @@ -147,6 +147,7 @@ static void gpio_keys_polled_close(struct input_polled_dev *dev) >> static struct gpio_keys_platform_data * >> gpio_keys_polled_get_devtree_pdata(struct device *dev) >> { >> +#ifdef CONFIG_OF >> struct gpio_keys_platform_data *pdata; >> struct gpio_keys_button *button; >> struct fwnode_handle *child; >> @@ -200,6 +201,9 @@ static void gpio_keys_polled_close(struct input_polled_dev *dev) >> } >> >> return pdata; >> +#else /* CONFIG_OF */ >> + return ERR_PTR(-ENOENT); >> +#endif /* CONFIG_OF */ >> } >> >> static void gpio_keys_polled_set_abs_params(struct input_dev *input, >> @@ -226,7 +230,7 @@ static void gpio_keys_polled_set_abs_params(struct input_dev *input, >> { .compatible = "gpio-keys-polled", }, >> { }, >> }; > > >> -MODULE_DEVICE_TABLE(of, gpio_keys_polled_of_match); >> +MODULE_DEVICE_TABLE_OF(gpio_keys_polled_of_match); > > Not needed, when you use of_match_ptr() -- see below. Shall I remove the MODULE_DEVICE_TABLE... line completely ? I'd like to have nothing of-related compiled in, when oftree isn't enabled. >> static struct gpio_desc *gpio_keys_polled_get_gpiod_fwnode( >> struct device *dev, >> @@ -452,7 +456,9 @@ static int gpio_keys_polled_probe(struct platform_device *pdev) >> .probe = gpio_keys_polled_probe, >> .driver = { >> .name = DRV_NAME, > >> +#ifdef CONFIG_OF >> .of_match_table = gpio_keys_polled_of_match, >> +#endif /* CONFIG_OF */ > > No need for the #ifdef, use of_match_ptr(): > > .of_match_table = of_match_ptr(gpio_keys_polled_of_match), Ok, thanks. --mtx -- Enrico Weigelt, metux IT consult Free software and Linux embedded engineering info@metux.net -- +49-151-27565287 ^ permalink raw reply [flat|nested] 13+ messages in thread
* RFC: declaring DT match tables (2nd take) @ 2019-06-01 13:52 Enrico Weigelt, metux IT consult 2019-06-01 13:52 ` [PATCH 1/4] mod_devicetable: helper macro for declaring oftree module device table Enrico Weigelt, metux IT consult 0 siblings, 1 reply; 13+ messages in thread From: Enrico Weigelt, metux IT consult @ 2019-06-01 13:52 UTC (permalink / raw) To: linux-kernel Cc: vireshk, b.zolnierkie, axboe, herbert, davem, linux-ide, linux-block, linux-crypto Hi folks, few days ago I've posted a RFC for getting rid of many #ifdef CONFIG_OF cases by using a macro that checks for it on its own. (see: "RFC: get rid of #ifdef CONFIG_OF's around of match tables") I've already mentioned I'm working on another approach that not just cares about adding the table to the module, but the also the declaration of the table itself. Here it is: Introducing a macro MODULE_DECLARE_OF_TABLE(foo, entries), which declares a static struct of_device_id array, fills in the entries (automatically adds the sentinel) and calls MODULE_DEVICE_TABLE() - if CONFIG_OF is enabled. The current version isn't fully noop in absence of CONFIG_OF, but also declares a static const *pointer* variable, initialized NULL, with the same name. The idea behind: we don't need to use of_match_ptr() anymore. I believe, the compiler should be clever enough to find out that this field is always NULL and can't ever change, so it can be easily optimized away. (correct me if I'm wrong). Please have a look at the following example patches and let me know, whether we can go that way. If you're okay w/ that, I'll continue w/ converting the whole tree to using this approach. I've already did most of it, yet needs to be sorted out into easily digestable patches :) And I'd also do the same w/ the other table types (ACPI, PCI, I2C, ...) By the way: an interesting question arises: shall that conversion be done *everywhere*, or just those sites where explicit CONFIG_OF's are involved ? have fun, --mtx ^ permalink raw reply [flat|nested] 13+ messages in thread
* [PATCH 1/4] mod_devicetable: helper macro for declaring oftree module device table 2019-06-01 13:52 RFC: declaring DT match tables (2nd take) Enrico Weigelt, metux IT consult @ 2019-06-01 13:52 ` Enrico Weigelt, metux IT consult 0 siblings, 0 replies; 13+ messages in thread From: Enrico Weigelt, metux IT consult @ 2019-06-01 13:52 UTC (permalink / raw) To: linux-kernel Cc: vireshk, b.zolnierkie, axboe, herbert, davem, linux-ide, linux-block, linux-crypto Little helper macros that declares an oftree module device table, if CONFIG_OF is enabled. Otherwise it's just noop. Helpful for reducing the number of #ifdef's. Instead of: MODULE_DEVICE_TABLE(of, foo); now use: MODULE_OF_TABLE(foo); Or declare the whole table via: MODULE_DECLARE_OF_TABLE(foo, { .compatible = "foo" }, { .compatible = "bar" }); Signed-off-by: Enrico Weigelt, metux IT consult <info@metux.net> --- include/linux/mod_devicetable.h | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/include/linux/mod_devicetable.h b/include/linux/mod_devicetable.h index 448621c..5f4f2dc8 100644 --- a/include/linux/mod_devicetable.h +++ b/include/linux/mod_devicetable.h @@ -245,6 +245,19 @@ struct of_device_id { const void *data; }; +/* + * macro for adding the of module device table only if CONFIG_OF enabled + */ +#ifdef CONFIG_OF +#define MODULE_OF_TABLE(name) MODULE_DEVICE_TABLE(of,name) +#define MODULE_DECLARE_OF_TABLE(name,entries...) \ +static const struct of_device_id name[] = { entries, {} }; +#else +#define MODULE_OF_TABLE(name) +#define MODULE_DECLARE_OF_TABLE(name,entries...) \ +static const struct of_device_id *name = NULL; +#endif /* CONFIG_OF */ + /* VIO */ struct vio_device_id { char type[32]; -- 1.9.1 ^ permalink raw reply related [flat|nested] 13+ messages in thread
end of thread, other threads:[~2019-06-01 13:53 UTC | newest] Thread overview: 13+ messages (download: mbox.gz / follow: Atom feed) -- links below jump to the message on this page -- 2019-04-16 19:57 gpio-keys-polled improvements Enrico Weigelt, metux IT consult 2019-04-16 19:57 ` [PATCH 1/4] mod_devicetable: helper macro for declaring oftree module device table Enrico Weigelt, metux IT consult 2019-04-19 7:40 ` Dmitry Torokhov 2019-04-24 10:48 ` Enrico Weigelt, metux IT consult 2019-04-29 19:48 ` Frank Rowand 2019-04-16 19:57 ` [PATCH 2/4] input: keyboard: gpio-keys-polled: use input name from pdata if available Enrico Weigelt, metux IT consult 2019-04-16 19:57 ` [PATCH 3/4] input: keyboard: gpio_keys_polled: use gpio lookup table Enrico Weigelt, metux IT consult 2019-04-19 7:48 ` Dmitry Torokhov 2019-04-24 10:59 ` Enrico Weigelt, metux IT consult 2019-04-16 19:57 ` [PATCH 4/4] input: keyboard: gpio-keys-polled: skip oftree code when CONFIG_OF disabled Enrico Weigelt, metux IT consult 2019-04-29 19:44 ` Frank Rowand 2019-04-29 21:40 ` Enrico Weigelt, metux IT consult 2019-06-01 13:52 RFC: declaring DT match tables (2nd take) Enrico Weigelt, metux IT consult 2019-06-01 13:52 ` [PATCH 1/4] mod_devicetable: helper macro for declaring oftree module device table Enrico Weigelt, metux IT consult
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).