RE: [PATCH] backlight: add low threshold to pwm backlight

From: Arun MURTHY
Date: Tue Sep 14 2010 - 03:06:21 EST


Any comments?

> -----Original Message-----
> From: Arun MURTHY
> Sent: Thursday, September 09, 2010 5:00 PM
> To: rpurdie@xxxxxxxxx; linux@xxxxxxxxxxxx; ben@xxxxxxxxxxxx;
> tj@xxxxxxxxxx
> Cc: linux-kernel@xxxxxxxxxxxxxxx; STEricsson_nomadik_linux; Arun MURTHY
> Subject: [PATCH] backlight: add low threshold to pwm backlight
>
> The intensity of the backlight can be varied from a range of
> max_brightness to zero. Though most, if not all the pwm based backlight
> devices start flickering at lower brightness value. And also for each
> device there exists a brightness value below which the backlight
> appears
> to be turned off though the value is not equal to zero.
>
> If the range of brightness for a device is from zero to
> max_brightness. A graph is plotted for brightness Vs intensity fo the
> pwm based backlight device has to be a linear graph.
>
> intensity
> | /
> | /
> | /
> |/
> ---------
> 0 max_brightness
> But pratically on measuring the above we note that the intensity of
> backlight goes to zero(OFF) when the value in not zero almost nearing
> to
> zero(some x%). so the graph looks like
>
> intensity
> | /
> | /
> | /
> | |
> ------------
> 0 x max_brightness
>
> In order to overcome this drawback knowing this x% i.e nothing but the
> low threshold beyond which the backlight is off and will have no
> effect,
> the brightness value is being offset by the low threshold
> value(retaining the linearity of the graph). Now the graph becomes
>
> intensity
> | /
> | /
> | /
> | /
> -------------
> 0 max_brightness
> With this for each and every digit increment in the brightness from
> zero
> there is a change in the intensity of backlight.
> Devices having this behaviour can set the low threshold
> brightness(lth_brightness) and pass the same as platform data else can
> have it as zero.
>
> Signed-off-by: Arun Murthy <arun.murthy@xxxxxxxxxxxxxx>
> Acked-by: Linus Walleij <linus.walleij@xxxxxxxxxxxxxx>
> ---
> drivers/video/backlight/pwm_bl.c | 7 ++++++-
> include/linux/pwm_backlight.h | 1 +
> 2 files changed, 7 insertions(+), 1 deletions(-)
>
> diff --git a/drivers/video/backlight/pwm_bl.c
> b/drivers/video/backlight/pwm_bl.c
> index 5504435..1f958ce 100644
> --- a/drivers/video/backlight/pwm_bl.c
> +++ b/drivers/video/backlight/pwm_bl.c
> @@ -25,6 +25,7 @@ struct pwm_bl_data {
> struct pwm_device *pwm;
> struct device *dev;
> unsigned int period;
> + unsigned int lth_brightness;
> int (*notify)(struct device *,
> int brightness);
> };
> @@ -48,7 +49,9 @@ static int pwm_backlight_update_status(struct
> backlight_device *bl)
> pwm_config(pb->pwm, 0, pb->period);
> pwm_disable(pb->pwm);
> } else {
> - pwm_config(pb->pwm, brightness * pb->period / max, pb-
> >period);
> + brightness = pb->lth_brightness +
> + (brightness * (pb->period - pb->lth_brightness)/
> max);
> + pwm_config(pb->pwm, brightness, pb->period);
> pwm_enable(pb->pwm);
> }
> return 0;
> @@ -92,6 +95,8 @@ static int pwm_backlight_probe(struct platform_device
> *pdev)
>
> pb->period = data->pwm_period_ns;
> pb->notify = data->notify;
> + pb->lth_brightness = data->lth_brightness *
> + (data->pwm_period_ns / data->max_brightness);
> pb->dev = &pdev->dev;
>
> pb->pwm = pwm_request(data->pwm_id, "backlight");
> diff --git a/include/linux/pwm_backlight.h
> b/include/linux/pwm_backlight.h
> index 01b3d75..e031e1a 100644
> --- a/include/linux/pwm_backlight.h
> +++ b/include/linux/pwm_backlight.h
> @@ -8,6 +8,7 @@ struct platform_pwm_backlight_data {
> int pwm_id;
> unsigned int max_brightness;
> unsigned int dft_brightness;
> + unsigned int lth_brightness;
> unsigned int pwm_period_ns;
> int (*init)(struct device *dev);
> int (*notify)(struct device *dev, int brightness);
> --
> 1.7.2.dirty

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/