From: j.anaszewski@samsung•com (Jacek Anaszewski)
To: linux-arm-kernel@lists•infradead.org
Subject: [RESEND PATCH 3/4] leds: leds-ns2: handle can_sleep GPIOs
Date: Wed, 24 Jun 2015 16:18:29 +0200 [thread overview]
Message-ID: <558ABC35.1010801@samsung.com> (raw)
In-Reply-To: <1434640650-28086-4-git-send-email-simon.guinot@sequanux.org>
On 06/18/2015 05:17 PM, Simon Guinot wrote:
> On the board n090401 (Seagate NAS 4-Bay), some of the LEDs are handled
> by the leds-ns2 driver. This LEDs are connected to an I2C GPIO expander
> (PCA95554PW) which means that GPIO access may sleep. This patch makes
> leds-ns2 compatible with such GPIOs by using the *_cansleep() variant of
> the GPIO functions. As a drawback this functions can't be used safely in
> a timer context (with the timer LED trigger for example). To fix this
> issue, a workqueue mechanism (copied from the leds-gpio driver) is used.
>
> Note that this patch also updates slightly the ns2_led_sata_store
> function. The LED state is now retrieved from cached values instead of
> reading the GPIOs previously. This prevents ns2_led_sata_store from
> working with a stale LED state (which may happen when a delayed work
> is pending).
>
> Signed-off-by: Simon Guinot <simon.guinot@sequanux•org>
> Signed-off-by: Vincent Donnefort <vdonnefort@gmail•com>
> ---
> drivers/leds/leds-ns2.c | 56 ++++++++++++++++++++++++++++++++++++-------------
> 1 file changed, 42 insertions(+), 14 deletions(-)
>
>
> +static void ns2_led_work(struct work_struct *work)
> +{
> + struct ns2_led_data *led_dat =
> + container_of(work, struct ns2_led_data, work);
> + int i = led_dat->new_mode_index;
> +
> + write_lock(&led_dat->rw_lock);
> +
> + gpio_set_value_cansleep(led_dat->cmd, led_dat->modval[i].cmd_level);
> + gpio_set_value_cansleep(led_dat->slow, led_dat->modval[i].slow_level);
> +
> + write_unlock(&led_dat->rw_lock);
> +}
> +
I've just realized that this can break one of the basic rules:
no sleeping should occur while holding a spinlock. Did you
consider this?
--
Best Regards,
Jacek Anaszewski
next prev parent reply other threads:[~2015-06-24 14:18 UTC|newest]
Thread overview: 14+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-06-18 15:17 [RESEND PATCH 0/4] Allow to use leds-ns2 with n090401 boards Simon Guinot
2015-06-18 15:17 ` [RESEND PATCH 1/4] leds: leds-ns2: move LED modes mapping outside of the driver Simon Guinot
2015-06-22 14:32 ` Jacek Anaszewski
2015-06-23 18:12 ` Simon Guinot
2015-06-24 7:34 ` Jacek Anaszewski
2015-06-18 15:17 ` [RESEND PATCH 2/4] ARM: Kirkwood: add modes-map property to ns2-leds nodes Simon Guinot
2015-06-18 15:17 ` [RESEND PATCH 3/4] leds: leds-ns2: handle can_sleep GPIOs Simon Guinot
2015-06-22 14:33 ` Jacek Anaszewski
2015-06-24 14:18 ` Jacek Anaszewski [this message]
2015-06-26 17:10 ` Simon Guinot
2015-06-29 14:25 ` Jacek Anaszewski
2015-06-29 14:41 ` Simon Guinot
2015-06-18 15:17 ` [RESEND PATCH 4/4] leds: leds-ns2: depends on MACH_ARMADA_370 Simon Guinot
2015-06-22 14:33 ` Jacek Anaszewski
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=558ABC35.1010801@samsung.com \
--to=j.anaszewski@samsung$(echo .)com \
--cc=linux-arm-kernel@lists$(echo .)infradead.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
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