aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/video
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/video')
-rw-r--r--drivers/video/omap2/displays/panel-ltn.c23
1 files changed, 12 insertions, 11 deletions
diff --git a/drivers/video/omap2/displays/panel-ltn.c b/drivers/video/omap2/displays/panel-ltn.c
index 3f27f40..cc88f02 100644
--- a/drivers/video/omap2/displays/panel-ltn.c
+++ b/drivers/video/omap2/displays/panel-ltn.c
@@ -166,12 +166,14 @@ static int get_gamma_value_from_bl(struct omap_dss_device *dssdev, int bl)
static void update_brightness(struct omap_dss_device *dssdev)
{
struct ltn *lcd = dev_get_drvdata(&dssdev->dev);
+ int prev_brightness = lcd->current_brightness;
lcd->current_brightness = lcd->bl;
- if (lcd->current_brightness == BRIGHTNESS_OFF)
+ if (lcd->current_brightness == BRIGHTNESS_OFF &&
+ prev_brightness != BRIGHTNESS_OFF)
backlight_gptimer_stop(dssdev);
- else
+ else if (lcd->current_brightness != BRIGHTNESS_OFF)
backlight_gptimer_update(dssdev);
}
@@ -195,10 +197,7 @@ static int ltn_power_on(struct omap_dss_device *dssdev)
/* reset ltn bridge */
if (!dssdev->skip_init) {
ltn_hw_reset(dssdev);
-
msleep(100);
- omap_dm_timer_start(lcd->gptimer);
- usleep_range(2000, 2100);
update_brightness(dssdev);
}
@@ -220,9 +219,10 @@ static int ltn_power_off(struct omap_dss_device *dssdev)
lcd->enabled = 0;
- if (lcd->bl != BRIGHTNESS_OFF) {
- backlight_gptimer_stop(dssdev);
- msleep(200);
+ if (lcd->current_brightness != BRIGHTNESS_OFF) {
+ lcd->bl = BRIGHTNESS_OFF;
+ update_brightness(dssdev);
+ msleep(50);
}
gpio_set_value(lcd->pdata->lvds_nshdn_gpio, 0);
@@ -249,7 +249,6 @@ static int ltn_set_brightness(struct backlight_device *bd)
struct omap_dss_device *dssdev = dev_get_drvdata(&bd->dev);
struct ltn *lcd = dev_get_drvdata(&dssdev->dev);
int bl = bd->props.brightness;
- int ret = 0;
if (bl < BRIGHTNESS_OFF)
bl = BRIGHTNESS_OFF;
@@ -266,8 +265,10 @@ static int ltn_set_brightness(struct backlight_device *bd)
dev_dbg(&bd->dev, "brightness=%d, bl=%d\n",
bd->props.brightness, lcd->bl);
}
+
mutex_unlock(&lcd->lock);
- return ret;
+
+ return 0;
}
static const struct backlight_ops ltn_backlight_ops = {
@@ -338,7 +339,7 @@ static int ltn_panel_probe(struct omap_dss_device *dssdev)
lcd->bl = get_gamma_value_from_bl(dssdev, props.brightness);
- /* Register DSI backlight control */
+ /* Register DSI backlight control */
lcd->bd = backlight_device_register("panel", &dssdev->dev, dssdev,
&ltn_backlight_ops, &props);
if (IS_ERR(lcd->bd)) {