usb-storage: make datafab a separate module
This patch (as1213) converts usb-storage's datafab subdriver into a separate module. Signed-off-by: Alan Stern <stern@rowland.harvard.edu> Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
This commit is contained in:
parent
0d62939fab
commit
2cbbf3576a
|
@ -32,12 +32,14 @@ config USB_STORAGE_DEBUG
|
|||
verbose debugging messages.
|
||||
|
||||
config USB_STORAGE_DATAFAB
|
||||
bool "Datafab Compact Flash Reader support"
|
||||
tristate "Datafab Compact Flash Reader support"
|
||||
depends on USB_STORAGE
|
||||
help
|
||||
Support for certain Datafab CompactFlash readers.
|
||||
Datafab has a web page at <http://www.datafabusa.com/>.
|
||||
|
||||
If this driver is compiled as a module, it will be named ums-datafab.
|
||||
|
||||
config USB_STORAGE_FREECOM
|
||||
tristate "Freecom USB/ATAPI Bridge support"
|
||||
depends on USB_STORAGE
|
||||
|
|
|
@ -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_DATAFAB) += datafab.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
|
||||
|
@ -26,6 +25,7 @@ else
|
|||
endif
|
||||
|
||||
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_SDDR09) += ums-sddr09.o
|
||||
|
@ -33,6 +33,7 @@ obj-$(CONFIG_USB_STORAGE_SDDR55) += ums-sddr55.o
|
|||
obj-$(CONFIG_USB_STORAGE_USBAT) += ums-usbat.o
|
||||
|
||||
ums-cypress-objs := cypress_atacb.o
|
||||
ums-datafab-objs := datafab.o
|
||||
ums-freecom-objs := freecom.o
|
||||
ums-isd200-objs := isd200.o
|
||||
ums-sddr09-objs := sddr09.o
|
||||
|
|
|
@ -49,6 +49,7 @@
|
|||
*/
|
||||
|
||||
#include <linux/errno.h>
|
||||
#include <linux/module.h>
|
||||
#include <linux/slab.h>
|
||||
|
||||
#include <scsi/scsi.h>
|
||||
|
@ -58,12 +59,61 @@
|
|||
#include "transport.h"
|
||||
#include "protocol.h"
|
||||
#include "debug.h"
|
||||
#include "datafab.h"
|
||||
|
||||
struct datafab_info {
|
||||
unsigned long sectors; /* total sector count */
|
||||
unsigned long ssize; /* sector size in bytes */
|
||||
signed char lun; /* used for dual-slot readers */
|
||||
|
||||
/* 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 int datafab_determine_lun(struct us_data *us,
|
||||
struct datafab_info *info);
|
||||
|
||||
|
||||
/*
|
||||
* 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 datafab_usb_ids[] = {
|
||||
# include "unusual_datafab.h"
|
||||
{ } /* Terminating entry */
|
||||
};
|
||||
MODULE_DEVICE_TABLE(usb, datafab_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 datafab_unusual_dev_list[] = {
|
||||
# include "unusual_datafab.h"
|
||||
{ } /* Terminating entry */
|
||||
};
|
||||
|
||||
#undef UNUSUAL_DEV
|
||||
|
||||
|
||||
static inline int
|
||||
datafab_bulk_read(struct us_data *us, unsigned char *data, unsigned int len) {
|
||||
if (len == 0)
|
||||
|
@ -500,7 +550,7 @@ static void datafab_info_destructor(void *extra)
|
|||
|
||||
// Transport for the Datafab MDCFE-B
|
||||
//
|
||||
int datafab_transport(struct scsi_cmnd * srb, struct us_data *us)
|
||||
static int datafab_transport(struct scsi_cmnd *srb, struct us_data *us)
|
||||
{
|
||||
struct datafab_info *info;
|
||||
int rc;
|
||||
|
@ -665,3 +715,49 @@ int datafab_transport(struct scsi_cmnd * srb, struct us_data *us)
|
|||
info->sense_ascq = 0x00;
|
||||
return USB_STOR_TRANSPORT_FAILED;
|
||||
}
|
||||
|
||||
static int datafab_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 - datafab_usb_ids) + datafab_unusual_dev_list);
|
||||
if (result)
|
||||
return result;
|
||||
|
||||
us->transport_name = "Datafab Bulk-Only";
|
||||
us->transport = datafab_transport;
|
||||
us->transport_reset = usb_stor_Bulk_reset;
|
||||
us->max_lun = 1;
|
||||
|
||||
result = usb_stor_probe2(us);
|
||||
return result;
|
||||
}
|
||||
|
||||
static struct usb_driver datafab_driver = {
|
||||
.name = "ums-datafab",
|
||||
.probe = datafab_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 = datafab_usb_ids,
|
||||
.soft_unbind = 1,
|
||||
};
|
||||
|
||||
static int __init datafab_init(void)
|
||||
{
|
||||
return usb_register(&datafab_driver);
|
||||
}
|
||||
|
||||
static void __exit datafab_exit(void)
|
||||
{
|
||||
usb_deregister(&datafab_driver);
|
||||
}
|
||||
|
||||
module_init(datafab_init);
|
||||
module_exit(datafab_exit);
|
||||
|
|
|
@ -1,40 +0,0 @@
|
|||
/* Driver for Datafab MDCFE-B USB Compact Flash reader
|
||||
* Header File
|
||||
*
|
||||
* Current development and maintenance by:
|
||||
* (c) 2000 Jimmie Mayfield (mayfield+datafab@sackheads.org)
|
||||
*
|
||||
* See datafab.c for more explanation
|
||||
*
|
||||
* 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
|
||||
* Free Software Foundation; either version 2, or (at your option) any
|
||||
* later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful, but
|
||||
* WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License along
|
||||
* with this program; if not, write to the Free Software Foundation, Inc.,
|
||||
* 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
*/
|
||||
|
||||
#ifndef _USB_DATAFAB_MDCFE_B_H
|
||||
#define _USB_DATAFAB_MDCFE_B_H
|
||||
|
||||
extern int datafab_transport(struct scsi_cmnd *srb, struct us_data *us);
|
||||
|
||||
struct datafab_info {
|
||||
unsigned long sectors; // total sector count
|
||||
unsigned long ssize; // sector size in bytes
|
||||
signed char lun; // used for dual-slot readers
|
||||
|
||||
// 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
|
||||
};
|
||||
|
||||
#endif
|
98
drivers/usb/storage/unusual_datafab.h
Normal file
98
drivers/usb/storage/unusual_datafab.h
Normal file
|
@ -0,0 +1,98 @@
|
|||
/* Unusual Devices File for the Datafab USB 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
|
||||
* Free Software Foundation; either version 2, or (at your option) any
|
||||
* later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful, but
|
||||
* WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License along
|
||||
* with this program; if not, write to the Free Software Foundation, Inc.,
|
||||
* 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
*/
|
||||
|
||||
#if defined(CONFIG_USB_STORAGE_DATAFAB) || \
|
||||
defined(CONFIG_USB_STORAGE_DATAFAB_MODULE)
|
||||
|
||||
UNUSUAL_DEV( 0x07c4, 0xa000, 0x0000, 0x0015,
|
||||
"Datafab",
|
||||
"MDCFE-B USB CF Reader",
|
||||
US_SC_SCSI, US_PR_DATAFAB, NULL,
|
||||
0),
|
||||
|
||||
/*
|
||||
* The following Datafab-based devices may or may not work
|
||||
* using the current driver...the 0xffff is arbitrary since I
|
||||
* don't know what device versions exist for these guys.
|
||||
*
|
||||
* The 0xa003 and 0xa004 devices in particular I'm curious about.
|
||||
* I'm told they exist but so far nobody has come forward to say that
|
||||
* they work with this driver. Given the success we've had getting
|
||||
* other Datafab-based cards operational with this driver, I've decided
|
||||
* to leave these two devices in the list.
|
||||
*/
|
||||
UNUSUAL_DEV( 0x07c4, 0xa001, 0x0000, 0xffff,
|
||||
"SIIG/Datafab",
|
||||
"SIIG/Datafab Memory Stick+CF Reader/Writer",
|
||||
US_SC_SCSI, US_PR_DATAFAB, NULL,
|
||||
0),
|
||||
|
||||
/* Reported by Josef Reisinger <josef.reisinger@netcologne.de> */
|
||||
UNUSUAL_DEV( 0x07c4, 0xa002, 0x0000, 0xffff,
|
||||
"Datafab/Unknown",
|
||||
"MD2/MD3 Disk enclosure",
|
||||
US_SC_SCSI, US_PR_DATAFAB, NULL,
|
||||
US_FL_SINGLE_LUN),
|
||||
|
||||
UNUSUAL_DEV( 0x07c4, 0xa003, 0x0000, 0xffff,
|
||||
"Datafab/Unknown",
|
||||
"Datafab-based Reader",
|
||||
US_SC_SCSI, US_PR_DATAFAB, NULL,
|
||||
0),
|
||||
|
||||
UNUSUAL_DEV( 0x07c4, 0xa004, 0x0000, 0xffff,
|
||||
"Datafab/Unknown",
|
||||
"Datafab-based Reader",
|
||||
US_SC_SCSI, US_PR_DATAFAB, NULL,
|
||||
0),
|
||||
|
||||
UNUSUAL_DEV( 0x07c4, 0xa005, 0x0000, 0xffff,
|
||||
"PNY/Datafab",
|
||||
"PNY/Datafab CF+SM Reader",
|
||||
US_SC_SCSI, US_PR_DATAFAB, NULL,
|
||||
0),
|
||||
|
||||
UNUSUAL_DEV( 0x07c4, 0xa006, 0x0000, 0xffff,
|
||||
"Simple Tech/Datafab",
|
||||
"Simple Tech/Datafab CF+SM Reader",
|
||||
US_SC_SCSI, US_PR_DATAFAB, NULL,
|
||||
0),
|
||||
|
||||
/* Submitted by Olaf Hering <olh@suse.de> */
|
||||
UNUSUAL_DEV( 0x07c4, 0xa109, 0x0000, 0xffff,
|
||||
"Datafab Systems, Inc.",
|
||||
"USB to CF + SM Combo (LC1)",
|
||||
US_SC_SCSI, US_PR_DATAFAB, NULL,
|
||||
0),
|
||||
|
||||
/* Reported by Felix Moeller <felix@derklecks.de>
|
||||
* in Germany this is sold by Hama with the productnumber 46952
|
||||
* as "DualSlot CompactFlash(TM) & MStick Drive USB"
|
||||
*/
|
||||
UNUSUAL_DEV( 0x07c4, 0xa10b, 0x0000, 0xffff,
|
||||
"DataFab Systems Inc.",
|
||||
"USB CF+MS",
|
||||
US_SC_SCSI, US_PR_DATAFAB, NULL,
|
||||
0),
|
||||
|
||||
UNUSUAL_DEV( 0x0c0b, 0xa109, 0x0000, 0xffff,
|
||||
"Acomdata",
|
||||
"CF",
|
||||
US_SC_SCSI, US_PR_DATAFAB, NULL,
|
||||
US_FL_SINGLE_LUN),
|
||||
|
||||
#endif /* defined(CONFIG_USB_STORAGE_DATAFAB) || ... */
|
|
@ -992,84 +992,6 @@ UNUSUAL_DEV( 0x07b4, 0x010a, 0x0102, 0x0102,
|
|||
US_SC_SCSI, US_PR_ALAUDA, init_alauda, 0 ),
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_USB_STORAGE_DATAFAB
|
||||
UNUSUAL_DEV( 0x07c4, 0xa000, 0x0000, 0x0015,
|
||||
"Datafab",
|
||||
"MDCFE-B USB CF Reader",
|
||||
US_SC_SCSI, US_PR_DATAFAB, NULL,
|
||||
0 ),
|
||||
|
||||
/*
|
||||
* The following Datafab-based devices may or may not work
|
||||
* using the current driver...the 0xffff is arbitrary since I
|
||||
* don't know what device versions exist for these guys.
|
||||
*
|
||||
* The 0xa003 and 0xa004 devices in particular I'm curious about.
|
||||
* I'm told they exist but so far nobody has come forward to say that
|
||||
* they work with this driver. Given the success we've had getting
|
||||
* other Datafab-based cards operational with this driver, I've decided
|
||||
* to leave these two devices in the list.
|
||||
*/
|
||||
UNUSUAL_DEV( 0x07c4, 0xa001, 0x0000, 0xffff,
|
||||
"SIIG/Datafab",
|
||||
"SIIG/Datafab Memory Stick+CF Reader/Writer",
|
||||
US_SC_SCSI, US_PR_DATAFAB, NULL,
|
||||
0 ),
|
||||
|
||||
/* Reported by Josef Reisinger <josef.reisinger@netcologne.de> */
|
||||
UNUSUAL_DEV( 0x07c4, 0xa002, 0x0000, 0xffff,
|
||||
"Datafab/Unknown",
|
||||
"MD2/MD3 Disk enclosure",
|
||||
US_SC_SCSI, US_PR_DATAFAB, NULL,
|
||||
US_FL_SINGLE_LUN ),
|
||||
|
||||
UNUSUAL_DEV( 0x07c4, 0xa003, 0x0000, 0xffff,
|
||||
"Datafab/Unknown",
|
||||
"Datafab-based Reader",
|
||||
US_SC_SCSI, US_PR_DATAFAB, NULL,
|
||||
0 ),
|
||||
|
||||
UNUSUAL_DEV( 0x07c4, 0xa004, 0x0000, 0xffff,
|
||||
"Datafab/Unknown",
|
||||
"Datafab-based Reader",
|
||||
US_SC_SCSI, US_PR_DATAFAB, NULL,
|
||||
0 ),
|
||||
|
||||
UNUSUAL_DEV( 0x07c4, 0xa005, 0x0000, 0xffff,
|
||||
"PNY/Datafab",
|
||||
"PNY/Datafab CF+SM Reader",
|
||||
US_SC_SCSI, US_PR_DATAFAB, NULL,
|
||||
0 ),
|
||||
|
||||
UNUSUAL_DEV( 0x07c4, 0xa006, 0x0000, 0xffff,
|
||||
"Simple Tech/Datafab",
|
||||
"Simple Tech/Datafab CF+SM Reader",
|
||||
US_SC_SCSI, US_PR_DATAFAB, NULL,
|
||||
0 ),
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_USB_STORAGE_DATAFAB
|
||||
/* Submitted by Olaf Hering <olh@suse.de> */
|
||||
UNUSUAL_DEV( 0x07c4, 0xa109, 0x0000, 0xffff,
|
||||
"Datafab Systems, Inc.",
|
||||
"USB to CF + SM Combo (LC1)",
|
||||
US_SC_SCSI, US_PR_DATAFAB, NULL,
|
||||
0 ),
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_USB_STORAGE_DATAFAB
|
||||
/* Reported by Felix Moeller <felix@derklecks.de>
|
||||
* in Germany this is sold by Hama with the productnumber 46952
|
||||
* as "DualSlot CompactFlash(TM) & MStick Drive USB"
|
||||
*/
|
||||
UNUSUAL_DEV( 0x07c4, 0xa10b, 0x0000, 0xffff,
|
||||
"DataFab Systems Inc.",
|
||||
"USB CF+MS",
|
||||
US_SC_SCSI, US_PR_DATAFAB, NULL,
|
||||
0 ),
|
||||
|
||||
#endif
|
||||
|
||||
/* Datafab KECF-USB / Sagatek DCS-CF / Simpletech Flashlink UCF-100
|
||||
* Only revision 1.13 tested (same for all of the above devices,
|
||||
* based on the Datafab DF-UG-07 chip). Needed for US_FL_FIX_INQUIRY.
|
||||
|
@ -1273,14 +1195,6 @@ UNUSUAL_DEV( 0x0bc2, 0x3010, 0x0000, 0x0000,
|
|||
US_SC_DEVICE, US_PR_DEVICE, NULL,
|
||||
US_FL_SANE_SENSE ),
|
||||
|
||||
#ifdef CONFIG_USB_STORAGE_DATAFAB
|
||||
UNUSUAL_DEV( 0x0c0b, 0xa109, 0x0000, 0xffff,
|
||||
"Acomdata",
|
||||
"CF",
|
||||
US_SC_SCSI, US_PR_DATAFAB, NULL,
|
||||
US_FL_SINGLE_LUN ),
|
||||
#endif
|
||||
|
||||
UNUSUAL_DEV( 0x0d49, 0x7310, 0x0000, 0x9999,
|
||||
"Maxtor",
|
||||
"USB to SATA",
|
||||
|
|
|
@ -66,9 +66,6 @@
|
|||
#include "debug.h"
|
||||
#include "initializers.h"
|
||||
|
||||
#ifdef CONFIG_USB_STORAGE_DATAFAB
|
||||
#include "datafab.h"
|
||||
#endif
|
||||
#ifdef CONFIG_USB_STORAGE_JUMPSHOT
|
||||
#include "jumpshot.h"
|
||||
#endif
|
||||
|
@ -604,15 +601,6 @@ static void get_transport(struct us_data *us)
|
|||
us->transport_reset = usb_stor_Bulk_reset;
|
||||
break;
|
||||
|
||||
#ifdef CONFIG_USB_STORAGE_DATAFAB
|
||||
case US_PR_DATAFAB:
|
||||
us->transport_name = "Datafab Bulk-Only";
|
||||
us->transport = datafab_transport;
|
||||
us->transport_reset = usb_stor_Bulk_reset;
|
||||
us->max_lun = 1;
|
||||
break;
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_USB_STORAGE_JUMPSHOT
|
||||
case US_PR_JUMPSHOT:
|
||||
us->transport_name = "Lexar Jumpshot Control/Bulk";
|
||||
|
|
|
@ -78,6 +78,7 @@ struct ignore_entry {
|
|||
|
||||
static struct ignore_entry ignore_ids[] = {
|
||||
# include "unusual_cypress.h"
|
||||
# include "unusual_datafab.h"
|
||||
# include "unusual_freecom.h"
|
||||
# include "unusual_isd200.h"
|
||||
# include "unusual_sddr09.h"
|
||||
|
|
Loading…
Reference in a new issue