From: Jackie Li <[email protected]>

brightness parameter of backlight device in sysfs won't update by xrandr 
backlight setting.

the root cause is the brightness of backlight device is not up-to-date while 
setting backlight via drm set property interface.

Fixed it by calling psb_set_brightness instead of operating DSI HW directly.

Signed-off-by: Jackie Li <[email protected]>
Signed-off-by: Hitesh K. Patel <[email protected]>
---
 drivers/staging/mrst/drv/mdfld_dsi_output.c |    9 ++++++---
 drivers/staging/mrst/drv/psb_bl.c           |    8 ++++++++
 drivers/staging/mrst/drv/psb_drv.h          |    1 +
 3 files changed, 15 insertions(+), 3 deletions(-)

diff --git a/drivers/staging/mrst/drv/mdfld_dsi_output.c 
b/drivers/staging/mrst/drv/mdfld_dsi_output.c
index 67f5bb2..12c54e5 100644
--- a/drivers/staging/mrst/drv/mdfld_dsi_output.c
+++ b/drivers/staging/mrst/drv/mdfld_dsi_output.c
@@ -548,7 +548,7 @@ static int mdfld_dsi_connector_set_property(struct 
drm_connector * connector,
                                                                                
        uint64_t value)
 {
        struct drm_encoder * encoder = connector->encoder;
-       struct drm_device * dev = connector->dev;
+       struct backlight_device * psb_bd;
 
        PSB_DEBUG_ENTRY("\n");
 
@@ -601,8 +601,11 @@ static int mdfld_dsi_connector_set_property(struct 
drm_connector * connector,
                        goto set_prop_error;
                else {
                        PSB_DEBUG_ENTRY("set brightness to %d", (int)value);
-                       mdfld_dsi_brightness_control(dev, 0, value);
-                       mdfld_dsi_brightness_control(dev, 2, value);
+                       psb_bd = psb_get_backlight_device();
+                       if(psb_bd) {
+                               psb_bd->props.brightness = value;
+                               psb_set_brightness(psb_bd);
+                       }
                }
        } 
 set_prop_done:
diff --git a/drivers/staging/mrst/drv/psb_bl.c 
b/drivers/staging/mrst/drv/psb_bl.c
index 60ccd9f..f837410 100644
--- a/drivers/staging/mrst/drv/psb_bl.c
+++ b/drivers/staging/mrst/drv/psb_bl.c
@@ -246,3 +246,11 @@ void psb_backlight_exit(void)
 #endif
        return;
 }
+
+struct backlight_device * psb_get_backlight_device(void)
+{
+#ifdef CONFIG_BACKLIGHT_CLASS_DEVICE
+       return psb_backlight_device;
+#endif
+       return NULL;
+}
diff --git a/drivers/staging/mrst/drv/psb_drv.h 
b/drivers/staging/mrst/drv/psb_drv.h
index 8f92758..159b4e1 100644
--- a/drivers/staging/mrst/drv/psb_drv.h
+++ b/drivers/staging/mrst/drv/psb_drv.h
@@ -1176,6 +1176,7 @@ int psb_backlight_init(struct drm_device *dev);
 void psb_backlight_exit(void);
 int psb_set_brightness(struct backlight_device *bd);
 int psb_get_brightness(struct backlight_device *bd);
+struct backlight_device * psb_get_backlight_device(void);
 
 /*
  *Debug print bits setting
-- 
1.7.1

_______________________________________________
MeeGo-kernel mailing list
[email protected]
http://lists.meego.com/listinfo/meego-kernel

Reply via email to