This patch supports early fb event of fb_blank(). - In case of lcd power off : call early_set_power() interface and lcd power is off. And then framebuffer is blanked. - In case of lcd power on : First, framebuffer is unblanked, and then call set_power() interface to turn lcd on. Signed-off-by: Donghwa Lee <dh09.lee@xxxxxxxxxxx> Signed-off-by: Inki Dae <inki.dae@xxxxxxxxxxx> Signed-off-by: Kyungmin Park <kyungmin.park@xxxxxxxxxxx> --- drivers/video/backlight/ld9040.c | 36 +++++++++++++++++++++++++++++++++++- 1 files changed, 35 insertions(+), 1 deletions(-) diff --git a/drivers/video/backlight/ld9040.c b/drivers/video/backlight/ld9040.c index efd352b..221c843 100644 --- a/drivers/video/backlight/ld9040.c +++ b/drivers/video/backlight/ld9040.c @@ -642,17 +642,50 @@ static int ld9040_power(struct ld9040 *lcd, int power) return ret; } +static int ld9040_early_set_power(struct lcd_device *ld, int power) +{ + struct ld9040 *lcd = lcd_get_data(ld); + int ret = 0; + + if (power != FB_BLANK_UNBLANK && power != FB_BLANK_POWERDOWN && + power != FB_BLANK_NORMAL) { + dev_err(lcd->dev, "power value should be 0, 1 or 4.\n"); + + return -EINVAL; + } + + if (!power_is_on(power) && power_is_on(lcd->power)) { + ret = ld9040_power(lcd, power); + if (!ret) + lcd->power = power; + } + + return ret; +} + static int ld9040_set_power(struct lcd_device *ld, int power) { struct ld9040 *lcd = lcd_get_data(ld); + struct backlight_device *bd = lcd->bd; + int ret = 0; if (power != FB_BLANK_UNBLANK && power != FB_BLANK_POWERDOWN && power != FB_BLANK_NORMAL) { dev_err(lcd->dev, "power value should be 0, 1 or 4.\n"); + return -EINVAL; } - return ld9040_power(lcd, power); + if (power_is_on(power) && !power_is_on(lcd->power)) { + ret = ld9040_power(lcd, power); + if (!ret) + lcd->power = power; + + ld9040_gamma_ctl(lcd, bd->props.brightness); + } else + ld9040_early_set_power(ld, power); + + return ret; } static int ld9040_get_power(struct lcd_device *ld) @@ -689,6 +722,7 @@ static int ld9040_set_brightness(struct backlight_device *bd) } static struct lcd_ops ld9040_lcd_ops = { + .early_set_power = ld9040_early_set_power, .set_power = ld9040_set_power, .get_power = ld9040_get_power, }; -- 1.7.4.1 -- To unsubscribe from this list: send the line "unsubscribe linux-fbdev" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html