mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-11-19 02:04:19 +08:00
Input: stmfts - acknowledge that setting brightness is a blocking call
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: 78bcac7b2a
("Input: add support for the STMicroelectronics FingerTip touchscreen")
Acked-by: Andi Shyti <andi@etezian.org>
Signed-off-by: Dmitry Torokhov <dmitry.torokhov@gmail.com>
This commit is contained in:
parent
576057bf75
commit
937c4e552f
@ -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 != sdata->led_status && sdata->ledvdd) {
|
||||
if (!value) {
|
||||
regulator_disable(sdata->ledvdd);
|
||||
} else {
|
||||
err = regulator_enable(sdata->ledvdd);
|
||||
if (err)
|
||||
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)
|
||||
@ -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);
|
||||
|
Loading…
Reference in New Issue
Block a user