backlight: Fix external uses of backlight internal semaphore
[safe/jmp/linux-2.6] / arch / powerpc / platforms / powermac / backlight.c
index c3a8941..1be358c 100644 (file)
@@ -37,7 +37,9 @@ static int pmac_backlight_set_legacy_queued;
  */
 static atomic_t kernel_backlight_disabled = ATOMIC_INIT(0);
 
-/* Protect the pmac_backlight variable */
+/* Protect the pmac_backlight variable below.
+   You should hold this lock when using the pmac_backlight pointer to
+   prevent its potential removal. */
 DEFINE_MUTEX(pmac_backlight_mutex);
 
 /* Main backlight storage
@@ -49,9 +51,6 @@ DEFINE_MUTEX(pmac_backlight_mutex);
  * internal display, it doesn't matter. Other backlight drivers can be used
  * independently.
  *
- * Lock ordering:
- * pmac_backlight_mutex (global, main backlight)
- *   pmac_backlight->sem (backlight class)
  */
 struct backlight_device *pmac_backlight;
 
@@ -104,7 +103,6 @@ static void pmac_backlight_key_worker(struct work_struct *work)
                struct backlight_properties *props;
                int brightness;
 
-               down(&pmac_backlight->sem);
                props = pmac_backlight->props;
 
                brightness = props->brightness +
@@ -117,9 +115,7 @@ static void pmac_backlight_key_worker(struct work_struct *work)
                        brightness = props->max_brightness;
 
                props->brightness = brightness;
-               props->update_status(pmac_backlight);
-
-               up(&pmac_backlight->sem);
+               backlight_update_status(pmac_backlight);
        }
        mutex_unlock(&pmac_backlight_mutex);
 }
@@ -145,7 +141,6 @@ static int __pmac_backlight_set_legacy_brightness(int brightness)
        if (pmac_backlight) {
                struct backlight_properties *props;
 
-               down(&pmac_backlight->sem);
                props = pmac_backlight->props;
                props->brightness = brightness *
                        (props->max_brightness + 1) /
@@ -156,8 +151,7 @@ static int __pmac_backlight_set_legacy_brightness(int brightness)
                else if (props->brightness < 0)
                        props->brightness = 0;
 
-               props->update_status(pmac_backlight);
-               up(&pmac_backlight->sem);
+               backlight_update_status(pmac_backlight);
 
                error = 0;
        }
@@ -196,14 +190,11 @@ int pmac_backlight_get_legacy_brightness()
        if (pmac_backlight) {
                struct backlight_properties *props;
 
-               down(&pmac_backlight->sem);
                props = pmac_backlight->props;
 
                result = props->brightness *
                        (OLD_BACKLIGHT_MAX + 1) /
                        (props->max_brightness + 1);
-
-               up(&pmac_backlight->sem);
        }
        mutex_unlock(&pmac_backlight_mutex);