Skip to content

Commit

Permalink
Merge branch 'i2c/for-current' of git://git.kernel.org/pub/scm/linux/…
Browse files Browse the repository at this point in the history
…kernel/git/wsa/linux

Pull i2c fixes from Wolfram Sang:
 "Some I2C driver bugfixes (and one documentation fix)"

* 'i2c/for-current' of git://git.kernel.org/pub/scm/linux/kernel/git/wsa/linux:
  i2c: i2c-mux-pca954x: fix deselect enabling for device-tree
  i2c: digicolor: use clk_disable_unprepare instead of clk_unprepare
  i2c: mux: fix up dependencies
  i2c: Documentation: i2c-topology: fix minor whitespace nit
  i2c: mux: demux-pinctrl: make drivers with no pinctrl work again
  • Loading branch information
torvalds committed Nov 19, 2016
2 parents dce9ce3 + ad092de commit 50d438f
Show file tree
Hide file tree
Showing 6 changed files with 26 additions and 8 deletions.
4 changes: 2 additions & 2 deletions Documentation/i2c/i2c-topology
Original file line number Diff line number Diff line change
Expand Up @@ -326,7 +326,7 @@ Two parent-locked sibling muxes

This is a good topology.

.--------.
.--------.
.----------. .--| dev D1 |
| parent- |--' '--------'
.--| locked | .--------.
Expand All @@ -350,7 +350,7 @@ Mux-locked and parent-locked sibling muxes

This is a good topology.

.--------.
.--------.
.----------. .--| dev D1 |
| mux- |--' '--------'
.--| locked | .--------.
Expand Down
1 change: 0 additions & 1 deletion drivers/i2c/Kconfig
Original file line number Diff line number Diff line change
Expand Up @@ -59,7 +59,6 @@ config I2C_CHARDEV

config I2C_MUX
tristate "I2C bus multiplexing support"
depends on HAS_IOMEM
help
Say Y here if you want the I2C core to support the ability to
handle multiplexed I2C bus topologies, by presenting each
Expand Down
2 changes: 1 addition & 1 deletion drivers/i2c/busses/i2c-digicolor.c
Original file line number Diff line number Diff line change
Expand Up @@ -347,7 +347,7 @@ static int dc_i2c_probe(struct platform_device *pdev)

ret = i2c_add_adapter(&i2c->adap);
if (ret < 0) {
clk_unprepare(i2c->clk);
clk_disable_unprepare(i2c->clk);
return ret;
}

Expand Down
1 change: 1 addition & 0 deletions drivers/i2c/muxes/Kconfig
Original file line number Diff line number Diff line change
Expand Up @@ -63,6 +63,7 @@ config I2C_MUX_PINCTRL

config I2C_MUX_REG
tristate "Register-based I2C multiplexer"
depends on HAS_IOMEM
help
If you say yes to this option, support will be included for a
register based I2C multiplexer. This driver provides access to
Expand Down
22 changes: 20 additions & 2 deletions drivers/i2c/muxes/i2c-demux-pinctrl.c
Original file line number Diff line number Diff line change
Expand Up @@ -69,10 +69,28 @@ static int i2c_demux_activate_master(struct i2c_demux_pinctrl_priv *priv, u32 ne
goto err_with_revert;
}

p = devm_pinctrl_get_select(adap->dev.parent, priv->bus_name);
/*
* Check if there are pinctrl states at all. Note: we cant' use
* devm_pinctrl_get_select() because we need to distinguish between
* the -ENODEV from devm_pinctrl_get() and pinctrl_lookup_state().
*/
p = devm_pinctrl_get(adap->dev.parent);
if (IS_ERR(p)) {
ret = PTR_ERR(p);
goto err_with_put;
/* continue if just no pinctrl states (e.g. i2c-gpio), otherwise exit */
if (ret != -ENODEV)
goto err_with_put;
} else {
/* there are states. check and use them */
struct pinctrl_state *s = pinctrl_lookup_state(p, priv->bus_name);

if (IS_ERR(s)) {
ret = PTR_ERR(s);
goto err_with_put;
}
ret = pinctrl_select_state(p, s);
if (ret < 0)
goto err_with_put;
}

priv->chan[new_chan].parent_adap = adap;
Expand Down
4 changes: 2 additions & 2 deletions drivers/i2c/muxes/i2c-mux-pca954x.c
Original file line number Diff line number Diff line change
Expand Up @@ -268,9 +268,9 @@ static int pca954x_probe(struct i2c_client *client,
/* discard unconfigured channels */
break;
idle_disconnect_pd = pdata->modes[num].deselect_on_exit;
data->deselect |= (idle_disconnect_pd
|| idle_disconnect_dt) << num;
}
data->deselect |= (idle_disconnect_pd ||
idle_disconnect_dt) << num;

ret = i2c_mux_add_adapter(muxc, force, num, class);

Expand Down

0 comments on commit 50d438f

Please sign in to comment.