xref: /dflybsd-src/share/man/man4/usb_quirk.4 (revision 520083bad76830c65fdd8ba10ed8f2b8f8998522)
1411218d3SSascha Wildner.\"
2411218d3SSascha Wildner.\" Copyright (c) 2010 AnyWi Technologies
3411218d3SSascha Wildner.\" All rights reserved.
4411218d3SSascha Wildner.\"
5411218d3SSascha Wildner.\" Permission to use, copy, modify, and distribute this software for any
6411218d3SSascha Wildner.\" purpose with or without fee is hereby granted, provided that the above
7411218d3SSascha Wildner.\" copyright notice and this permission notice appear in all copies.
8411218d3SSascha Wildner.\"
9411218d3SSascha Wildner.\" THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
10411218d3SSascha Wildner.\" WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
11411218d3SSascha Wildner.\" MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
12411218d3SSascha Wildner.\" ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
13411218d3SSascha Wildner.\" WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
14411218d3SSascha Wildner.\" ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
15411218d3SSascha Wildner.\" OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
16411218d3SSascha Wildner.\"
17*520083baSSascha Wildner.\" $FreeBSD: head/share/man/man4/usb_quirk.4 322695 2017-08-19 17:00:10Z wulf $
18411218d3SSascha Wildner.\"
19*520083baSSascha Wildner.Dd March 16, 2018
20411218d3SSascha Wildner.Dt USB_QUIRK 4
21411218d3SSascha Wildner.Os
22411218d3SSascha Wildner.Sh NAME
23411218d3SSascha Wildner.Nm usb_quirk
24411218d3SSascha Wildner.Nd USB quirks module
25411218d3SSascha Wildner.Sh SYNOPSIS
26411218d3SSascha WildnerTo compile this module into the kernel,
27411218d3SSascha Wildnerplace the following line in your
28411218d3SSascha Wildnerkernel configuration file:
29411218d3SSascha Wildner.Bd -ragged -offset indent
30411218d3SSascha Wildner.Cd "device usb"
31411218d3SSascha Wildner.Ed
32411218d3SSascha Wildner.Pp
33411218d3SSascha WildnerAlternatively, to load the module at boot
34411218d3SSascha Wildnertime, place the following line in
35411218d3SSascha Wildner.Xr loader.conf 5 :
36411218d3SSascha Wildner.Bd -literal -offset indent
37411218d3SSascha Wildnerusb_quirk_load="YES"
38411218d3SSascha Wildner.Ed
39411218d3SSascha Wildner.Sh DESCRIPTION
40411218d3SSascha WildnerThe
41411218d3SSascha Wildner.Nm
42411218d3SSascha Wildnermodule provides support for dynamically adding and removing quirks for
43411218d3SSascha WildnerUSB devices with
44411218d3SSascha Wildner.Xr usbconfig 8 .
45411218d3SSascha Wildner.Sh General quirks:
46411218d3SSascha Wildner.Bl -tag -width Ds
47411218d3SSascha Wildner.It UQ_AUDIO_SWAP_LR
48411218d3SSascha Wildnerswap left and right channels
49411218d3SSascha Wildner.It UQ_AU_INP_ASYNC
50411218d3SSascha Wildnerinput is async despite claim of adaptive
51411218d3SSascha Wildner.It UQ_AU_NO_FRAC
52ff811b0aSSascha Wildnerdo not adjust for fractional samples
53411218d3SSascha Wildner.It UQ_AU_NO_XU
54411218d3SSascha Wildneraudio device has broken extension unit
55*520083baSSascha Wildner.It UQ_AU_VENDOR_CLASS
56*520083baSSascha Wildneraudio device uses vendor class to identify itself
57*520083baSSascha Wildner.It UQ_AU_SET_SPDIF_CM6206
58*520083baSSascha Wildneraudio device needs special programming to enable S/PDIF audio output
59411218d3SSascha Wildner.It UQ_BAD_ADC
60411218d3SSascha Wildnerbad audio spec version number
61411218d3SSascha Wildner.It UQ_BAD_AUDIO
62ff811b0aSSascha Wildnerdevice claims audio class, but is not
63411218d3SSascha Wildner.It UQ_BROKEN_BIDIR
64411218d3SSascha Wildnerprinter has broken bidir mode
65411218d3SSascha Wildner.It UQ_BUS_POWERED
66411218d3SSascha Wildnerdevice is bus powered, despite claim
67411218d3SSascha Wildner.It UQ_HID_IGNORE
68411218d3SSascha Wildnerdevice should be ignored by hid class
69411218d3SSascha Wildner.It UQ_KBD_IGNORE
70411218d3SSascha Wildnerdevice should be ignored by kbd class
71411218d3SSascha Wildner.It UQ_KBD_BOOTPROTO
72411218d3SSascha Wildnerdevice should set the boot protocol
73411218d3SSascha Wildner.It UQ_UMS_IGNORE
74411218d3SSascha Wildnerdevice should be ignored by ums class
75411218d3SSascha Wildner.It UQ_MS_BAD_CLASS
76ff811b0aSSascha Wildnerdoes not identify properly
77411218d3SSascha Wildner.It UQ_MS_LEADING_BYTE
78411218d3SSascha Wildnermouse sends an unknown leading byte
79411218d3SSascha Wildner.It UQ_MS_REVZ
80411218d3SSascha Wildnermouse has Z-axis reversed
81411218d3SSascha Wildner.It UQ_NO_STRINGS
82411218d3SSascha Wildnerstring descriptors are broken
83411218d3SSascha Wildner.It UQ_POWER_CLAIM
84411218d3SSascha Wildnerhub lies about power status
85411218d3SSascha Wildner.It UQ_SPUR_BUT_UP
86411218d3SSascha Wildnerspurious mouse button up events
87411218d3SSascha Wildner.It UQ_SWAP_UNICODE
88411218d3SSascha Wildnerhas some Unicode strings swapped
89411218d3SSascha Wildner.It UQ_CFG_INDEX_1
90411218d3SSascha Wildnerselect configuration index 1 by default
91411218d3SSascha Wildner.It UQ_CFG_INDEX_2
92411218d3SSascha Wildnerselect configuration index 2 by default
93411218d3SSascha Wildner.It UQ_CFG_INDEX_3
94411218d3SSascha Wildnerselect configuration index 3 by default
95411218d3SSascha Wildner.It UQ_CFG_INDEX_4
96411218d3SSascha Wildnerselect configuration index 4 by default
97411218d3SSascha Wildner.It UQ_CFG_INDEX_0
98411218d3SSascha Wildnerselect configuration index 0 by default
99411218d3SSascha Wildner.It UQ_ASSUME_CM_OVER_DATA
100411218d3SSascha Wildnerassume cm over data feature
101*520083baSSascha Wildner.It UQ_WMT_IGNORE
102*520083baSSascha Wildnerdevice should be ignored by wmt driver
103411218d3SSascha Wildner.El
104411218d3SSascha Wildner.Sh USB Mass Storage quirks:
105411218d3SSascha Wildner.Bl -tag -width Ds
106411218d3SSascha Wildner.It UQ_MSC_NO_TEST_UNIT_READY
107411218d3SSascha Wildnersend start/stop instead of TUR
108411218d3SSascha Wildner.It UQ_MSC_NO_RS_CLEAR_UA
109411218d3SSascha Wildnerdoes not reset Unit Att.
110411218d3SSascha Wildner.It UQ_MSC_NO_START_STOP
111411218d3SSascha Wildnerdoes not support start/stop
112411218d3SSascha Wildner.It UQ_MSC_NO_GETMAXLUN
113411218d3SSascha Wildnerdoes not support get max LUN
114411218d3SSascha Wildner.It UQ_MSC_NO_INQUIRY
115411218d3SSascha Wildnerfake generic inq response
116411218d3SSascha Wildner.It UQ_MSC_NO_INQUIRY_EVPD
117411218d3SSascha Wildnerdoes not support inq EVPD
118411218d3SSascha Wildner.It UQ_MSC_NO_SYNC_CACHE
119411218d3SSascha Wildnerdoes not support sync cache
120411218d3SSascha Wildner.It UQ_MSC_SHUTTLE_INIT
121411218d3SSascha Wildnerrequires Shuttle init sequence
122411218d3SSascha Wildner.It UQ_MSC_ALT_IFACE_1
123411218d3SSascha Wildnerswitch to alternate interface 1
124411218d3SSascha Wildner.It UQ_MSC_FLOPPY_SPEED
125411218d3SSascha Wildnerdoes floppy speeds (20kb/s)
126411218d3SSascha Wildner.It UQ_MSC_IGNORE_RESIDUE
127411218d3SSascha Wildnergets residue wrong
128411218d3SSascha Wildner.It UQ_MSC_WRONG_CSWSIG
129411218d3SSascha Wildneruses wrong CSW signature
130411218d3SSascha Wildner.It UQ_MSC_RBC_PAD_TO_12
131411218d3SSascha Wildnerpad RBC requests to 12 bytes
132411218d3SSascha Wildner.It UQ_MSC_READ_CAP_OFFBY1
133411218d3SSascha Wildnerreports sector count, not max sec.
134411218d3SSascha Wildner.It UQ_MSC_FORCE_SHORT_INQ
135411218d3SSascha Wildnerdoes not support full inq.
136411218d3SSascha Wildner.It UQ_MSC_FORCE_WIRE_BBB
137411218d3SSascha Wildnerforce BBB wire protocol
138411218d3SSascha Wildner.It UQ_MSC_FORCE_WIRE_CBI
139411218d3SSascha Wildnerforce CBI wire protocol
140411218d3SSascha Wildner.It UQ_MSC_FORCE_WIRE_CBI_I
141411218d3SSascha Wildnerforce CBI with int. wire protocol
142411218d3SSascha Wildner.It UQ_MSC_FORCE_PROTO_SCSI
143411218d3SSascha Wildnerforce SCSI command protocol
144411218d3SSascha Wildner.It UQ_MSC_FORCE_PROTO_ATAPI
145411218d3SSascha Wildnerforce ATAPI command protocol
146411218d3SSascha Wildner.It UQ_MSC_FORCE_PROTO_UFI
147411218d3SSascha Wildnerforce UFI command protocol
148411218d3SSascha Wildner.It UQ_MSC_FORCE_PROTO_RBC
149411218d3SSascha Wildnerforce RBC command protocol
150411218d3SSascha Wildner.El
151411218d3SSascha Wildner.Sh 3G Datacard (u3g) quirks:
152411218d3SSascha Wildner.Bl -tag -width Ds
153411218d3SSascha Wildner.It UQ_MSC_EJECT_HUAWEI
154411218d3SSascha Wildnerejects after Huawei USB command
155411218d3SSascha Wildner.It UQ_MSC_EJECT_SIERRA
156411218d3SSascha Wildnerejects after Sierra USB command
157411218d3SSascha Wildner.It UQ_MSC_EJECT_SCSIEJECT
158411218d3SSascha Wildnerejects after SCSI eject command
159ff811b0aSSascha Wildner.Dv 0x1b0000000200
160411218d3SSascha Wildner.It UQ_MSC_EJECT_REZERO
161411218d3SSascha Wildnerejects after SCSI rezero command
162ff811b0aSSascha Wildner.Dv 0x010000000000
163411218d3SSascha Wildner.It UQ_MSC_EJECT_ZTESTOR
164411218d3SSascha Wildnerejects after ZTE SCSI command
165ff811b0aSSascha Wildner.Dv 0x850101011801010101010000
166411218d3SSascha Wildner.It UQ_MSC_EJECT_CMOTECH
167411218d3SSascha Wildnerejects after C-motech SCSI command
168ff811b0aSSascha Wildner.Dv 0xff52444556434847
169411218d3SSascha Wildner.It UQ_MSC_EJECT_WAIT
170411218d3SSascha Wildnerwait for the device to eject
171411218d3SSascha Wildner.It UQ_MSC_EJECT_SAEL_M460
172411218d3SSascha Wildnerejects after Sael USB commands
173411218d3SSascha Wildner.It UQ_MSC_EJECT_HUAWEISCSI
174411218d3SSascha Wildnerejects after Huawei SCSI command
175ff811b0aSSascha Wildner.Dv 0x11060000000000000000000000000000
176411218d3SSascha Wildner.It UQ_MSC_EJECT_TCT
177411218d3SSascha Wildnerejects after TCT SCSI command
178ff811b0aSSascha Wildner.Dv 0x06f504025270
179*520083baSSascha Wildner.It UQ_MSC_DYMO_EJECT
180*520083baSSascha Wildnerejects after HID command
181*520083baSSascha Wildner.Dv 0x1b5a01
182411218d3SSascha Wildner.El
183ff811b0aSSascha Wildner.Pp
184411218d3SSascha WildnerSee
185411218d3SSascha Wildner.Pa /sys/dev/usb/quirk/usb_quirk.h
186*520083baSSascha Wildneror run "usbconfig dump_quirk_names" for the complete list of supported quirks.
187*520083baSSascha Wildner.Sh LOADER TUNABLE
188*520083baSSascha WildnerThe following tunable can be set at the
189*520083baSSascha Wildner.Xr loader 8
190*520083baSSascha Wildnerprompt before booting the kernel, or stored in
191*520083baSSascha Wildner.Xr loader.conf 5 .
192*520083baSSascha Wildner.Bl -tag -width indent
193*520083baSSascha Wildner.It Va hw.usb.quirk.%d
194*520083baSSascha WildnerThe value is a string whose format is:
195*520083baSSascha Wildner.Bd -literal -offset indent
196*520083baSSascha Wildner.Qo VendorId ProductId LowRevision HighRevision UQ_QUIRK,... Qc
197*520083baSSascha Wildner.Ed
198*520083baSSascha Wildner.Pp
199*520083baSSascha WildnerInstalls the quirks
200*520083baSSascha Wildner.Ic UQ_QUIRK,...
201*520083baSSascha Wildnerfor all USB devices matching
202*520083baSSascha Wildner.Ic VendorId
203*520083baSSascha Wildnerand
204*520083baSSascha Wildner.Ic ProductId
205*520083baSSascha Wildnerwhich have a hardware revision between and including
206*520083baSSascha Wildner.Ic LowRevision
207*520083baSSascha Wildnerand
208*520083baSSascha Wildner.Ic HighRevision .
209*520083baSSascha Wildner.Pp
210*520083baSSascha Wildner.Ic VendorId ,
211*520083baSSascha Wildner.Ic ProductId ,
212*520083baSSascha Wildner.Ic LowRevision
213*520083baSSascha Wildnerand
214*520083baSSascha Wildner.Ic HighRevision
215*520083baSSascha Wildnerare all 16 bits numbers which can be decimal or hexadecimal based.
216*520083baSSascha Wildner.Pp
217*520083baSSascha WildnerA maximum of 100 variables
218*520083baSSascha Wildner.Ic hw.usb.quirk.0, .1, ..., .99
219*520083baSSascha Wildnercan be defined.
220*520083baSSascha Wildner.Pp
221*520083baSSascha WildnerIf a matching entry is found in the kernel's internal quirks table, it
222*520083baSSascha Wildneris replaced by the new definition.
223*520083baSSascha Wildner.Pp
224*520083baSSascha WildnerElse a new entry is created given that the quirk table is not full.
225*520083baSSascha Wildner.Pp
226*520083baSSascha WildnerThe kernel iterates over the
227*520083baSSascha Wildner.Ic hw.usb.quirk.N
228*520083baSSascha Wildnervariables starting at
229*520083baSSascha Wildner.Ic N = 0
230*520083baSSascha Wildnerand stops at
231*520083baSSascha Wildner.Ic N = 99
232*520083baSSascha Wildneror the first non-existing one.
233*520083baSSascha Wildner.El
234411218d3SSascha Wildner.Sh EXAMPLES
235411218d3SSascha WildnerAfter attaching a
236411218d3SSascha Wildner.Nm u3g
237411218d3SSascha Wildnerdevice which appears as a USB device on
238411218d3SSascha Wildner.Pa ugen0.3 :
239411218d3SSascha Wildner.Bd -literal -offset indent
240411218d3SSascha Wildnerusbconfig -d ugen0.3 add_quirk UQ_MSC_EJECT_WAIT
241411218d3SSascha Wildner.Ed
242*520083baSSascha Wildner.Pp
243*520083baSSascha WildnerEnable a Holtec/Keep Out F85 gaming keyboard on
244*520083baSSascha Wildner.Pa ugen1.4 :
245*520083baSSascha Wildner.Bd -literal -offset indent
246*520083baSSascha Wildnerusbconfig -d ugen1.4 add_quirk UQ_KBD_BOOTPROTO
247*520083baSSascha Wildner.Ed
248*520083baSSascha Wildner.Pp
249*520083baSSascha WildnerTo install a quirk at boot time, place one or several lines like the
250*520083baSSascha Wildnerfollowing in
251*520083baSSascha Wildner.Xr loader.conf 5 :
252*520083baSSascha Wildner.Bd -literal -offset indent
253*520083baSSascha Wildnerhw.usb.quirk.0="0x04d9 0xfa50 0 0xffff UQ_KBD_IGNORE"
254*520083baSSascha Wildner.Ed
255411218d3SSascha Wildner.Sh SEE ALSO
256411218d3SSascha Wildner.Xr usbconfig 8
257411218d3SSascha Wildner.Sh HISTORY
258411218d3SSascha WildnerThe
259411218d3SSascha Wildner.Nm
260411218d3SSascha Wildnermodule appeared in
261411218d3SSascha Wildner.Fx 8.0 ,
262411218d3SSascha Wildnerand was written by
2639e570176SFranco Fichtner.An Hans Petter Selasky Aq Mt hselasky@FreeBSD.org .
264411218d3SSascha WildnerThis manual page was written by
2659e570176SFranco Fichtner.An Nick Hibma Aq Mt n_hibma@FreeBSD.org .
266