From: "Gaël PORTAY" <g.portay@overkiz.com>
To: Bryan Wu <cooloney@gmail.com>
Cc: Joe Perches <joe@perches.com>, Rob Landley <rob@landley.net>,
Richard Purdie <rpurdie@rpsys.net>,
"Milo(Woogyom) Kim" <milo.kim@ti.com>,
"linux-doc@vger.kernel.org" <linux-doc@vger.kernel.org>,
lkml <linux-kernel@vger.kernel.org>,
Linux LED Subsystem <linux-leds@vger.kernel.org>,
b.brezillon@overkiz.com
Subject: Re: [RFC PATCH] led: add Cycle LED trigger.
Date: Thu, 27 Jun 2013 15:00:00 +0200 [thread overview]
Message-ID: <51CC3750.7070803@overkiz.com> (raw)
In-Reply-To: <CAK5ve-+QSNX82Tr3fqXH-_+7TvkLiR1pvStAh5iCR8shAs1M4w@mail.gmail.com>
On Jun 20, 2013, at 7:58 PM, Bryan Wu <cooloney@gmail.com> wrote:
> On Thu, Jun 20, 2013 at 2:44 AM, Gaël PORTAY <g.portay@overkiz.com> wrote:
>> On 19/06/2013 00:05, Joe Perches wrote:
>>>
>>> On Tue, 2013-06-18 at 18:24 +0200, Gaël PORTAY wrote:
>>>>
>>>> Currently, none of available triggers supports playing with the LED
>>>> brightness
>>>> level. The cycle trigger provides a way to define custom brightness
>>>> cycle.
>>>> For example, it is easy to customize the cycle to mock up the rhythm of
>>>> human
>>>> breathing which is a nice cycle to tell the user the system is doing
>>>> something.
>>>
>>> I think maybe this is a userspace thing, but here's a
>>> trivial comment or two
>>>
>>>
>>>> +static int cycle_start(struct cycle_trig_data *data)
>>>> +{
>>>> + unsigned long flags;
>>>> +
>>>> + if (hrtimer_active(&data->timer))
>>>> + return -EINVAL;
>>>> +
>>>> + spin_lock_irqsave(&data->lock, flags);
>>>> + data->plot_index = 0;
>>>> + data->cycle_count = 0;
>>>> + hrtimer_start(&data->timer, ktime_get(), HRTIMER_MODE_ABS);
>>>> + spin_unlock_irqrestore(&data->lock, flags);
>>>> +
>>>> + return 1;
>>>
>>> Maybe return 0 on success
>>>
>>>> +static ssize_t cycle_control_store(struct device *dev,
>>>> + struct device_attribute *attr,
>>>> + const char *buf, size_t size)
>>>> +{
>>>> + struct led_classdev *led_cdev = dev_get_drvdata(dev);
>>>> + struct cycle_trig_data *data = led_cdev->trigger_data;
>>>> +
>>>> + if (strncmp(buf, "start", sizeof("start") - 1) == 0)
>>>> + cycle_start(data);
>>>> + else if (strncmp(buf, "stop", sizeof("stop") - 1) == 0)
>>>> + cycle_stop(data);
>>>> + else if (strncmp(buf, "reset", sizeof("reset") - 1) == 0)
>>>> + cycle_reset(data);
>>>> + else if (strncmp(buf, "pause", sizeof("stop") - 1) == 0)
>>>> + cycle_pause(data);
>>>> + else if (strncmp(buf, "resume", sizeof("resume") - 1) == 0)
>>>> + cycle_resume(data);
>>>> + else
>>>> + return -EINVAL;
>>>
>>> I think strcasecmp better than strncmp
>>>
>>>> +static ssize_t cycle_rawplot_store(struct device *dev,
>>>> + struct device_attribute *attr,
>>>> + const char *buf, size_t size)
>>>> +{
>>>
>>> []
>>> + plot = kzalloc(size, GFP_KERNEL);
>>> + if (plot) {
>>> + hrtimer_cancel(&data->timer);
>>>
>>> Ick.
>>>
>>> if (!plot)
>>> return -ENOMEM;
>>>
>>> etc...
>>>
>> Hello,
>>
>> Thanks a lot for your review. I took your remarks into consideration and
>> fixed the mistakes.
>>
>> About the kernel/user space discussion, I'd rather keep the cycle trigger
>> implementation in the kernel space,
>> because it implies brightness change every 10-100ms or less. This
>> leads to
>> lots of context switches, and I'm not
>> even sure the user space can handle such timings accurately.
>>
>> Could you detail your concerns about adding this driver in the kernel?
>>
>> Best Regards,
>> Gaël
>
> Hi Gaël,
>
> Is that possible to extend an existing leds trigger like ledtrig-timer
> or other triggers instead of creating a new one?
>
> Thanks,
> -Bryan
Hi Bryan,
I'm sorry but the cycle trigger interface is too much different from
already defined triggers. That's why I have decided to create a new one.
The cycle trigger purposes are:
- to control a cycle (start/stop pause/resume reset), and
- to play with the brightness level
But it's possible to implement the timer and heartbeat triggers using
the interface of the cycle trigger.
Yours sincerely,
Gaël
next prev parent reply other threads:[~2013-06-27 15:25 UTC|newest]
Thread overview: 12+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-06-18 16:24 [RFC PATCH] led: add Cycle LED trigger Gaël PORTAY
2013-06-18 22:05 ` Joe Perches
2013-06-20 9:44 ` Gaël PORTAY
2013-06-20 17:58 ` Bryan Wu
2013-06-27 13:00 ` Gaël PORTAY [this message]
2013-06-20 18:12 ` Joe Perches
2013-06-22 11:26 ` Pavel Machek
2013-06-22 16:43 ` Sebastian Reichel
2013-06-22 19:45 ` Pavel Machek
2013-06-27 13:40 ` Gaël PORTAY
2013-06-23 9:53 ` Pavel Machek
2013-06-22 19:51 ` 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=51CC3750.7070803@overkiz.com \
--to=g.portay@overkiz.com \
--cc=b.brezillon@overkiz.com \
--cc=cooloney@gmail.com \
--cc=joe@perches.com \
--cc=linux-doc@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-leds@vger.kernel.org \
--cc=milo.kim@ti.com \
--cc=rob@landley.net \
--cc=rpurdie@rpsys.net \
/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