[BACK]Return to usb_quirks.c CVS log [TXT][DIR] Up to [local] / sys / dev / usb

Annotation of sys/dev/usb/usb_quirks.c, Revision 1.1.1.1

1.1       nbrk        1: /*     $OpenBSD: usb_quirks.c,v 1.29 2007/06/05 08:43:56 mbalmer Exp $ */
                      2: /*     $NetBSD: usb_quirks.c,v 1.45 2003/05/10 17:47:14 hamajima Exp $ */
                      3: /*     $FreeBSD: src/sys/dev/usb/usb_quirks.c,v 1.30 2003/01/02 04:15:55 imp Exp $     */
                      4:
                      5: /*
                      6:  * Copyright (c) 1998 The NetBSD Foundation, Inc.
                      7:  * All rights reserved.
                      8:  *
                      9:  * This code is derived from software contributed to The NetBSD Foundation
                     10:  * by Lennart Augustsson (lennart@augustsson.net) at
                     11:  * Carlstedt Research & Technology.
                     12:  *
                     13:  * Redistribution and use in source and binary forms, with or without
                     14:  * modification, are permitted provided that the following conditions
                     15:  * are met:
                     16:  * 1. Redistributions of source code must retain the above copyright
                     17:  *    notice, this list of conditions and the following disclaimer.
                     18:  * 2. Redistributions in binary form must reproduce the above copyright
                     19:  *    notice, this list of conditions and the following disclaimer in the
                     20:  *    documentation and/or other materials provided with the distribution.
                     21:  * 3. All advertising materials mentioning features or use of this software
                     22:  *    must display the following acknowledgement:
                     23:  *        This product includes software developed by the NetBSD
                     24:  *        Foundation, Inc. and its contributors.
                     25:  * 4. Neither the name of The NetBSD Foundation nor the names of its
                     26:  *    contributors may be used to endorse or promote products derived
                     27:  *    from this software without specific prior written permission.
                     28:  *
                     29:  * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
                     30:  * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
                     31:  * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
                     32:  * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
                     33:  * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
                     34:  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
                     35:  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
                     36:  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
                     37:  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
                     38:  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
                     39:  * POSSIBILITY OF SUCH DAMAGE.
                     40:  */
                     41:
                     42: #include <sys/param.h>
                     43: #include <sys/systm.h>
                     44:
                     45: #include <dev/usb/usb.h>
                     46:
                     47: #include <dev/usb/usbdevs.h>
                     48: #include <dev/usb/usb_quirks.h>
                     49:
                     50: #ifdef USB_DEBUG
                     51: extern int usbdebug;
                     52: #endif
                     53:
                     54: #define ANY 0xffff
                     55:
                     56: const struct usbd_quirk_entry {
                     57:        u_int16_t idVendor;
                     58:        u_int16_t idProduct;
                     59:        u_int16_t bcdDevice;
                     60:        struct usbd_quirks quirks;
                     61: } usb_quirks[] = {
                     62:  { USB_VENDOR_KYE, USB_PRODUCT_KYE_NICHE,          0x100, { UQ_NO_SET_PROTO}},
                     63:  { USB_VENDOR_INSIDEOUT, USB_PRODUCT_INSIDEOUT_EDGEPORT4,
                     64:                                                    0x094, { UQ_SWAP_UNICODE}},
                     65:  { USB_VENDOR_DALLAS, USB_PRODUCT_DALLAS_J6502,            0x0a2, { UQ_BAD_ADC }},
                     66:  { USB_VENDOR_DALLAS, USB_PRODUCT_DALLAS_J6502,            0x0a2, { UQ_AU_NO_XU }},
                     67:  { USB_VENDOR_ALTEC, USB_PRODUCT_ALTEC_ADA70,      0x103, { UQ_BAD_ADC }},
                     68:  { USB_VENDOR_ALTEC, USB_PRODUCT_ALTEC_ASC495,      0x000, { UQ_BAD_AUDIO }},
                     69:  { USB_VENDOR_LOGITECH, USB_PRODUCT_LOGITECH_QUICKCAMDLXNB,
                     70:        0x100, { UQ_BAD_AUDIO }},
                     71:  { USB_VENDOR_LOGITECH, USB_PRODUCT_LOGITECH_QUICKCAMPRONB,
                     72:        0x000, { UQ_BAD_AUDIO }},
                     73:  { USB_VENDOR_LOGITECH, USB_PRODUCT_LOGITECH_QUICKCAMPRO4K,
                     74:        0x000, { UQ_BAD_AUDIO }},
                     75:  { USB_VENDOR_LOGITECH, USB_PRODUCT_LOGITECH_QUICKCAMZOOM,
                     76:        0x000, { UQ_BAD_AUDIO }},
                     77:  { USB_VENDOR_QTRONIX, USB_PRODUCT_QTRONIX_980N,    0x110, { UQ_SPUR_BUT_UP }},
                     78:  { USB_VENDOR_ALCOR2, USB_PRODUCT_ALCOR2_KBD_HUB,   0x001, { UQ_SPUR_BUT_UP }},
                     79:  { USB_VENDOR_MCT, USB_PRODUCT_MCT_HUB0100,         0x102, { UQ_BUS_POWERED }},
                     80:  { USB_VENDOR_MCT, USB_PRODUCT_MCT_USB232,          0x102, { UQ_BUS_POWERED }},
                     81:  { USB_VENDOR_METRICOM, USB_PRODUCT_METRICOM_RICOCHET_GS,
                     82:        0x100, { UQ_ASSUME_CM_OVER_DATA }},
                     83:  { USB_VENDOR_SANYO, USB_PRODUCT_SANYO_SCP4900,
                     84:        0x000, { UQ_ASSUME_CM_OVER_DATA }},
                     85:  { USB_VENDOR_MOTOROLA2, USB_PRODUCT_MOTOROLA2_T720C,
                     86:        0x001, { UQ_ASSUME_CM_OVER_DATA }},
                     87:  { USB_VENDOR_EICON, USB_PRODUCT_EICON_DIVA852,
                     88:        0x100, { UQ_ASSUME_CM_OVER_DATA }},
                     89:  /* YAMAHA router's ucdDevice is the version of farmware and often changes. */
                     90:  { USB_VENDOR_YAMAHA, USB_PRODUCT_YAMAHA_RTA54I,
                     91:        ANY, { UQ_ASSUME_CM_OVER_DATA }},
                     92:  { USB_VENDOR_YAMAHA, USB_PRODUCT_YAMAHA_RTA55I,
                     93:        ANY, { UQ_ASSUME_CM_OVER_DATA }},
                     94:  { USB_VENDOR_YAMAHA, USB_PRODUCT_YAMAHA_RTW65B,
                     95:        ANY, { UQ_ASSUME_CM_OVER_DATA }},
                     96:  { USB_VENDOR_YAMAHA, USB_PRODUCT_YAMAHA_RTW65I,
                     97:        ANY, { UQ_ASSUME_CM_OVER_DATA }},
                     98:  { USB_VENDOR_QUALCOMM, USB_PRODUCT_QUALCOMM_MSM_MODEM,
                     99:        ANY, { UQ_ASSUME_CM_OVER_DATA }},
                    100:  { USB_VENDOR_QUALCOMM2, USB_PRODUCT_QUALCOMM2_MSM_PHONE,
                    101:        ANY, { UQ_ASSUME_CM_OVER_DATA }},
                    102:  { USB_VENDOR_SUNTAC, USB_PRODUCT_SUNTAC_AS64LX,
                    103:        0x100, { UQ_ASSUME_CM_OVER_DATA }},
                    104:  { USB_VENDOR_CMOTECH, USB_PRODUCT_CMOTECH_CM5100P,
                    105:        ANY, { UQ_ASSUME_CM_OVER_DATA }},
                    106:  { USB_VENDOR_SIEMENS2, USB_PRODUCT_SIEMENS2_ES75,
                    107:        ANY, { UQ_ASSUME_CM_OVER_DATA }},
                    108:
                    109:  { USB_VENDOR_TI, USB_PRODUCT_TI_UTUSB41,          0x110, { UQ_POWER_CLAIM }},
                    110:  { USB_VENDOR_TELEX, USB_PRODUCT_TELEX_MIC1,       0x009, { UQ_AU_NO_FRAC }},
                    111:  { USB_VENDOR_SILICONPORTALS, USB_PRODUCT_SILICONPORTALS_YAPPHONE,
                    112:                                                    0x100, { UQ_AU_INP_ASYNC }},
                    113:  { USB_VENDOR_AVANCELOGIC, USB_PRODUCT_AVANCELOGIC_USBAUDIO,
                    114:                                                    0x101, { UQ_AU_INP_ASYNC }},
                    115:  { USB_VENDOR_PLANTRONICS, USB_PRODUCT_PLANTRONICS_HEADSET,
                    116:                                                    0x004, { UQ_AU_INP_ASYNC }},
                    117:  /* XXX These should have a revision number, but I don't know what they are. */
                    118:  { USB_VENDOR_HP, USB_PRODUCT_HP_895C,             ANY,   { UQ_BROKEN_BIDIR }},
                    119:  { USB_VENDOR_HP, USB_PRODUCT_HP_880C,             ANY,   { UQ_BROKEN_BIDIR }},
                    120:  { USB_VENDOR_HP, USB_PRODUCT_HP_815C,             ANY,   { UQ_BROKEN_BIDIR }},
                    121:  { USB_VENDOR_HP, USB_PRODUCT_HP_810C,             ANY,   { UQ_BROKEN_BIDIR }},
                    122:  { USB_VENDOR_HP, USB_PRODUCT_HP_830C,             ANY,   { UQ_BROKEN_BIDIR }},
                    123:  { USB_VENDOR_HP, USB_PRODUCT_HP_885C,             ANY,   { UQ_BROKEN_BIDIR }},
                    124:  { USB_VENDOR_HP, USB_PRODUCT_HP_840C,             ANY,   { UQ_BROKEN_BIDIR }},
                    125:  { USB_VENDOR_HP, USB_PRODUCT_HP_816C,             ANY,   { UQ_BROKEN_BIDIR }},
                    126:  { USB_VENDOR_HP, USB_PRODUCT_HP_959C,             ANY,   { UQ_BROKEN_BIDIR }},
                    127:  { USB_VENDOR_HP, USB_PRODUCT_HP_1220C,                    ANY,   { UQ_BROKEN_BIDIR }},
                    128:  { USB_VENDOR_NEC, USB_PRODUCT_NEC_PICTY900,       ANY,   { UQ_BROKEN_BIDIR }},
                    129:  { USB_VENDOR_NEC, USB_PRODUCT_NEC_PICTY760,       ANY,   { UQ_BROKEN_BIDIR }},
                    130:  { USB_VENDOR_NEC, USB_PRODUCT_NEC_PICTY920,       ANY,   { UQ_BROKEN_BIDIR }},
                    131:  { USB_VENDOR_NEC, USB_PRODUCT_NEC_PICTY800,       ANY,   { UQ_BROKEN_BIDIR }},
                    132:  { USB_VENDOR_METAGEEK, USB_PRODUCT_METAGEEK_WISPY, ANY,   { UQ_BAD_HID }},
                    133:  { USB_VENDOR_TENX, USB_PRODUCT_TENX_MISSILE,      ANY,   { UQ_BAD_HID }},
                    134:  { USB_VENDOR_APC, USB_PRODUCT_APC_UPSPRO500,      ANY,   { UQ_BAD_HID }},
                    135:  { USB_VENDOR_BELKIN, USB_PRODUCT_BELKIN_F6C550AVR, ANY,   { UQ_BAD_HID }},
                    136:  { USB_VENDOR_MGE, USB_PRODUCT_MGE_UPS1,           ANY,   { UQ_BAD_HID }},
                    137:  { USB_VENDOR_MGE, USB_PRODUCT_MGE_UPS2,           ANY,   { UQ_BAD_HID }},
                    138:  { 0, 0, 0, { 0 } }
                    139: };
                    140:
                    141: const struct usbd_quirks usbd_no_quirk = { 0 };
                    142:
                    143: const struct usbd_quirks *
                    144: usbd_find_quirk(usb_device_descriptor_t *d)
                    145: {
                    146:        const struct usbd_quirk_entry *t;
                    147:        u_int16_t vendor = UGETW(d->idVendor);
                    148:        u_int16_t product = UGETW(d->idProduct);
                    149:        u_int16_t revision = UGETW(d->bcdDevice);
                    150:
                    151:        for (t = usb_quirks; t->idVendor != 0; t++) {
                    152:                if (t->idVendor  == vendor &&
                    153:                    t->idProduct == product &&
                    154:                    (t->bcdDevice == ANY || t->bcdDevice == revision))
                    155:                        break;
                    156:        }
                    157: #ifdef USB_DEBUG
                    158:        if (usbdebug && t->quirks.uq_flags)
                    159:                printf("usbd_find_quirk 0x%04x/0x%04x/%x: %d\n",
                    160:                          UGETW(d->idVendor), UGETW(d->idProduct),
                    161:                          UGETW(d->bcdDevice), t->quirks.uq_flags);
                    162: #endif
                    163:        return (&t->quirks);
                    164: }

CVSweb