Annotation of sys/dev/usb/umass_quirks.c, Revision 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