From: Andy Shevchenko <andy.shevchenko@gmail.com> To: Chris Packham <chris.packham@alliedtelesis.co.nz> Cc: andy@kernel.org, geert@linux-m68k.org, robh+dt@kernel.org, krzysztof.kozlowski+dt@linaro.org, conor+dt@kernel.org, andrew@lunn.ch, gregory.clement@bootlin.com, sebastian.hesselbarth@gmail.com, ojeda@kernel.org, tzimmermann@suse.de, javierm@redhat.com, robin@protonic.nl, lee@kernel.org, pavel@ucw.cz, devicetree@vger.kernel.org, linux-leds@vger.kernel.org, linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org Subject: Re: [PATCH v2 1/4] auxdisplay: Add 7 segment LED display driver Date: Wed, 28 Feb 2024 01:56:56 +0200 [thread overview] Message-ID: <CAHp75Ve-zKDgBXhe8fzvW0GY2nB7=ZTfhsJX6OHBH8EQWaWG-Q@mail.gmail.com> (raw) In-Reply-To: <20240227212244.262710-2-chris.packham@alliedtelesis.co.nz> On Tue, Feb 27, 2024 at 11:22 PM Chris Packham <chris.packham@alliedtelesis.co.nz> wrote: > > Add a driver for a 7 segment LED display. At the moment only one > character is supported but it should be possible to expand this to > support more characters and/or 14 segment displays in the future. As Randy already pointed out 7-segment (everywhere) 14-segment (also everywhere) ... > drivers/auxdisplay/seg-led.c | 119 +++++++++++++++++++++++++++++++++++ I believe we want to have a 'gpio' part in the file name and in the Kconfig. > +config SEG_LED > + tristate "Generic 7 segment LED display" > + select LINEDISP > + help > + This driver supports a generic 7 segment LED display made up > + of GPIO pins connected to the individual segments. > + > + This driver can also be built as a module. If so, the module > + will be called seg-led. ... > +#include <linux/container_of.h> > +#include <linux/errno.h> > +#include <linux/gpio/consumer.h> > +#include <linux/kernel.h> Please, avoid proxy headers. I do not believe kernel.h is anyhow used here. > +#include <linux/mod_devicetable.h> > +#include <linux/module.h> > +#include <linux/platform_device.h> > +#include <linux/types.h> > +#include <linux/workqueue.h> ... > +struct seg_led_priv { > + struct gpio_descs *segment_gpios; > + struct delayed_work work; > + struct linedisp linedisp; Make it the first member, so container_of() will be noop for this. > +}; ... > +static void seg_led_update(struct work_struct *work) > +{ > + struct seg_led_priv *priv = container_of(work, struct seg_led_priv, work.work); > + struct linedisp_map *map = priv->linedisp.map; > + DECLARE_BITMAP(values, 8); > + values[0] = map_to_seg7(&map->map.seg7, priv->linedisp.buf[0]); While it works in this case, it's bad code. You need to use bitmap_set_value8(). And basically that's the API in a for-loop to be used in case we have more than one digit. This will require another header to be included. > + gpiod_set_array_value_cansleep(priv->segment_gpios->ndescs, priv->segment_gpios->desc, > + priv->segment_gpios->info, values); > +} ... > +static const struct of_device_id seg_led_of_match[] = { > + { .compatible = "generic-gpio-7seg"}, > + {} > +}; > +MODULE_DEVICE_TABLE(of, seg_led_of_match); Move this part closer to its user, i.e. struct platform_driver below. ... > + INIT_DELAYED_WORK(&priv->work, seg_led_update); Move this to ->get_map_type() as other drivers do. Yes, I agree that ->get_map_type() is not the best name currently. You can rename it to ->init_and_get_map_type() if you wish (patches are welcome!) or any other better name. -- With Best Regards, Andy Shevchenko
WARNING: multiple messages have this Message-ID (diff)
From: Andy Shevchenko <andy.shevchenko@gmail.com> To: Chris Packham <chris.packham@alliedtelesis.co.nz> Cc: andy@kernel.org, geert@linux-m68k.org, robh+dt@kernel.org, krzysztof.kozlowski+dt@linaro.org, conor+dt@kernel.org, andrew@lunn.ch, gregory.clement@bootlin.com, sebastian.hesselbarth@gmail.com, ojeda@kernel.org, tzimmermann@suse.de, javierm@redhat.com, robin@protonic.nl, lee@kernel.org, pavel@ucw.cz, devicetree@vger.kernel.org, linux-leds@vger.kernel.org, linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org Subject: Re: [PATCH v2 1/4] auxdisplay: Add 7 segment LED display driver Date: Wed, 28 Feb 2024 01:56:56 +0200 [thread overview] Message-ID: <CAHp75Ve-zKDgBXhe8fzvW0GY2nB7=ZTfhsJX6OHBH8EQWaWG-Q@mail.gmail.com> (raw) In-Reply-To: <20240227212244.262710-2-chris.packham@alliedtelesis.co.nz> On Tue, Feb 27, 2024 at 11:22 PM Chris Packham <chris.packham@alliedtelesis.co.nz> wrote: > > Add a driver for a 7 segment LED display. At the moment only one > character is supported but it should be possible to expand this to > support more characters and/or 14 segment displays in the future. As Randy already pointed out 7-segment (everywhere) 14-segment (also everywhere) ... > drivers/auxdisplay/seg-led.c | 119 +++++++++++++++++++++++++++++++++++ I believe we want to have a 'gpio' part in the file name and in the Kconfig. > +config SEG_LED > + tristate "Generic 7 segment LED display" > + select LINEDISP > + help > + This driver supports a generic 7 segment LED display made up > + of GPIO pins connected to the individual segments. > + > + This driver can also be built as a module. If so, the module > + will be called seg-led. ... > +#include <linux/container_of.h> > +#include <linux/errno.h> > +#include <linux/gpio/consumer.h> > +#include <linux/kernel.h> Please, avoid proxy headers. I do not believe kernel.h is anyhow used here. > +#include <linux/mod_devicetable.h> > +#include <linux/module.h> > +#include <linux/platform_device.h> > +#include <linux/types.h> > +#include <linux/workqueue.h> ... > +struct seg_led_priv { > + struct gpio_descs *segment_gpios; > + struct delayed_work work; > + struct linedisp linedisp; Make it the first member, so container_of() will be noop for this. > +}; ... > +static void seg_led_update(struct work_struct *work) > +{ > + struct seg_led_priv *priv = container_of(work, struct seg_led_priv, work.work); > + struct linedisp_map *map = priv->linedisp.map; > + DECLARE_BITMAP(values, 8); > + values[0] = map_to_seg7(&map->map.seg7, priv->linedisp.buf[0]); While it works in this case, it's bad code. You need to use bitmap_set_value8(). And basically that's the API in a for-loop to be used in case we have more than one digit. This will require another header to be included. > + gpiod_set_array_value_cansleep(priv->segment_gpios->ndescs, priv->segment_gpios->desc, > + priv->segment_gpios->info, values); > +} ... > +static const struct of_device_id seg_led_of_match[] = { > + { .compatible = "generic-gpio-7seg"}, > + {} > +}; > +MODULE_DEVICE_TABLE(of, seg_led_of_match); Move this part closer to its user, i.e. struct platform_driver below. ... > + INIT_DELAYED_WORK(&priv->work, seg_led_update); Move this to ->get_map_type() as other drivers do. Yes, I agree that ->get_map_type() is not the best name currently. You can rename it to ->init_and_get_map_type() if you wish (patches are welcome!) or any other better name. -- With Best Regards, Andy Shevchenko _______________________________________________ linux-arm-kernel mailing list linux-arm-kernel@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
next prev parent reply other threads:[~2024-02-27 23:57 UTC|newest] Thread overview: 48+ messages / expand[flat|nested] mbox.gz Atom feed top 2024-02-27 21:22 [PATCH v2 0/4] auxdisplay: 7 segment LED display Chris Packham 2024-02-27 21:22 ` Chris Packham 2024-02-27 21:22 ` [PATCH v2 1/4] auxdisplay: Add 7 segment LED display driver Chris Packham 2024-02-27 21:22 ` Chris Packham 2024-02-27 22:13 ` Randy Dunlap 2024-02-27 22:13 ` Randy Dunlap 2024-02-27 23:56 ` Andy Shevchenko [this message] 2024-02-27 23:56 ` Andy Shevchenko 2024-02-27 21:22 ` [PATCH v2 2/4] dt-bindings: auxdisplay: Add bindings for generic 7 segment LED Chris Packham 2024-02-27 21:22 ` Chris Packham 2024-02-27 22:19 ` Rob Herring 2024-02-27 22:19 ` Rob Herring 2024-02-28 0:03 ` Andy Shevchenko 2024-02-28 0:03 ` Andy Shevchenko 2024-02-28 1:53 ` Chris Packham 2024-02-28 1:53 ` Chris Packham 2024-02-28 17:22 ` Andy Shevchenko 2024-02-28 17:22 ` Andy Shevchenko 2024-02-28 14:04 ` Rob Herring 2024-02-28 14:04 ` Rob Herring 2024-02-28 14:57 ` Andy Shevchenko 2024-02-28 14:57 ` Andy Shevchenko 2024-02-29 9:23 ` Geert Uytterhoeven 2024-02-29 9:23 ` Geert Uytterhoeven 2024-02-29 10:42 ` Andy Shevchenko 2024-02-29 10:42 ` Andy Shevchenko 2024-02-28 20:01 ` Chris Packham 2024-02-28 20:01 ` Chris Packham 2024-02-29 9:24 ` Geert Uytterhoeven 2024-02-29 9:24 ` Geert Uytterhoeven 2024-02-29 10:44 ` andy 2024-02-29 10:44 ` andy 2024-02-27 21:22 ` [PATCH v2 3/4] ARM: dts: marvell: Add 7 segment LED display on x530 Chris Packham 2024-02-27 21:22 ` Chris Packham 2024-02-28 0:12 ` Andy Shevchenko 2024-02-28 0:12 ` Andy Shevchenko 2024-02-27 21:22 ` [PATCH v2 4/4] ARM: dts: marvell: Indicate USB activity " Chris Packham 2024-02-27 21:22 ` Chris Packham 2024-02-28 0:09 ` Andy Shevchenko 2024-02-28 0:09 ` Andy Shevchenko 2024-02-28 1:11 ` Chris Packham 2024-02-28 1:11 ` Chris Packham 2024-02-28 0:05 ` [PATCH v2 0/4] auxdisplay: 7 segment LED display Andy Shevchenko 2024-02-28 0:05 ` Andy Shevchenko 2024-02-28 0:25 ` Chris Packham 2024-02-28 0:25 ` Chris Packham 2024-02-28 18:45 ` Andy Shevchenko 2024-02-28 18:45 ` Andy Shevchenko
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to='CAHp75Ve-zKDgBXhe8fzvW0GY2nB7=ZTfhsJX6OHBH8EQWaWG-Q@mail.gmail.com' \ --to=andy.shevchenko@gmail.com \ --cc=andrew@lunn.ch \ --cc=andy@kernel.org \ --cc=chris.packham@alliedtelesis.co.nz \ --cc=conor+dt@kernel.org \ --cc=devicetree@vger.kernel.org \ --cc=geert@linux-m68k.org \ --cc=gregory.clement@bootlin.com \ --cc=javierm@redhat.com \ --cc=krzysztof.kozlowski+dt@linaro.org \ --cc=lee@kernel.org \ --cc=linux-arm-kernel@lists.infradead.org \ --cc=linux-kernel@vger.kernel.org \ --cc=linux-leds@vger.kernel.org \ --cc=ojeda@kernel.org \ --cc=pavel@ucw.cz \ --cc=robh+dt@kernel.org \ --cc=robin@protonic.nl \ --cc=sebastian.hesselbarth@gmail.com \ --cc=tzimmermann@suse.de \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: linkBe sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.