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
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]>
  • Loading branch information
dtor committed Feb 8, 2019
1 parent 576057b commit 937c4e5
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 937c4e5

Please sign in to comment.