Skip to content

Commit

Permalink
backlight: pandora: Stop using BL_CORE_DRIVER1
Browse files Browse the repository at this point in the history
Leaking driver internal tracking into the already massively confusing
backlight power tracking is really confusing.

Stop that by allocating a tiny driver private data structure instead.

Signed-off-by: Daniel Vetter <daniel.vetter@intel.com>
Acked-by: Daniel Thompson <daniel.thompson@linaro.org>
Reviewed-by: Jani Nikula <jani.nikula@intel.com>
Signed-off-by: Lee Jones <lee.jones@linaro.org>
  • Loading branch information
Daniel Vetter authored and Lee Jones committed Apr 30, 2018
1 parent 88e2c99 commit 832ae8e
Showing 1 changed file with 18 additions and 7 deletions.
25 changes: 18 additions & 7 deletions drivers/video/backlight/pandora_bl.c
Original file line number Diff line number Diff line change
Expand Up @@ -35,11 +35,15 @@
#define MAX_VALUE 63
#define MAX_USER_VALUE (MAX_VALUE - MIN_VALUE)

#define PANDORABL_WAS_OFF BL_CORE_DRIVER1
struct pandora_private {
unsigned old_state;
#define PANDORABL_WAS_OFF 1
};

static int pandora_backlight_update_status(struct backlight_device *bl)
{
int brightness = bl->props.brightness;
struct pandora_private *priv = bl_get_data(bl);
u8 r;

if (bl->props.power != FB_BLANK_UNBLANK)
Expand All @@ -53,7 +57,7 @@ static int pandora_backlight_update_status(struct backlight_device *bl)
brightness = MAX_USER_VALUE;

if (brightness == 0) {
if (bl->props.state & PANDORABL_WAS_OFF)
if (priv->old_state == PANDORABL_WAS_OFF)
goto done;

/* first disable PWM0 output, then clock */
Expand All @@ -66,7 +70,7 @@ static int pandora_backlight_update_status(struct backlight_device *bl)
goto done;
}

if (bl->props.state & PANDORABL_WAS_OFF) {
if (priv->old_state == PANDORABL_WAS_OFF) {
/*
* set PWM duty cycle to max. TPS61161 seems to use this
* to calibrate it's PWM sensitivity when it starts.
Expand All @@ -93,9 +97,9 @@ static int pandora_backlight_update_status(struct backlight_device *bl)

done:
if (brightness != 0)
bl->props.state &= ~PANDORABL_WAS_OFF;
priv->old_state = 0;
else
bl->props.state |= PANDORABL_WAS_OFF;
priv->old_state = PANDORABL_WAS_OFF;

return 0;
}
Expand All @@ -109,13 +113,20 @@ static int pandora_backlight_probe(struct platform_device *pdev)
{
struct backlight_properties props;
struct backlight_device *bl;
struct pandora_private *priv;
u8 r;

priv = devm_kmalloc(&pdev->dev, sizeof(*priv), GFP_KERNEL);
if (!priv) {
dev_err(&pdev->dev, "failed to allocate driver private data\n");
return -ENOMEM;
}

memset(&props, 0, sizeof(props));
props.max_brightness = MAX_USER_VALUE;
props.type = BACKLIGHT_RAW;
bl = devm_backlight_device_register(&pdev->dev, pdev->name, &pdev->dev,
NULL, &pandora_backlight_ops, &props);
priv, &pandora_backlight_ops, &props);
if (IS_ERR(bl)) {
dev_err(&pdev->dev, "failed to register backlight\n");
return PTR_ERR(bl);
Expand All @@ -126,7 +137,7 @@ static int pandora_backlight_probe(struct platform_device *pdev)
/* 64 cycle period, ON position 0 */
twl_i2c_write_u8(TWL_MODULE_PWM, 0x80, TWL_PWM0_ON);

bl->props.state |= PANDORABL_WAS_OFF;
priv->old_state = PANDORABL_WAS_OFF;
bl->props.brightness = MAX_USER_VALUE;
backlight_update_status(bl);

Expand Down

0 comments on commit 832ae8e

Please sign in to comment.