From: Daniel Stone <daniel.stone@nokia.com>
To: linux-omap-open-source@linux.omap.com
Subject: [PATCH] LED: OMAP PWM: Use work queue for brightness
Date: Tue, 30 Oct 2007 11:37:32 +0200 [thread overview]
Message-ID: <11937370523112-git-send-email-daniel.stone@nokia.com> (raw)
It isn't safe to schedule from a LED brightness_set handler, so use a work queue.
Signed-off-by: Daniel Stone <daniel.stone@nokia.com>
---
drivers/leds/leds-omap-pwm.c | 22 ++++++++++++++++++++--
1 files changed, 20 insertions(+), 2 deletions(-)
diff --git a/drivers/leds/leds-omap-pwm.c b/drivers/leds/leds-omap-pwm.c
index 6b195d6..c5d7ff0 100644
--- a/drivers/leds/leds-omap-pwm.c
+++ b/drivers/leds/leds-omap-pwm.c
@@ -16,17 +16,20 @@
#include <linux/platform_device.h>
#include <linux/leds.h>
#include <linux/ctype.h>
+#include <linux/sched.h>
#include <asm/delay.h>
#include <asm/arch/board.h>
#include <asm/arch/dmtimer.h>
struct omap_pwm_led {
struct led_classdev cdev;
+ struct work_struct work;
struct omap_pwm_led_platform_data *pdata;
struct omap_dm_timer *intensity_timer;
struct omap_dm_timer *blink_timer;
int powered;
unsigned int on_period, off_period;
+ enum led_brightness brightness;
};
static inline struct omap_pwm_led *pdev_to_omap_pwm_led(struct platform_device *pdev)
@@ -39,6 +42,11 @@ static inline struct omap_pwm_led *cdev_to_omap_pwm_led(struct led_classdev *led
return container_of(led_cdev, struct omap_pwm_led, cdev);
}
+static inline struct omap_pwm_led *work_to_omap_pwm_led(struct work_struct *work)
+{
+ return container_of(work, struct omap_pwm_led, work);
+}
+
static void omap_pwm_led_set_blink(struct omap_pwm_led *led)
{
if (!led->powered)
@@ -134,9 +142,17 @@ static void omap_pwm_led_set(struct led_classdev *led_cdev,
{
struct omap_pwm_led *led = cdev_to_omap_pwm_led(led_cdev);
- if (value != LED_OFF) {
+ led->brightness = value;
+ schedule_work(&led->work);
+}
+
+static void omap_pwm_led_work(struct work_struct *work)
+{
+ struct omap_pwm_led *led = work_to_omap_pwm_led(work);
+
+ if (led->brightness != LED_OFF) {
omap_pwm_led_power_on(led);
- omap_pwm_led_set_pwm_cycle(led, value);
+ omap_pwm_led_set_pwm_cycle(led, led->brightness);
} else {
omap_pwm_led_power_off(led);
}
@@ -228,6 +244,8 @@ static int omap_pwm_led_probe(struct platform_device *pdev)
led->cdev.default_trigger = NULL;
led->cdev.name = pdata->name;
led->pdata = pdata;
+ led->brightness = 0;
+ INIT_WORK(&led->work, omap_pwm_led_work);
dev_info(&pdev->dev, "OMAP PWM LED (%s) at GP timer %d/%d\n",
pdata->name, pdata->intensity_timer, pdata->blink_timer);
--
1.4.4.2
next reply other threads:[~2007-10-30 9:37 UTC|newest]
Thread overview: 3+ messages / expand[flat|nested] mbox.gz Atom feed top
2007-10-30 9:37 Daniel Stone [this message]
2007-10-30 10:00 ` [PATCH] LED: OMAP PWM: Use work queue for brightness Felipe Balbi
2007-11-15 2:07 ` Tony Lindgren
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=11937370523112-git-send-email-daniel.stone@nokia.com \
--to=daniel.stone@nokia.com \
--cc=linux-omap-open-source@linux.omap.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.