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:[email protected]]
Sent: Tuesday, July 14, 2009 3:57 AM
To: Lindsey Ings -X (ingsl - Yoh Services LLC at Cisco)
Cc: [email protected]; [email protected]
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 [email protected]
More majordomo info at http://vger.kernel.org/majordomo-info.html