|
|
@@ -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)
|
|
|
@@ -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);
|