26 Dec, 2018

1 commit

  • ….anaszewski/linux-leds

    Pull LED updates from Jacek Anaszewski:
    "There are several few-liners, where most of them are fixes and
    improvments. One thing standing out is ground preparation for
    inititializing trigger parameters via Device Tree.

    We introduce LED_INIT_DEFAULT_TRIGGER flag for that purpose and set it
    when default trigger is matched. It indicates that trigger should
    parse DT properties to retrieve the initialization data when set as
    default one"

    * tag 'leds-for-4.21-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/j.anaszewski/linux-leds:
    led: triggers: Initialize LED_INIT_DEFAULT_TRIGGER if trigger is brought after class
    led: triggers: Add LED_INIT_DEFAULT_TRIGGER flag
    led: triggers: Break the for loop after default trigger is found
    leds: pwm: Use OF variant of LED registering function
    leds: pwm: Simplify with resource-managed devm_led_classdev_register()
    leds: gpio: Drop unneeded manual of_node assignment
    leds: 88pm860x: Use of_node_name_eq for node name comparisons
    leds: powernv: add of_node_put()

    Linus Torvalds
     

11 Dec, 2018

3 commits

  • Trigger driver can be initialized after the LED class device driver. In
    such case led_trigger_set_default() won't be called and flag
    LED_INIT_DEFAULT_TRIGGER should be set from led_trigger_register().

    Signed-off-by: Krzysztof Kozlowski
    Signed-off-by: Jacek Anaszewski

    Krzysztof Kozlowski
     
  • Add the flag LED_INIT_DEFAULT_TRIGGER for indicating that trigger
    being set is a default trigger for the LED class device, and
    thus it should be initialized with settings provided in the fwnode.

    Set the flag in the led_trigger_set_default(). It is expected to be
    cleared in the activate() op of a trigger after trigger fwnode
    initialization data is parsed and applied. This should happen only
    once after LED class device registration, to allow leaving triggers
    in the idle state on re-apply and let the users apply their own
    settings without interference from the default ones.

    Signed-off-by: Jacek Anaszewski
    Acked-by: Pavel Machek
    Signed-off-by: Krzysztof Kozlowski

    Jacek Anaszewski
     
  • It is of no avail to continue iterating through registered
    triggers in the led_trigger_set_default() after the trigger to set
    has been found. Add "break" statement to fix this omission.

    Signed-off-by: Jacek Anaszewski
    Acked-by: Pavel Machek
    Signed-off-by: Krzysztof Kozlowski

    Jacek Anaszewski
     

09 Dec, 2018

3 commits


07 Dec, 2018

1 commit

  • Convert string compares of DT node names to use of_node_name_eq helper
    instead. This removes direct access to the node name pointer.

    For instances using of_node_cmp, this has the side effect of now using
    case sensitive comparisons. This should not matter for any FDT based
    system which this is.

    Cc: linux-leds@vger.kernel.org
    Signed-off-by: Rob Herring
    Acked-by: Pavel Machek
    Signed-off-by: Jacek Anaszewski

    Rob Herring
     

28 Nov, 2018

1 commit

  • This patch adds a new LED trigger for coupling the audio mixer change
    with the LED on laptops or other devices. Currently there are two
    trigger types, "audio-mute" and "audio-micmute".

    The audio driver triggers the LED brightness change via
    ledtrig_audio_set() call with the proper type (either mute or
    mic-mute). OTOH, the consumers may call ledtrig_audio_get() for the
    initial brightness value that may have been set by the audio driver
    beforehand.

    This new stuff will be used by HD-audio codec driver and some platform
    drivers (thinkpad_acpi and dell-laptop, also upcoming huawei-wmi).

    Acked-by: Jacek Anaszewski
    Acked-by: Pavel Machek
    Acked-by: Pali Rohár
    Signed-off-by: Takashi Iwai

    Takashi Iwai
     

22 Nov, 2018

1 commit

  • of_find_node_by_path() acquires a reference to the node returned by
    it and that reference needs to be dropped by its caller.
    powernv_led_probe() doesn't do that, so fix it.

    Signed-off-by: Yangtao Li
    Signed-off-by: Jacek Anaszewski

    Yangtao Li
     

09 Nov, 2018

1 commit

  • …git/j.anaszewski/linux-leds

    Pull LED fixes from Jacek Anaszewski:
    "All three fixes are related to the newly added pattern trigger:

    - remove mutex_lock() from timer callback, which would trigger
    problems related to sleeping in atomic context, the removal is
    harmless since mutex protection turned out to be redundant in this
    case

    - fix pattern parsing to properly handle intervals with brightness == 0

    - fix typos in the ABI documentation"

    * tag 'led-fixes-for-4.20-rc2' of git://git.kernel.org/pub/scm/linux/kernel/git/j.anaszewski/linux-leds:
    Documentation: ABI: led-trigger-pattern: Fix typos
    leds: trigger: Fix sleeping function called from invalid context
    Fix pattern handling optimalization

    Linus Torvalds
     

08 Nov, 2018

1 commit

  • We will meet below issue due to mutex_lock() is called in interrupt context.
    The mutex lock is used to protect the pattern trigger data, but before changing
    new pattern trigger data (pattern values or repeat value) by users, we always
    cancel the timer firstly to clear previous patterns' performance. That means
    there is no race in pattern_trig_timer_function(), so we can drop the mutex
    lock in pattern_trig_timer_function() to avoid this issue.

    Moreover we can move the timer cancelling into mutex protection, since there
    is no deadlock risk if we remove the mutex lock in pattern_trig_timer_function().

    BUG: sleeping function called from invalid context at kernel/locking/mutex.c:254
    in_atomic(): 1, irqs_disabled(): 0, pid: 0, name: swapper/1
    CPU: 1 PID: 0 Comm: swapper/1 Not tainted
    4.20.0-rc1-koelsch-00841-ga338c8181013c1a9 #171
    Hardware name: Generic R-Car Gen2 (Flattened Device Tree)
    [] (unwind_backtrace) from [] (show_stack+0x10/0x14)
    [] (show_stack) from [] (dump_stack+0x7c/0x9c)
    [] (dump_stack) from [] (___might_sleep+0xf4/0x158)
    [] (___might_sleep) from [] (mutex_lock+0x18/0x60)
    [] (mutex_lock) from [] (pattern_trig_timer_function+0x1c/0x11c)
    [] (pattern_trig_timer_function) from [] (call_timer_fn+0x1c/0x90)
    [] (call_timer_fn) from [] (expire_timers+0x94/0xa4)
    [] (expire_timers) from [] (run_timer_softirq+0x108/0x15c)
    [] (run_timer_softirq) from [] (__do_softirq+0x1d4/0x258)
    [] (__do_softirq) from [] (irq_exit+0x64/0xc4)
    [] (irq_exit) from [] (__handle_domain_irq+0x80/0xb4)
    [] (__handle_domain_irq) from [] (gic_handle_irq+0x58/0x90)
    [] (gic_handle_irq) from [] (__irq_svc+0x58/0x74)
    Exception stack(0xeb483f60 to 0xeb483fa8)
    3f60: 00000000 00000000 eb9afaa0 c0217e80 00000000 ffffe000 00000000 c0e06408
    3f80: 00000002 c0e0647c c0c6a5f0 00000000 c0e04900 eb483fb0 c0207ea8 c0207e98
    3fa0: 60020013 ffffffff
    [] (__irq_svc) from [] (arch_cpu_idle+0x1c/0x38)
    [] (arch_cpu_idle) from [] (do_idle+0x138/0x268)
    [] (do_idle) from [] (cpu_startup_entry+0x18/0x1c)
    [] (cpu_startup_entry) from [] (0x402022ec)

    Fixes: 5fd752b6b3a2 ("leds: core: Introduce LED pattern trigger")
    Signed-off-by: Baolin Wang
    Reported-by: Geert Uytterhoeven
    Tested-by: Geert Uytterhoeven
    Signed-off-by: Jacek Anaszewski

    Baolin Wang
     

27 Oct, 2018

1 commit

  • Commit 45d4c6de4e49 ("leds: gpio: Try to lookup gpiod from device")
    removed the common code path that set the led_dat->gpiod pointer in
    create_gpio_led(), but only added it back for the devices that have
    a valid gpio_led_platform_data structure. Calling gpio_leds_create()
    in gpio_led_probe() is not enough to get a valid gpiod pointer.

    Fortunately enough, gpio_leds_create() already gets the needed pointer,
    we just need to assign it to the relevant gpio_led_data structure.

    Fixes: 45d4c6de4e49 ("leds: gpio: Try to lookup gpiod from device")
    Signed-off-by: Liviu Dudau
    Reviewed-by: Linus Walleij
    Acked-by: Pavel Machek
    Signed-off-by: Jacek Anaszewski

    Liviu Dudau
     

26 Oct, 2018

1 commit

  • Check for zero duration before skipping step. This fixes pattern

    echo "0 1000 10 2550 0 1000" > pattern

    which should do [ .-xXx-.] but does [ Xx-.]

    Signed-off-by: Pavel Machek
    Suggested-by: Jacek Anaszewski
    Signed-off-by: Jacek Anaszewski

    Pavel Machek
     

12 Oct, 2018

2 commits

  • This patch implements the 'pattern_set'and 'pattern_clear'
    interfaces to support SC27XX LED breathing mode.

    Signed-off-by: Baolin Wang
    Acked-by: Pavel Machek
    Signed-off-by: Jacek Anaszewski

    Baolin Wang
     
  • This patch adds a new LED trigger that LED device can configure
    to employ software or hardware pattern engine.

    Consumers can write 'pattern' file to enable the software pattern
    which alters the brightness for the specified duration with one
    software timer.

    Moreover consumers can write 'hw_pattern' file to enable the hardware
    pattern for some LED controllers which can autonomously control
    brightness over time, according to some preprogrammed hardware
    patterns.

    Signed-off-by: Raphael Teysseyre
    Signed-off-by: Baolin Wang
    Signed-off-by: Jacek Anaszewski

    Baolin Wang
     

11 Sep, 2018

2 commits

  • AN30259A is a 3-channel LED driver which uses I2C. It supports timed
    operation via an internal PWM clock, and variable brightness. This
    driver offers support for basic hardware-based blinking and brightness
    control.

    The datasheet is freely available:
    https://www.alliedelec.com/m/d/a9d2b3ee87c2d1a535a41dd747b1c247.pdf

    Signed-off-by: Simon Shields
    Acked-by: Pavel Machek
    Signed-off-by: Jacek Anaszewski

    Simon Shields
     
  • This augments the GPIO lookup code in the GPIO LEDs to
    attempt to look up a GPIO descriptor from the device with
    index.

    This makes it possible to use GPIO machine look-up tables
    and stop passing global GPIO numbers through platform data.

    Using this we can stepwise convert existing board files
    to use machine descriptor tables and then eventually drop
    the legacy GPIO support and only include
    and use descriptors exclusively.

    Signed-off-by: Linus Walleij
    Signed-off-by: Jacek Anaszewski

    Linus Walleij
     

09 Sep, 2018

1 commit


29 Aug, 2018

1 commit


07 Aug, 2018

1 commit


06 Jul, 2018

13 commits

  • The trigger core learned error handling for the activate callback and
    to handle device attributes. Also make use of the module_led_trigger()
    helper to simplify trigger registration.

    Signed-off-by: Uwe Kleine-König
    Acked-by: Pavel Machek
    Signed-off-by: Jacek Anaszewski

    Uwe Kleine-König
     
  • Use the new module_led_trigger() helper. Also use
    attribute support from the trigger core. Drop error message on
    allocation failure as kzalloc() already screams loudly when failing. Use
    wrappers to get and set trigger data.

    Signed-off-by: Uwe Kleine-König
    Acked-by: Pavel Machek
    Signed-off-by: Jacek Anaszewski

    Uwe Kleine-König
     
  • The trigger core learned error handling for the activate callback and
    can handle device attributes now. This allows simplifying the driver
    considerably. Note that .deactivate() is only called when .activate()
    succeeded, so the check for .activated can go away in .deactivate().

    Also make use of module_led_trigger() and the accessor function to get
    and set trigger_data.

    Signed-off-by: Uwe Kleine-König
    Acked-by: Pavel Machek
    Signed-off-by: Jacek Anaszewski

    Uwe Kleine-König
     
  • This removes some boilerplate from the driver.

    Signed-off-by: Uwe Kleine-König
    Acked-by: Pavel Machek
    Signed-off-by: Jacek Anaszewski

    Uwe Kleine-König
     
  • The trigger core learned error handling for the activate callback and
    can handle device attributes now. This allows simplifying the driver
    considerably. Note that .deactivate() is only called when .activate()
    succeeded, so the check for .activated can go away in .deactivate().

    Also make use of module_led_trigger() and the accessor function to get
    and set trigger_data.

    Signed-off-by: Uwe Kleine-König
    Acked-by: Pavel Machek
    Signed-off-by: Jacek Anaszewski

    Uwe Kleine-König
     
  • The trigger core learned error handling for the activate callback and
    can handle device attributes now. This allows simplifying the driver
    considerably. Note that .deactivate() is only called when .activate()
    succeeded, so the check for .activated can go away in .deactivate().

    Also make use of module_led_trigger() and do some minor coding style
    improvements.

    Signed-off-by: Uwe Kleine-König
    Acked-by: Pavel Machek
    Signed-off-by: Jacek Anaszewski

    Uwe Kleine-König
     
  • The trigger core learned error handling for the activate callback and
    can handle device attributes now. This allows simplifying the driver
    considerably. Note that .deactivate() is only called when .activate()
    succeeded, so the check for .activated can go away.

    Signed-off-by: Uwe Kleine-König
    Acked-by: Pavel Machek
    Signed-off-by: Jacek Anaszewski

    Uwe Kleine-König
     
  • The trigger core learned error handling for the activate callback and
    can handle device attributes now. This allows simplifying the driver
    considerably. Note that .deactivate() is only called when .activate()
    succeeded, so the check for .trigger_data being non-NULL can go away.

    Signed-off-by: Uwe Kleine-König
    Acked-by: Pavel Machek
    Signed-off-by: Jacek Anaszewski

    Uwe Kleine-König
     
  • The trigger core learned error handling for the activate callback and
    can handle device attributes now. This allows simplifying the driver
    considerably. Note that .deactivate() is only called when .activate()
    succeeded, so the check for trigger_data being non-NULL can go away.
    (It was broken before because the core didn't clear .trigger_data, so it
    might have been non-NULL even if .activate() failed before.)

    Signed-off-by: Uwe Kleine-König
    Acked-by: Pavel Machek
    Signed-off-by: Jacek Anaszewski

    Uwe Kleine-König
     
  • This helps keeping these two fields consistent and drivers don't need to
    care for this themselves any more.

    Note that .activated isn't set to true automatically because that might
    confuse some triggers when deactivating (e.g. ledtrig-gpio).

    Signed-off-by: Uwe Kleine-König
    Acked-by: Pavel Machek
    Signed-off-by: Jacek Anaszewski

    Uwe Kleine-König
     
  • As many triggers use device attributes, add support for these in
    led_trigger_set which allows simplifying the drivers accordingly.

    Signed-off-by: Uwe Kleine-König
    Acked-by: Pavel Machek
    Signed-off-by: Jacek Anaszewski

    Uwe Kleine-König
     
  • Given that activating a trigger can fail, let the callback return an
    indication. This prevents to have a trigger active according to the
    "trigger" sysfs attribute but not functional.

    All users are changed accordingly to return 0 for now. There is no intended
    change in behaviour.

    Signed-off-by: Uwe Kleine-König
    Acked-by: Pavel Machek
    Signed-off-by: Jacek Anaszewski

    Uwe Kleine-König
     
  • These files are licensed under GPL version 2 only. So use "GPL v2"
    instead of "GPL" (which means v2 or later).

    Also remove an empty (but commented) line at the end of the license
    header which nicely proves in the context that the drivers are really v2
    only :-)

    Signed-off-by: Uwe Kleine-König
    Signed-off-by: Jacek Anaszewski

    Uwe Kleine-König
     

04 Jul, 2018

6 commits