static void twl4030_pwmled_work(struct work_struct *work)
{
+ enum led_brightness new_brightness;
struct twl4030_pwmled *led;
int val;
led = container_of(work, struct twl4030_pwmled, work);
- if (led->new_brightness == LED_OFF) {
+ new_brightness = ACCESS_ONCE(led->new_brightness);
+ if (new_brightness == LED_OFF) {
if (led->old_brightness != LED_OFF)
led->enable(led->id, 0);
goto out;
}
- val = led->new_brightness * 0x7f / LED_FULL;
+ val = new_brightness * 0x7f / LED_FULL;
/* avoid 0: on = off = 0 means full brightness */
if (val == 0)
val = 1;
led->enable(led->id, 1);
out:
- led->old_brightness = led->new_brightness;
+ led->old_brightness = new_brightness;
}
static void twl4030_pwmled_brightness(struct led_classdev *cdev,