Commit 321709c5 authored by Richard Purdie's avatar Richard Purdie

backlight: Clean up pmac_backlight handling

Move the setting/unsetting of pmac_backlight into the
backlight core instead of doing it in each driver.
Signed-off-by: default avatarRichard Purdie <rpurdie@rpsys.net>
parent e0e34ef7
...@@ -170,11 +170,6 @@ void __init pmu_backlight_init() ...@@ -170,11 +170,6 @@ void __init pmu_backlight_init()
bd->props->power = FB_BLANK_UNBLANK; bd->props->power = FB_BLANK_UNBLANK;
backlight_update_status(bd); backlight_update_status(bd);
mutex_lock(&pmac_backlight_mutex);
if (!pmac_backlight)
pmac_backlight = bd;
mutex_unlock(&pmac_backlight_mutex);
printk("pmubl: Backlight initialized (%s)\n", name); printk("pmubl: Backlight initialized (%s)\n", name);
return; return;
......
...@@ -384,7 +384,7 @@ static void sony_snc_pf_remove(void) ...@@ -384,7 +384,7 @@ static void sony_snc_pf_remove(void)
static int sony_backlight_update_status(struct backlight_device *bd) static int sony_backlight_update_status(struct backlight_device *bd)
{ {
return acpi_callsetfunc(sony_acpi_handle, "SBRT", return acpi_callsetfunc(sony_acpi_handle, "SBRT",
bd->props->brightness + 1, NULL); bd->props.brightness + 1, NULL);
} }
static int sony_backlight_get_brightness(struct backlight_device *bd) static int sony_backlight_get_brightness(struct backlight_device *bd)
...@@ -398,10 +398,9 @@ static int sony_backlight_get_brightness(struct backlight_device *bd) ...@@ -398,10 +398,9 @@ static int sony_backlight_get_brightness(struct backlight_device *bd)
} }
static struct backlight_device *sony_backlight_device; static struct backlight_device *sony_backlight_device;
static struct backlight_properties sony_backlight_properties = { static struct backlight_ops sony_backlight_ops = {
.update_status = sony_backlight_update_status, .update_status = sony_backlight_update_status,
.get_brightness = sony_backlight_get_brightness, .get_brightness = sony_backlight_get_brightness,
.max_brightness = SONY_MAX_BRIGHTNESS - 1,
}; };
/* /*
...@@ -483,15 +482,19 @@ static int sony_acpi_add(struct acpi_device *device) ...@@ -483,15 +482,19 @@ static int sony_acpi_add(struct acpi_device *device)
if (ACPI_SUCCESS(acpi_get_handle(sony_acpi_handle, "GBRT", &handle))) { if (ACPI_SUCCESS(acpi_get_handle(sony_acpi_handle, "GBRT", &handle))) {
sony_backlight_device = backlight_device_register("sony", NULL, sony_backlight_device = backlight_device_register("sony", NULL,
NULL, NULL,
&sony_backlight_properties); &sony_backlight_ops);
if (IS_ERR(sony_backlight_device)) { if (IS_ERR(sony_backlight_device)) {
printk(LOG_PFX "unable to register backlight device\n"); printk(LOG_PFX "unable to register backlight device\n");
sony_backlight_device = NULL; sony_backlight_device = NULL;
} else } else {
sony_backlight_properties.brightness = sony_backlight_device->props.brightness =
sony_backlight_get_brightness sony_backlight_get_brightness
(sony_backlight_device); (sony_backlight_device);
sony_backlight_device->props.max_brightness =
SONY_MAX_BRIGHTNESS - 1;
}
} }
if (sony_snc_pf_add()) if (sony_snc_pf_add())
......
...@@ -1829,13 +1829,6 @@ static void aty128_bl_init(struct aty128fb_par *par) ...@@ -1829,13 +1829,6 @@ static void aty128_bl_init(struct aty128fb_par *par)
bd->props->power = FB_BLANK_UNBLANK; bd->props->power = FB_BLANK_UNBLANK;
backlight_update_status(bd); backlight_update_status(bd);
#ifdef CONFIG_PMAC_BACKLIGHT
mutex_lock(&pmac_backlight_mutex);
if (!pmac_backlight)
pmac_backlight = bd;
mutex_unlock(&pmac_backlight_mutex);
#endif
printk("aty128: Backlight initialized (%s)\n", name); printk("aty128: Backlight initialized (%s)\n", name);
return; return;
...@@ -1846,17 +1839,8 @@ error: ...@@ -1846,17 +1839,8 @@ error:
static void aty128_bl_exit(struct backlight_device *bd) static void aty128_bl_exit(struct backlight_device *bd)
{ {
if (bd) { backlight_device_unregister(bd);
#ifdef CONFIG_PMAC_BACKLIGHT printk("aty128: Backlight unloaded\n");
mutex_lock(&pmac_backlight_mutex);
if (pmac_backlight == bd)
pmac_backlight = NULL;
mutex_unlock(&pmac_backlight_mutex);
#endif
backlight_device_unregister(bd);
printk("aty128: Backlight unloaded\n");
}
} }
#endif /* CONFIG_FB_ATY128_BACKLIGHT */ #endif /* CONFIG_FB_ATY128_BACKLIGHT */
......
...@@ -2198,13 +2198,6 @@ static void aty_bl_init(struct atyfb_par *par) ...@@ -2198,13 +2198,6 @@ static void aty_bl_init(struct atyfb_par *par)
bd->props->power = FB_BLANK_UNBLANK; bd->props->power = FB_BLANK_UNBLANK;
backlight_update_status(bd); backlight_update_status(bd);
#ifdef CONFIG_PMAC_BACKLIGHT
mutex_lock(&pmac_backlight_mutex);
if (!pmac_backlight)
pmac_backlight = bd;
mutex_unlock(&pmac_backlight_mutex);
#endif
printk("aty: Backlight initialized (%s)\n", name); printk("aty: Backlight initialized (%s)\n", name);
return; return;
...@@ -2215,17 +2208,8 @@ error: ...@@ -2215,17 +2208,8 @@ error:
static void aty_bl_exit(struct backlight_device *bd) static void aty_bl_exit(struct backlight_device *bd)
{ {
if (bd) { backlight_device_unregister(bd);
#ifdef CONFIG_PMAC_BACKLIGHT printk("aty: Backlight unloaded\n");
mutex_lock(&pmac_backlight_mutex);
if (pmac_backlight == bd)
pmac_backlight = NULL;
mutex_unlock(&pmac_backlight_mutex);
#endif
backlight_device_unregister(bd);
printk("aty: Backlight unloaded\n");
}
} }
#endif /* CONFIG_FB_ATY_BACKLIGHT */ #endif /* CONFIG_FB_ATY_BACKLIGHT */
......
...@@ -192,13 +192,6 @@ void radeonfb_bl_init(struct radeonfb_info *rinfo) ...@@ -192,13 +192,6 @@ void radeonfb_bl_init(struct radeonfb_info *rinfo)
bd->props->power = FB_BLANK_UNBLANK; bd->props->power = FB_BLANK_UNBLANK;
backlight_update_status(bd); backlight_update_status(bd);
#ifdef CONFIG_PMAC_BACKLIGHT
mutex_lock(&pmac_backlight_mutex);
if (!pmac_backlight)
pmac_backlight = bd;
mutex_unlock(&pmac_backlight_mutex);
#endif
printk("radeonfb: Backlight initialized (%s)\n", name); printk("radeonfb: Backlight initialized (%s)\n", name);
return; return;
...@@ -215,12 +208,6 @@ void radeonfb_bl_exit(struct radeonfb_info *rinfo) ...@@ -215,12 +208,6 @@ void radeonfb_bl_exit(struct radeonfb_info *rinfo)
if (bd) { if (bd) {
struct radeon_bl_privdata *pdata; struct radeon_bl_privdata *pdata;
#ifdef CONFIG_PMAC_BACKLIGHT
mutex_lock(&pmac_backlight_mutex);
if (pmac_backlight == bd)
pmac_backlight = NULL;
mutex_unlock(&pmac_backlight_mutex);
#endif
pdata = class_get_devdata(&bd->class_dev); pdata = class_get_devdata(&bd->class_dev);
backlight_device_unregister(bd); backlight_device_unregister(bd);
kfree(pdata); kfree(pdata);
......
...@@ -14,6 +14,9 @@ ...@@ -14,6 +14,9 @@
#include <linux/err.h> #include <linux/err.h>
#include <linux/fb.h> #include <linux/fb.h>
#ifdef CONFIG_PMAC_BACKLIGHT
#include <asm/backlight.h>
#endif
#if defined(CONFIG_FB) || (defined(CONFIG_FB_MODULE) && \ #if defined(CONFIG_FB) || (defined(CONFIG_FB_MODULE) && \
defined(CONFIG_BACKLIGHT_CLASS_DEVICE_MODULE)) defined(CONFIG_BACKLIGHT_CLASS_DEVICE_MODULE))
...@@ -262,6 +265,13 @@ struct backlight_device *backlight_device_register(const char *name, ...@@ -262,6 +265,13 @@ struct backlight_device *backlight_device_register(const char *name,
} }
} }
#ifdef CONFIG_PMAC_BACKLIGHT
mutex_lock(&pmac_backlight_mutex);
if (!pmac_backlight)
pmac_backlight = new_bd;
mutex_unlock(&pmac_backlight_mutex);
#endif
return new_bd; return new_bd;
} }
EXPORT_SYMBOL(backlight_device_register); EXPORT_SYMBOL(backlight_device_register);
...@@ -281,6 +291,13 @@ void backlight_device_unregister(struct backlight_device *bd) ...@@ -281,6 +291,13 @@ void backlight_device_unregister(struct backlight_device *bd)
pr_debug("backlight_device_unregister: name=%s\n", bd->class_dev.class_id); pr_debug("backlight_device_unregister: name=%s\n", bd->class_dev.class_id);
#ifdef CONFIG_PMAC_BACKLIGHT
mutex_lock(&pmac_backlight_mutex);
if (pmac_backlight == bd)
pmac_backlight = NULL;
mutex_unlock(&pmac_backlight_mutex);
#endif
for (i = 0; i < ARRAY_SIZE(bl_class_device_attributes); i++) for (i = 0; i < ARRAY_SIZE(bl_class_device_attributes); i++)
class_device_remove_file(&bd->class_dev, class_device_remove_file(&bd->class_dev,
&bl_class_device_attributes[i]); &bl_class_device_attributes[i]);
......
...@@ -16,11 +16,6 @@ ...@@ -16,11 +16,6 @@
#include "nv_type.h" #include "nv_type.h"
#include "nv_proto.h" #include "nv_proto.h"
#ifdef CONFIG_PMAC_BACKLIGHT
#include <asm/backlight.h>
#include <asm/machdep.h>
#endif
/* We do not have any information about which values are allowed, thus /* We do not have any information about which values are allowed, thus
* we used safe values. * we used safe values.
*/ */
...@@ -128,13 +123,6 @@ void nvidia_bl_init(struct nvidia_par *par) ...@@ -128,13 +123,6 @@ void nvidia_bl_init(struct nvidia_par *par)
bd->props->power = FB_BLANK_UNBLANK; bd->props->power = FB_BLANK_UNBLANK;
backlight_update_status(bd); backlight_update_status(bd);
#ifdef CONFIG_PMAC_BACKLIGHT
mutex_lock(&pmac_backlight_mutex);
if (!pmac_backlight)
pmac_backlight = bd;
mutex_unlock(&pmac_backlight_mutex);
#endif
printk("nvidia: Backlight initialized (%s)\n", name); printk("nvidia: Backlight initialized (%s)\n", name);
return; return;
...@@ -148,15 +136,6 @@ void nvidia_bl_exit(struct nvidia_par *par) ...@@ -148,15 +136,6 @@ void nvidia_bl_exit(struct nvidia_par *par)
struct fb_info *info = pci_get_drvdata(par->pci_dev); struct fb_info *info = pci_get_drvdata(par->pci_dev);
struct backlight_device *bd = info->bl_dev; struct backlight_device *bd = info->bl_dev;
if (bd) { backlight_device_unregister(bd);
#ifdef CONFIG_PMAC_BACKLIGHT printk("nvidia: Backlight unloaded\n");
mutex_lock(&pmac_backlight_mutex);
if (pmac_backlight == bd)
pmac_backlight = NULL;
mutex_unlock(&pmac_backlight_mutex);
#endif
backlight_device_unregister(bd);
printk("nvidia: Backlight unloaded\n");
}
} }
...@@ -371,13 +371,6 @@ static void riva_bl_init(struct riva_par *par) ...@@ -371,13 +371,6 @@ static void riva_bl_init(struct riva_par *par)
bd->props->power = FB_BLANK_UNBLANK; bd->props->power = FB_BLANK_UNBLANK;
backlight_update_status(bd); backlight_update_status(bd);
#ifdef CONFIG_PMAC_BACKLIGHT
mutex_lock(&pmac_backlight_mutex);
if (!pmac_backlight)
pmac_backlight = bd;
mutex_unlock(&pmac_backlight_mutex);
#endif
printk("riva: Backlight initialized (%s)\n", name); printk("riva: Backlight initialized (%s)\n", name);
return; return;
...@@ -390,17 +383,8 @@ static void riva_bl_exit(struct fb_info *info) ...@@ -390,17 +383,8 @@ static void riva_bl_exit(struct fb_info *info)
{ {
struct backlight_device *bd = info->bl_dev; struct backlight_device *bd = info->bl_dev;
if (bd) { backlight_device_unregister(bd);
#ifdef CONFIG_PMAC_BACKLIGHT printk("riva: Backlight unloaded\n");
mutex_lock(&pmac_backlight_mutex);
if (pmac_backlight == bd)
pmac_backlight = NULL;
mutex_unlock(&pmac_backlight_mutex);
#endif
backlight_device_unregister(bd);
printk("riva: Backlight unloaded\n");
}
} }
#else #else
static inline void riva_bl_init(struct riva_par *par) {} static inline void riva_bl_init(struct riva_par *par) {}
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment