"permanently" unbind a device from a driver?

Michael Tokarev
2009-01-20T20:50:47Z

Is there a way to stop a module from claiming a
given device no matter how/when it gets plugged?

For example, there's a series of power supplies
(UPSes) with USB connection (common nowadays)
which, by default, gets claimed by usbhid module.
But it does not work as a HID device, instead it
uses a serial line logic and has a USB<=>serial
converter inside, which works just fine with
cypress_m8 usbserial driver.

usbhid module is loaded on startup (to handle
usb keyboards/mouses), and it claims this device
too. Using /sys/bus/.../drivers/usbhid/unbind
releases it, after which cypress_m8 works as
expected. But after re-plugging it gets claimed
by usbhid again.

I understand that it's easy to write an udev rule
(I don't use udev but that's another story) to
unbind the device from the driver and bind it to
another driver automatically. That's basically
what I have for now (handling hidraw* device).
But that seems somewhat... ugly, at best.

The question is: is it possible to tell usbhid
to STOP claiming devices with given vendor:device
identifier, from now on?

I also understand that to do it permanently the
given vendor:device has to be blacklisted in the
driver source. But I don't think it's worth the
effort. Sort of runtime blacklist support --
possible?

Thanks!

/mjt