From: Tony Makkiel <tony.makkiel@daqri.com>
To: Jacek Anaszewski <j.anaszewski@samsung.com>
Cc: Linux LED Subsystem <linux-leds@vger.kernel.org>
Subject: Re: Brightness control irrespective of blink state.
Date: Tue, 10 May 2016 10:36:54 +0100 [thread overview]
Message-ID: <5731ABB6.10607@daqri.com> (raw)
In-Reply-To: <5730A293.9050209@samsung.com>
On 09/05/16 15:45, Jacek Anaszewski wrote:
> Hi Tony,
>
> On 05/09/2016 03:27 PM, Tony Makkiel wrote:
>> Hi Jacek,
>> Thank you for getting back. I updated my kernel to 4.5 and have the
>> updated "led_set_brightness" now.
>>
>> It sets
>> led_cdev->flags |= LED_BLINK_BRIGHTNESS_CHANGE;
>> led_cdev->blink_brightness = brightness;
>>
>> The new implementation requires hardware specific drivers to poll
>> for flag change. Shouldn't the led-core driver be calling the hardware
>> specific brightness_set (led_set_brightness_nosleep) irrespective of the
>> blink settings?
>>
>> Unfortunately, it place additional requirement on drivers, to implement
>> a polling mechanism which won't be needed otherwise. Why are the
>> brightness calls dependent on blink settings?
>
> If your question is still:
>
> "Is there a reason for rejecting brightness change requests when
> either of the blink_delays are set?"
>
> then the answer is: yes, brightness setting is deferred until
> the next timer tick to avoid avoid problems in case we are called
> from hard irq context. It should work fine for software blinking.
Sorry, was focused debugging 'hardware accelerated blink' on the driver
I am working on, I missed the software blinking implementation.
>
> Nonetheless, your question, made it obvious that we have a problem
> here in case of hardware accelerated blinking, i.e. drivers that
> implement blink_set op. Is this your use case?
>
Yes, the brightness requests from user space
(/sys/class/leds/*/brightness) does not get passed to hardware specific
driver via the blink_set implemented, unless led_cdev->flags is polled.
> Anyway, I've noticed a discrepancy between the LED core code and
> both Documentation/leds/leds-class.txt and comment over blink_set() op
> in include/linux/leds.h, which say that blinking is deactivated
> upon setting the brightness again. Many drivers apply this rule.
>
> In effect, LED_BLINK_BRIGHTNESS_CHANGE will have to be removed,
> and your question will be groundless, as changing the blink
> brightness should be impossible by design.
>
In my opinion, disabling blink, when brightness change requested doesn't
sound like the right thing to do. There could be cases in which the
brightness of the blinking LED needs to be changed. Maybe we can let the
hardware driver deal with the blink request if it has implemented
brightness_set? The change below seem to work.
Subject: [PATCH] led-core: Use hardware blink when available
At present hardware implemented brightness is not called
if blink delays are set.
Signed-off-by: Tony Makkiel <tony.makkiel@daqri.com>
---
drivers/leds/led-core.c | 4 +++-
1 file changed, 3 insertions(+), 1 deletion(-)
diff --git a/drivers/leds/led-core.c b/drivers/leds/led-core.c
index 19e1e60d..02dd0f6 100644
--- a/drivers/leds/led-core.c
+++ b/drivers/leds/led-core.c
@@ -208,8 +208,10 @@ void led_set_brightness(struct led_classdev *led_cdev,
/*
* In case blinking is on delay brightness setting
* until the next timer tick.
+ * Or if brightness_set is defined, use the associated implementation.
*/
- if (led_cdev->blink_delay_on || led_cdev->blink_delay_off) {
+ if ((!led_cdev->brightness_set) &&
+ (led_cdev->blink_delay_on || led_cdev->blink_delay_off)) {
/*
* If we need to disable soft blinking delegate this to the
* work queue task to avoid problems in case we are called
--
1.9.1
> Best regards,
> Jacek Anaszewski
>
>
>> On 06/05/16 19:48, Jacek Anaszewski wrote:
>>> Hi Tony,
>>>
>>> The code you are using is outdated. It is likely that the issue
>>> you are referring to was addressed while improving LED core few
>>> months ago.
>>>
>>> Best regards,
>>> Jacek Anaszewski
>>>
>>> On 05/06/2016 08:25 PM, Tony Makkiel wrote:
>>>> Hi All,
>>>> Is there a reason for rejecting brightness change requests when
>>>> either of the blink_delays are set? Shouldn't the function be
>>>> allowed to
>>>> call "led_set_brightness_sync"?
>>>>
>>>> I am referring to "led_set_brightness" in led-core.c.
>>>>
>>>> With the following change, the brightness of led can be varied
>>>> irrespective of blinking state. But wanted to check if that is a bad
>>>> idea?
>>>>
>>>> Many Thanks,
>>>> Tony
>>>>
>>>>
>>>> --- a/drivers/leds/led-corgit e.c
>>>> +++ b/drivers/leds/led-core.c
>>>> @@ -190,7 +191,15 @@ EXPORT_SYMBOL_GPL(led_stop_software_blink);
>>>> void led_set_brightness(struct led_classdev *led_cdev,
>>>> enum led_brightness brightness)
>>>> {
>>>> - int ret = 0;
>>>> + int ret = -EINVAL;
>>>> +
>>>> + if (led_cdev->flags & SET_BRIGHTNESS_SYNC){
>>>> + ret = led_set_brightness_sync(led_cdev, brightness);
>>>> + if (ret < 0)
>>>> + dev_dbg(led_cdev->dev,
>>>> + "Setting LED brightness failed (%d)\n",
>>>> ret);
>>>> + return;
>>>> + }
>>>>
>>>> /* delay brightness if soft-blink is active */
>>>> if (led_cdev->blink_delay_on || led_cdev->blink_delay_off) {
>>>> @@ -203,14 +212,8 @@ void led_set_brightness(struct led_classdev
>>>> *led_cdev,
>>>> if (led_cdev->flags & SET_BRIGHTNESS_ASYNC) {
>>>> led_set_brightness_async(led_cdev, brightness);
>>>> return;
>>>> - } else if (led_cdev->flags & SET_BRIGHTNESS_SYNC)
>>>> - ret = led_set_brightness_sync(led_cdev, brightness);
>>>> - else
>>>> - ret = -EINVAL;
>>>> -
>>>> - if (ret < 0)
>>>> - dev_dbg(led_cdev->dev, "Setting LED brightness failed
>>>> (%d)\n",
>>>> - ret);
>>>> + }
>>>> + dev_dbg(led_cdev->dev, "Setting LED brightness failed (%d)\n",
>>>> ret);
>>>> }
>>>> EXPORT_SYMBOL(led_set_brightness);
>> --
>> To unsubscribe from this list: send the line "unsubscribe linux-leds" in
>> the body of a message to majordomo@vger.kernel.org
>> More majordomo info at http://vger.kernel.org/majordomo-info.html
>>
>>
>
>
>
next prev parent reply other threads:[~2016-05-10 9:36 UTC|newest]
Thread overview: 25+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-04-28 22:03 [PATCH v3 0/3] Extend the LED panic trigger Ezequiel Garcia
2016-04-28 22:03 ` [PATCH v3 1/3] leds: triggers: Allow to switch the trigger to "panic" on a kernel panic Ezequiel Garcia
2016-04-29 7:20 ` Jacek Anaszewski
[not found] ` <57230B26.9010300-Sze3O3UU22JBDgjK7y7TUQ@public.gmane.org>
2016-05-06 9:03 ` Jacek Anaszewski
2016-05-06 13:05 ` Ezequiel Garcia
2016-05-06 18:25 ` Brightness control irrespective of blink state Tony Makkiel
2016-05-06 18:48 ` Jacek Anaszewski
2016-05-09 13:27 ` Tony Makkiel
2016-05-09 14:45 ` Jacek Anaszewski
2016-05-10 9:36 ` Tony Makkiel [this message]
2016-05-10 13:26 ` Jacek Anaszewski
2016-05-10 16:55 ` Tony Makkiel
2016-05-11 9:41 ` Jacek Anaszewski
2016-05-11 13:42 ` Tony Makkiel
2016-05-12 10:26 ` Jacek Anaszewski
2016-05-13 14:20 ` Tony Makkiel
2016-05-16 9:21 ` Jacek Anaszewski
2016-05-16 13:43 ` Tony Makkiel
2016-05-16 14:23 ` Jacek Anaszewski
2016-05-16 14:32 ` Jacek Anaszewski
2016-04-28 22:03 ` [PATCH v3 2/3] devicetree: leds: Introduce "panic-indicator" optional property Ezequiel Garcia
2016-04-28 22:03 ` [PATCH v3 3/3] leds: gpio: Support the "panic-indicator" firmware property Ezequiel Garcia
2016-05-03 16:53 ` Rob Herring
2016-04-28 22:22 ` [PATCH v3 0/3] Extend the LED panic trigger Pavel Machek
[not found] ` <1461881020-13964-1-git-send-email-ezequiel-30ULvvUtt6G51wMPkGsGjgyUoB5FGQPZ@public.gmane.org>
2016-04-29 18:57 ` Matthias Brugger
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=5731ABB6.10607@daqri.com \
--to=tony.makkiel@daqri.com \
--cc=j.anaszewski@samsung.com \
--cc=linux-leds@vger.kernel.org \
/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).