aboutsummaryrefslogtreecommitdiff
AgeCommit message (Collapse)Author
2016-01-04leds: powernv: Implement brightness_set_blocking opJacek Anaszewski
Since brightness setting can sleep for this driver, implement brightness_set_blocking op, instead of brightness_set. It makes this driver compatible with LED triggers. Signed-off-by: Jacek Anaszewski <j.anaszewski@samsung.com> Cc: Vasant Hegde <hegdevasant@linux.vnet.ibm.com>
2016-01-04leds: ipaq-micro: Implement brightness_set_blocking opJacek Anaszewski
Since brightness setting can sleep for this driver, implement brightness_set_blocking op, instead of brightness_set. It makes this driver compatible with LED triggers. Signed-off-by: Jacek Anaszewski <j.anaszewski@samsung.com> Reviewed-by: Linus Walleij <linus.walleij@linaro.org>
2016-01-04leds: powernv: removing NULL checkSaurabh Sengar
No need to explicitly check for pointer to be null, of_prop_next_string anyways returns NULL, if passed pointer is NULL and hence loop will continue. Signed-off-by: Saurabh Sengar <saurabh.truth@gmail.com> Acked-by: Vasant Hegde <hegdevasant@linux.vnet.ibm.com> Signed-off-by: Jacek Anaszewski <j.anaszewski@samsung.com>
2016-01-04leds: bcm6328: Swap LED ON and OFF definitionsSimon Arlott
The values of BCM6328_LED_MODE_ON and BCM6328_LED_MODE_OFF were named for active low LEDs. These should be swapped so that they are named for the default case of active high LEDs. Signed-off-by: Simon Arlott <simon@fire.lp0.eu> Signed-off-by: Jacek Anaszewski <j.anaszewski@samsung.com>
2016-01-04leds: bcm6328: Reuse bcm6328_led_set() instead of copying its functionalitySimon Arlott
When ensuring a consistent initial LED state in bcm6328_led (as they may be blinking instead of on/off), the LED register is set using an inverted copy of bcm6328_led_set(). To avoid further errors relating to active low handling, call this function directly instead. As bcm6328_led_set() acquires the same spinlock again when updating the register, it is called after unlocking. Signed-off-by: Simon Arlott <simon@fire.lp0.eu> Signed-off-by: Jacek Anaszewski <j.anaszewski@samsung.com>
2016-01-04leds: ns2: Remove work queueJacek Anaszewski
Now the core implements the work queue, remove it from the drivers, and switch to using brightness_set_blocking op. Signed-off-by: Jacek Anaszewski <j.anaszewski@samsung.com> Tested-by: Simon Guinot <simon.guinot@sequanux.org>
2016-01-04leds: pwm: fix driver description and make license match the headerUwe Kleine-König
Signed-off-by: Uwe Kleine-König <u.kleine-koenig@pengutronix.de> Signed-off-by: Jacek Anaszewski <j.anaszewski@samsung.com>
2016-01-04leds: turn off the LED and wait for completion on unregistering LED class deviceMilo Kim
Workqueue, 'set_brightness_work' is used for scheduling brightness control. This workqueue is canceled when the LED class device is unregistered. Currently, LED subsystem handles like below. cancel_work_sync(&led_cdev->set_brightness_work) led_set_brightness(led_cdev, LED_OFF) However, this could be a problem. Workqueue is going to be canceled but LED device needs to be off. The worst case is null pointer access due to scheduling a workqueue. LED module is loaded. LED driver private data is allocated by using devm_zalloc(). LED module is unloaded. led_classdev_unregister() is called. cancel_work_sync() led_set_brightness(led_cdev, LED_OFF) schedule_work() if LED driver uses brightness_set_blocking() In the meantime, driver private data will be freed. ..scheduling.. brightness_set_blocking() callback is invoked. For the brightness control, LED driver tries to access private data but resource is removed! To avoid this problem, LED subsystem should turn off the brightness first and wait for completion. led_set_brightness(led_cdev, LED_OFF) flush_work(&led_cdev->set_brightness_work) It guarantees that LED driver turns off the brightness prior to resource management. Cc: linux-leds@vger.kernel.org Cc: linux-kernel@vger.kernel.org Signed-off-by: Milo Kim <milo.kim@ti.com> Signed-off-by: Jacek Anaszewski <j.anaszewski@samsung.com>
2016-01-04leds: flash: Remove checking for state < 1 in flash_strobe_store()Jacek Anaszewski
Strobe state variable is declared as unsigned long, remove the check for values less than zero then. Signed-off-by: Jacek Anaszewski <j.anaszewski@samsung.com> Reported-by: David Binderman <dcb314@hotmail.com>
2016-01-04leds: ktd2692: Add missing of_node_putIngi Kim
The refcount of device_node increases after of_node_get() is called. So, a break out of the loop requires of_node_put(). This patch adds missing of_node_put() when loop breaks. Signed-off-by: Ingi Kim <ingi2.kim@samsung.com> Acked-by: Rob Herring <robh@kernel.org> Signed-off-by: Jacek Anaszewski <j.anaszewski@samsung.com>
2016-01-04leds: call led_pwm_set() in leds-pwm to enforce default LED_OFFMarkus Hofstaetter
Some PWMs are disabled by default or the default pin setting does not match the LED_OFF state (e.g., active-low leds). Hence, the driver may end up reporting 0 brightness, but the leds are actually on using full brightness, because it never enforces its default configuration. So enforce it by calling led_pwm_set() after successfully registering the device. Tested on a Phytec phyFLEX i.MX6Q board based on kernel v3.19.5. Signed-off-by: Markus Hofstaetter <markus.hofstaetter@ait.ac.at> Tested-by: Markus Hofstaetter <markus.hofstaetter@ait.ac.at> Signed-off-by: Jacek Anaszewski <j.anaszewski@samsung.com>
2016-01-04leds: triggers: oneshot: fix module license specificationUwe Kleine-König
The header of this file fixes the license to GPL 2 only without the option to use later version. So use the string "GPL v2" that is to be used in this case. Signed-off-by: Uwe Kleine-König <u.kleine-koenig@pengutronix.de> Acked-by: Fabio Baltieri <fabio.baltieri@gmail.com> Signed-off-by: Jacek Anaszewski <j.anaszewski@samsung.com>
2016-01-04leds: ledtrig-transient: fix duration to be msec instead of jiffiesRob Herring
The transient trigger duration is documented to be in msec units, but is actually in jiffies units. Other time based triggers are in msec units as well. Fix the timer setup to convert from msec. This could break an existing userspace that worked around this problem, but exposing jiffies to userspace is just wrong and would break anyway if HZ is changed. Signed-off-by: Rob Herring <robh@kernel.org> Cc: Shuah Khan <shuahkhan@gmail.com> Cc: Richard Purdie <rpurdie@rpsys.net> Cc: linux-leds@vger.kernel.org Signed-off-by: Jacek Anaszewski <j.anaszewski@samsung.com>
2016-01-04leds: lm355x: Remove work queueJacek Anaszewski
Now the core implements the work queue, remove it from the drivers, and switch to using brightness_set_blocking op. Signed-off-by: Jacek Anaszewski <j.anaszewski@samsung.com> Cc: Daniel Jeong <daniel.jeong@ti.com> Cc: G.Shark Jeong <gshark.jeong@gmail.com>
2016-01-04leds: pwm: remove work queueJacek Anaszewski
Now the core implements the work queue, remove it from the drivers, and switch to using brightness_set_blocking op. Signed-off-by: Jacek Anaszewski <j.anaszewski@samsung.com> Cc: Raphael Assenat <raph@8d.com>
2016-01-04leds: gpio: Remove work queueJacek Anaszewski
Now the core implements the work queue, remove it from the drivers, and switch to using brightness_set_blocking op. Signed-off-by: Jacek Anaszewski <j.anaszewski@samsung.com> Cc: Raphael Assenat <raph@8d.com>
2016-01-04leds: wm8350: Remove work queueAndrew Lunn
Now the core implements the work queue, remove it from the drivers, and switch to using brightness_set_blocking op. Signed-off-by: Andrew Lunn <andrew@lunn.ch> Signed-off-by: Jacek Anaszewski <j.anaszewski@samsung.com> Acked-by: Antonio Ospite <ao2@ao2.it> Reviewed-by: Mark Brown <broonie@kernel.org>
2016-01-04leds: regulator: Remove work queueAndrew Lunn
Now the core implements the work queue, remove it from the drivers, and switch to using brightness_set_blocking op. Signed-off-by: Andrew Lunn <andrew@lunn.ch> Acked-by: Antonio Ospite <ao2@ao2.it> Signed-off-by: Jacek Anaszewski <j.anaszewski@samsung.com>
2016-01-04leds: mc13783: Remove work queueAndrew Lunn
Now the core implements the work queue, remove it from the drivers, and switch to using brightness_set_blocking op. Signed-off-by: Andrew Lunn <andrew@lunn.ch> Signed-off-by: Jacek Anaszewski <j.anaszewski@samsung.com>
2016-01-04leds: max8997: Remove unneeded workqueue includeAndrew Lunn
Work queues are not used in this driver, so remove the include. Signed-off-by: Andrew Lunn <andrew@lunn.ch>
2016-01-04leds: lt3593: Remove work queueAndrew Lunn
Now the core implements the work queue, remove it from the drivers, and switch to using brightness_set_blocking op. Signed-off-by: Andrew Lunn <andrew@lunn.ch> Cc: Daniel Mack <daniel@caiaq.de> Signed-off-by: Jacek Anaszewski <j.anaszewski@samsung.com>
2016-01-04leds: dac124d085: Remove work queueAndrew Lunn
Now the core implements the work queue, remove it from the drivers, and switch to using brightness_set_blocking op. Signed-off-by: Andrew Lunn <andrew@lunn.ch> Cc: Guennadi Liakhovetski <g.liakhovetski@gmx.de> Signed-off-by: Jacek Anaszewski <j.anaszewski@samsung.com>
2016-01-04leds: da9052: Remove work queueAndrew Lunn
Now the core implements the work queue, remove it from the drivers, and switch to using brightness_set_blocking op. Signed-off-by: Andrew Lunn <andrew@lunn.ch> Signed-off-by: Jacek Anaszewski <j.anaszewski@samsung.com>
2016-01-04leds: da903x: Remove work queueAndrew Lunn
Now the core implements the work queue, remove it from the drivers, and switch to using brightness_set_blocking op. Signed-off-by: Andrew Lunn <andrew@lunn.ch> Signed-off-by: Jacek Anaszewski <j.anaszewski@samsung.com>
2016-01-04leds: wm831x: Remove work queueAndrew Lunn
Now the core implements the work queue, remove it from the drivers, and switch to using brightness_set_blocking op. Signed-off-by: Andrew Lunn <andrew@lunn.ch> Reviewed-by: Mark Brown <broonie@kernel.org> Signed-off-by: Jacek Anaszewski <j.anaszewski@samsung.com>
2016-01-04leds: pca963x: Remove work queueAndrew Lunn
Now the core implements the work queue, remove it from the drivers, and switch to using brightness_set_blocking op. Signed-off-by: Andrew Lunn <andrew@lunn.ch> Signed-off-by: Jacek Anaszewski <j.anaszewski@samsung.com> Acked-by: Dan Murphy <dmurphy@ti.com> Cc: Ricardo Ribalda <ricardo.ribalda@gmail.com>
2016-01-04leds: pca955x: Remove work queueAndrew Lunn
Now the core implements the work queue, remove it from the drivers, and switch to using brightness_set_blocking op. Signed-off-by: Andrew Lunn <andrew@lunn.ch> Cc: Nate Case <ncase@xes-inc.com> Signed-off-by: Jacek Anaszewski <j.anaszewski@samsung.com>
2016-01-04leds: lp8860: Remove work queueAndrew Lunn
Now the core implements the work queue, remove it from the drivers, and switch to using brightness_set_blocking op. Signed-off-by: Andrew Lunn <andrew@lunn.ch> Acked-by: Dan Murphy <dmurphy@ti.com> Signed-off-by: Jacek Anaszewski <j.anaszewski@samsung.com>
2016-01-04leds: lp8788: Remove work queueAndrew Lunn
Now the core implements the work queue, remove it from the drivers, and switch to using brightness_set_blocking op. Signed-off-by: Andrew Lunn <andrew@lunn.ch> Cc: Milo Kim <milo.kim@ti.com> Signed-off-by: Jacek Anaszewski <j.anaszewski@samsung.com>
2016-01-04leds: lp55xx: Remove work queueAndrew Lunn
Now the core implements the work queue, remove it from the drivers, and switch to using brightness_set_blocking op. Signed-off-by: Andrew Lunn <andrew@lunn.ch> Signed-off-by: Jacek Anaszewski <j.anaszewski@samsung.com> Cc: Milo Kim <milo.kim@ti.com>
2016-01-04leds: lp3944: Remove work queueAndrew Lunn
Now the core implements the work queue, remove it from the driver, and switch to using brightness_set_blocking op. Signed-off-by: Andrew Lunn <andrew@lunn.ch> Acked-by: Antonio Ospite <ao2@ao2.it> Signed-off-by: Jacek Anaszewski <j.anaszewski@samsung.com>
2016-01-04leds: pca9532: Remove work queue for LEDs.Andrew Lunn
Now the core implements the work queue, remove it from the driver, and switch to using brightness_set_blocking op. Signed-off-by: Andrew Lunn <andrew@lunn.ch> Signed-off-by: Jacek Anaszewski <j.anaszewski@samsung.com>
2016-01-04leds: lm3642: Remove work queueAndrew Lunn
Now the core implements the work queue, remove it from the driver, and switch to using brightness_set_blocking op. Signed-off-by: Andrew Lunn <andrew@lunn.ch> Cc: Daniel Jeong <daniel.jeong@ti.com> Cc: G.Shark Jeong <gshark.jeong@gmail.com> Signed-off-by: Jacek Anaszewski <j.anaszewski@samsung.com>
2016-01-04leds: lm3533: Remove work queueAndrew Lunn
Now the core implements the work queue, remove it from the driver, and switch to using brightness_set_blocking op. Signed-off-by: Andrew Lunn <andrew@lunn.ch> Signed-off-by: Jacek Anaszewski <j.anaszewski@samsung.com> Cc: Johan Hovold <johan@kernel.org>
2016-01-04leds: blinkm: Remove work queueAndrew Lunn
Now the core implements the work queue, remove it from the driver, and switch to using brightness_set_blocking op. Signed-off-by: Andrew Lunn <andrew@lunn.ch> Cc: Jan-Simon Moeller <dl9pf@gmx.de> Signed-off-by: Jacek Anaszewski <j.anaszewski@samsung.com>
2016-01-04leds: bd2802: Remove work queueAndrew Lunn
Now the core implements the work queue, remove it from the driver, and switch to using brightness_set_blocking op. Signed-off-by: Andrew Lunn <andrew@lunn.ch> Cc: Kim Kyuwon <q1.kim@samsung.com> Signed-off-by: Jacek Anaszewski <j.anaszewski@samsung.com>
2016-01-04leds: adp5520: Remove work queueAndrew Lunn
Now the core implements the work queue, remove it from the driver, and switch to using brightness_set_blocking op. Signed-off-by: Andrew Lunn <andrew@lunn.ch> Cc: Michael Hennerich <michael.hennerich@analog.com> Signed-off-by: Jacek Anaszewski <j.anaszewski@samsung.com>
2016-01-04leds: 88pm860x: Remove work queueAndrew Lunn
Now the core implements the work queue, remove it from the driver, and switch to using brightness_set_blocking op. Signed-off-by: Andrew Lunn <andrew@lunn.ch> Signed-off-by: Jacek Anaszewski <j.anaszewski@samsung.com>
2016-01-04leds: tlc591xx: Remove work queueAndrew Lunn
Now the core implements the work queue, remove it from the driver, and switch to using brightness_set_blocking op. Signed-off-by: Andrew Lunn <andrew@lunn.ch> Signed-off-by: Jacek Anaszewski <j.anaszewski@samsung.com>
2016-01-04media: flash: use led_set_brightness_sync for torch brightnessJacek Anaszewski
LED subsystem shifted responsibility for choosing between SYNC or ASYNC way of setting brightness from drivers to the caller. Adapt the wrapper to those changes. Signed-off-by: Jacek Anaszewski <j.anaszewski@samsung.com> Cc: linux-media@vger.kernel.org Acked-by: Sakari Ailus <sakari.ailus@linux.intel.com> Acked-by: Pavel Machek <pavel@ucw.cz> Acked-by: Mauro Carvalho Chehab <mchehab@osg.samsung.com>
2016-01-04leds: ktd2692: Remove work queueJacek Anaszewski
Now the core implements the work queue, remove it from the drivers, and switch to using brightness_set_blocking op. Signed-off-by: Jacek Anaszewski <j.anaszewski@samsung.com> Cc: Ingi Kim <ingi2.kim@samsung.com> Acked-by: Sakari Ailus <sakari.ailus@linux.intel.com> Acked-by: Pavel Machek <pavel@ucw.cz>
2016-01-04leds: aat1290: Remove work queueJacek Anaszewski
Now the core implements the work queue, remove it from the drivers, and switch to using brightness_set_blocking op. Signed-off-by: Jacek Anaszewski <j.anaszewski@samsung.com> Acked-by: Sakari Ailus <sakari.ailus@linux.intel.com> Acked-by: Pavel Machek <pavel@ucw.cz>
2016-01-04leds: max77693: Remove work queueJacek Anaszewski
Now the core implements the work queue, remove it from the drivers, and switch to using brightness_set_blocking op. Signed-off-by: Jacek Anaszewski <j.anaszewski@samsung.com> Acked-by: Sakari Ailus <sakari.ailus@linux.intel.com> Acked-by: Pavel Machek <pavel@ucw.cz>
2016-01-04Documentation: leds: Add description of brightness setting APIJacek Anaszewski
This patch adds description of the LED subsystem API for setting an LED brightness. Signed-off-by: Jacek Anaszewski <j.anaszewski@samsung.com> Acked-by: Sakari Ailus <sakari.ailus@linux.intel.com>
2016-01-04leds: core: Drivers shouldn't enforce SYNC/ASYNC brightness settingJacek Anaszewski
This patch removes SET_BRIGHTNESS_ASYNC and SET_BRIGHTNESS_SYNC flags. led_set_brightness() now calls led_set_brightness_nosleep() instead of choosing between sync and async op basing on the flags defined by the driver. From now on, if a user wants to make sure that brightness will be set synchronously, they have to use led_set_brightness_sync() API. It is now being made publicly available since it has become apparent that it is a caller who should decide whether brightness is to be set in a synchronous or an asynchronous way. Signed-off-by: Jacek Anaszewski <j.anaszewski@samsung.com> Acked-by: Sakari Ailus <sakari.ailus@linux.intel.com>
2016-01-04leds: core: Use set_brightness_work for the blocking opJacek Anaszewski
This patch makes LED core capable of setting brightness for drivers that implement brightness_set_blocking op. It removes from LED class drivers responsibility for using work queues on their own. In order to achieve this set_brightness_delayed callback is being modified to directly call one of available ops for brightness setting. led_set_brightness_async() function didn't set brightness in an asynchronous way in all cases. It was mistakenly assuming that all LED subsystem drivers used work queue in their brightness_set op, whereas only half of them did that. Since it has no users now, it is being removed. Signed-off-by: Jacek Anaszewski <j.anaszewski@samsung.com> Acked-by: Sakari Ailus <sakari.ailus@linux.intel.com>
2016-01-04leds: core: Add led_set_brightness_nosleep{nopm} functionsJacek Anaszewski
This patch adds led_set_brightness_nosleep() and led_set_brightness_nopm() functions, that guarantee setting LED brightness in a non-blocking way. The latter is used from pm_ops context and doesn't modify the brightness cached in the struct led_classdev. Its execution always ends up with a call to brightness setting op - either directly or through a set_brightness_work, regardless of LED_SUSPENDED flag state. The patch also replaces led_set_brightness_async() with led_set_brightness_nosleep() in all places where the most vital was setting brightness in a non sleeping way but not necessarily asynchronously, which is not needed for non-blocking drivers. Signed-off-by: Jacek Anaszewski <j.anaszewski@samsung.com> Acked-by: Sakari Ailus <sakari.ailus@linux.intel.com>
2016-01-04leds: Rename brightness_set_sync op to brightness_set_blockingJacek Anaszewski
The initial purpose of brightness_set_sync op, introduced along with the LED flash class extension, was to add a means for setting torch LED brightness as soon as possible, which couldn't have been guaranteed by brightness_set op. This patch renames the op to brightness_set_blocking, which describes its purpose in a more generic way. It is beneficial in view of the prospective changes in the LED core, aiming at removing the need for using work queues in LED class drivers that can sleep or use delays while setting brightness. Signed-off-by: Jacek Anaszewski <j.anaszewski@samsung.com> Acked-by: Andrew Lunn <andrew@lunn.ch> Acked-by: Pavel Machek <pavel@ucw.cz> Acked-by: Sakari Ailus <sakari.ailus@linux.intel.com>
2016-01-04leds: core: Add two new LED_BLINK_ flagsJacek Anaszewski
This patch adds LED_BLINK_BRIGHTNESS_CHANGE flag to indicate that blink brightness has changed, and LED_BLINK_DISABLE flag to indicate that blinking deactivation has been requested. In order to use the flags led_timer_function and set_brightness_delayed callbacks as well as led_set_brightness() function are being modified. The main goal of these modifications is to prepare set_brightness_work for extension of the scope of its responsibilities. Signed-off-by: Jacek Anaszewski <j.anaszewski@samsung.com> Acked-by: Pavel Machek <pavel@ucw.cz> Acked-by: Sakari Ailus <sakari.ailus@linux.intel.com>
2016-01-04leds: core: Use EXPORT_SYMBOL_GPL consistentlyJacek Anaszewski
LED core has a mixture of EXPORT_SYMBOL and EXPORT_SYMBOL_GPL macros. This patch fixes this discrepancy and switches to using EXPORT_SYMBOL_GPL for each exported function. Signed-off-by: Jacek Anaszewski <j.anaszewski@samsung.com> Acked-by: Pavel Machek <pavel@ucw.cz>