lkml.org 
[lkml]   [2016]   [Jan]   [5]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    From
    Date
    SubjectRe: [PATCH] net/rfkill: Create "airplane mode" LED trigger
    Hello Johannes,

    On 26 December 2015 at 10:05, João Paulo Rechi Vita <jprvita@gmail.com> wrote:
    > For platform drivers to be able to correctly drive the "Airplane Mode"
    > indicative LED there needs to be a RFKill LED trigger tied to the global
    > state of RFKILL_TYPE_ALL (instead of to a specific RFKill) and that
    > works in an inverted manner of regular RFKill LED triggers, that is, the
    > LED is ON when the state is blocked, and OFF otherwise.
    >
    > This commit implements such a trigger, which will be used by the
    > asus-wireless x86 platform driver.
    >

    The initial patches of the asus-wireless driver have been queue on the
    platform-drivers-x86 tree. Do you have any comments on this one? It
    would be great to have it in for 4.5, since the airplane mode LED
    management in asus-wireless' pending patches depend on this one.

    > Signed-off-by: João Paulo Rechi Vita <jprvita@endlessm.com>
    > ---
    > net/rfkill/core.c | 30 ++++++++++++++++++++++++++++++
    > 1 file changed, 30 insertions(+)
    >
    > diff --git a/net/rfkill/core.c b/net/rfkill/core.c
    > index b41e9ea..3effc29 100644
    > --- a/net/rfkill/core.c
    > +++ b/net/rfkill/core.c
    > @@ -124,6 +124,26 @@ static bool rfkill_epo_lock_active;
    >
    >
    > #ifdef CONFIG_RFKILL_LEDS
    > +static void airplane_mode_led_trigger_activate(struct led_classdev *led);
    > +
    > +static struct led_trigger airplane_mode_led_trigger = {
    > + .name = "rfkill-airplane-mode",
    > + .activate = airplane_mode_led_trigger_activate,
    > +};
    > +
    > +static void airplane_mode_led_trigger_event(void)
    > +{
    > + if (rfkill_global_states[RFKILL_TYPE_ALL].cur & RFKILL_BLOCK_ANY)
    > + led_trigger_event(&airplane_mode_led_trigger, LED_FULL);
    > + else
    > + led_trigger_event(&airplane_mode_led_trigger, LED_OFF);
    > +}
    > +
    > +static void airplane_mode_led_trigger_activate(struct led_classdev *led)
    > +{
    > + airplane_mode_led_trigger_event();
    > +}
    > +
    > static void rfkill_led_trigger_event(struct rfkill *rfkill)
    > {
    > struct led_trigger *trigger;
    > @@ -175,6 +195,10 @@ static void rfkill_led_trigger_unregister(struct rfkill *rfkill)
    > led_trigger_unregister(&rfkill->led_trigger);
    > }
    > #else
    > +static void airplane_mode_led_trigger_event(void)
    > +{
    > +}
    > +
    > static void rfkill_led_trigger_event(struct rfkill *rfkill)
    > {
    > }
    > @@ -346,6 +370,7 @@ static void __rfkill_switch_all(const enum rfkill_type type, bool blocked)
    >
    > for (i = 0; i < NUM_RFKILL_TYPES; i++)
    > rfkill_global_states[i].cur = blocked;
    > + airplane_mode_led_trigger_event();
    > } else {
    > rfkill_global_states[type].cur = blocked;
    > }
    > @@ -1177,6 +1202,7 @@ static ssize_t rfkill_fop_write(struct file *file, const char __user *buf,
    > enum rfkill_type i;
    > for (i = 0; i < NUM_RFKILL_TYPES; i++)
    > rfkill_global_states[i].cur = ev.soft;
    > + airplane_mode_led_trigger_event();
    > } else {
    > rfkill_global_states[ev.type].cur = ev.soft;
    > }
    > @@ -1293,6 +1319,10 @@ static int __init rfkill_init(void)
    > }
    > #endif
    >
    > +#ifdef CONFIG_RFKILL_LEDS
    > + led_trigger_register(&airplane_mode_led_trigger);
    > +#endif
    > +
    > out:
    > return error;
    > }
    > --
    > 2.5.0
    >

    Thanks and best regards,

    --
    João Paulo Rechi Vita
    http://about.me/jprvita


    \
     
     \ /
      Last update: 2016-01-06 04:01    [W:2.471 / U:0.008 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site