Some gpio chips may have get/set operations that can sleep. For this type of chips we must use the _cansleep() version of gpio_set_value. Signed-off-by: Ionut Nicu <ioan.nicu.ext@xxxxxxx> --- drivers/i2c/muxes/i2c-mux-gpio.c | 11 ++++++++--- 1 files changed, 8 insertions(+), 3 deletions(-) diff --git a/drivers/i2c/muxes/i2c-mux-gpio.c b/drivers/i2c/muxes/i2c-mux-gpio.c index a764da7..b5f17ef 100644 --- a/drivers/i2c/muxes/i2c-mux-gpio.c +++ b/drivers/i2c/muxes/i2c-mux-gpio.c @@ -27,11 +27,16 @@ struct gpiomux { static void i2c_mux_gpio_set(const struct gpiomux *mux, unsigned val) { + unsigned gpio; int i; - for (i = 0; i < mux->data.n_gpios; i++) - gpio_set_value(mux->gpio_base + mux->data.gpios[i], - val & (1 << i)); + for (i = 0; i < mux->data.n_gpios; i++) { + gpio = mux->gpio_base + mux->data.gpios[i]; + if (gpio_cansleep(gpio)) + gpio_set_value_cansleep(gpio, val & (1 << i)); + else + gpio_set_value(gpio, val & (1 << i)); + } } static int i2c_mux_gpio_select(struct i2c_adapter *adap, void *data, u32 chan) -- 1.7.1 -- To unsubscribe from this list: send the line "unsubscribe linux-i2c" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html