From: Ansuel Smith <ansuelsmth@gmail.com>
To: Andrew Lunn <andrew@lunn.ch>
Cc: Vivien Didelot <vivien.didelot@gmail.com>,
Florian Fainelli <f.fainelli@gmail.com>,
Vladimir Oltean <olteanv@gmail.com>,
"David S. Miller" <davem@davemloft.net>,
Jakub Kicinski <kuba@kernel.org>, Paolo Abeni <pabeni@redhat.com>,
Rob Herring <robh+dt@kernel.org>,
Krzysztof Kozlowski <krzk+dt@kernel.org>,
Jonathan Corbet <corbet@lwn.net>, Pavel Machek <pavel@ucw.cz>,
John Crispin <john@phrozen.org>,
netdev@vger.kernel.org, devicetree@vger.kernel.org,
linux-kernel@vger.kernel.org, linux-doc@vger.kernel.org,
linux-leds@vger.kernel.org
Subject: Re: [RFC PATCH v6 02/11] leds: add function to configure hardware controlled LED
Date: Thu, 5 May 2022 15:02:48 +0200 [thread overview]
Message-ID: <6273cafa.1c69fb81.d4b56.3ff5@mx.google.com> (raw)
In-Reply-To: <YnMK+EZDQXSGDXM1@lunn.ch>
On Thu, May 05, 2022 at 01:23:36AM +0200, Andrew Lunn wrote:
> > +In SUPPORTED hw_control_configure() should return 0 or 1 if the LED driver supports the
> > +requested blink mode (flags) or not.
>
> -EOPNOTSUPP might be clearer.
>
>
> > +In ZERO hw_control_configure() should return 0 with success operation or error.
> > +
> > +The unsigned long flag is specific to the trigger and change across them. It's in the LED
> > +driver interest know how to elaborate this flag and to declare support for a
> > +particular trigger. For this exact reason explicit support for the specific
> > +trigger is mandatory or the driver returns -EOPNOTSUPP if asked to enter offload mode
> > +with a not supported trigger.
> > +If the driver returns -EOPNOTSUPP on hw_control_configure(), the trigger activation will
> > +fail as the driver doesn't support that specific offload trigger or doesn't know
> > +how to handle the provided flags.
> > +
> > Known Issues
> > ============
> >
> > diff --git a/include/linux/leds.h b/include/linux/leds.h
> > index 09ff1dc6f48d..b5aad67fecfb 100644
> > --- a/include/linux/leds.h
> > +++ b/include/linux/leds.h
> > @@ -73,6 +73,16 @@ enum led_blink_modes {
> > SOFTWARE_HARDWARE_CONTROLLED,
> > };
> >
> > +#ifdef CONFIG_LEDS_HARDWARE_CONTROL
> > +enum blink_mode_cmd {
> > + BLINK_MODE_ENABLE, /* Enable the hardware blink mode */
> > + BLINK_MODE_DISABLE, /* Disable the hardware blink mode */
> > + BLINK_MODE_READ, /* Read the status of the hardware blink mode */
> > + BLINK_MODE_SUPPORTED, /* Ask the driver if the hardware blink mode is supported */
> > + BLINK_MODE_ZERO, /* Disable any hardware blink active */
> > +};
> > +#endif
>
> Skip the #ifdef. The enum itself takes no space if never used, and it
> makes the driver simpler if they always exist.
>
> > +
> > struct led_classdev {
> > const char *name;
> > unsigned int brightness;
> > @@ -185,6 +195,17 @@ struct led_classdev {
> > * the old status but that is not mandatory and also putting it off is accepted.
> > */
> > int (*hw_control_stop)(struct led_classdev *led_cdev);
> > + /* This will be used to configure the various blink modes LED support in hardware
> > + * mode.
> > + * The LED driver require to support the active trigger and will elaborate the
> > + * unsigned long flag and do the operation based on the provided cmd.
> > + * Current operation are enable,disable,supported and status.
> > + * A trigger will use this to enable or disable the asked blink mode, check the
> > + * status of the blink mode or ask if the blink mode can run in hardware mode.
> > + */
> > + int (*hw_control_configure)(struct led_classdev *led_cdev,
> > + unsigned long flag,
> > + enum blink_mode_cmd cmd);
> > #endif
> > #endif
> >
> > @@ -454,6 +475,24 @@ static inline void *led_get_trigger_data(struct led_classdev *led_cdev)
> > return led_cdev->trigger_data;
> > }
> >
> > +#ifdef CONFIG_LEDS_HARDWARE_CONTROL
> > +static inline bool led_trigger_blink_mode_is_supported(struct led_classdev *led_cdev,
> > + unsigned long flag)
> > +{
> > + int ret;
> > +
> > + /* Sanity check: make sure led support hw mode */
> > + if (led_cdev->blink_mode == SOFTWARE_CONTROLLED)
> > + return false;
> > +
> > + ret = led_cdev->hw_control_configure(led_cdev, flag, BLINK_MODE_SUPPORTED);
> > + if (ret > 0)
> > + return true;
> > +
> > + return false;
> > +}
> > +#endif
>
> Please add a version which returns false when
> CONFIG_LEDS_HARDWARE_CONTROL is disabled.
>
> Does this actually need to be an inline function?
Not at all... Originally it was a smaller function. Will drop it.
>
> Andrew
--
Ansuel
next prev parent reply other threads:[~2022-05-05 13:02 UTC|newest]
Thread overview: 34+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-05-03 15:16 [RFC PATCH v6 00/11] Adds support for PHY LEDs with offload triggers Ansuel Smith
2022-05-03 15:16 ` [RFC PATCH v6 01/11] leds: add support for hardware driven LEDs Ansuel Smith
2022-05-04 22:19 ` Andrew Lunn
2022-05-05 13:01 ` Ansuel Smith
2022-05-03 15:16 ` [RFC PATCH v6 02/11] leds: add function to configure hardware controlled LED Ansuel Smith
2022-05-04 23:23 ` Andrew Lunn
2022-05-05 13:02 ` Ansuel Smith [this message]
2022-05-03 15:16 ` [RFC PATCH v6 03/11] leds: trigger: netdev: drop NETDEV_LED_MODE_LINKUP from mode Ansuel Smith
2022-05-04 23:25 ` Andrew Lunn
2022-05-05 13:05 ` Ansuel Smith
2022-05-03 15:16 ` [RFC PATCH v6 04/11] leds: trigger: netdev: rename and expose NETDEV trigger enum modes Ansuel Smith
2022-05-05 0:29 ` Andrew Lunn
2022-05-03 15:16 ` [RFC PATCH v6 05/11] leds: trigger: netdev: convert device attr to macro Ansuel Smith
2022-05-03 15:16 ` [RFC PATCH v6 06/11] leds: trigger: netdev: add hardware control support Ansuel Smith
2022-05-05 1:00 ` Andrew Lunn
2022-05-05 13:27 ` Ansuel Smith
2022-05-03 15:16 ` [RFC PATCH v6 07/11] leds: trigger: netdev: use mutex instead of spinlocks Ansuel Smith
2022-05-05 1:10 ` Andrew Lunn
2022-05-05 13:29 ` Ansuel Smith
2022-05-05 14:21 ` Andrew Lunn
2022-05-05 14:43 ` Ansuel Smith
2022-05-03 15:16 ` [RFC PATCH v6 08/11] leds: trigger: netdev: add available mode sysfs attr Ansuel Smith
2022-05-03 15:16 ` [RFC PATCH v6 09/11] leds: trigger: netdev: add additional hardware only triggers Ansuel Smith
2022-05-05 1:29 ` Andrew Lunn
2022-05-05 13:30 ` Ansuel Smith
2022-05-03 15:16 ` [RFC PATCH v6 10/11] net: dsa: qca8k: add LEDs support Ansuel Smith
2022-05-05 1:46 ` Andrew Lunn
2022-05-05 1:55 ` Andrew Lunn
2022-05-05 13:33 ` Ansuel Smith
2022-05-05 14:24 ` Andrew Lunn
2022-05-03 15:16 ` [RFC PATCH v6 11/11] dt-bindings: net: dsa: qca8k: add LEDs definition example Ansuel Smith
2022-05-03 22:21 ` Rob Herring
2022-05-04 17:15 ` Rob Herring
2022-05-05 13:34 ` Ansuel Smith
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=6273cafa.1c69fb81.d4b56.3ff5@mx.google.com \
--to=ansuelsmth@gmail.com \
--cc=andrew@lunn.ch \
--cc=corbet@lwn.net \
--cc=davem@davemloft.net \
--cc=devicetree@vger.kernel.org \
--cc=f.fainelli@gmail.com \
--cc=john@phrozen.org \
--cc=krzk+dt@kernel.org \
--cc=kuba@kernel.org \
--cc=linux-doc@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-leds@vger.kernel.org \
--cc=netdev@vger.kernel.org \
--cc=olteanv@gmail.com \
--cc=pabeni@redhat.com \
--cc=pavel@ucw.cz \
--cc=robh+dt@kernel.org \
--cc=vivien.didelot@gmail.com \
/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 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).