Bueno, mi experiencia en este tema, me dice que casi siempre es culpa del hardware: hay hardware que no soporta funciones, como la del get_max_lun y eso provoca un error y más tarde un cuelgue en el caso de un disco duro mío. También en algunos drivers he visto cosas raras relacionadas a solucionar algun bug en un dispositivo concreto o por ejemplo, yo tengo una pendrive antigua que no va en drivers que no soporten HUB (debe ser que tiene la circuitería de uno)
El tema del lun por lo general no es importante: eso hace referencia a la unidad lógica, puesto que un mismo dispositivo USB, puede tener varias unidades (por ejemplo, un lector de tarjetas). El driver que manejamos nosotros, se parara ante la primera unidad que encuentre, luego podría darse el caso de que en dispositivos que soportan varias unidades lógicas, se quede mirando a una unidad que está presente, pero no operativa.
Teniendo en cuenta que hay muchos dispositivos que no soportan el get_max_lun, porque solo disponen de una unidad lógica y que es posible que en dispositivos que soporten varias, el driver falle salvo que la unidad lógica que nos interese, sea la primera, yo he decidido suprimir la llamada a esa función y suponer siempre que solo hay disponible una unidad lógica. Total, para tener un driver que falla igual con ciertas unidades, prefiero tener un driver que gana en compatibilidad con otras.
Asi pues tenemos tres posibilidades:
1) El dispositivo en cuestión tiene un bug y provoca errores que deberían ser corregidos haciendo una sencuencia específica para ese dispositivo (pues el camino normal, falla).
2) El dispositivo tiene algo que hace que solo funcione en drivers que soportan HUB (no soportado en ehcmodule)
3) El dispositivo requiere un LUN diferente del 0: esto se podría solucionar poniendo el disco duro como master, probablemente (o tal vez necesite estar como esclavo, vete a saber
)
Tambien hay otra cuarta posibilidad, algo más oscura: que por alguna razón, ese dispostivo se identifique como USB 1.1 y claro, eso es manejado por otra vía.
En todo caso, es muy difícil arreglar algo sobre lo que no se pueden hacer pruebas y teniendo un driver incompleto: son cosas que teniendo el dispositivo en cuestión podrían solucionarse en unos minutos, o estar igual de perdido que al principio después de días de pruebas.