aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/usb/storage/Kconfig4
-rw-r--r--drivers/usb/storage/Makefile3
-rw-r--r--drivers/usb/storage/datafab.c100
-rw-r--r--drivers/usb/storage/datafab.h40
-rw-r--r--drivers/usb/storage/unusual_datafab.h98
-rw-r--r--drivers/usb/storage/unusual_devs.h86
-rw-r--r--drivers/usb/storage/usb.c12
-rw-r--r--drivers/usb/storage/usual-tables.c1
8 files changed, 202 insertions, 142 deletions
diff --git a/drivers/usb/storage/Kconfig b/drivers/usb/storage/Kconfig
index 14508b8a55f..7dac413e0f2 100644
--- a/drivers/usb/storage/Kconfig
+++ b/drivers/usb/storage/Kconfig
@@ -32,12 +32,14 @@ config USB_STORAGE_DEBUG
32 verbose debugging messages. 32 verbose debugging messages.
33 33
34config USB_STORAGE_DATAFAB 34config USB_STORAGE_DATAFAB
35 bool "Datafab Compact Flash Reader support" 35 tristate "Datafab Compact Flash Reader support"
36 depends on USB_STORAGE 36 depends on USB_STORAGE
37 help 37 help
38 Support for certain Datafab CompactFlash readers. 38 Support for certain Datafab CompactFlash readers.
39 Datafab has a web page at <http://www.datafabusa.com/>. 39 Datafab has a web page at <http://www.datafabusa.com/>.
40 40
41 If this driver is compiled as a module, it will be named ums-datafab.
42
41config USB_STORAGE_FREECOM 43config USB_STORAGE_FREECOM
42 tristate "Freecom USB/ATAPI Bridge support" 44 tristate "Freecom USB/ATAPI Bridge support"
43 depends on USB_STORAGE 45 depends on USB_STORAGE
diff --git a/drivers/usb/storage/Makefile b/drivers/usb/storage/Makefile
index 93e91ec3a2d..0f78bd680f0 100644
--- a/drivers/usb/storage/Makefile
+++ b/drivers/usb/storage/Makefile
@@ -10,7 +10,6 @@ EXTRA_CFLAGS := -Idrivers/scsi
10obj-$(CONFIG_USB_STORAGE) += usb-storage.o 10obj-$(CONFIG_USB_STORAGE) += usb-storage.o
11 11
12usb-storage-obj-$(CONFIG_USB_STORAGE_DEBUG) += debug.o 12usb-storage-obj-$(CONFIG_USB_STORAGE_DEBUG) += debug.o
13usb-storage-obj-$(CONFIG_USB_STORAGE_DATAFAB) += datafab.o
14usb-storage-obj-$(CONFIG_USB_STORAGE_JUMPSHOT) += jumpshot.o 13usb-storage-obj-$(CONFIG_USB_STORAGE_JUMPSHOT) += jumpshot.o
15usb-storage-obj-$(CONFIG_USB_STORAGE_ALAUDA) += alauda.o 14usb-storage-obj-$(CONFIG_USB_STORAGE_ALAUDA) += alauda.o
16usb-storage-obj-$(CONFIG_USB_STORAGE_ONETOUCH) += onetouch.o 15usb-storage-obj-$(CONFIG_USB_STORAGE_ONETOUCH) += onetouch.o
@@ -26,6 +25,7 @@ else
26endif 25endif
27 26
28obj-$(CONFIG_USB_STORAGE_CYPRESS_ATACB) += ums-cypress.o 27obj-$(CONFIG_USB_STORAGE_CYPRESS_ATACB) += ums-cypress.o
28obj-$(CONFIG_USB_STORAGE_DATAFAB) += ums-datafab.o
29obj-$(CONFIG_USB_STORAGE_FREECOM) += ums-freecom.o 29obj-$(CONFIG_USB_STORAGE_FREECOM) += ums-freecom.o
30obj-$(CONFIG_USB_STORAGE_ISD200) += ums-isd200.o 30obj-$(CONFIG_USB_STORAGE_ISD200) += ums-isd200.o
31obj-$(CONFIG_USB_STORAGE_SDDR09) += ums-sddr09.o 31obj-$(CONFIG_USB_STORAGE_SDDR09) += ums-sddr09.o
@@ -33,6 +33,7 @@ obj-$(CONFIG_USB_STORAGE_SDDR55) += ums-sddr55.o
33obj-$(CONFIG_USB_STORAGE_USBAT) += ums-usbat.o 33obj-$(CONFIG_USB_STORAGE_USBAT) += ums-usbat.o
34 34
35ums-cypress-objs := cypress_atacb.o 35ums-cypress-objs := cypress_atacb.o
36ums-datafab-objs := datafab.o
36ums-freecom-objs := freecom.o 37ums-freecom-objs := freecom.o
37ums-isd200-objs := isd200.o 38ums-isd200-objs := isd200.o
38ums-sddr09-objs := sddr09.o 39ums-sddr09-objs := sddr09.o
diff --git a/drivers/usb/storage/datafab.c b/drivers/usb/storage/datafab.c
index 17f1ae23291..2d8d8351909 100644
--- a/drivers/usb/storage/datafab.c
+++ b/drivers/usb/storage/datafab.c
@@ -49,6 +49,7 @@
49 */ 49 */
50 50
51#include <linux/errno.h> 51#include <linux/errno.h>
52#include <linux/module.h>
52#include <linux/slab.h> 53#include <linux/slab.h>
53 54
54#include <scsi/scsi.h> 55#include <scsi/scsi.h>
@@ -58,12 +59,61 @@
58#include "transport.h" 59#include "transport.h"
59#include "protocol.h" 60#include "protocol.h"
60#include "debug.h" 61#include "debug.h"
61#include "datafab.h" 62
63struct datafab_info {
64 unsigned long sectors; /* total sector count */
65 unsigned long ssize; /* sector size in bytes */
66 signed char lun; /* used for dual-slot readers */
67
68 /* the following aren't used yet */
69 unsigned char sense_key;
70 unsigned long sense_asc; /* additional sense code */
71 unsigned long sense_ascq; /* additional sense code qualifier */
72};
62 73
63static int datafab_determine_lun(struct us_data *us, 74static int datafab_determine_lun(struct us_data *us,
64 struct datafab_info *info); 75 struct datafab_info *info);
65 76
66 77
78/*
79 * The table of devices
80 */
81#define UNUSUAL_DEV(id_vendor, id_product, bcdDeviceMin, bcdDeviceMax, \
82 vendorName, productName, useProtocol, useTransport, \
83 initFunction, flags) \
84{ USB_DEVICE_VER(id_vendor, id_product, bcdDeviceMin, bcdDeviceMax), \
85 .driver_info = (flags)|(USB_US_TYPE_STOR<<24) }
86
87struct usb_device_id datafab_usb_ids[] = {
88# include "unusual_datafab.h"
89 { } /* Terminating entry */
90};
91MODULE_DEVICE_TABLE(usb, datafab_usb_ids);
92
93#undef UNUSUAL_DEV
94
95/*
96 * The flags table
97 */
98#define UNUSUAL_DEV(idVendor, idProduct, bcdDeviceMin, bcdDeviceMax, \
99 vendor_name, product_name, use_protocol, use_transport, \
100 init_function, Flags) \
101{ \
102 .vendorName = vendor_name, \
103 .productName = product_name, \
104 .useProtocol = use_protocol, \
105 .useTransport = use_transport, \
106 .initFunction = init_function, \
107}
108
109static struct us_unusual_dev datafab_unusual_dev_list[] = {
110# include "unusual_datafab.h"
111 { } /* Terminating entry */
112};
113
114#undef UNUSUAL_DEV
115
116
67static inline int 117static inline int
68datafab_bulk_read(struct us_data *us, unsigned char *data, unsigned int len) { 118datafab_bulk_read(struct us_data *us, unsigned char *data, unsigned int len) {
69 if (len == 0) 119 if (len == 0)
@@ -500,7 +550,7 @@ static void datafab_info_destructor(void *extra)
500 550
501// Transport for the Datafab MDCFE-B 551// Transport for the Datafab MDCFE-B
502// 552//
503int datafab_transport(struct scsi_cmnd * srb, struct us_data *us) 553static int datafab_transport(struct scsi_cmnd *srb, struct us_data *us)
504{ 554{
505 struct datafab_info *info; 555 struct datafab_info *info;
506 int rc; 556 int rc;
@@ -665,3 +715,49 @@ int datafab_transport(struct scsi_cmnd * srb, struct us_data *us)
665 info->sense_ascq = 0x00; 715 info->sense_ascq = 0x00;
666 return USB_STOR_TRANSPORT_FAILED; 716 return USB_STOR_TRANSPORT_FAILED;
667} 717}
718
719static int datafab_probe(struct usb_interface *intf,
720 const struct usb_device_id *id)
721{
722 struct us_data *us;
723 int result;
724
725 result = usb_stor_probe1(&us, intf, id,
726 (id - datafab_usb_ids) + datafab_unusual_dev_list);
727 if (result)
728 return result;
729
730 us->transport_name = "Datafab Bulk-Only";
731 us->transport = datafab_transport;
732 us->transport_reset = usb_stor_Bulk_reset;
733 us->max_lun = 1;
734
735 result = usb_stor_probe2(us);
736 return result;
737}
738
739static struct usb_driver datafab_driver = {
740 .name = "ums-datafab",
741 .probe = datafab_probe,
742 .disconnect = usb_stor_disconnect,
743 .suspend = usb_stor_suspend,
744 .resume = usb_stor_resume,
745 .reset_resume = usb_stor_reset_resume,
746 .pre_reset = usb_stor_pre_reset,
747 .post_reset = usb_stor_post_reset,
748 .id_table = datafab_usb_ids,
749 .soft_unbind = 1,
750};
751
752static int __init datafab_init(void)
753{
754 return usb_register(&datafab_driver);
755}
756
757static void __exit datafab_exit(void)
758{
759 usb_deregister(&datafab_driver);
760}
761
762module_init(datafab_init);
763module_exit(datafab_exit);
diff --git a/drivers/usb/storage/datafab.h b/drivers/usb/storage/datafab.h
deleted file mode 100644
index 32e3f271e58..00000000000
--- a/drivers/usb/storage/datafab.h
+++ /dev/null
@@ -1,40 +0,0 @@
1/* Driver for Datafab MDCFE-B USB Compact Flash reader
2 * Header File
3 *
4 * Current development and maintenance by:
5 * (c) 2000 Jimmie Mayfield (mayfield+datafab@sackheads.org)
6 *
7 * See datafab.c for more explanation
8 *
9 * This program is free software; you can redistribute it and/or modify it
10 * under the terms of the GNU General Public License as published by the
11 * Free Software Foundation; either version 2, or (at your option) any
12 * later version.
13 *
14 * This program is distributed in the hope that it will be useful, but
15 * WITHOUT ANY WARRANTY; without even the implied warranty of
16 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
17 * General Public License for more details.
18 *
19 * You should have received a copy of the GNU General Public License along
20 * with this program; if not, write to the Free Software Foundation, Inc.,
21 * 675 Mass Ave, Cambridge, MA 02139, USA.
22 */
23
24#ifndef _USB_DATAFAB_MDCFE_B_H
25#define _USB_DATAFAB_MDCFE_B_H
26
27extern int datafab_transport(struct scsi_cmnd *srb, struct us_data *us);
28
29struct datafab_info {
30 unsigned long sectors; // total sector count
31 unsigned long ssize; // sector size in bytes
32 signed char lun; // used for dual-slot readers
33
34 // the following aren't used yet
35 unsigned char sense_key;
36 unsigned long sense_asc; // additional sense code
37 unsigned long sense_ascq; // additional sense code qualifier
38};
39
40#endif
diff --git a/drivers/usb/storage/unusual_datafab.h b/drivers/usb/storage/unusual_datafab.h
new file mode 100644
index 00000000000..c9298ce9f22
--- /dev/null
+++ b/drivers/usb/storage/unusual_datafab.h
@@ -0,0 +1,98 @@
1/* Unusual Devices File for the Datafab USB Compact Flash reader
2 *
3 * This program is free software; you can redistribute it and/or modify it
4 * under the terms of the GNU General Public License as published by the
5 * Free Software Foundation; either version 2, or (at your option) any
6 * later version.
7 *
8 * This program is distributed in the hope that it will be useful, but
9 * WITHOUT ANY WARRANTY; without even the implied warranty of
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
11 * General Public License for more details.
12 *
13 * You should have received a copy of the GNU General Public License along
14 * with this program; if not, write to the Free Software Foundation, Inc.,
15 * 675 Mass Ave, Cambridge, MA 02139, USA.
16 */
17
18#if defined(CONFIG_USB_STORAGE_DATAFAB) || \
19 defined(CONFIG_USB_STORAGE_DATAFAB_MODULE)
20
21UNUSUAL_DEV( 0x07c4, 0xa000, 0x0000, 0x0015,
22 "Datafab",
23 "MDCFE-B USB CF Reader",
24 US_SC_SCSI, US_PR_DATAFAB, NULL,
25 0),
26
27/*
28 * The following Datafab-based devices may or may not work
29 * using the current driver...the 0xffff is arbitrary since I
30 * don't know what device versions exist for these guys.
31 *
32 * The 0xa003 and 0xa004 devices in particular I'm curious about.
33 * I'm told they exist but so far nobody has come forward to say that
34 * they work with this driver. Given the success we've had getting
35 * other Datafab-based cards operational with this driver, I've decided
36 * to leave these two devices in the list.
37 */
38UNUSUAL_DEV( 0x07c4, 0xa001, 0x0000, 0xffff,
39 "SIIG/Datafab",
40 "SIIG/Datafab Memory Stick+CF Reader/Writer",
41 US_SC_SCSI, US_PR_DATAFAB, NULL,
42 0),
43
44/* Reported by Josef Reisinger <josef.reisinger@netcologne.de> */
45UNUSUAL_DEV( 0x07c4, 0xa002, 0x0000, 0xffff,
46 "Datafab/Unknown",
47 "MD2/MD3 Disk enclosure",
48 US_SC_SCSI, US_PR_DATAFAB, NULL,
49 US_FL_SINGLE_LUN),
50
51UNUSUAL_DEV( 0x07c4, 0xa003, 0x0000, 0xffff,
52 "Datafab/Unknown",
53 "Datafab-based Reader",
54 US_SC_SCSI, US_PR_DATAFAB, NULL,
55 0),
56
57UNUSUAL_DEV( 0x07c4, 0xa004, 0x0000, 0xffff,
58 "Datafab/Unknown",
59 "Datafab-based Reader",
60 US_SC_SCSI, US_PR_DATAFAB, NULL,
61 0),
62
63UNUSUAL_DEV( 0x07c4, 0xa005, 0x0000, 0xffff,
64 "PNY/Datafab",
65 "PNY/Datafab CF+SM Reader",
66 US_SC_SCSI, US_PR_DATAFAB, NULL,
67 0),
68
69UNUSUAL_DEV( 0x07c4, 0xa006, 0x0000, 0xffff,
70 "Simple Tech/Datafab",
71 "Simple Tech/Datafab CF+SM Reader",
72 US_SC_SCSI, US_PR_DATAFAB, NULL,
73 0),
74
75/* Submitted by Olaf Hering <olh@suse.de> */
76UNUSUAL_DEV( 0x07c4, 0xa109, 0x0000, 0xffff,
77 "Datafab Systems, Inc.",
78 "USB to CF + SM Combo (LC1)",
79 US_SC_SCSI, US_PR_DATAFAB, NULL,
80 0),
81
82/* Reported by Felix Moeller <felix@derklecks.de>
83 * in Germany this is sold by Hama with the productnumber 46952
84 * as "DualSlot CompactFlash(TM) & MStick Drive USB"
85 */
86UNUSUAL_DEV( 0x07c4, 0xa10b, 0x0000, 0xffff,
87 "DataFab Systems Inc.",
88 "USB CF+MS",
89 US_SC_SCSI, US_PR_DATAFAB, NULL,
90 0),
91
92UNUSUAL_DEV( 0x0c0b, 0xa109, 0x0000, 0xffff,
93 "Acomdata",
94 "CF",
95 US_SC_SCSI, US_PR_DATAFAB, NULL,
96 US_FL_SINGLE_LUN),
97
98#endif /* defined(CONFIG_USB_STORAGE_DATAFAB) || ... */
diff --git a/drivers/usb/storage/unusual_devs.h b/drivers/usb/storage/unusual_devs.h
index eef2075cf2e..a5867c6d761 100644
--- a/drivers/usb/storage/unusual_devs.h
+++ b/drivers/usb/storage/unusual_devs.h
@@ -992,84 +992,6 @@ UNUSUAL_DEV( 0x07b4, 0x010a, 0x0102, 0x0102,
992 US_SC_SCSI, US_PR_ALAUDA, init_alauda, 0 ), 992 US_SC_SCSI, US_PR_ALAUDA, init_alauda, 0 ),
993#endif 993#endif
994 994
995#ifdef CONFIG_USB_STORAGE_DATAFAB
996UNUSUAL_DEV( 0x07c4, 0xa000, 0x0000, 0x0015,
997 "Datafab",
998 "MDCFE-B USB CF Reader",
999 US_SC_SCSI, US_PR_DATAFAB, NULL,
1000 0 ),
1001
1002/*
1003 * The following Datafab-based devices may or may not work
1004 * using the current driver...the 0xffff is arbitrary since I
1005 * don't know what device versions exist for these guys.
1006 *
1007 * The 0xa003 and 0xa004 devices in particular I'm curious about.
1008 * I'm told they exist but so far nobody has come forward to say that
1009 * they work with this driver. Given the success we've had getting
1010 * other Datafab-based cards operational with this driver, I've decided
1011 * to leave these two devices in the list.
1012 */
1013UNUSUAL_DEV( 0x07c4, 0xa001, 0x0000, 0xffff,
1014 "SIIG/Datafab",
1015 "SIIG/Datafab Memory Stick+CF Reader/Writer",
1016 US_SC_SCSI, US_PR_DATAFAB, NULL,
1017 0 ),
1018
1019/* Reported by Josef Reisinger <josef.reisinger@netcologne.de> */
1020UNUSUAL_DEV( 0x07c4, 0xa002, 0x0000, 0xffff,
1021 "Datafab/Unknown",
1022 "MD2/MD3 Disk enclosure",
1023 US_SC_SCSI, US_PR_DATAFAB, NULL,
1024 US_FL_SINGLE_LUN ),
1025
1026UNUSUAL_DEV( 0x07c4, 0xa003, 0x0000, 0xffff,
1027 "Datafab/Unknown",
1028 "Datafab-based Reader",
1029 US_SC_SCSI, US_PR_DATAFAB, NULL,
1030 0 ),
1031
1032UNUSUAL_DEV( 0x07c4, 0xa004, 0x0000, 0xffff,
1033 "Datafab/Unknown",
1034 "Datafab-based Reader",
1035 US_SC_SCSI, US_PR_DATAFAB, NULL,
1036 0 ),
1037
1038UNUSUAL_DEV( 0x07c4, 0xa005, 0x0000, 0xffff,
1039 "PNY/Datafab",
1040 "PNY/Datafab CF+SM Reader",
1041 US_SC_SCSI, US_PR_DATAFAB, NULL,
1042 0 ),
1043
1044UNUSUAL_DEV( 0x07c4, 0xa006, 0x0000, 0xffff,
1045 "Simple Tech/Datafab",
1046 "Simple Tech/Datafab CF+SM Reader",
1047 US_SC_SCSI, US_PR_DATAFAB, NULL,
1048 0 ),
1049#endif
1050
1051#ifdef CONFIG_USB_STORAGE_DATAFAB
1052/* Submitted by Olaf Hering <olh@suse.de> */
1053UNUSUAL_DEV( 0x07c4, 0xa109, 0x0000, 0xffff,
1054 "Datafab Systems, Inc.",
1055 "USB to CF + SM Combo (LC1)",
1056 US_SC_SCSI, US_PR_DATAFAB, NULL,
1057 0 ),
1058#endif
1059
1060#ifdef CONFIG_USB_STORAGE_DATAFAB
1061/* Reported by Felix Moeller <felix@derklecks.de>
1062 * in Germany this is sold by Hama with the productnumber 46952
1063 * as "DualSlot CompactFlash(TM) & MStick Drive USB"
1064 */
1065UNUSUAL_DEV( 0x07c4, 0xa10b, 0x0000, 0xffff,
1066 "DataFab Systems Inc.",
1067 "USB CF+MS",
1068 US_SC_SCSI, US_PR_DATAFAB, NULL,
1069 0 ),
1070
1071#endif
1072
1073/* Datafab KECF-USB / Sagatek DCS-CF / Simpletech Flashlink UCF-100 995/* Datafab KECF-USB / Sagatek DCS-CF / Simpletech Flashlink UCF-100
1074 * Only revision 1.13 tested (same for all of the above devices, 996 * Only revision 1.13 tested (same for all of the above devices,
1075 * based on the Datafab DF-UG-07 chip). Needed for US_FL_FIX_INQUIRY. 997 * based on the Datafab DF-UG-07 chip). Needed for US_FL_FIX_INQUIRY.
@@ -1273,14 +1195,6 @@ UNUSUAL_DEV( 0x0bc2, 0x3010, 0x0000, 0x0000,
1273 US_SC_DEVICE, US_PR_DEVICE, NULL, 1195 US_SC_DEVICE, US_PR_DEVICE, NULL,
1274 US_FL_SANE_SENSE ), 1196 US_FL_SANE_SENSE ),
1275 1197
1276#ifdef CONFIG_USB_STORAGE_DATAFAB
1277UNUSUAL_DEV( 0x0c0b, 0xa109, 0x0000, 0xffff,
1278 "Acomdata",
1279 "CF",
1280 US_SC_SCSI, US_PR_DATAFAB, NULL,
1281 US_FL_SINGLE_LUN ),
1282#endif
1283
1284UNUSUAL_DEV( 0x0d49, 0x7310, 0x0000, 0x9999, 1198UNUSUAL_DEV( 0x0d49, 0x7310, 0x0000, 0x9999,
1285 "Maxtor", 1199 "Maxtor",
1286 "USB to SATA", 1200 "USB to SATA",
diff --git a/drivers/usb/storage/usb.c b/drivers/usb/storage/usb.c
index 985275d5d4c..a537b3513b9 100644
--- a/drivers/usb/storage/usb.c
+++ b/drivers/usb/storage/usb.c
@@ -66,9 +66,6 @@
66#include "debug.h" 66#include "debug.h"
67#include "initializers.h" 67#include "initializers.h"
68 68
69#ifdef CONFIG_USB_STORAGE_DATAFAB
70#include "datafab.h"
71#endif
72#ifdef CONFIG_USB_STORAGE_JUMPSHOT 69#ifdef CONFIG_USB_STORAGE_JUMPSHOT
73#include "jumpshot.h" 70#include "jumpshot.h"
74#endif 71#endif
@@ -604,15 +601,6 @@ static void get_transport(struct us_data *us)
604 us->transport_reset = usb_stor_Bulk_reset; 601 us->transport_reset = usb_stor_Bulk_reset;
605 break; 602 break;
606 603
607#ifdef CONFIG_USB_STORAGE_DATAFAB
608 case US_PR_DATAFAB:
609 us->transport_name = "Datafab Bulk-Only";
610 us->transport = datafab_transport;
611 us->transport_reset = usb_stor_Bulk_reset;
612 us->max_lun = 1;
613 break;
614#endif
615
616#ifdef CONFIG_USB_STORAGE_JUMPSHOT 604#ifdef CONFIG_USB_STORAGE_JUMPSHOT
617 case US_PR_JUMPSHOT: 605 case US_PR_JUMPSHOT:
618 us->transport_name = "Lexar Jumpshot Control/Bulk"; 606 us->transport_name = "Lexar Jumpshot Control/Bulk";
diff --git a/drivers/usb/storage/usual-tables.c b/drivers/usb/storage/usual-tables.c
index a50f0eefb73..c6ceac62cf6 100644
--- a/drivers/usb/storage/usual-tables.c
+++ b/drivers/usb/storage/usual-tables.c
@@ -78,6 +78,7 @@ struct ignore_entry {
78 78
79static struct ignore_entry ignore_ids[] = { 79static struct ignore_entry ignore_ids[] = {
80# include "unusual_cypress.h" 80# include "unusual_cypress.h"
81# include "unusual_datafab.h"
81# include "unusual_freecom.h" 82# include "unusual_freecom.h"
82# include "unusual_isd200.h" 83# include "unusual_isd200.h"
83# include "unusual_sddr09.h" 84# include "unusual_sddr09.h"