diff options
author | Nicolas Chauvet <kwizart@gmail.com> | 2014-08-09 11:10:21 +0200 |
---|---|---|
committer | Nicolas Chauvet <kwizart@gmail.com> | 2014-08-09 22:11:40 +0200 |
commit | 269a8c8f0bfe7ee982d8df2e86345c1b5f12f77a (patch) | |
tree | 4dcf9ea517088c1493646905c3c27afe58c27c75 | |
parent | 33818d8b10c318f542825e9dd91630770fb19e3a (diff) | |
download | kernel-269a8c8f0bfe7ee982d8df2e86345c1b5f12f77a.tar.gz kernel-269a8c8f0bfe7ee982d8df2e86345c1b5f12f77a.tar.xz kernel-269a8c8f0bfe7ee982d8df2e86345c1b5f12f77a.zip |
Add pwm-backlight-disabled_on_boot.patch
-rw-r--r-- | pwm-backlight-disabled_on_boot.patch | 109 |
1 files changed, 109 insertions, 0 deletions
diff --git a/pwm-backlight-disabled_on_boot.patch b/pwm-backlight-disabled_on_boot.patch new file mode 100644 index 00000000..cc7362b6 --- /dev/null +++ b/pwm-backlight-disabled_on_boot.patch @@ -0,0 +1,109 @@ +From: Thierry Reding <treding at nvidia.com> + +The default for backlight devices is to be enabled immediately when +registering with the backlight core. This can be useful for setups that +use a simple framebuffer device and where the backlight cannot otherwise +be hooked up to the panel. + +However, when dealing with more complex setups, such as those of recent +ARM SoCs, this can be problematic. Since the backlight is usually setup +separately from the display controller, the probe order is not usually +deterministic. That can lead to situations where the backlight will be +powered up and the panel will show an uninitialized framebuffer. + +Furthermore, subsystems such as DRM have advanced functionality to set +the power mode of a panel. In order to allow such setups to power up the +panel at exactly the right moment, a way is needed to prevent the +backlight core from powering the backlight up automatically when it is +registered. + +This commit introduces a new boot_off field in the platform data (and +also implements getting the same information from device tree). When set +the initial backlight power mode will be set to "off". + +Signed-off-by: Thierry Reding <treding at nvidia.com> +--- +I've been meaning to send this for a while but was always holding back +because of the indoctrination that this type of configuration shouldn't +be part of device tree. However this issue was recently raised again in +the context of power up sequences for display panels. As described above +the issue is that panel datasheets recommend that the backlight attached +to a panel be turned on at the very last step to avoid visual glitches +during the panel's power up sequence. With the current implementation it +is typical for the backlight to be probed before the display panel. That +has, in many cases, the side-effect of enabling the backlight, therefore +making the screen content visible before it's actually initialized. + +Some panels come up with random garbage when uninitialized, others show +all white. With some luck the panel will be all black and users won't +really notice. + +This patch is an attempt to enable boards to override the default of +turning on the backlight for the pwm-backlight driver. I'm not sure if +there was a specific reason to turn on the backlight by default when +this driver was initially written, but the fact is that since it has +pretty much always been like this we can't really go and change the +default, otherwise a lot of people may end up with no backlight and no +clue as to how to enable it. So the only reasonable thing we can do is +to keep the old behaviour and give new boards a way to override it if +they know that some other part of the stack will enable it at the right +moment. + + .../devicetree/bindings/video/backlight/pwm-backlight.txt | 1 + + drivers/video/backlight/pwm_bl.c | 8 ++++++++ + include/linux/pwm_backlight.h | 2 ++ + 3 files changed, 11 insertions(+) + +diff --git a/Documentation/devicetree/bindings/video/backlight/pwm-backlight.txt b/Documentation/devicetree/bindings/video/backlight/pwm-backlight.txt +index 764db86d441a..65e001a1733d 100644 +--- a/Documentation/devicetree/bindings/video/backlight/pwm-backlight.txt ++++ b/Documentation/devicetree/bindings/video/backlight/pwm-backlight.txt +@@ -17,6 +17,7 @@ Optional properties: + "pwms" property (see PWM binding[0]) + - enable-gpios: contains a single GPIO specifier for the GPIO which enables + and disables the backlight (see GPIO binding[1]) ++ - backlight-boot-off: keep the backlight disabled on boot + + [0]: Documentation/devicetree/bindings/pwm/pwm.txt + [1]: Documentation/devicetree/bindings/gpio/gpio.txt +diff --git a/drivers/video/backlight/pwm_bl.c b/drivers/video/backlight/pwm_bl.c +index d7a3d13e72ec..62adfc9d37a7 100644 +--- a/drivers/video/backlight/pwm_bl.c ++++ b/drivers/video/backlight/pwm_bl.c +@@ -173,6 +173,8 @@ static int pwm_backlight_parse_dt(struct device *dev, + data->max_brightness--; + } + ++ data->boot_off = of_property_read_bool(node, "backlight-boot-off"); ++ + return 0; + } + +@@ -317,6 +319,12 @@ static int pwm_backlight_probe(struct platform_device *pdev) + } + + bl->props.brightness = data->dft_brightness; ++ ++ if (data->boot_off) ++ bl->props.power = FB_BLANK_POWERDOWN; ++ else ++ bl->props.power = FB_BLANK_UNBLANK; ++ + backlight_update_status(bl); + + platform_set_drvdata(pdev, bl); +diff --git a/include/linux/pwm_backlight.h b/include/linux/pwm_backlight.h +index efdd9227a49c..1fc14989da4a 100644 +--- a/include/linux/pwm_backlight.h ++++ b/include/linux/pwm_backlight.h +@@ -15,6 +15,8 @@ struct platform_pwm_backlight_data { + unsigned int *levels; + /* TODO remove once all users are switched to gpiod_* API */ + int enable_gpio; ++ bool boot_off; ++ + int (*init)(struct device *dev); + int (*notify)(struct device *dev, int brightness); + void (*notify_after)(struct device *dev, int brightness); +-- +2.0.3 |