Input: tm2-touchkey - acknowledge that setting brightness is a blocking call
authorDmitry Torokhov <dmitry.torokhov@gmail.com>
Wed, 6 Feb 2019 18:10:12 +0000 (10:10 -0800)
committerDmitry Torokhov <dmitry.torokhov@gmail.com>
Fri, 8 Feb 2019 07:41:12 +0000 (23:41 -0800)
We need to access I2C bus when switching brightness, and that may block,
therefore we have to set stmfts_brightness_set() as LED's
brightness_set_blocking() method.

Fixes: 72d1f2346ded ("Input: tm2-touchkey - add touchkey driver support for TM2")
Acked-by: Andi Shyti <andi@etezian.org>
Signed-off-by: Dmitry Torokhov <dmitry.torokhov@gmail.com>
drivers/input/keyboard/tm2-touchkey.c

index 7dbef96559d2bf6683bdf4de1e84db1542022e8b..d4455f3a5cf1643d43386c816e7e0414866c8a4a 100644 (file)
@@ -78,7 +78,7 @@ static struct touchkey_variant aries_touchkey_variant = {
        .cmd_led_off = ARIES_TOUCHKEY_CMD_LED_OFF,
 };
 
-static void tm2_touchkey_led_brightness_set(struct led_classdev *led_dev,
+static int tm2_touchkey_led_brightness_set(struct led_classdev *led_dev,
                                            enum led_brightness brightness)
 {
        struct tm2_touchkey_data *touchkey =
@@ -97,9 +97,8 @@ static void tm2_touchkey_led_brightness_set(struct led_classdev *led_dev,
        if (!touchkey->variant->fixed_regulator)
                regulator_set_voltage(touchkey->vdd, volt, volt);
 
-       if (touchkey->variant->no_reg)
-               i2c_smbus_write_byte(touchkey->client, data);
-       else
+       return touchkey->variant->no_reg ?
+               i2c_smbus_write_byte(touchkey->client, data) :
                i2c_smbus_write_byte_data(touchkey->client,
                                          touchkey->variant->base_reg, data);
 }
@@ -270,7 +269,8 @@ static int tm2_touchkey_probe(struct i2c_client *client,
        touchkey->led_dev.name = TM2_TOUCHKEY_DEV_NAME;
        touchkey->led_dev.brightness = LED_ON;
        touchkey->led_dev.max_brightness = LED_ON;
-       touchkey->led_dev.brightness_set = tm2_touchkey_led_brightness_set;
+       touchkey->led_dev.brightness_set_blocking =
+                                       tm2_touchkey_led_brightness_set;
 
        error = devm_led_classdev_register(&client->dev, &touchkey->led_dev);
        if (error) {