From d3b177c7f887f062b639e4fc602f413c910ba142 Mon Sep 17 00:00:00 2001 From: Ziyan Date: Wed, 4 May 2016 19:47:15 +0200 Subject: OMAPDSS: panel-ltn: don't turn on backlight on resume Automatically turning on backlight on resume causes the screen to blink every time when alarms wake the device up. Only turn it on when it's actually requested. --- drivers/video/omap2/displays/panel-ltn.c | 23 ++++++++++++----------- 1 file changed, 12 insertions(+), 11 deletions(-) (limited to 'drivers/video') 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, <n_backlight_ops, &props); if (IS_ERR(lcd->bd)) { -- cgit v1.1