The unusual_devs guide

Recently I took over maintaining the unusual_devs.h file which is part of the usb-storage driver in the linux kernel. I hope to do more kernel development in the future, but this was a healthy start.

This document was written with corrections and input from Alan Stern. Thanks!

unusual_devs.h is where we list all hardware that is a USB Storage device but somehow needs special attention. This could be because it doesn't claim it's a USB Storage device, it could be because it incorrectly impliments the spec, or because it otherwise has special needs.

How The Entry Looks

A given entry looks like this:
UNUSUAL_DEV(id_vendor, id_product, bcdDeviceMin, bcdDeviceMax, \
               vendorName, productName,useProtocol, useTransport, \
               initFunction, flags) \
And those are:

Protocols are transports and transports aren't... wait, what?

You will note that the entry refers to a "protocol" and a "transport"... but the spec refers to a "SubClass" and a "Protocol".

Intuitively one might match up "protocol" with "protocol," but that would be incorrect.

The SubClassProtocol and the Protocol is the Transport.

So if your kernel tells you there is an unneeded SubClass, you need to check the "protocol" field, but if it tells you there is an unneeded Protocol, you need to check the "transport" field. Confusing, I know.