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()
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 -
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 -
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
09 Dec, 2018
3 commits
-
The PWM leds can be instantiated from Device Tree so pass the
respective device node to LED core. This provides the LED system with
proper device node and exposes it through uevent.Signed-off-by: Krzysztof Kozlowski
Signed-off-by: Jacek Anaszewski -
Simplify the exit path with resource-managed version of registering LED
class device. The code should be functionally the same, except that on
device removal the led_pwm_priv->num_leds is not decremented to zero
(which should not have any effect as device is going away).Signed-off-by: Krzysztof Kozlowski
Signed-off-by: Jacek Anaszewski -
This reverts the main change of commit bff23714bc36 ("leds: leds-gpio:
Set of_node for created LED devices") because of_node assignment is
handled by core since commit 7ea79ae86c28 ("leds: gpio: use OF variant
of LED registering function"). Basically the code was overwriting the
of_node with same value.No functional change expected.
Signed-off-by: Krzysztof Kozlowski
Tested-by: Rafał Miłecki
Signed-off-by: Jacek Anaszewski
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
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
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
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
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
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
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
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 -
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
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.pdfSigned-off-by: Simon Shields
Acked-by: Pavel Machek
Signed-off-by: Jacek Anaszewski -
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
09 Sep, 2018
1 commit
-
When probing, if we fail to get the pwm due to probe deferal, we shouldn't
print an error message. Just be silent in this case.Signed-off-by: Jerome Brunet
Signed-off-by: Jacek Anaszewski
29 Aug, 2018
1 commit
-
In preparation to remove the node name pointer from struct device_node,
convert printf users to use the %pOFn format specifier.Signed-off-by: Rob Herring
Cc: linux-leds@vger.kernel.org
Acked-by: Sakari Ailus
Acked-by: Pavel Machek
Signed-off-by: Jacek Anaszewski
07 Aug, 2018
1 commit
-
Use unsigned int, because it's preferred to unsigned.
Signed-off-by: Kitone Elvis Peter
Acked-by: Pavel Machek
Signed-off-by: Jacek Anaszewski
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 -
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 -
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 -
This removes some boilerplate from the driver.
Signed-off-by: Uwe Kleine-König
Acked-by: Pavel Machek
Signed-off-by: Jacek Anaszewski -
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 -
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 -
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 -
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 -
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 -
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 -
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 -
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 -
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
04 Jul, 2018
6 commits
-
The LM36922 has one output but can sync current to 2 LED
strings. The user may only use one sync so the other
syncs need to be disabled.The LM36923 has 3 LED syncs.
Signed-off-by: Dan Murphy
Signed-off-by: Jacek Anaszewski -
Update the code to use the fwnode calls as opposed
to ARM DT node api's.This allows the device to be used with either DT
configurations or ACPI definitions.Signed-off-by: Dan Murphy
Signed-off-by: Jacek Anaszewski -
Update the license header to the current
SPDX licensing format.Signed-off-by: Dan Murphy
Signed-off-by: Jacek Anaszewski -
Variable mode is assigned to pdata->led_pdata->mode[led->id] and yet
is not being used when calling function max8997_led_set_mode. Fix
this by using mode when calling max8997_led_set_mode.Cleans up clang warning:
warning: variable 'mode' set but not used [-Wunused-but-set-variable]Fixes: 8584cb82f151 ("leds: Add suuport for MAX8997-LED driver")
Signed-off-by: Colin Ian King
Signed-off-by: Jacek Anaszewski -
Update the email address in the module information and in the comments
and in the module information, and drop the existing boilerplate in
favor of a SPDX header.Also sync the module license information with the header.
Signed-off-by: Daniel Mack
Signed-off-by: Jacek Anaszewski -
The binding details are described in an earlier commit that adds the
documentation.Signed-off-by: Daniel Mack
Signed-off-by: Jacek Anaszewski