Just tested it and it work well for me. lsi2c (a tool I have been
developing) was complacently unaffected, I will be releasing it as an
open source app soon.
Thanks.
[root@linux 32-0071]# ll
total 0
lrwxrwxrwx 1 admin root 0 Nov 7 23:30 bus -> ../../../../../../../bus/i2c
lrwxrwxrwx 1 admin root 0 Nov 7 23:41 channel-0 -> ../i2c-33
lrwxrwxrwx 1 admin root 0 Nov 7 23:41 channel-1 -> ../i2c-34
lrwxrwxrwx 1 admin root 0 Nov 7 23:41 channel-2 -> ../i2c-35
lrwxrwxrwx 1 admin root 0 Nov 7 23:41 channel-3 -> ../i2c-36
lrwxrwxrwx 1 admin root 0 Nov 7 23:41 channel-4 -> ../i2c-37
lrwxrwxrwx 1 admin root 0 Nov 7 23:41 channel-5 -> ../i2c-38
lrwxrwxrwx 1 admin root 0 Nov 7 23:41 channel-6 -> ../i2c-39
lrwxrwxrwx 1 admin root 0 Nov 7 23:41 channel-7 -> ../i2c-40
lrwxrwxrwx 1 admin root 0 Nov 7 23:30 driver ->
../../../../../../../bus/i2c/drivers/pca954x
-r--r--r-- 1 admin root 4096 Nov 7 23:41 modalias
-r--r--r-- 1 admin root 4096 Nov 7 23:30 name
lrwxrwxrwx 1 admin root 0 Nov 7 23:30 subsystem ->
../../../../../../../bus/i2c
-rw-r--r-- 1 admin root 4096 Nov 7 23:41 uevent
[root@linux ~]# lsi2c
I2C Adapters:
bus: i2c-0 path: 0 type: i2c name: MPC adapter at 0xffe03000
bus: i2c-2 path: 0:0.0 type: mux name: i2c-0-mux (chan_id 0)
bus: i2c-3 path: 0:0.1 type: mux name: i2c-0-mux (chan_id 1)
bus: i2c-4 path: 0:0.2 type: mux name: i2c-0-mux (chan_id 2)
bus: i2c-5 path: 0:0.3 type: mux name: i2c-0-mux (chan_id 3)
bus: i2c-6 path: 0:0.4 type: mux name: i2c-0-mux (chan_id 4)
bus: i2c-7 path: 0:0.5 type: mux name: i2c-0-mux (chan_id 5)
bus: i2c-8 path: 0:0.6 type: mux name: i2c-0-mux (chan_id 6)
bus: i2c-9 path: 0:0.7 type: mux name: i2c-0-mux (chan_id 7)
bus: i2c-1 path: 1 type: i2c name: MPC adapter at 0xffe03100
bus: i2c-10 path: 1:0.0 type: mux name: i2c-1-mux (chan_id 0)
bus: i2c-11 path: 1:0.1 type: mux name: i2c-1-mux (chan_id 1)
bus: i2c-18 path: 1:0.1:0.0 type: mux name: i2c-11-mux (chan_id 0)
bus: i2c-12 path: 1:0.2 type: mux name: i2c-1-mux (chan_id 2)
bus: i2c-32 path: 1:0.2:0.0 type: mux name: i2c-12-mux (chan_id 0)
bus: i2c-33 path: 1:0.2:0.0:0.0 type: mux name: i2c-32-mux (chan_id 0)
bus: i2c-34 path: 1:0.2:0.0:0.1 type: mux name: i2c-32-mux (chan_id 1)
bus: i2c-35 path: 1:0.2:0.0:0.2 type: mux name: i2c-32-mux (chan_id 2)
bus: i2c-36 path: 1:0.2:0.0:0.3 type: mux name: i2c-32-mux (chan_id 3)
bus: i2c-37 path: 1:0.2:0.0:0.4 type: mux name: i2c-32-mux (chan_id 4)
bus: i2c-38 path: 1:0.2:0.0:0.5 type: mux name: i2c-32-mux (chan_id 5)
bus: i2c-39 path: 1:0.2:0.0:0.6 type: mux name: i2c-32-mux (chan_id 6)
bus: i2c-40 path: 1:0.2:0.0:0.7 type: mux name: i2c-32-mux (chan_id 7)
bus: i2c-13 path: 1:0.3 type: mux name: i2c-1-mux (chan_id 3)
bus: i2c-23 path: 1:0.3:0.0 type: mux name: i2c-13-mux (chan_id 0)
bus: i2c-24 path: 1:0.3:0.0:0.0 type: mux name: i2c-23-mux (chan_id 0)
bus: i2c-25 path: 1:0.3:0.0:0.1 type: mux name: i2c-23-mux (chan_id 1)
bus: i2c-26 path: 1:0.3:0.0:0.2 type: mux name: i2c-23-mux (chan_id 2)
bus: i2c-27 path: 1:0.3:0.0:0.3 type: mux name: i2c-23-mux (chan_id 3)
bus: i2c-28 path: 1:0.3:0.0:0.4 type: mux name: i2c-23-mux (chan_id 4)
bus: i2c-29 path: 1:0.3:0.0:0.5 type: mux name: i2c-23-mux (chan_id 5)
bus: i2c-30 path: 1:0.3:0.0:0.6 type: mux name: i2c-23-mux (chan_id 6)
bus: i2c-31 path: 1:0.3:0.0:0.7 type: mux name: i2c-23-mux (chan_id 7)
bus: i2c-14 path: 1:0.4 type: mux name: i2c-1-mux (chan_id 4)
bus: i2c-19 path: 1:0.4:0.0 type: mux name: i2c-14-mux (chan_id 0)
bus: i2c-15 path: 1:0.5 type: mux name: i2c-1-mux (chan_id 5)
bus: i2c-20 path: 1:0.5:0.0 type: mux name: i2c-15-mux (chan_id 0)
bus: i2c-16 path: 1:0.6 type: mux name: i2c-1-mux (chan_id 6)
bus: i2c-21 path: 1:0.6:0.0 type: mux name: i2c-16-mux (chan_id 0)
bus: i2c-17 path: 1:0.7 type: mux name: i2c-1-mux (chan_id 7)
bus: i2c-22 path: 1:0.7:0.0 type: mux name: i2c-17-mux (chan_id 0)
Count: 30
[root@linux ]# lsi2c -d
I2C Devices:
bus=0 type=i2c bus_path=0 address=0x70 name=pca9548
driver=pca954x
bus=6 type=mux bus_path=0:0.4 address=0x68 name=ds1339
driver=rtc-ds1307
bus=1 type=i2c bus_path=1 address=0x74 name=pca9548
driver=pca954x
bus=11 type=mux bus_path=1:0.1 address=0x73 name=pca9541
driver=pca9541
bus=12 type=mux bus_path=1:0.2 address=0x7e name=pca9541
driver=pca9541
bus=32 type=mux bus_path=1:0.2:0.0 address=0x71 name=pca9547
driver=pca954x
bus=13 type=mux bus_path=1:0.3 address=0x7e name=pca9541
driver=pca9541
bus=23 type=mux bus_path=1:0.3:0.0 address=0x71 name=pca9547
driver=pca954x
bus=14 type=mux bus_path=1:0.4 address=0x73 name=pca9541
driver=pca9541
bus=15 type=mux bus_path=1:0.5 address=0x73 name=pca9541
driver=pca9541
bus=16 type=mux bus_path=1:0.6 address=0x73 name=pca9541
driver=pca9541
bus=17 type=mux bus_path=1:0.7 address=0x73 name=pca9541
driver=pca9541
Count: 12
On Fri, Nov 7, 2014 at 4:36 AM, Wolfram Sang <[email protected]> wrote:
> From: Gerlando Falauto <[email protected]>
>
> This makes the topology clearer. For instance, by adding a pca9547
> device with address 0x70 to bus i2c-0, you get:
>
> /sys/class/i2c-dev/i2c-0/device/0-0070/channel-0 -> i2c-1
> ...
> /sys/class/i2c-dev/i2c-0/device/0-0070/channel-7 -> i2c-8
>
> Signed-off-by: Gerlando Falauto <[email protected]>
> [wsa: simplified sysfs-usage and fixed format string usage]
> Signed-off-by: Wolfram Sang <[email protected]>
> Cc: Jean Delvare <[email protected]>
> Cc: Guenter Roeck <[email protected]>
> Cc: Martin Belanger <[email protected]>
> Cc: Rodolfo Giometti <[email protected]>
> Cc: Michael Lawnick <[email protected]>
> Cc: Jeroen De Wachter <[email protected]>
> ---
>
> This should also make it easier for applications to handle the topology of
> muxes without breaking anything. Please give opinions if it really helps. I
> don't use muxes myself.
>
> drivers/i2c/i2c-mux.c | 8 ++++++++
> 1 file changed, 8 insertions(+)
>
> diff --git a/drivers/i2c/i2c-mux.c b/drivers/i2c/i2c-mux.c
> index d05208232b07..f43273a92069 100644
> --- a/drivers/i2c/i2c-mux.c
> +++ b/drivers/i2c/i2c-mux.c
> @@ -110,6 +110,7 @@ struct i2c_adapter *i2c_add_mux_adapter(struct
> i2c_adapter *parent,
> void *, u32))
> {
> struct i2c_mux_priv *priv;
> + char symlink_name[20];
> int ret;
>
> priv = kzalloc(sizeof(struct i2c_mux_priv), GFP_KERNEL);
> @@ -189,6 +190,9 @@ struct i2c_adapter *i2c_add_mux_adapter(struct
> i2c_adapter *parent,
> dev_name(&priv->adap.dev)),
> "can't create compatibility link for
> old mux name scheme\n");
>
> + snprintf(symlink_name, sizeof(symlink_name), "channel-%u", chan_id);
> + WARN(sysfs_create_link(&mux_dev->kobj, &priv->adap.dev.kobj,
> symlink_name),
> + "can't create symlink for channel\n");
> dev_info(&parent->dev, "Added multiplexed i2c bus %d\n",
> i2c_adapter_id(&priv->adap));
>
> @@ -199,6 +203,10 @@ EXPORT_SYMBOL_GPL(i2c_add_mux_adapter);
> void i2c_del_mux_adapter(struct i2c_adapter *adap)
> {
> struct i2c_mux_priv *priv = adap->algo_data;
> + char symlink_name[20];
> +
> + snprintf(symlink_name, sizeof(symlink_name), "channel-%u",
> priv->chan_id);
> + sysfs_remove_link(&adap->dev.parent->kobj, symlink_name);
>
> if (adap->dev.parent != &priv->parent->dev)
> sysfs_remove_link(&priv->parent->dev.kobj,
> dev_name(&adap->dev));
> --
> 2.1.1
>
> --
> 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
--
- Danielle Costantino
--
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