Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
at v2.6.12 89 lines 2.3 kB view raw
1/* Driver for Microtech DPCM-USB CompactFlash/SmartMedia reader 2 * 3 * $Id: dpcm.c,v 1.4 2001/06/11 02:54:25 mdharm Exp $ 4 * 5 * DPCM driver v0.1: 6 * 7 * First release 8 * 9 * Current development and maintenance by: 10 * (c) 2000 Brian Webb (webbb@earthlink.net) 11 * 12 * This device contains both a CompactFlash card reader, which 13 * uses the Control/Bulk w/o Interrupt protocol and 14 * a SmartMedia card reader that uses the same protocol 15 * as the SDDR09. 16 * 17 * This program is free software; you can redistribute it and/or modify it 18 * under the terms of the GNU General Public License as published by the 19 * Free Software Foundation; either version 2, or (at your option) any 20 * later version. 21 * 22 * This program is distributed in the hope that it will be useful, but 23 * WITHOUT ANY WARRANTY; without even the implied warranty of 24 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 25 * General Public License for more details. 26 * 27 * You should have received a copy of the GNU General Public License along 28 * with this program; if not, write to the Free Software Foundation, Inc., 29 * 675 Mass Ave, Cambridge, MA 02139, USA. 30 */ 31 32#include <linux/config.h> 33#include <scsi/scsi.h> 34#include <scsi/scsi_cmnd.h> 35#include <scsi/scsi_device.h> 36 37#include "usb.h" 38#include "transport.h" 39#include "protocol.h" 40#include "debug.h" 41#include "dpcm.h" 42#include "sddr09.h" 43 44/* 45 * Transport for the Microtech DPCM-USB 46 * 47 */ 48int dpcm_transport(struct scsi_cmnd *srb, struct us_data *us) 49{ 50 int ret; 51 52 if(srb == NULL) 53 return USB_STOR_TRANSPORT_ERROR; 54 55 US_DEBUGP("dpcm_transport: LUN=%d\n", srb->device->lun); 56 57 switch(srb->device->lun) { 58 case 0: 59 60 /* 61 * LUN 0 corresponds to the CompactFlash card reader. 62 */ 63 ret = usb_stor_CB_transport(srb, us); 64 break; 65 66#ifdef CONFIG_USB_STORAGE_SDDR09 67 case 1: 68 69 /* 70 * LUN 1 corresponds to the SmartMedia card reader. 71 */ 72 73 /* 74 * Set the LUN to 0 (just in case). 75 */ 76 srb->device->lun = 0; us->srb->device->lun = 0; 77 ret = sddr09_transport(srb, us); 78 srb->device->lun = 1; us->srb->device->lun = 1; 79 break; 80 81#endif 82 83 default: 84 US_DEBUGP("dpcm_transport: Invalid LUN %d\n", srb->device->lun); 85 ret = USB_STOR_TRANSPORT_ERROR; 86 break; 87 } 88 return ret; 89}