All of lore.kernel.org
 help / color / mirror / Atom feed
From: Geert Uytterhoeven <geert@linux-m68k.org>
To: Robin van der Gracht <robin@protonic.nl>
Cc: "Miguel Ojeda" <ojeda@kernel.org>,
	"Rob Herring" <robh+dt@kernel.org>,
	"Paul Burton" <paulburton@kernel.org>,
	"Greg Kroah-Hartman" <gregkh@linuxfoundation.org>,
	"Pavel Machek" <pavel@ucw.cz>, "Marek Behun" <marek.behun@nic.cz>,
	"open list:OPEN FIRMWARE AND FLATTENED DEVICE TREE BINDINGS"
	<devicetree@vger.kernel.org>,
	linux-leds <linux-leds@vger.kernel.org>,
	"open list:BROADCOM NVRAM DRIVER" <linux-mips@vger.kernel.org>,
	"Linux Kernel Mailing List" <linux-kernel@vger.kernel.org>,
	"Marek Behún" <kabel@kernel.org>
Subject: Re: [PATCH v6 19/19] auxdisplay: ht16k33: Add LED support
Date: Fri, 1 Oct 2021 17:51:08 +0200	[thread overview]
Message-ID: <CAMuHMdVOa8DAGJQpJ8AotARxfh9PvpskJJa6k48jE92-P+GLRA@mail.gmail.com> (raw)
In-Reply-To: <4602a8e681db4d0ebc43e4dafee8c28e@protonic.nl>

Hoi Robin,

On Thu, Sep 30, 2021 at 12:57 PM Robin van der Gracht <robin@protonic.nl> wrote:
> On 2021-09-14 16:38, Geert Uytterhoeven wrote:
> > Instantiate a single LED based on the "led" subnode in DT.
> > This allows the user to control display brightness and blinking (backed
> > by hardware support) through the LED class API and triggers, and exposes
> > the display color.  The LED will be named
> > "auxdisplay:<color>:<function>".
> >
> > When running in dot-matrix mode and if no "led" subnode is found, the
> > driver falls back to the traditional backlight mode, to preserve
> > backwards compatibility.
> >
> > Signed-off-by: Geert Uytterhoeven <geert@linux-m68k.org>
> > Reviewed-by: Marek Behún <kabel@kernel.org>
> > ---
> > v6:
> >   - Add Reviewed-by,
> >   - Reorder operations in ht16k33_led_probe() to ease future conversion
> >     to device properties,

> > --- a/drivers/auxdisplay/ht16k33.c
> > +++ b/drivers/auxdisplay/ht16k33.c
> > @@ -425,6 +477,35 @@ static void ht16k33_seg14_update(struct work_struct
> > *work)
> >       i2c_smbus_write_i2c_block_data(priv->client, 0, ARRAY_SIZE(buf), buf);
> >  }
> >
> > +static int ht16k33_led_probe(struct device *dev, struct led_classdev *led,
> > +                          unsigned int brightness)
> > +{
> > +     struct led_init_data init_data = {};
> > +     struct device_node *node;
> > +     int err;
> > +
> > +     /* The LED is optional */
> > +     node = of_get_child_by_name(dev->of_node, "led");
> > +     if (!node)
> > +             return 0;
> > +
> > +     init_data.fwnode = of_fwnode_handle(node);
> > +     init_data.devicename = "auxdisplay";
> > +     init_data.devname_mandatory = true;
> > +
> > +     led->brightness_set_blocking = ht16k33_brightness_set_blocking;
> > +     led->blink_set = ht16k33_blink_set;
> > +     led->flags = LED_CORE_SUSPENDRESUME;
> > +     led->brightness = brightness;
> > +     led->max_brightness = MAX_BRIGHTNESS;
>
> What do you think about adding a default trigger and making it 'backlight'?
>
> led->default_trigger = "blacklight";
>
> Or as an alternative, suggesting linux,default-trigger = "backlight" in the
> docs? Since the led class won't respond to blank events by just making it's
> function LED_FUNCTION_BACKLIGHT.
>
> led {
>         function = LED_FUNCTION_BACKLIGHT;
>         color = <LED_COLOR_ID_GREEN>;
>         linux,default-trigger = "backlight";
> };

The latter makes perfect sense to me.  Will do.

> I noticed blanking is broken. The backlight device (or LED device with
> backlight trigger) doens't get notified when the framebuffer is blanked since
> the driver doesn't implement fb_blank.
>
> Right now:
>
> echo 1 > /sys/class/graphics/fb0/blank
>                                                              |
> sh: write error: Invalid argument
>
> Due to:
> https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/drivers/video/fbdev/core/fbmem.c?h=v5.15-rc3#n1078

That's a pre-existing problem, righ? ;-)

> Something like this fixes it.
>
> diff --git a/drivers/auxdisplay/ht16k33.c b/drivers/auxdisplay/ht16k33.c
> index 89ee5b4b3dfc..0883d5252c81 100644
> --- a/drivers/auxdisplay/ht16k33.c
> +++ b/drivers/auxdisplay/ht16k33.c
> @@ -346,6 +346,15 @@ static int ht16k33_mmap(struct fb_info *info, struct
> vm_area_struct *vma)
>          return vm_map_pages_zero(vma, &pages, 1);
>   }
>
> +/*
> + * Blank events will be passed to the backlight device (or the LED device if
> + * it's trigger is 'backlight') when we return 0 here.
> + */
> +static int ht16k33_blank(int blank, struct fb_info *info)
> +{
> +       return 0;
> +}
> +
>   static const struct fb_ops ht16k33_fb_ops = {
>          .owner = THIS_MODULE,
>          .fb_read = fb_sys_read,
> @@ -354,6 +363,7 @@ static const struct fb_ops ht16k33_fb_ops = {
>          .fb_copyarea = sys_copyarea,
>          .fb_imageblit = sys_imageblit,
>          .fb_mmap = ht16k33_mmap,
> +       .fb_blank = ht16k33_blank,
>   };
>
>   /*
>
> Feel free to include (something like) this in the patch stack.

Thanks, will do.

> > +
> > +     err = devm_led_classdev_register_ext(dev, led, &init_data);
> > +     if (err)
> > +             dev_err(dev, "Failed to register LED\n");
>
> You might want to call ht16k33_brightness_set(priv, brightness) here to get a
> know value into the display setup register (0x80).
>
> Right now if I enable hardware blinking and (soft)reboot my board it keeps on
> blinking even after a re-probe.

I don't have that issue.
Aha, ht16k33_seg_probe() calls ht16k33_brightness_set(), but
ht16k33_fbdev_probe() doesn't.  The latter should do that, too,
when not using backwards compatibility mode.

> > @@ -575,7 +660,7 @@ static int ht16k33_seg_probe(struct device *dev, struct
> > ht16k33_priv *priv,
> >       struct ht16k33_seg *seg = &priv->seg;
> >       int err;
> >
> > -     err = ht16k33_brightness_set(priv, MAX_BRIGHTNESS);
> > +     err = ht16k33_brightness_set(priv, brightness);
>
> This looks like a bugfix for patch 17, maybe move this change there?

Indeed. Bad rebase. Will move.

Thanks a lot for your comments!

Gr{oetje,eeting}s,

                        Geert

-- 
Geert Uytterhoeven -- There's lots of Linux beyond ia32 -- geert@linux-m68k.org

In personal conversations with technical people, I call myself a hacker. But
when I'm talking to journalists I just say "programmer" or something like that.
                                -- Linus Torvalds

  reply	other threads:[~2021-10-01 15:51 UTC|newest]

Thread overview: 29+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-09-14 14:38 [PATCH v6 00/19] auxdisplay: ht16k33: Add character display support Geert Uytterhoeven
2021-09-14 14:38 ` [PATCH v6 01/19] uapi: Add <linux/map_to_14segment.h> Geert Uytterhoeven
2021-09-14 14:38 ` [PATCH v6 02/19] dt-bindings: auxdisplay: ht16k33: Document Adafruit segment displays Geert Uytterhoeven
2021-09-14 14:38 ` [PATCH v6 03/19] auxdisplay: img-ascii-lcd: Fix lock-up when displaying empty string Geert Uytterhoeven
2021-09-14 14:38 ` [PATCH v6 04/19] auxdisplay: img-ascii-lcd: Add helper variable dev Geert Uytterhoeven
2021-09-14 14:38 ` [PATCH v6 05/19] auxdisplay: img-ascii-lcd: Convert device attribute to sysfs_emit() Geert Uytterhoeven
2021-09-14 14:38 ` [PATCH v6 06/19] auxdisplay: Extract character line display core support Geert Uytterhoeven
2021-09-14 14:38 ` [PATCH v6 07/19] auxdisplay: linedisp: Use kmemdup_nul() helper Geert Uytterhoeven
2021-09-14 14:38 ` [PATCH v6 08/19] auxdisplay: linedisp: Add support for changing scroll rate Geert Uytterhoeven
2021-09-14 14:38 ` [PATCH v6 09/19] auxdisplay: ht16k33: Connect backlight to fbdev Geert Uytterhoeven
2021-09-29 14:21   ` Robin van der Gracht
2021-09-14 14:38 ` [PATCH v6 10/19] auxdisplay: ht16k33: Use HT16K33_FB_SIZE in ht16k33_initialize() Geert Uytterhoeven
2021-09-14 14:38 ` [PATCH v6 11/19] auxdisplay: ht16k33: Remove unneeded error check in keypad probe() Geert Uytterhoeven
2021-09-14 14:38 ` [PATCH v6 12/19] auxdisplay: ht16k33: Convert to simple i2c probe function Geert Uytterhoeven
2021-09-14 14:38 ` [PATCH v6 13/19] auxdisplay: ht16k33: Add helper variable dev Geert Uytterhoeven
2021-09-14 14:38 ` [PATCH v6 14/19] auxdisplay: ht16k33: Move delayed work Geert Uytterhoeven
2021-09-30  6:36   ` Robin van der Gracht
2021-09-14 14:38 ` [PATCH v6 15/19] auxdisplay: ht16k33: Extract ht16k33_brightness_set() Geert Uytterhoeven
2021-09-30  6:58   ` Robin van der Gracht
2021-09-14 14:38 ` [PATCH v6 16/19] auxdisplay: ht16k33: Extract frame buffer probing Geert Uytterhoeven
2021-09-30  7:09   ` Robin van der Gracht
2021-09-14 14:38 ` [PATCH v6 17/19] auxdisplay: ht16k33: Add support for segment displays Geert Uytterhoeven
2021-09-30  7:37   ` Robin van der Gracht
2021-09-14 14:38 ` [PATCH v6 18/19] dt-bindings: auxdisplay: ht16k33: Document LED subnode Geert Uytterhoeven
2021-09-14 14:38 ` [PATCH v6 19/19] auxdisplay: ht16k33: Add LED support Geert Uytterhoeven
2021-09-30 10:57   ` Robin van der Gracht
2021-10-01 15:51     ` Geert Uytterhoeven [this message]
2021-10-04  8:26       ` Robin van der Gracht
2021-10-12 15:08         ` Geert Uytterhoeven

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=CAMuHMdVOa8DAGJQpJ8AotARxfh9PvpskJJa6k48jE92-P+GLRA@mail.gmail.com \
    --to=geert@linux-m68k.org \
    --cc=devicetree@vger.kernel.org \
    --cc=gregkh@linuxfoundation.org \
    --cc=kabel@kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-leds@vger.kernel.org \
    --cc=linux-mips@vger.kernel.org \
    --cc=marek.behun@nic.cz \
    --cc=ojeda@kernel.org \
    --cc=paulburton@kernel.org \
    --cc=pavel@ucw.cz \
    --cc=robh+dt@kernel.org \
    --cc=robin@protonic.nl \
    /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.