Skip to contentSkip to conversation

sysfs bind/unbind attributes usage

DISCUSSION Raghavendra 2 participants 2 messages Jul 1, 2014

lore
Share & tools
lore
#0 lore raw

Hello,

I would like to know more about manually probing/removing the devices through sysfs attributes.
After searching for a while I came across two attributes 'bind' and 'unbind' present in all the drivers.

Now how may I correctly use them to probe my devices.
I sense the probing syntax is different for different kinds of drivers (I2C, SPI, PCI, USB, etc).
I am mainly looking for probing I2C and SPI devices.

Also I found related attributes called 'new_id and remove_id' (for PCI drivers) and also 'new_device and delete_device' (present in the i2c adapter devices). Now how are they different from the bind/unbind attributes, because as far as I know, even they do the same thing.

Could any one guide me through any documentation regarding all these issues

Thanks,
Raghavendra

-------------------------------------------------------------------------------------------------------------------------------
[ C-DAC is on Social-Media too. Kindly follow us at:
Facebook: https://www.facebook.com/CDACINDIA & Twitter: @cdacindia ]

This e-mail is for the sole use of the intended recipient(s) and may contain confidential and privileged information. If you are not the intended recipient, please contact the sender by reply e-mail and destroy all copies and the original message. Any unauthorized review, use, disclosure, dissemination, forwarding, printing or copying of this email is strictly prohibited and appropriate legal action will be taken.
-------------------------------------------------------------------------------------------------------------------------------

#1 lore raw
Quoted 11 lines · Raghavendra

Hello,

I would like to know more about manually probing/removing the devices through sysfs attributes.
After searching for a while I came across two attributes 'bind' and 'unbind' present in all the drivers.

Now how may I correctly use them to probe my devices.
I sense the probing syntax is different for different kinds of drivers (I2C, SPI, PCI, USB, etc).
I am mainly looking for probing I2C and SPI devices.

sysfs attributes are supposed to be documented under 'Documentation/ABI/' but there seems to be a few holes there:

bjorn at nemi:/usr/local/src/git/linux$ git grep bind Documentation/ABI/
Documentation/ABI/testing/configfs-usb-gadget: UDC - bind a gadget to UDC/unbind a gadget;
Documentation/ABI/testing/configfs-usb-gadget: to bind a gadget, empty string "" to unbind.

Documentation/ABI/testing/sysfs-bus-pci:What:           /sys/bus/pci/drivers/.../bind
Documentation/ABI/testing/sysfs-bus-pci:                the driver to attempt to bind to the device found at
Documentation/ABI/testing/sysfs-bus-pci:                bindings.  The format for the location is: DDDD:BB:DD.F.
Documentation/ABI/testing/sysfs-bus-pci:                # echo 0000:00:19.0 > /sys/bus/pci/drivers/foo/bind
Documentation/ABI/testing/sysfs-bus-pci:What:           /sys/bus/pci/drivers/.../unbind
Documentation/ABI/testing/sysfs-bus-pci:                driver to attempt to unbind from the device found at
Documentation/ABI/testing/sysfs-bus-pci:                bindings.  The format for the location is: DDDD:BB:DD.F.
Documentation/ABI/testing/sysfs-bus-pci:                # echo 0000:00:19.0 > /sys/bus/pci/drivers/foo/unbind
Documentation/ABI/testing/sysfs-bus-pci:                for the device and attempt to bind to it.  For example:
Documentation/ABI/testing/sysfs-bus-pci:                to driver_override will have an opportunity to bind to the
Documentation/ABI/testing/sysfs-bus-pci:                This returns the device to standard matching rules binding.
Documentation/ABI/testing/sysfs-bus-pci:                Writing to driver_override does not automatically unbind the
Documentation/ABI/testing/sysfs-bus-pci:                will not bind to any driver.  This also allows devices to
Documentation/ABI/testing/sysfs-bus-pci:                opt-out of driver binding using a driver_override name such as
Documentation/ABI/testing/sysfs-bus-usb:                for the device and attempt to bind to it.  For example:

I am pretty sure patches to fix this are accepted...

The bind/unbind attributes normally (always?) take a bus specific device name as input. I.e something like the '0000:00:19.0' shown above for PCI, or '4-2:1.2' for USB.

Quoted 3 lines

Also I found related attributes called 'new_id and remove_id' (for PCI drivers) and also 'new_device and delete_device' (present in the i2c adapter devices).

These are better documented:

bjorn at nemi:/usr/local/src/git/linux$ git grep new_id Documentation/ABI/

Documentation/ABI/testing/sysfs-bus-pci:What:           /sys/bus/pci/drivers/.../new_id
Documentation/ABI/testing/sysfs-bus-pci:                # echo "8086 10f5" > /sys/bus/pci/drivers/foo/new_id
Documentation/ABI/testing/sysfs-bus-pci:                that was dynamically added via the new_id sysfs entry.
Documentation/ABI/testing/sysfs-bus-usb:What:           /sys/bus/usb/drivers/.../new_id
Documentation/ABI/testing/sysfs-bus-usb:                # echo "8086 10f5" > /sys/bus/usb/drivers/foo/new_id
Documentation/ABI/testing/sysfs-bus-usb:                # echo "0458 7045 0 0458 704c" > /sys/bus/usb/drivers/foo/new_id
Documentation/ABI/testing/sysfs-bus-usb:                # cat /sys/bus/usb/drivers/foo/new_id
Documentation/ABI/testing/sysfs-bus-usb:What:           /sys/bus/usb-serial/drivers/.../new_id
Documentation/ABI/testing/sysfs-bus-usb:                "/sys/bus/usb/drivers/.../new_id" apply.
Documentation/ABI/testing/sysfs-bus-usb:                that was dynamically added via the new_id sysfs entry.
Documentation/ABI/testing/sysfs-bus-usb:                "/sys/bus/usb/drivers/.../new_id"
Quoted 2 lines

Now how are they different from the bind/unbind attributes, because as far as I know, even they do the same thing.

No, they do different things.

The bind/unbind attributes tries to attach/detach a driver to/from a device supported by that driver. The new_id/remove_id attributes adds/removes device IDs to/from the list of devices supported by the driver.

Adding a new device ID to a driver will usually cause previously unbound devices with a matching ID to be bound though, which I guess is the part confusing you.

Quoted 1 line

Could any one guide me through any documentation regarding all these issues

Looks like you'll have to write some of that documentation ;-)

Bj?rn