All of lore.kernel.org
 help / color / mirror / Atom feed
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

  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: link
Be 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.