diff options
author | Wyon Bi <bivvy.bi@rock-chips.com> | 2018-12-18 16:11:10 +0800 |
---|---|---|
committer | Tao Huang <huangtao@rock-chips.com> | 2018-12-18 17:59:44 +0800 |
commit | 74f866a9cca7c6b5ca16f8c673ceb36f340181a9 (patch) | |
tree | 3a1522298a00720eac6b2cac6e5411ca9208fa4c /drivers/mfd | |
parent | 4b2e9b94ed38b1988a714854921c583051fc078b (diff) |
mfd: rk618: bypass reset sequence if I2C communication is ok
Change-Id: I7f70c142e55679d34d80917ea6cde7e4aec77901
Signed-off-by: Wyon Bi <bivvy.bi@rock-chips.com>
Diffstat (limited to 'drivers/mfd')
-rw-r--r-- | drivers/mfd/rk618.c | 23 |
1 files changed, 14 insertions, 9 deletions
diff --git a/drivers/mfd/rk618.c b/drivers/mfd/rk618.c index 3d7081048a0f..716c6202f870 100644 --- a/drivers/mfd/rk618.c +++ b/drivers/mfd/rk618.c @@ -50,6 +50,7 @@ static const struct mfd_cell rk618_devs[] = { static int rk618_power_on(struct rk618 *rk618) { + u32 reg; int ret; ret = regulator_enable(rk618->supply); @@ -62,11 +63,15 @@ static int rk618_power_on(struct rk618 *rk618) gpiod_direction_output(rk618->enable_gpio, 1); usleep_range(1000, 2000); - gpiod_direction_output(rk618->reset_gpio, 0); - usleep_range(2000, 4000); - gpiod_direction_output(rk618->reset_gpio, 1); - usleep_range(50000, 60000); - gpiod_direction_output(rk618->reset_gpio, 0); + + ret = regmap_read(rk618->regmap, 0x0000, ®); + if (ret) { + gpiod_direction_output(rk618->reset_gpio, 0); + usleep_range(2000, 4000); + gpiod_direction_output(rk618->reset_gpio, 1); + usleep_range(50000, 60000); + gpiod_direction_output(rk618->reset_gpio, 0); + } return 0; } @@ -136,10 +141,6 @@ rk618_probe(struct i2c_client *client, const struct i2c_device_id *id) return ret; } - ret = rk618_power_on(rk618); - if (ret) - goto err_clk_disable; - rk618->regmap = devm_regmap_init_i2c(client, &rk618_regmap_config); if (IS_ERR(rk618->regmap)) { ret = PTR_ERR(rk618->regmap); @@ -147,6 +148,10 @@ rk618_probe(struct i2c_client *client, const struct i2c_device_id *id) goto err_clk_disable; } + ret = rk618_power_on(rk618); + if (ret) + goto err_clk_disable; + ret = mfd_add_devices(dev, -1, rk618_devs, ARRAY_SIZE(rk618_devs), NULL, 0, NULL); if (ret) { |