[Meego-kernel] [PATCH 06/22] GFX: fixed HSD 3741318: xrandr and brightness parameter in sysfs are not synchronized

hitesh.k.patel at intel.com hitesh.k.patel at intel.com
Thu Dec 16 10:51:42 PST 2010


From: Jackie Li <yaodong.li at intel.com>

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 <yaodong.li at intel.com>
Signed-off-by: Hitesh K. Patel <hitesh.k.patel at intel.com>
---
 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



More information about the MeeGo-kernel mailing list