diff options
author | Wolfram Sang <wsa+renesas@sang-engineering.com> | 2016-08-12 18:40:23 +0200 |
---|---|---|
committer | Greg Kroah-Hartman <gregkh@linuxfoundation.org> | 2016-09-07 08:34:49 +0200 |
commit | 7c3535b0d533a480bd445f7a4d76cce77acacf24 (patch) | |
tree | b2b90766c5fdc929449bf55acce37c85eb6c506c /drivers | |
parent | e375b488d87a24a201b874fb5790eef7ed670497 (diff) | |
download | lwn-7c3535b0d533a480bd445f7a4d76cce77acacf24.tar.gz lwn-7c3535b0d533a480bd445f7a4d76cce77acacf24.zip |
i2c: mux: demux-pinctrl: properly roll back when adding adapter fails
commit ce8cb803d8b90458495f23606c706f0c0c857cdc upstream.
We also need to revert the dynamic OF change, so we get a consistent
state again. Otherwise, we might have two devices enabled e.g. after
pinctrl setup fails.
Signed-off-by: Wolfram Sang <wsa+renesas@sang-engineering.com>
Signed-off-by: Wolfram Sang <wsa@the-dreams.de>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Diffstat (limited to 'drivers')
-rw-r--r-- | drivers/i2c/muxes/i2c-demux-pinctrl.c | 4 |
1 files changed, 3 insertions, 1 deletions
diff --git a/drivers/i2c/muxes/i2c-demux-pinctrl.c b/drivers/i2c/muxes/i2c-demux-pinctrl.c index 8de073aed001..215ac87f606d 100644 --- a/drivers/i2c/muxes/i2c-demux-pinctrl.c +++ b/drivers/i2c/muxes/i2c-demux-pinctrl.c @@ -68,7 +68,7 @@ static int i2c_demux_activate_master(struct i2c_demux_pinctrl_priv *priv, u32 ne adap = of_find_i2c_adapter_by_node(priv->chan[new_chan].parent_np); if (!adap) { ret = -ENODEV; - goto err; + goto err_with_revert; } p = devm_pinctrl_get_select(adap->dev.parent, priv->bus_name); @@ -103,6 +103,8 @@ static int i2c_demux_activate_master(struct i2c_demux_pinctrl_priv *priv, u32 ne err_with_put: i2c_put_adapter(adap); + err_with_revert: + of_changeset_revert(&priv->chan[new_chan].chgset); err: dev_err(priv->dev, "failed to setup demux-adapter %d (%d)\n", new_chan, ret); return ret; |