diff options
| -rw-r--r-- | drivers/usb/storage/Kconfig | 4 | ||||
| -rw-r--r-- | drivers/usb/storage/Makefile | 3 | ||||
| -rw-r--r-- | drivers/usb/storage/jumpshot.c | 99 | ||||
| -rw-r--r-- | drivers/usb/storage/unusual_devs.h | 8 | ||||
| -rw-r--r-- | drivers/usb/storage/unusual_jumpshot.h (renamed from drivers/usb/storage/jumpshot.h) | 30 | ||||
| -rw-r--r-- | drivers/usb/storage/usb.c | 12 | ||||
| -rw-r--r-- | drivers/usb/storage/usual-tables.c | 1 | 
7 files changed, 112 insertions, 45 deletions
diff --git a/drivers/usb/storage/Kconfig b/drivers/usb/storage/Kconfig index 7dac413e0f2..43e1afeb7f8 100644 --- a/drivers/usb/storage/Kconfig +++ b/drivers/usb/storage/Kconfig @@ -110,12 +110,14 @@ config USB_STORAGE_SDDR55  	  If this driver is compiled as a module, it will be named ums-sddr55.  config USB_STORAGE_JUMPSHOT -	bool "Lexar Jumpshot Compact Flash Reader" +	tristate "Lexar Jumpshot Compact Flash Reader"  	depends on USB_STORAGE  	help  	  Say Y here to include additional code to support the Lexar Jumpshot  	  USB CompactFlash reader. +	  If this driver is compiled as a module, it will be named ums-jumpshot. +  config USB_STORAGE_ALAUDA  	bool "Olympus MAUSB-10/Fuji DPC-R1 support"  	depends on USB_STORAGE diff --git a/drivers/usb/storage/Makefile b/drivers/usb/storage/Makefile index 0f78bd680f0..7b9d53563d3 100644 --- a/drivers/usb/storage/Makefile +++ b/drivers/usb/storage/Makefile @@ -10,7 +10,6 @@ EXTRA_CFLAGS	:= -Idrivers/scsi  obj-$(CONFIG_USB_STORAGE)	+= usb-storage.o  usb-storage-obj-$(CONFIG_USB_STORAGE_DEBUG)	+= debug.o -usb-storage-obj-$(CONFIG_USB_STORAGE_JUMPSHOT)	+= jumpshot.o  usb-storage-obj-$(CONFIG_USB_STORAGE_ALAUDA)	+= alauda.o  usb-storage-obj-$(CONFIG_USB_STORAGE_ONETOUCH)	+= onetouch.o  usb-storage-obj-$(CONFIG_USB_STORAGE_KARMA)	+= karma.o @@ -28,6 +27,7 @@ obj-$(CONFIG_USB_STORAGE_CYPRESS_ATACB) += ums-cypress.o  obj-$(CONFIG_USB_STORAGE_DATAFAB)	+= ums-datafab.o  obj-$(CONFIG_USB_STORAGE_FREECOM)	+= ums-freecom.o  obj-$(CONFIG_USB_STORAGE_ISD200)	+= ums-isd200.o +obj-$(CONFIG_USB_STORAGE_JUMPSHOT)	+= ums-jumpshot.o  obj-$(CONFIG_USB_STORAGE_SDDR09)	+= ums-sddr09.o  obj-$(CONFIG_USB_STORAGE_SDDR55)	+= ums-sddr55.o  obj-$(CONFIG_USB_STORAGE_USBAT)		+= ums-usbat.o @@ -36,6 +36,7 @@ ums-cypress-objs	:= cypress_atacb.o  ums-datafab-objs	:= datafab.o  ums-freecom-objs	:= freecom.o  ums-isd200-objs		:= isd200.o +ums-jumpshot-objs	:= jumpshot.o  ums-sddr09-objs		:= sddr09.o  ums-sddr55-objs		:= sddr55.o  ums-usbat-objs		:= shuttle_usbat.o diff --git a/drivers/usb/storage/jumpshot.c b/drivers/usb/storage/jumpshot.c index df67f13c9e7..a50d6dc1fe6 100644 --- a/drivers/usb/storage/jumpshot.c +++ b/drivers/usb/storage/jumpshot.c @@ -46,6 +46,7 @@    */  #include <linux/errno.h> +#include <linux/module.h>  #include <linux/slab.h>  #include <scsi/scsi.h> @@ -55,9 +56,57 @@  #include "transport.h"  #include "protocol.h"  #include "debug.h" -#include "jumpshot.h" +/* + * The table of devices + */ +#define UNUSUAL_DEV(id_vendor, id_product, bcdDeviceMin, bcdDeviceMax, \ +		    vendorName, productName, useProtocol, useTransport, \ +		    initFunction, flags) \ +{ USB_DEVICE_VER(id_vendor, id_product, bcdDeviceMin, bcdDeviceMax), \ +  .driver_info = (flags)|(USB_US_TYPE_STOR<<24) } + +struct usb_device_id jumpshot_usb_ids[] = { +#	include "unusual_jumpshot.h" +	{ }		/* Terminating entry */ +}; +MODULE_DEVICE_TABLE(usb, jumpshot_usb_ids); + +#undef UNUSUAL_DEV + +/* + * The flags table + */ +#define UNUSUAL_DEV(idVendor, idProduct, bcdDeviceMin, bcdDeviceMax, \ +		    vendor_name, product_name, use_protocol, use_transport, \ +		    init_function, Flags) \ +{ \ +	.vendorName = vendor_name,	\ +	.productName = product_name,	\ +	.useProtocol = use_protocol,	\ +	.useTransport = use_transport,	\ +	.initFunction = init_function,	\ +} + +static struct us_unusual_dev jumpshot_unusual_dev_list[] = { +#	include "unusual_jumpshot.h" +	{ }		/* Terminating entry */ +}; + +#undef UNUSUAL_DEV + + +struct jumpshot_info { +   unsigned long   sectors;     /* total sector count */ +   unsigned long   ssize;       /* sector size in bytes */ + +   /* the following aren't used yet */ +   unsigned char   sense_key; +   unsigned long   sense_asc;   /* additional sense code */ +   unsigned long   sense_ascq;  /* additional sense code qualifier */ +}; +  static inline int jumpshot_bulk_read(struct us_data *us,  				     unsigned char *data,   				     unsigned int len) @@ -429,7 +478,7 @@ static void jumpshot_info_destructor(void *extra)  // Transport for the Lexar 'Jumpshot'  // -int jumpshot_transport(struct scsi_cmnd * srb, struct us_data *us) +static int jumpshot_transport(struct scsi_cmnd *srb, struct us_data *us)  {  	struct jumpshot_info *info;  	int rc; @@ -592,3 +641,49 @@ int jumpshot_transport(struct scsi_cmnd * srb, struct us_data *us)  	info->sense_ascq = 0x00;  	return USB_STOR_TRANSPORT_FAILED;  } + +static int jumpshot_probe(struct usb_interface *intf, +			 const struct usb_device_id *id) +{ +	struct us_data *us; +	int result; + +	result = usb_stor_probe1(&us, intf, id, +			(id - jumpshot_usb_ids) + jumpshot_unusual_dev_list); +	if (result) +		return result; + +	us->transport_name  = "Lexar Jumpshot Control/Bulk"; +	us->transport = jumpshot_transport; +	us->transport_reset = usb_stor_Bulk_reset; +	us->max_lun = 1; + +	result = usb_stor_probe2(us); +	return result; +} + +static struct usb_driver jumpshot_driver = { +	.name =		"ums-jumpshot", +	.probe =	jumpshot_probe, +	.disconnect =	usb_stor_disconnect, +	.suspend =	usb_stor_suspend, +	.resume =	usb_stor_resume, +	.reset_resume =	usb_stor_reset_resume, +	.pre_reset =	usb_stor_pre_reset, +	.post_reset =	usb_stor_post_reset, +	.id_table =	jumpshot_usb_ids, +	.soft_unbind =	1, +}; + +static int __init jumpshot_init(void) +{ +	return usb_register(&jumpshot_driver); +} + +static void __exit jumpshot_exit(void) +{ +	usb_deregister(&jumpshot_driver); +} + +module_init(jumpshot_init); +module_exit(jumpshot_exit); diff --git a/drivers/usb/storage/unusual_devs.h b/drivers/usb/storage/unusual_devs.h index a5867c6d761..24e23c29d29 100644 --- a/drivers/usb/storage/unusual_devs.h +++ b/drivers/usb/storage/unusual_devs.h @@ -794,14 +794,6 @@ UNUSUAL_DEV(  0x05c6, 0x1000, 0x0000, 0x9999,  		US_SC_DEVICE, US_PR_DEVICE, option_ms_init,  		0), -#ifdef CONFIG_USB_STORAGE_JUMPSHOT -UNUSUAL_DEV(  0x05dc, 0x0001, 0x0000, 0x0001, -		"Lexar", -		"Jumpshot USB CF Reader", -		US_SC_SCSI, US_PR_JUMPSHOT, NULL, -		US_FL_NEED_OVERRIDE ), -#endif -  /* Reported by Blake Matheny <bmatheny@purdue.edu> */  UNUSUAL_DEV(  0x05dc, 0xb002, 0x0000, 0x0113,  		"Lexar", diff --git a/drivers/usb/storage/jumpshot.h b/drivers/usb/storage/unusual_jumpshot.h index 19bac9d1558..2e549b1c2c6 100644 --- a/drivers/usb/storage/jumpshot.h +++ b/drivers/usb/storage/unusual_jumpshot.h @@ -1,10 +1,4 @@ -/* Driver for Lexar "Jumpshot" USB Compact Flash reader - * Header File - * - * Current development and maintenance by: - *   (c) 2000 Jimmie Mayfield (mayfield+usb@sackheads.org) - * - * See jumpshot.c for more explanation +/* Unusual Devices File for the Lexar "Jumpshot" Compact Flash reader   *   * This program is free software; you can redistribute it and/or modify it   * under the terms of the GNU General Public License as published by the @@ -21,19 +15,13 @@   * 675 Mass Ave, Cambridge, MA 02139, USA.   */ -#ifndef _USB_JUMPSHOT_H -#define _USB_JUMPSHOT_H - -extern int jumpshot_transport(struct scsi_cmnd *srb, struct us_data *us); +#if defined(CONFIG_USB_STORAGE_JUMPSHOT) || \ +		defined(CONFIG_USB_STORAGE_JUMPSHOT_MODULE) -struct jumpshot_info { -   unsigned long   sectors;     // total sector count -   unsigned long   ssize;       // sector size in bytes -  -   // the following aren't used yet -   unsigned char   sense_key; -   unsigned long   sense_asc;   // additional sense code -   unsigned long   sense_ascq;  // additional sense code qualifier -}; +UNUSUAL_DEV(  0x05dc, 0x0001, 0x0000, 0x0001, +		"Lexar", +		"Jumpshot USB CF Reader", +		US_SC_SCSI, US_PR_JUMPSHOT, NULL, +		US_FL_NEED_OVERRIDE), -#endif +#endif /* defined(CONFIG_USB_STORAGE_JUMPSHOT) || ... */ diff --git a/drivers/usb/storage/usb.c b/drivers/usb/storage/usb.c index a537b3513b9..2ea57691a7b 100644 --- a/drivers/usb/storage/usb.c +++ b/drivers/usb/storage/usb.c @@ -66,9 +66,6 @@  #include "debug.h"  #include "initializers.h" -#ifdef CONFIG_USB_STORAGE_JUMPSHOT -#include "jumpshot.h" -#endif  #ifdef CONFIG_USB_STORAGE_ONETOUCH  #include "onetouch.h"  #endif @@ -601,15 +598,6 @@ static void get_transport(struct us_data *us)  		us->transport_reset = usb_stor_Bulk_reset;  		break; -#ifdef CONFIG_USB_STORAGE_JUMPSHOT -	case US_PR_JUMPSHOT: -		us->transport_name  = "Lexar Jumpshot Control/Bulk"; -		us->transport = jumpshot_transport; -		us->transport_reset = usb_stor_Bulk_reset; -		us->max_lun = 1; -		break; -#endif -  #ifdef CONFIG_USB_STORAGE_ALAUDA  	case US_PR_ALAUDA:  		us->transport_name  = "Alauda Control/Bulk"; diff --git a/drivers/usb/storage/usual-tables.c b/drivers/usb/storage/usual-tables.c index c6ceac62cf6..182a097e076 100644 --- a/drivers/usb/storage/usual-tables.c +++ b/drivers/usb/storage/usual-tables.c @@ -81,6 +81,7 @@ static struct ignore_entry ignore_ids[] = {  #	include "unusual_datafab.h"  #	include "unusual_freecom.h"  #	include "unusual_isd200.h" +#	include "unusual_jumpshot.h"  #	include "unusual_sddr09.h"  #	include "unusual_sddr55.h"  #	include "unusual_usbat.h"  |