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

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

1.1       nbrk        1: /*     $OpenBSD: umass_quirks.c,v 1.29 2007/06/13 10:33:52 mbalmer Exp $       */
                      2: /*     $NetBSD: umass_quirks.c,v 1.67 2004/06/28 07:49:16 mycroft Exp $        */
                      3:
                      4: /*
                      5:  * Copyright (c) 2001 The NetBSD Foundation, Inc.
                      6:  * All rights reserved.
                      7:  *
                      8:  * This code is derived from software contributed to The NetBSD Foundation
                      9:  * by MAEKAWA Masahide (gehenna@NetBSD.org).
                     10:  *
                     11:  * Redistribution and use in source and binary forms, with or without
                     12:  * modification, are permitted provided that the following conditions
                     13:  * are met:
                     14:  * 1. Redistributions of source code must retain the above copyright
                     15:  *    notice, this list of conditions and the following disclaimer.
                     16:  * 2. Redistributions in binary form must reproduce the above copyright
                     17:  *    notice, this list of conditions and the following disclaimer in the
                     18:  *    documentation and/or other materials provided with the distribution.
                     19:  * 3. All advertising materials mentioning features or use of this software
                     20:  *    must display the following acknowledgement:
                     21:  *       This product includes software developed by the NetBSD
                     22:  *       Foundation, Inc. and its contributors.
                     23:  * 4. Neither the name of The NetBSD Foundation nor the names of its
                     24:  *    contributors may be used to endorse or promote products derived
                     25:  *    from this software without specific prior written permission.
                     26:  *
                     27:  * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
                     28:  * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
                     29:  * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
                     30:  * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
                     31:  * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
                     32:  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
                     33:  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
                     34:  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
                     35:  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
                     36:  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
                     37:  * POSSIBILITY OF SUCH DAMAGE.
                     38:  */
                     39:
                     40: #include <sys/param.h>
                     41: #include <sys/systm.h>
                     42: #include <sys/device.h>
                     43: #include <sys/buf.h>
                     44:
                     45: #include <scsi/scsi_all.h>
                     46: #include <scsi/scsiconf.h>
                     47:
                     48: #include <dev/usb/usb.h>
                     49: #include <dev/usb/usbdi.h>
                     50: #include <dev/usb/usbdevs.h>
                     51:
                     52: #include <dev/usb/umassvar.h>
                     53: #include <dev/usb/umass_quirks.h>
                     54:
                     55: usbd_status umass_init_insystem(struct umass_softc *);
                     56: usbd_status umass_init_shuttle(struct umass_softc *);
                     57:
                     58: void umass_fixup_sony(struct umass_softc *);
                     59: void umass_fixup_yedata(struct umass_softc *);
                     60:
                     61: const struct umass_quirk umass_quirks[] = {
                     62:        { { USB_VENDOR_ATI, USB_PRODUCT_ATI2_205 },
                     63:          UMASS_WPROTO_BBB, UMASS_CPROTO_ISD_ATA,
                     64:          0,
                     65:          0,
                     66:          UMATCH_VENDOR_PRODUCT,
                     67:          NULL, NULL
                     68:        },
                     69:
                     70:        { { USB_VENDOR_DMI, USB_PRODUCT_DMI_SA2_0 },
                     71:          UMASS_WPROTO_UNSPEC, UMASS_CPROTO_UNSPEC,
                     72:          0,
                     73:          0,
                     74:          UMATCH_VENDOR_PRODUCT,
                     75:          NULL, NULL
                     76:        },
                     77:
                     78:        { { USB_VENDOR_EASYDISK, USB_PRODUCT_EASYDISK_EASYDISK },
                     79:          UMASS_WPROTO_UNSPEC, UMASS_CPROTO_UNSPEC,
                     80:          0,
                     81:          0,
                     82:          UMATCH_VENDOR_PRODUCT,
                     83:          NULL, NULL
                     84:        },
                     85:
                     86:        { { USB_VENDOR_FUJIPHOTO, USB_PRODUCT_FUJIPHOTO_MASS0100 },
                     87:          UMASS_WPROTO_UNSPEC, UMASS_CPROTO_UNSPEC,
                     88:          0,
                     89:          ADEV_NOSENSE,
                     90:          UMATCH_DEVCLASS_DEVSUBCLASS_DEVPROTO,
                     91:          NULL, NULL
                     92:        },
                     93:
                     94:        { { USB_VENDOR_GENESYS, USB_PRODUCT_GENESYS_GL641USB },
                     95:          UMASS_WPROTO_UNSPEC, UMASS_CPROTO_UNSPEC,
                     96:          0,
                     97:          0,
                     98:          UMATCH_DEVCLASS_DEVSUBCLASS_DEVPROTO,
                     99:          NULL, NULL
                    100:        },
                    101:
                    102:        { { USB_VENDOR_HP, USB_PRODUCT_HP_CDWRITERPLUS },
                    103:          UMASS_WPROTO_CBI, UMASS_CPROTO_ATAPI,
                    104:          0,
                    105:          ADEV_NOSENSE,
                    106:          UMATCH_VENDOR_PRODUCT,
                    107:          NULL, NULL
                    108:        },
                    109:
                    110:        { { USB_VENDOR_IMATION, USB_PRODUCT_IMATION_FLASHGO },
                    111:          UMASS_WPROTO_UNSPEC, UMASS_CPROTO_UNSPEC,
                    112:          0,
                    113:          0,
                    114:          UMATCH_DEVCLASS_DEVSUBCLASS_DEVPROTO,
                    115:          NULL, NULL
                    116:        },
                    117:
                    118:        { { USB_VENDOR_INSYSTEM, USB_PRODUCT_INSYSTEM_ADAPTERV2 },
                    119:          UMASS_WPROTO_BBB, UMASS_CPROTO_ISD_ATA,
                    120:          0,
                    121:          0,
                    122:          UMATCH_VENDOR_PRODUCT,
                    123:          NULL, NULL
                    124:        },
                    125:        { { USB_VENDOR_INSYSTEM, USB_PRODUCT_INSYSTEM_ATAPI },
                    126:          UMASS_WPROTO_BBB, UMASS_CPROTO_ISD_ATA,
                    127:          0,
                    128:          0,
                    129:          UMATCH_VENDOR_PRODUCT,
                    130:          NULL, NULL
                    131:        },
                    132:        { { USB_VENDOR_INSYSTEM, USB_PRODUCT_INSYSTEM_DRIVEV2_5 },
                    133:          UMASS_WPROTO_BBB, UMASS_CPROTO_ISD_ATA,
                    134:          0,
                    135:          0,
                    136:          UMATCH_VENDOR_PRODUCT,
                    137:          NULL, NULL
                    138:        },
                    139:
                    140:        { { USB_VENDOR_INSYSTEM, USB_PRODUCT_INSYSTEM_IDEUSB2 },
                    141:          UMASS_WPROTO_UNSPEC, UMASS_CPROTO_UNSPEC,
                    142:          0,
                    143:          0,
                    144:          UMATCH_VENDOR_PRODUCT,
                    145:          NULL, NULL
                    146:        },
                    147:
                    148:        { { USB_VENDOR_INSYSTEM, USB_PRODUCT_INSYSTEM_USBCABLE },
                    149:          UMASS_WPROTO_CBI, UMASS_CPROTO_ATAPI,
                    150:          0,
                    151:          0,
                    152:          UMATCH_VENDOR_PRODUCT,
                    153:          umass_init_insystem, NULL
                    154:        },
                    155:
                    156:        { { USB_VENDOR_IODATA2, USB_PRODUCT_IODATA2_USB2SC },
                    157:          UMASS_WPROTO_UNSPEC, UMASS_CPROTO_UNSPEC,
                    158:          0,
                    159:          0,
                    160:          UMATCH_VENDOR_PRODUCT,
                    161:          NULL, NULL
                    162:        },
                    163:
                    164:        { { USB_VENDOR_IOMEGA, USB_PRODUCT_IOMEGA_ZIP100 },
                    165:          UMASS_WPROTO_UNSPEC, UMASS_CPROTO_UNSPEC,
                    166:          0,
                    167:          0,
                    168:          UMATCH_DEVCLASS_DEVSUBCLASS_DEVPROTO,
                    169:          NULL, NULL
                    170:        },
                    171:
                    172:        { { USB_VENDOR_IOMEGA, USB_PRODUCT_IOMEGA_ZIP250 },
                    173:          UMASS_WPROTO_UNSPEC, UMASS_CPROTO_UNSPEC,
                    174:          0,
                    175:          0,
                    176:          UMATCH_DEVCLASS_DEVSUBCLASS_DEVPROTO,
                    177:          NULL, NULL
                    178:        },
                    179:
                    180:        { { USB_VENDOR_IOMEGA, USB_PRODUCT_IOMEGA_ZIP250_2 },
                    181:          UMASS_WPROTO_UNSPEC, UMASS_CPROTO_UNSPEC,
                    182:          0,
                    183:          0,
                    184:          UMATCH_DEVCLASS_DEVSUBCLASS_DEVPROTO,
                    185:          NULL, NULL
                    186:        },
                    187:
                    188:        { { USB_VENDOR_IRIVER, USB_PRODUCT_IRIVER_IFP_1XX },
                    189:          UMASS_WPROTO_UNSPEC, UMASS_CPROTO_UNSPEC,
                    190:          0,
                    191:          SDEV_ONLYBIG,
                    192:          UMATCH_VENDOR_PRODUCT,
                    193:          NULL, NULL
                    194:        },
                    195:
                    196:        { { USB_VENDOR_IRIVER, USB_PRODUCT_IRIVER_IFP_3XX },
                    197:          UMASS_WPROTO_UNSPEC, UMASS_CPROTO_UNSPEC,
                    198:          0,
                    199:          0,
                    200:          UMATCH_VENDOR_PRODUCT,
                    201:          NULL, NULL
                    202:        },
                    203:
                    204:        { { USB_VENDOR_MELCO, USB_PRODUCT_MELCO_DUBPXXG },
                    205:          UMASS_WPROTO_UNSPEC, UMASS_CPROTO_UNSPEC,
                    206:          0,
                    207:          0,
                    208:          UMATCH_DEVCLASS_DEVSUBCLASS_DEVPROTO,
                    209:          NULL, NULL
                    210:        },
                    211:
                    212:        { { USB_VENDOR_MICROTECH, USB_PRODUCT_MICROTECH_DPCM },
                    213:          UMASS_WPROTO_CBI, UMASS_CPROTO_ATAPI,
                    214:          0,
                    215:          0,
                    216:          UMATCH_VENDOR_PRODUCT,
                    217:          NULL, NULL
                    218:        },
                    219:
                    220:        { { USB_VENDOR_MINOLTA, USB_PRODUCT_MINOLTA_S304 },
                    221:          UMASS_WPROTO_UNSPEC, UMASS_CPROTO_UNSPEC,
                    222:          0,
                    223:          0,
                    224:          UMATCH_DEVCLASS_DEVSUBCLASS_DEVPROTO,
                    225:          NULL, NULL
                    226:        },
                    227:
                    228:        { { USB_VENDOR_MINOLTA, USB_PRODUCT_MINOLTA_X },
                    229:          UMASS_WPROTO_UNSPEC, UMASS_CPROTO_UNSPEC,
                    230:          0,
                    231:          0,
                    232:          UMATCH_DEVCLASS_DEVSUBCLASS_DEVPROTO,
                    233:          NULL, NULL
                    234:        },
                    235:
                    236:        { { USB_VENDOR_MINOLTA, USB_PRODUCT_MINOLTA_DIMAGEA1 },
                    237:          UMASS_WPROTO_UNSPEC, UMASS_CPROTO_UNSPEC,
                    238:          0,
                    239:          0,
                    240:          UMATCH_DEVCLASS_DEVSUBCLASS_DEVPROTO,
                    241:          NULL, NULL
                    242:        },
                    243:
                    244:        { { USB_VENDOR_MSYSTEMS, USB_PRODUCT_MSYSTEMS_DISKONKEY },
                    245:          UMASS_WPROTO_UNSPEC, UMASS_CPROTO_UNSPEC,
                    246:          0,
                    247:          0,
                    248:          UMATCH_DEVCLASS_DEVSUBCLASS_DEVPROTO,
                    249:          NULL, NULL
                    250:        },
                    251:
                    252:        { { USB_VENDOR_MSYSTEMS, USB_PRODUCT_MSYSTEMS_DISKONKEY2 },
                    253:          UMASS_WPROTO_UNSPEC, UMASS_CPROTO_ATAPI,
                    254:          0,
                    255:          0,
                    256:          UMATCH_DEVCLASS_DEVSUBCLASS_DEVPROTO,
                    257:          NULL, NULL
                    258:        },
                    259:
                    260:        { { USB_VENDOR_NEODIO, USB_PRODUCT_NEODIO_ND3050 },
                    261:          UMASS_WPROTO_UNSPEC, UMASS_CPROTO_UNSPEC,
                    262:          0,
                    263:          0,
                    264:          UMATCH_VENDOR_PRODUCT,
                    265:          NULL, NULL
                    266:        },
                    267:
                    268:        { { USB_VENDOR_NEODIO, USB_PRODUCT_NEODIO_ND5010 },
                    269:          UMASS_WPROTO_UNSPEC, UMASS_CPROTO_UNSPEC,
                    270:          0,
                    271:          0,
                    272:          UMATCH_VENDOR_PRODUCT,
                    273:          NULL, NULL
                    274:        },
                    275:
                    276:        { { USB_VENDOR_OLYMPUS, USB_PRODUCT_OLYMPUS_C1 },
                    277:          UMASS_WPROTO_UNSPEC, UMASS_CPROTO_UNSPEC,
                    278:          UMASS_QUIRK_WRONG_CSWSIG,
                    279:          0,
                    280:          UMATCH_DEVCLASS_DEVSUBCLASS_DEVPROTO,
                    281:          NULL, NULL
                    282:        },
                    283:
                    284:        { { USB_VENDOR_OLYMPUS, USB_PRODUCT_OLYMPUS_C700 },
                    285:          UMASS_WPROTO_UNSPEC, UMASS_CPROTO_UNSPEC,
                    286:          0,
                    287:          SDEV_ONLYBIG | SDEV_NOSYNCCACHE,
                    288:          UMATCH_DEVCLASS_DEVSUBCLASS_DEVPROTO,
                    289:          NULL, NULL
                    290:        },
                    291:
                    292:        { { USB_VENDOR_ONSPEC, USB_PRODUCT_ONSPEC_MD1II },
                    293:          UMASS_WPROTO_UNSPEC, UMASS_CPROTO_UNSPEC,
                    294:          0,
                    295:          0,
                    296:          UMATCH_DEVCLASS_DEVSUBCLASS_DEVPROTO,
                    297:          NULL, NULL
                    298:        },
                    299:
                    300:        { { USB_VENDOR_ONSPEC, USB_PRODUCT_ONSPEC_MD2 },
                    301:          UMASS_WPROTO_UNSPEC, UMASS_CPROTO_UNSPEC,
                    302:          0,
                    303:          0,
                    304:          UMATCH_DEVCLASS_DEVSUBCLASS_DEVPROTO,
                    305:          NULL, NULL
                    306:        },
                    307:
                    308:        { { USB_VENDOR_OTI, USB_PRODUCT_OTI_SOLID },
                    309:          UMASS_WPROTO_UNSPEC, UMASS_CPROTO_UNSPEC,
                    310:          0,
                    311:          0,
                    312:          UMATCH_VENDOR_PRODUCT,
                    313:          NULL, NULL
                    314:        },
                    315:
                    316:        { { USB_VENDOR_PEN, USB_PRODUCT_PEN_MOBILEDRIVE },
                    317:          UMASS_WPROTO_UNSPEC, UMASS_CPROTO_UNSPEC,
                    318:          0,
                    319:          0,
                    320:          UMATCH_DEVCLASS_DEVSUBCLASS_DEVPROTO,
                    321:          NULL, NULL
                    322:        },
                    323:
                    324:        { { USB_VENDOR_PEN, USB_PRODUCT_PEN_USBDISK },
                    325:          UMASS_WPROTO_UNSPEC, UMASS_CPROTO_UNSPEC,
                    326:          0,
                    327:          0,
                    328:          UMATCH_DEVCLASS_DEVSUBCLASS_DEVPROTO,
                    329:          NULL, NULL
                    330:        },
                    331:
                    332:        { { USB_VENDOR_PEN, USB_PRODUCT_PEN_USBREADER },
                    333:          UMASS_WPROTO_UNSPEC, UMASS_CPROTO_UNSPEC,
                    334:          0,
                    335:          0,
                    336:          UMATCH_DEVCLASS_DEVSUBCLASS_DEVPROTO,
                    337:          NULL, NULL
                    338:        },
                    339:
                    340:        { { USB_VENDOR_PILOTECH, USB_PRODUCT_PILOTECH_CRW600 },
                    341:          UMASS_WPROTO_UNSPEC, UMASS_CPROTO_UNSPEC,
                    342:          0,
                    343:          0,
                    344:          UMATCH_VENDOR_PRODUCT,
                    345:          NULL, NULL
                    346:        },
                    347:
                    348:        { { USB_VENDOR_PQI, USB_PRODUCT_PQI_TRAVELFLASH },
                    349:          UMASS_WPROTO_UNSPEC, UMASS_CPROTO_UNSPEC,
                    350:          0,
                    351:          0,
                    352:          UMATCH_VENDOR_PRODUCT,
                    353:          NULL, NULL
                    354:        },
                    355:
                    356:        { { USB_VENDOR_SCANLOGIC, USB_PRODUCT_SCANLOGIC_SL11R },
                    357:          UMASS_WPROTO_UNSPEC, UMASS_CPROTO_UNSPEC,
                    358:          UMASS_QUIRK_WRONG_CSWTAG,
                    359:          0,
                    360:          UMATCH_VENDOR_PRODUCT,
                    361:          NULL, NULL
                    362:        },
                    363:
                    364:        { { USB_VENDOR_SHUTTLE, USB_PRODUCT_SHUTTLE_EUSB },
                    365:          UMASS_WPROTO_CBI_I, UMASS_CPROTO_ATAPI,
                    366:          0,
                    367:          ADEV_NOSENSE,
                    368:          UMATCH_VENDOR_PRODUCT,
                    369:          umass_init_shuttle, NULL
                    370:        },
                    371:
                    372:        { { USB_VENDOR_SHUTTLE, USB_PRODUCT_SHUTTLE_ZIOMMC },
                    373:          UMASS_WPROTO_CBI_I, UMASS_CPROTO_ATAPI,
                    374:          0,
                    375:          0,
                    376:          UMATCH_VENDOR_PRODUCT,
                    377:          NULL, NULL
                    378:        },
                    379:
                    380:        { { USB_VENDOR_SIIG, USB_PRODUCT_SIIG_MULTICARDREADER },
                    381:          UMASS_WPROTO_UNSPEC, UMASS_CPROTO_UNSPEC,
                    382:          0,
                    383:          0,
                    384:          UMATCH_DEVCLASS_DEVSUBCLASS_DEVPROTO,
                    385:          NULL,NULL
                    386:        },
                    387:
                    388:        { { USB_VENDOR_SONY, USB_PRODUCT_SONY_DRIVEV2 },
                    389:          UMASS_WPROTO_BBB, UMASS_CPROTO_ISD_ATA,
                    390:          0,
                    391:          0,
                    392:          UMATCH_VENDOR_PRODUCT,
                    393:          NULL, NULL
                    394:        },
                    395:
                    396:        { { USB_VENDOR_SONY, USB_PRODUCT_SONY_DSC },
                    397:          UMASS_WPROTO_UNSPEC, UMASS_CPROTO_UNSPEC,
                    398:          0,
                    399:          0,
                    400:          UMATCH_DEVCLASS_DEVSUBCLASS_DEVPROTO,
                    401:          NULL, umass_fixup_sony
                    402:        },
                    403:
                    404:        { { USB_VENDOR_SONY, USB_PRODUCT_SONY_MSC },
                    405:          UMASS_WPROTO_CBI, UMASS_CPROTO_UFI,
                    406:          0,
                    407:          0,
                    408:          UMATCH_DEVCLASS_DEVSUBCLASS_DEVPROTO,
                    409:          NULL, NULL
                    410:        },
                    411:
                    412:        { { USB_VENDOR_TEAC, USB_PRODUCT_TEAC_FD05PUB },
                    413:          UMASS_WPROTO_UNSPEC, UMASS_CPROTO_UNSPEC,
                    414:          0,
                    415:          0,
                    416:          UMATCH_DEVCLASS_DEVSUBCLASS_DEVPROTO,
                    417:          NULL, NULL
                    418:        },
                    419:
                    420:        { { USB_VENDOR_TREK, USB_PRODUCT_TREK_THUMBDRIVE_8MB },
                    421:          UMASS_WPROTO_UNSPEC, UMASS_CPROTO_UNSPEC,
                    422:          0,
                    423:          0,
                    424:          UMATCH_DEVCLASS_DEVSUBCLASS_DEVPROTO,
                    425:          NULL, NULL
                    426:        },
                    427:
                    428:        { { USB_VENDOR_TRUMPION, USB_PRODUCT_TRUMPION_XXX1100 },
                    429:          UMASS_WPROTO_CBI, UMASS_CPROTO_ATAPI,
                    430:          0,
                    431:          0,
                    432:          UMATCH_VENDOR_PRODUCT,
                    433:          NULL, NULL
                    434:        },
                    435:
                    436:        { { USB_VENDOR_YANO, USB_PRODUCT_YANO_U640MO },
                    437:          UMASS_WPROTO_CBI_I, UMASS_CPROTO_ATAPI,
                    438:          0,
                    439:          0,
                    440:          UMATCH_VENDOR_PRODUCT,
                    441:          NULL, NULL
                    442:        },
                    443:
                    444:        { { USB_VENDOR_YEDATA, USB_PRODUCT_YEDATA_FLASHBUSTERU },
                    445:          UMASS_WPROTO_UNSPEC, UMASS_CPROTO_UFI,
                    446:          0,
                    447:          0,
                    448:          UMATCH_VENDOR_PRODUCT_REV,
                    449:          NULL, umass_fixup_yedata
                    450:        },
                    451:
                    452:        { { USB_VENDOR_SIGMATEL, USB_PRODUCT_SIGMATEL_DNSSF7X},
                    453:         UMASS_WPROTO_UNSPEC, UMASS_CPROTO_UNSPEC,
                    454:         0,
                    455:         SDEV_NOSYNCCACHE,
                    456:         UMATCH_VENDOR_PRODUCT,
                    457:         NULL, NULL
                    458:        },
                    459:
                    460:        { { USB_VENDOR_CREATIVE, USB_PRODUCT_CREATIVE_NOMAD},
                    461:         UMASS_WPROTO_UNSPEC, UMASS_CPROTO_UNSPEC,
                    462:         0,
                    463:         SDEV_NOSYNCCACHE,
                    464:         UMATCH_VENDOR_PRODUCT,
                    465:         NULL, NULL
                    466:        },
                    467: };
                    468:
                    469: const struct umass_quirk *
                    470: umass_lookup(u_int16_t vendor, u_int16_t product)
                    471: {
                    472:        return ((const struct umass_quirk *)
                    473:                usb_lookup(umass_quirks, vendor, product));
                    474: }
                    475:
                    476: usbd_status
                    477: umass_init_insystem(struct umass_softc *sc)
                    478: {
                    479:        usbd_status err;
                    480:
                    481:        err = usbd_set_interface(sc->sc_iface, 1);
                    482:        if (err) {
                    483:                DPRINTF(UDMASS_USB,
                    484:                        ("%s: could not switch to Alt Interface 1\n",
                    485:                        sc->sc_dev.dv_xname));
                    486:                return (err);
                    487:        }
                    488:
                    489:        return (USBD_NORMAL_COMPLETION);
                    490: }
                    491:
                    492: usbd_status
                    493: umass_init_shuttle(struct umass_softc *sc)
                    494: {
                    495:        usb_device_request_t req;
                    496:        u_int8_t status[2];
                    497:
                    498:        /* The Linux driver does this */
                    499:        req.bmRequestType = UT_READ_VENDOR_DEVICE;
                    500:        req.bRequest = 1;
                    501:        USETW(req.wValue, 0);
                    502:        USETW(req.wIndex, sc->sc_ifaceno);
                    503:        USETW(req.wLength, sizeof(status));
                    504:
                    505:        return (usbd_do_request(sc->sc_udev, &req, &status));
                    506: }
                    507:
                    508: void
                    509: umass_fixup_sony(struct umass_softc *sc)
                    510: {
                    511:        usb_interface_descriptor_t *id;
                    512:        usb_device_descriptor_t *dd;
                    513:
                    514:        id = usbd_get_interface_descriptor(sc->sc_iface);
                    515:        if (id->bInterfaceSubClass == 0xff) {
                    516:                dd = usbd_get_device_descriptor(sc->sc_udev);
                    517:                /*
                    518:                 * Many Sony DSC cameras share the same product ID, so the
                    519:                 * revision number is used to distinguish between them.
                    520:                 */
                    521:                switch (UGETW(dd->bcdDevice)) {
                    522:                case 0x611: /* Sony DSC-T10, rev 6.11 */
                    523:                case 0x600: /* Sony DSC-W50, rev 6.00 */
                    524:                case 0x500: /* Sony DSC-P41, rev 5.00 */
                    525:                        sc->sc_cmd = UMASS_CPROTO_UFI;
                    526:                        break;
                    527:                default:
                    528:                        sc->sc_cmd = UMASS_CPROTO_SCSI;
                    529:                }
                    530:        }
                    531: }
                    532:
                    533: void
                    534: umass_fixup_yedata(struct umass_softc *sc)
                    535: {
                    536:        usb_device_descriptor_t *dd;
                    537:
                    538:        dd = usbd_get_device_descriptor(sc->sc_udev);
                    539:
                    540:        /*
                    541:         * Revisions < 1.28 do not handle the interrupt endpoint very well.
                    542:         */
                    543:        if (UGETW(dd->bcdDevice) < 0x128)
                    544:                sc->sc_wire = UMASS_WPROTO_CBI;
                    545:        else
                    546:                sc->sc_wire = UMASS_WPROTO_CBI_I;
                    547: }

CVSweb