Since I can't use the DTS I'm now trying to instantiate the mux through other means. I put the code below in ".../arch/powerpc/platforms/44x/myBoard.c". Is this the intended instantiation? I have 2 i2c busses on my SOC and I have 2 muxes (with 4 ports each) on the second SOC bus. Therefore, I'd want the first mux to have busses 2,3,4,5 and the second mux to have 6,7,8,9: static struct pca954x_platform_mode pca954x_modes_mux0[] = { { .adap_id = 2, }, { .adap_id = 3, }, { .adap_id = 4, }, { .adap_id = 5, }, }; static struct pca954x_platform_mode pca954x_modes_mux1[] = { { .adap_id = 6, }, { .adap_id = 7, }, { .adap_id = 8, }, { .adap_id = 9, }, }; static struct pca954x_platform_data pca9544_data_mux0 = { .modes = pca954x_modes_mux0, .num_modes = ARRAY_SIZE(pca954x_modes_mux0), }; static struct pca954x_platform_data pca9544_data_mux1 = { .modes = pca954x_modes_mux1, .num_modes = ARRAY_SIZE(pca954x_modes_mux1), }; static struct i2c_board_info __initdata i2c_bus1_devices[] = { { /* I2C mux */ I2C_BOARD_INFO("pca9544", 0x70), .platform_data = &pca9544_data_mux0, }, { /* I2C mux */ I2C_BOARD_INFO("pca9544", 0x71), .platform_data = &pca9544_data_mux1, }, }; static int __init board_i2c_init(void) { /* Register board i2c devices */ i2c_register_board_info(0, i2c_bus1_devices, ARRAY_SIZE(i2c_bus1_devices)); return 0; } arch_initcall(board_i2c_init); Regards, Lindsey -----Original Message----- From: Jean Delvare [mailto:khali@xxxxxxxxxxxx] Sent: Tuesday, July 14, 2009 3:57 AM To: Lindsey Ings -X (ingsl - Yoh Services LLC at Cisco) Cc: linux-i2c@xxxxxxxxxxxxxxx; giometti@xxxxxxxxxxxx Subject: Re: Sample DTS entries and sample user space code On Fri, 10 Jul 2009 17:09:47 -0400, Lindsey Ings -X (ingsl - Yoh Services LLC at Cisco) wrote: > > > Resend of message in plain text form. > > > I understand the concepts involved in this project but that doesn't help me actually make use of it. For reference for other readers who have no clue what you're talking about: Lindsey is referring to Rodolfo's I2C multiplexing support project, described at: http://i2c.wiki.kernel.org/index.php/I2C_bus_multiplexing > Is there a sample of how to put the mux and (if feasible) I2C clients in a DTS? Not yet. Rodolfo's code is not even in mainline. But once implementation is complete, then yes it should be possible to declare I2C multiplexers and other I2C devices in a DTS. > Also is there a user application sample of how to access the devices downstream from the mux? This wouldn't make sense. Multiplexing is handled in the kernel and user-space does not even know it is happening. > Are the mux's created as a device so that the devices downstream are accessed as non-mux'd devices? i.e. is dev D in segment 2 (from the diagram on the wiki) accessed as so: > > int fd; > fd = open( "/dev/i2c-2", O_RDWR ); > > #define ADDRESS 0x38 // address of dev D > ioctl( fd, I2C_SLAVE, ADDRESS ) > > // Now r/w dev D > > // Write 0xAA to dev D > i2c_smbus_write_byte( fd, 0xAA ); > // etc. Yes, this is how the code would look like. Note that I am still waiting for Rodolfo to update his patch set so that it applies again on top of Linus' latest kernel. -- Jean Delvare -- 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