mirror of
https://github.com/torvalds/linux.git
synced 2024-12-06 19:11:31 +00:00
media: dvb-frontends: mn88443x: Handle errors of clk_prepare_enable()
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: 0f408ce894
("media: dvb-frontends: add Socionext MN88443x ISDB-S/T demodulator driver")
Signed-off-by: Evgeny Novikov <novikov@ispras.ru>
Co-developed-by: Kirill Shilimanov <kirill.shilimanov@huawei.com>
Signed-off-by: Kirill Shilimanov <kirill.shilimanov@huawei.com>
Signed-off-by: Sean Young <sean@mess.org>
Signed-off-by: Mauro Carvalho Chehab <mchehab+huawei@kernel.org>
This commit is contained in:
parent
57b660b22f
commit
69a10678e2
@ -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);
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user