backlight: Fix external uses of backlight internal semaphore

backlight_device->sem has a very specific use as documented in the
header file. The external users of this are using it for a different
reason, to serialise access to the update_status() method.

backlight users were supposed to implement their own internal
serialisation of update_status() if needed but everyone is doing
things differently and incorrectly. Therefore add a global mutex to
take care of serialisation for everyone, once and for all.

Locking for get_brightness remains optional since most users don't
need it.

Also update the lcd class in a similar way.

Signed-off-by: Richard Purdie <rpurdie@rpsys.net>
This commit is contained in:
Richard Purdie
2007-02-08 22:25:09 +00:00
parent a8db3c1948
commit 28ee086d5b
15 changed files with 76 additions and 76 deletions

View File

@@ -189,11 +189,9 @@ static void appledisplay_work(struct work_struct *work)
container_of(work, struct appledisplay, work.work);
int retval;
up(&pdata->bd->sem);
retval = appledisplay_bl_get_brightness(pdata->bd);
if (retval >= 0)
pdata->bd->props->brightness = retval;
down(&pdata->bd->sem);
/* Poll again in about 125ms if there's still a button pressed */
if (pdata->button_pressed)
@@ -288,9 +286,7 @@ static int appledisplay_probe(struct usb_interface *iface,
}
/* Try to get brightness */
up(&pdata->bd->sem);
brightness = appledisplay_bl_get_brightness(pdata->bd);
down(&pdata->bd->sem);
if (brightness < 0) {
retval = brightness;
@@ -299,9 +295,7 @@ static int appledisplay_probe(struct usb_interface *iface,
}
/* Set brightness in backlight device */
up(&pdata->bd->sem);
pdata->bd->props->brightness = brightness;
down(&pdata->bd->sem);
/* save our data pointer in the interface device */
usb_set_intfdata(iface, pdata);