Skip to content

Commit

Permalink
Input: stmfts - acknowledge that setting brightness is a blocking call
Browse files Browse the repository at this point in the history
commit 937c4e552fd1174784045684740edfcea536159d upstream.

We need to turn regulators on and off when switching brightness, and
that may block, therefore we have to set stmfts_brightness_set() as
LED's brightness_set_blocking() method.

Fixes: 78bcac7 ("Input: add support for the STMicroelectronics FingerTip touchscreen")
Acked-by: Andi Shyti <[email protected]>
Signed-off-by: Dmitry Torokhov <[email protected]>
Signed-off-by: Greg Kroah-Hartman <[email protected]>
  • Loading branch information
dtor authored and gregkh committed May 8, 2019
1 parent a99b9c8 commit a10c88b
Showing 1 changed file with 16 additions and 14 deletions.
30 changes: 16 additions & 14 deletions drivers/input/touchscreen/stmfts.c
Original file line number Diff line number Diff line change
Expand Up @@ -106,27 +106,29 @@ struct stmfts_data {
bool running;
};

static void stmfts_brightness_set(struct led_classdev *led_cdev,
static int stmfts_brightness_set(struct led_classdev *led_cdev,
enum led_brightness value)
{
struct stmfts_data *sdata = container_of(led_cdev,
struct stmfts_data, led_cdev);
int err;

if (value == sdata->led_status || !sdata->ledvdd)
return;

if (!value) {
regulator_disable(sdata->ledvdd);
} else {
err = regulator_enable(sdata->ledvdd);
if (err)
dev_warn(&sdata->client->dev,
"failed to disable ledvdd regulator: %d\n",
err);
if (value != sdata->led_status && sdata->ledvdd) {
if (!value) {
regulator_disable(sdata->ledvdd);
} else {
err = regulator_enable(sdata->ledvdd);
if (err) {
dev_warn(&sdata->client->dev,
"failed to disable ledvdd regulator: %d\n",
err);
return err;
}
}
sdata->led_status = value;
}

sdata->led_status = value;
return 0;
}

static enum led_brightness stmfts_brightness_get(struct led_classdev *led_cdev)
Expand Down Expand Up @@ -608,7 +610,7 @@ static int stmfts_enable_led(struct stmfts_data *sdata)
sdata->led_cdev.name = STMFTS_DEV_NAME;
sdata->led_cdev.max_brightness = LED_ON;
sdata->led_cdev.brightness = LED_OFF;
sdata->led_cdev.brightness_set = stmfts_brightness_set;
sdata->led_cdev.brightness_set_blocking = stmfts_brightness_set;
sdata->led_cdev.brightness_get = stmfts_brightness_get;

err = devm_led_classdev_register(&sdata->client->dev, &sdata->led_cdev);
Expand Down

0 comments on commit a10c88b

Please sign in to comment.