diff options
author | Richard Purdie <rpurdie@rpsys.net> | 2007-02-10 09:10:33 -0500 |
---|---|---|
committer | Richard Purdie <rpurdie@rpsys.net> | 2007-02-20 03:38:46 -0500 |
commit | 37ce69a57ff217a4ca0871e9ee5aa58c052b7d86 (patch) | |
tree | 21cdbb8c988eed585437bb502ca15c2998ea7fbc /drivers/video/fbsysfs.c | |
parent | b5c6916b3118d4301dc2f8cf8d33f13e5324a3a5 (diff) |
backlight: Rework backlight/fb interaction simplifying, lots
fb_info->bl_mutex is badly thought out and the backlight class doesn't
need it if the framebuffer/backlight register/unregister order is
consistent, particularly after the backlight locking fixes.
Fix the drivers to use the order:
backlight_device_register()
register_framebuffer()
unregister_framebuffer()
backlight_device_unregister()
and turn bl_mutex into a lock for the bl_curve data only.
Signed-off-by: Richard Purdie <rpurdie@rpsys.net>
Diffstat (limited to 'drivers/video/fbsysfs.c')
-rw-r--r-- | drivers/video/fbsysfs.c | 14 |
1 files changed, 9 insertions, 5 deletions
diff --git a/drivers/video/fbsysfs.c b/drivers/video/fbsysfs.c index 818fb09105f9..40c80c8190e2 100644 --- a/drivers/video/fbsysfs.c +++ b/drivers/video/fbsysfs.c | |||
@@ -59,7 +59,7 @@ struct fb_info *framebuffer_alloc(size_t size, struct device *dev) | |||
59 | info->device = dev; | 59 | info->device = dev; |
60 | 60 | ||
61 | #ifdef CONFIG_FB_BACKLIGHT | 61 | #ifdef CONFIG_FB_BACKLIGHT |
62 | mutex_init(&info->bl_mutex); | 62 | mutex_init(&info->bl_curve_mutex); |
63 | #endif | 63 | #endif |
64 | 64 | ||
65 | return info; | 65 | return info; |
@@ -445,10 +445,10 @@ static ssize_t store_bl_curve(struct device *device, | |||
445 | /* If there has been an error in the input data, we won't | 445 | /* If there has been an error in the input data, we won't |
446 | * reach this loop. | 446 | * reach this loop. |
447 | */ | 447 | */ |
448 | mutex_lock(&fb_info->bl_mutex); | 448 | mutex_lock(&fb_info->bl_curve_mutex); |
449 | for (i = 0; i < FB_BACKLIGHT_LEVELS; ++i) | 449 | for (i = 0; i < FB_BACKLIGHT_LEVELS; ++i) |
450 | fb_info->bl_curve[i] = tmp_curve[i]; | 450 | fb_info->bl_curve[i] = tmp_curve[i]; |
451 | mutex_unlock(&fb_info->bl_mutex); | 451 | mutex_unlock(&fb_info->bl_curve_mutex); |
452 | 452 | ||
453 | return count; | 453 | return count; |
454 | } | 454 | } |
@@ -466,7 +466,7 @@ static ssize_t show_bl_curve(struct device *device, | |||
466 | if (!fb_info || !fb_info->bl_dev) | 466 | if (!fb_info || !fb_info->bl_dev) |
467 | return -ENODEV; | 467 | return -ENODEV; |
468 | 468 | ||
469 | mutex_lock(&fb_info->bl_mutex); | 469 | mutex_lock(&fb_info->bl_curve_mutex); |
470 | for (i = 0; i < FB_BACKLIGHT_LEVELS; i += 8) | 470 | for (i = 0; i < FB_BACKLIGHT_LEVELS; i += 8) |
471 | len += snprintf(&buf[len], PAGE_SIZE, | 471 | len += snprintf(&buf[len], PAGE_SIZE, |
472 | "%02x %02x %02x %02x %02x %02x %02x %02x\n", | 472 | "%02x %02x %02x %02x %02x %02x %02x %02x\n", |
@@ -478,7 +478,7 @@ static ssize_t show_bl_curve(struct device *device, | |||
478 | fb_info->bl_curve[i + 5], | 478 | fb_info->bl_curve[i + 5], |
479 | fb_info->bl_curve[i + 6], | 479 | fb_info->bl_curve[i + 6], |
480 | fb_info->bl_curve[i + 7]); | 480 | fb_info->bl_curve[i + 7]); |
481 | mutex_unlock(&fb_info->bl_mutex); | 481 | mutex_unlock(&fb_info->bl_curve_mutex); |
482 | 482 | ||
483 | return len; | 483 | return len; |
484 | } | 484 | } |
@@ -552,6 +552,8 @@ void fb_bl_default_curve(struct fb_info *fb_info, u8 off, u8 min, u8 max) | |||
552 | { | 552 | { |
553 | unsigned int i, flat, count, range = (max - min); | 553 | unsigned int i, flat, count, range = (max - min); |
554 | 554 | ||
555 | mutex_lock(&fb_info->bl_curve_mutex); | ||
556 | |||
555 | fb_info->bl_curve[0] = off; | 557 | fb_info->bl_curve[0] = off; |
556 | 558 | ||
557 | for (flat = 1; flat < (FB_BACKLIGHT_LEVELS / 16); ++flat) | 559 | for (flat = 1; flat < (FB_BACKLIGHT_LEVELS / 16); ++flat) |
@@ -560,6 +562,8 @@ void fb_bl_default_curve(struct fb_info *fb_info, u8 off, u8 min, u8 max) | |||
560 | count = FB_BACKLIGHT_LEVELS * 15 / 16; | 562 | count = FB_BACKLIGHT_LEVELS * 15 / 16; |
561 | for (i = 0; i < count; ++i) | 563 | for (i = 0; i < count; ++i) |
562 | fb_info->bl_curve[flat + i] = min + (range * (i + 1) / count); | 564 | fb_info->bl_curve[flat + i] = min + (range * (i + 1) / count); |
565 | |||
566 | mutex_unlock(&fb_info->bl_curve_mutex); | ||
563 | } | 567 | } |
564 | EXPORT_SYMBOL_GPL(fb_bl_default_curve); | 568 | EXPORT_SYMBOL_GPL(fb_bl_default_curve); |
565 | #endif | 569 | #endif |