This is an automatic generated email to let you know that the following patch 
were queued:

Subject: media: dvb-frontends: mn88443x: Handle errors of clk_prepare_enable()
Author:  Evgeny Novikov <[email protected]>
Date:    Sun Aug 22 11:48:03 2021 +0200

mn88443x_cmn_power_on() did not handle possible errors of
clk_prepare_enable() and always finished successfully so that its caller
mn88443x_probe() did not care about failed preparing/enabling of clocks
as well.

Add missed error handling in both mn88443x_cmn_power_on() and
mn88443x_probe(). This required to change the return value of the former
from "void" to "int".

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

Fixes: 0f408ce8941f ("media: dvb-frontends: add Socionext MN88443x ISDB-S/T 
demodulator driver")
Signed-off-by: Evgeny Novikov <[email protected]>
Co-developed-by: Kirill Shilimanov <[email protected]>
Signed-off-by: Kirill Shilimanov <[email protected]>
Signed-off-by: Sean Young <[email protected]>
Signed-off-by: Mauro Carvalho Chehab <[email protected]>

 drivers/media/dvb-frontends/mn88443x.c | 18 +++++++++++++++---
 1 file changed, 15 insertions(+), 3 deletions(-)

---

diff --git a/drivers/media/dvb-frontends/mn88443x.c 
b/drivers/media/dvb-frontends/mn88443x.c
index e4528784f847..fff212c0bf3b 100644
--- a/drivers/media/dvb-frontends/mn88443x.c
+++ b/drivers/media/dvb-frontends/mn88443x.c
@@ -204,11 +204,18 @@ struct mn88443x_priv {
        struct regmap *regmap_t;
 };
 
-static void mn88443x_cmn_power_on(struct mn88443x_priv *chip)
+static int mn88443x_cmn_power_on(struct mn88443x_priv *chip)
 {
+       struct device *dev = &chip->client_s->dev;
        struct regmap *r_t = chip->regmap_t;
+       int ret;
 
-       clk_prepare_enable(chip->mclk);
+       ret = clk_prepare_enable(chip->mclk);
+       if (ret) {
+               dev_err(dev, "Failed to prepare and enable mclk: %d\n",
+                       ret);
+               return ret;
+       }
 
        gpiod_set_value_cansleep(chip->reset_gpio, 1);
        usleep_range(100, 1000);
@@ -222,6 +229,8 @@ static void mn88443x_cmn_power_on(struct mn88443x_priv 
*chip)
        } else {
                regmap_write(r_t, HIZSET3, 0x8f);
        }
+
+       return 0;
 }
 
 static void mn88443x_cmn_power_off(struct mn88443x_priv *chip)
@@ -738,7 +747,10 @@ static int mn88443x_probe(struct i2c_client *client,
        chip->fe.demodulator_priv = chip;
        i2c_set_clientdata(client, chip);
 
-       mn88443x_cmn_power_on(chip);
+       ret = mn88443x_cmn_power_on(chip);
+       if (ret)
+               goto err_i2c_t;
+
        mn88443x_s_sleep(chip);
        mn88443x_t_sleep(chip);
 

_______________________________________________
linuxtv-commits mailing list
[email protected]
https://www.linuxtv.org/cgi-bin/mailman/listinfo/linuxtv-commits

Reply via email to