>>>>> "Jean" == Jean Delvare <khali@xxxxxxxxxxxx> writes: Jean> Hi Peter, Jean> Thanks for the updated patch. You're welcome. Thanks for the feedback. >> SCL/SDA of the master I2C bus is multiplexed to virtual bus 1..M >> according to the settings of the GPIO pins 1..N. Jean> Again: these are not virtual buses. These are bus segments behind a Jean> mux, and they are as real as the trunk segment in front of the mux. Ok, I renamed every instance of 'virtual bus' with 'bus segment'. Jean> I'm eager to give it a try on my own PC system, where the SMBus Jean> is multiplexed using ICH10 GPIO pins. Unfortunately I don't think Jean> there is a driver for the Intel ICH GPIO pins, so I'll have to Jean> write one. And then I'll have to write some glue code to Jean> instantiate the relevant platform device on my system. I'll let Jean> you know when I get there. Nice! >> +static struct gpio_i2cmux_platform_data myboard_i2cmux_data = { >> + .parent = 1, >> + .base_nr = 2, /* optional */ >> + .values = myboard_gpiomux_values, >> + .n_values = ARRAY_SIZE(myboard_gpiomux_values), >> + .gpio = myboard_gpiomux_gpios, Jean> .gpios >> + .gpios = ARRAY_SIZE(myboard_gpiomux_gpios), Jean> .n_gpios Ups, fixed. >> +GENERIC GPIO I2C MULTIPLEXER DRIVER >> +M: Peter Korsgaard <peter.korsgaard@xxxxxxxxx> >> +L: linux-i2c@xxxxxxxxxxxxxxx >> +S: Supported >> +F: drivers/i2c/muxes/gpio-i2cmux.c >> +F: include/linux/gpio-i2mux.h Jean> Typo: gpio-i2cmux.h. And you're missing: Jean> F: Documentation/i2c/muxes/gpio-i2cmux Fixed. >> + config I2C_MUX_GPIO >> + tristate "GPIO-based I2C multiplexer" >> + depends on GENERIC_GPIO >> + help >> + If you say yes to this option, support will be included for a >> + GPIO based I2C multiplexer. This driver provides access to >> + I2C busses connected through a MUX, which is controlled >> + through GPIO pins. >> + >> + This driver can also be built as a module. If so, the module >> + will be called gpio-i2cmux. >> + Jean> Alphabetic order -> goes at the beginning of the list. >> +obj-$(CONFIG_I2C_MUX_GPIO) += gpio-i2cmux.o Jean> Alphabetic order -> goes at the beginning of the list. Fixed. >> + for (i = 0; i < pdata->n_values; i++) { >> + u32 nr = pdata->base_nr ? (pdata->base_nr + i) : 0; >> + bool has_idle = (pdata->idle != (unsigned)-1); Jean> has_idle doesn't depend on i, so it would be more efficiently set Jean> outside the loop. You could even store a function pointer instead of a Jean> boolean value, to be even more efficient. Jean> BTW, would it make sense to Jean> #define GPIO_I2CMUX_NO_IDLE ((unsigned)-1) Jean> to avoid arbitrary cast and constant in the code? Ok, added define to platform header, and changed the probe code to use a function pointer instead. Will send v4 shortly - Thanks for the review. -- Bye, Peter Korsgaard -- 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