• Simon Guinot's avatar
    leds: leds-ns2: handle can_sleep GPIOs · 4b90432d
    Simon Guinot authored
    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: default avatarSimon Guinot <simon.guinot@sequanux.org>
    Signed-off-by: default avatarVincent Donnefort <vdonnefort@gmail.com>
    Signed-off-by: default avatarJacek Anaszewski <j.anaszewski@samsung.com>
    4b90432d
leds-ns2.c 10 KB