OSDN Git Service

media: tw9910: fix failure handling in tw9910_power_on()
authorAlexey Khoroshilov <khoroshilov@ispras.ru>
Sun, 30 Dec 2018 11:41:40 +0000 (06:41 -0500)
committerMauro Carvalho Chehab <mchehab+samsung@kernel.org>
Wed, 16 Jan 2019 16:29:31 +0000 (11:29 -0500)
If gpiod_get_optional() fails in tw9910_power_on(), clk is left undisabled.

Found by Linux Driver Verification project (linuxtesting.org).

Signed-off-by: Alexey Khoroshilov <khoroshilov@ispras.ru>
Signed-off-by: Mauro Carvalho Chehab <mchehab+samsung@kernel.org>
drivers/media/i2c/tw9910.c

index a54548c..0971f8a 100644 (file)
@@ -610,6 +610,11 @@ static int tw9910_power_on(struct tw9910_priv *priv)
                                             GPIOD_OUT_LOW);
        if (IS_ERR(priv->rstb_gpio)) {
                dev_info(&client->dev, "Unable to get GPIO \"rstb\"");
+               clk_disable_unprepare(priv->clk);
+               if (priv->pdn_gpio) {
+                       gpiod_set_value(priv->pdn_gpio, 1);
+                       usleep_range(500, 1000);
+               }
                return PTR_ERR(priv->rstb_gpio);
        }