diff options
-rw-r--r-- | drivers/usb/storage/Kconfig | 4 | ||||
-rw-r--r-- | drivers/usb/storage/Makefile | 3 | ||||
-rw-r--r-- | drivers/usb/storage/shuttle_usbat.c | 199 | ||||
-rw-r--r-- | drivers/usb/storage/shuttle_usbat.h | 123 | ||||
-rw-r--r-- | drivers/usb/storage/unusual_devs.h | 28 | ||||
-rw-r--r-- | drivers/usb/storage/unusual_usbat.h | 43 | ||||
-rw-r--r-- | drivers/usb/storage/usb.c | 12 | ||||
-rw-r--r-- | drivers/usb/storage/usual-tables.c | 1 |
8 files changed, 227 insertions, 186 deletions
diff --git a/drivers/usb/storage/Kconfig b/drivers/usb/storage/Kconfig index 2c73fa97d94d..44c6b1940f77 100644 --- a/drivers/usb/storage/Kconfig +++ b/drivers/usb/storage/Kconfig | |||
@@ -64,7 +64,7 @@ config USB_STORAGE_ISD200 | |||
64 | If this driver is compiled as a module, it will be named ums-isd200. | 64 | If this driver is compiled as a module, it will be named ums-isd200. |
65 | 65 | ||
66 | config USB_STORAGE_USBAT | 66 | config USB_STORAGE_USBAT |
67 | bool "USBAT/USBAT02-based storage support" | 67 | tristate "USBAT/USBAT02-based storage support" |
68 | depends on USB_STORAGE | 68 | depends on USB_STORAGE |
69 | help | 69 | help |
70 | Say Y here to include additional code to support storage devices | 70 | Say Y here to include additional code to support storage devices |
@@ -84,6 +84,8 @@ config USB_STORAGE_USBAT | |||
84 | - RCA LYRA MP3 portable | 84 | - RCA LYRA MP3 portable |
85 | - Sandisk ImageMate SDDR-05b | 85 | - Sandisk ImageMate SDDR-05b |
86 | 86 | ||
87 | If this driver is compiled as a module, it will be named ums-usbat. | ||
88 | |||
87 | config USB_STORAGE_SDDR09 | 89 | config USB_STORAGE_SDDR09 |
88 | tristate "SanDisk SDDR-09 (and other SmartMedia, including DPCM) support" | 90 | tristate "SanDisk SDDR-09 (and other SmartMedia, including DPCM) support" |
89 | depends on USB_STORAGE | 91 | depends on USB_STORAGE |
diff --git a/drivers/usb/storage/Makefile b/drivers/usb/storage/Makefile index 0650f022e561..2387368cb7ae 100644 --- a/drivers/usb/storage/Makefile +++ b/drivers/usb/storage/Makefile | |||
@@ -10,7 +10,6 @@ EXTRA_CFLAGS := -Idrivers/scsi | |||
10 | obj-$(CONFIG_USB_STORAGE) += usb-storage.o | 10 | obj-$(CONFIG_USB_STORAGE) += usb-storage.o |
11 | 11 | ||
12 | usb-storage-obj-$(CONFIG_USB_STORAGE_DEBUG) += debug.o | 12 | usb-storage-obj-$(CONFIG_USB_STORAGE_DEBUG) += debug.o |
13 | usb-storage-obj-$(CONFIG_USB_STORAGE_USBAT) += shuttle_usbat.o | ||
14 | usb-storage-obj-$(CONFIG_USB_STORAGE_FREECOM) += freecom.o | 13 | usb-storage-obj-$(CONFIG_USB_STORAGE_FREECOM) += freecom.o |
15 | usb-storage-obj-$(CONFIG_USB_STORAGE_DATAFAB) += datafab.o | 14 | usb-storage-obj-$(CONFIG_USB_STORAGE_DATAFAB) += datafab.o |
16 | usb-storage-obj-$(CONFIG_USB_STORAGE_JUMPSHOT) += jumpshot.o | 15 | usb-storage-obj-$(CONFIG_USB_STORAGE_JUMPSHOT) += jumpshot.o |
@@ -31,8 +30,10 @@ obj-$(CONFIG_USB_STORAGE_CYPRESS_ATACB) += ums-cypress.o | |||
31 | obj-$(CONFIG_USB_STORAGE_ISD200) += ums-isd200.o | 30 | obj-$(CONFIG_USB_STORAGE_ISD200) += ums-isd200.o |
32 | obj-$(CONFIG_USB_STORAGE_SDDR09) += ums-sddr09.o | 31 | obj-$(CONFIG_USB_STORAGE_SDDR09) += ums-sddr09.o |
33 | obj-$(CONFIG_USB_STORAGE_SDDR55) += ums-sddr55.o | 32 | obj-$(CONFIG_USB_STORAGE_SDDR55) += ums-sddr55.o |
33 | obj-$(CONFIG_USB_STORAGE_USBAT) += ums-usbat.o | ||
34 | 34 | ||
35 | ums-cypress-objs := cypress_atacb.o | 35 | ums-cypress-objs := cypress_atacb.o |
36 | ums-isd200-objs := isd200.o | 36 | ums-isd200-objs := isd200.o |
37 | ums-sddr09-objs := sddr09.o | 37 | ums-sddr09-objs := sddr09.o |
38 | ums-sddr55-objs := sddr55.o | 38 | ums-sddr55-objs := sddr55.o |
39 | ums-usbat-objs := shuttle_usbat.o | ||
diff --git a/drivers/usb/storage/shuttle_usbat.c b/drivers/usb/storage/shuttle_usbat.c index ae6d64810d2a..d4fe0bb327a7 100644 --- a/drivers/usb/storage/shuttle_usbat.c +++ b/drivers/usb/storage/shuttle_usbat.c | |||
@@ -42,6 +42,7 @@ | |||
42 | */ | 42 | */ |
43 | 43 | ||
44 | #include <linux/errno.h> | 44 | #include <linux/errno.h> |
45 | #include <linux/module.h> | ||
45 | #include <linux/slab.h> | 46 | #include <linux/slab.h> |
46 | #include <linux/cdrom.h> | 47 | #include <linux/cdrom.h> |
47 | 48 | ||
@@ -52,7 +53,97 @@ | |||
52 | #include "transport.h" | 53 | #include "transport.h" |
53 | #include "protocol.h" | 54 | #include "protocol.h" |
54 | #include "debug.h" | 55 | #include "debug.h" |
55 | #include "shuttle_usbat.h" | 56 | |
57 | |||
58 | /* Supported device types */ | ||
59 | #define USBAT_DEV_HP8200 0x01 | ||
60 | #define USBAT_DEV_FLASH 0x02 | ||
61 | |||
62 | #define USBAT_EPP_PORT 0x10 | ||
63 | #define USBAT_EPP_REGISTER 0x30 | ||
64 | #define USBAT_ATA 0x40 | ||
65 | #define USBAT_ISA 0x50 | ||
66 | |||
67 | /* Commands (need to be logically OR'd with an access type */ | ||
68 | #define USBAT_CMD_READ_REG 0x00 | ||
69 | #define USBAT_CMD_WRITE_REG 0x01 | ||
70 | #define USBAT_CMD_READ_BLOCK 0x02 | ||
71 | #define USBAT_CMD_WRITE_BLOCK 0x03 | ||
72 | #define USBAT_CMD_COND_READ_BLOCK 0x04 | ||
73 | #define USBAT_CMD_COND_WRITE_BLOCK 0x05 | ||
74 | #define USBAT_CMD_WRITE_REGS 0x07 | ||
75 | |||
76 | /* Commands (these don't need an access type) */ | ||
77 | #define USBAT_CMD_EXEC_CMD 0x80 | ||
78 | #define USBAT_CMD_SET_FEAT 0x81 | ||
79 | #define USBAT_CMD_UIO 0x82 | ||
80 | |||
81 | /* Methods of accessing UIO register */ | ||
82 | #define USBAT_UIO_READ 1 | ||
83 | #define USBAT_UIO_WRITE 0 | ||
84 | |||
85 | /* Qualifier bits */ | ||
86 | #define USBAT_QUAL_FCQ 0x20 /* full compare */ | ||
87 | #define USBAT_QUAL_ALQ 0x10 /* auto load subcount */ | ||
88 | |||
89 | /* USBAT Flash Media status types */ | ||
90 | #define USBAT_FLASH_MEDIA_NONE 0 | ||
91 | #define USBAT_FLASH_MEDIA_CF 1 | ||
92 | |||
93 | /* USBAT Flash Media change types */ | ||
94 | #define USBAT_FLASH_MEDIA_SAME 0 | ||
95 | #define USBAT_FLASH_MEDIA_CHANGED 1 | ||
96 | |||
97 | /* USBAT ATA registers */ | ||
98 | #define USBAT_ATA_DATA 0x10 /* read/write data (R/W) */ | ||
99 | #define USBAT_ATA_FEATURES 0x11 /* set features (W) */ | ||
100 | #define USBAT_ATA_ERROR 0x11 /* error (R) */ | ||
101 | #define USBAT_ATA_SECCNT 0x12 /* sector count (R/W) */ | ||
102 | #define USBAT_ATA_SECNUM 0x13 /* sector number (R/W) */ | ||
103 | #define USBAT_ATA_LBA_ME 0x14 /* cylinder low (R/W) */ | ||
104 | #define USBAT_ATA_LBA_HI 0x15 /* cylinder high (R/W) */ | ||
105 | #define USBAT_ATA_DEVICE 0x16 /* head/device selection (R/W) */ | ||
106 | #define USBAT_ATA_STATUS 0x17 /* device status (R) */ | ||
107 | #define USBAT_ATA_CMD 0x17 /* device command (W) */ | ||
108 | #define USBAT_ATA_ALTSTATUS 0x0E /* status (no clear IRQ) (R) */ | ||
109 | |||
110 | /* USBAT User I/O Data registers */ | ||
111 | #define USBAT_UIO_EPAD 0x80 /* Enable Peripheral Control Signals */ | ||
112 | #define USBAT_UIO_CDT 0x40 /* Card Detect (Read Only) */ | ||
113 | /* CDT = ACKD & !UI1 & !UI0 */ | ||
114 | #define USBAT_UIO_1 0x20 /* I/O 1 */ | ||
115 | #define USBAT_UIO_0 0x10 /* I/O 0 */ | ||
116 | #define USBAT_UIO_EPP_ATA 0x08 /* 1=EPP mode, 0=ATA mode */ | ||
117 | #define USBAT_UIO_UI1 0x04 /* Input 1 */ | ||
118 | #define USBAT_UIO_UI0 0x02 /* Input 0 */ | ||
119 | #define USBAT_UIO_INTR_ACK 0x01 /* Interrupt (ATA/ISA)/Acknowledge (EPP) */ | ||
120 | |||
121 | /* USBAT User I/O Enable registers */ | ||
122 | #define USBAT_UIO_DRVRST 0x80 /* Reset Peripheral */ | ||
123 | #define USBAT_UIO_ACKD 0x40 /* Enable Card Detect */ | ||
124 | #define USBAT_UIO_OE1 0x20 /* I/O 1 set=output/clr=input */ | ||
125 | /* If ACKD=1, set OE1 to 1 also. */ | ||
126 | #define USBAT_UIO_OE0 0x10 /* I/O 0 set=output/clr=input */ | ||
127 | #define USBAT_UIO_ADPRST 0x01 /* Reset SCM chip */ | ||
128 | |||
129 | /* USBAT Features */ | ||
130 | #define USBAT_FEAT_ETEN 0x80 /* External trigger enable */ | ||
131 | #define USBAT_FEAT_U1 0x08 | ||
132 | #define USBAT_FEAT_U0 0x04 | ||
133 | #define USBAT_FEAT_ET1 0x02 | ||
134 | #define USBAT_FEAT_ET2 0x01 | ||
135 | |||
136 | struct usbat_info { | ||
137 | int devicetype; | ||
138 | |||
139 | /* Used for Flash readers only */ | ||
140 | unsigned long sectors; /* total sector count */ | ||
141 | unsigned long ssize; /* sector size in bytes */ | ||
142 | |||
143 | unsigned char sense_key; | ||
144 | unsigned long sense_asc; /* additional sense code */ | ||
145 | unsigned long sense_ascq; /* additional sense code qualifier */ | ||
146 | }; | ||
56 | 147 | ||
57 | #define short_pack(LSB,MSB) ( ((u16)(LSB)) | ( ((u16)(MSB))<<8 ) ) | 148 | #define short_pack(LSB,MSB) ( ((u16)(LSB)) | ( ((u16)(MSB))<<8 ) ) |
58 | #define LSB_of(s) ((s)&0xFF) | 149 | #define LSB_of(s) ((s)&0xFF) |
@@ -63,6 +154,48 @@ static int transferred = 0; | |||
63 | static int usbat_flash_transport(struct scsi_cmnd * srb, struct us_data *us); | 154 | static int usbat_flash_transport(struct scsi_cmnd * srb, struct us_data *us); |
64 | static int usbat_hp8200e_transport(struct scsi_cmnd *srb, struct us_data *us); | 155 | static int usbat_hp8200e_transport(struct scsi_cmnd *srb, struct us_data *us); |
65 | 156 | ||
157 | static int init_usbat_cd(struct us_data *us); | ||
158 | static int init_usbat_flash(struct us_data *us); | ||
159 | |||
160 | |||
161 | /* | ||
162 | * The table of devices | ||
163 | */ | ||
164 | #define UNUSUAL_DEV(id_vendor, id_product, bcdDeviceMin, bcdDeviceMax, \ | ||
165 | vendorName, productName, useProtocol, useTransport, \ | ||
166 | initFunction, flags) \ | ||
167 | { USB_DEVICE_VER(id_vendor, id_product, bcdDeviceMin, bcdDeviceMax), \ | ||
168 | .driver_info = (flags)|(USB_US_TYPE_STOR<<24) } | ||
169 | |||
170 | struct usb_device_id usbat_usb_ids[] = { | ||
171 | # include "unusual_usbat.h" | ||
172 | { } /* Terminating entry */ | ||
173 | }; | ||
174 | MODULE_DEVICE_TABLE(usb, usbat_usb_ids); | ||
175 | |||
176 | #undef UNUSUAL_DEV | ||
177 | |||
178 | /* | ||
179 | * The flags table | ||
180 | */ | ||
181 | #define UNUSUAL_DEV(idVendor, idProduct, bcdDeviceMin, bcdDeviceMax, \ | ||
182 | vendor_name, product_name, use_protocol, use_transport, \ | ||
183 | init_function, Flags) \ | ||
184 | { \ | ||
185 | .vendorName = vendor_name, \ | ||
186 | .productName = product_name, \ | ||
187 | .useProtocol = use_protocol, \ | ||
188 | .useTransport = use_transport, \ | ||
189 | .initFunction = init_function, \ | ||
190 | } | ||
191 | |||
192 | static struct us_unusual_dev usbat_unusual_dev_list[] = { | ||
193 | # include "unusual_usbat.h" | ||
194 | { } /* Terminating entry */ | ||
195 | }; | ||
196 | |||
197 | #undef UNUSUAL_DEV | ||
198 | |||
66 | /* | 199 | /* |
67 | * Convenience function to produce an ATA read/write sectors command | 200 | * Convenience function to produce an ATA read/write sectors command |
68 | * Use cmd=0x20 for read, cmd=0x30 for write | 201 | * Use cmd=0x20 for read, cmd=0x30 for write |
@@ -1684,37 +1817,61 @@ static int usbat_flash_transport(struct scsi_cmnd * srb, struct us_data *us) | |||
1684 | return USB_STOR_TRANSPORT_FAILED; | 1817 | return USB_STOR_TRANSPORT_FAILED; |
1685 | } | 1818 | } |
1686 | 1819 | ||
1687 | int init_usbat_cd(struct us_data *us) | 1820 | static int init_usbat_cd(struct us_data *us) |
1688 | { | 1821 | { |
1689 | return init_usbat(us, USBAT_DEV_HP8200); | 1822 | return init_usbat(us, USBAT_DEV_HP8200); |
1690 | } | 1823 | } |
1691 | 1824 | ||
1692 | 1825 | static int init_usbat_flash(struct us_data *us) | |
1693 | int init_usbat_flash(struct us_data *us) | ||
1694 | { | 1826 | { |
1695 | return init_usbat(us, USBAT_DEV_FLASH); | 1827 | return init_usbat(us, USBAT_DEV_FLASH); |
1696 | } | 1828 | } |
1697 | 1829 | ||
1698 | int init_usbat_probe(struct us_data *us) | 1830 | static int usbat_probe(struct usb_interface *intf, |
1831 | const struct usb_device_id *id) | ||
1699 | { | 1832 | { |
1700 | return init_usbat(us, 0); | 1833 | struct us_data *us; |
1834 | int result; | ||
1835 | |||
1836 | result = usb_stor_probe1(&us, intf, id, | ||
1837 | (id - usbat_usb_ids) + usbat_unusual_dev_list); | ||
1838 | if (result) | ||
1839 | return result; | ||
1840 | |||
1841 | /* The actual transport will be determined later by the | ||
1842 | * initialization routine; this is just a placeholder. | ||
1843 | */ | ||
1844 | us->transport_name = "Shuttle USBAT"; | ||
1845 | us->transport = usbat_flash_transport; | ||
1846 | us->transport_reset = usb_stor_CB_reset; | ||
1847 | us->max_lun = 1; | ||
1848 | |||
1849 | result = usb_stor_probe2(us); | ||
1850 | return result; | ||
1701 | } | 1851 | } |
1702 | 1852 | ||
1703 | /* | 1853 | static struct usb_driver usbat_driver = { |
1704 | * Default transport function. Attempts to detect which transport function | 1854 | .name = "ums-usbat", |
1705 | * should be called, makes it the new default, and calls it. | 1855 | .probe = usbat_probe, |
1706 | * | 1856 | .disconnect = usb_stor_disconnect, |
1707 | * This function should never be called. Our usbat_init() function detects the | 1857 | .suspend = usb_stor_suspend, |
1708 | * device type and changes the us->transport ptr to the transport function | 1858 | .resume = usb_stor_resume, |
1709 | * relevant to the device. | 1859 | .reset_resume = usb_stor_reset_resume, |
1710 | * However, we'll support this impossible(?) case anyway. | 1860 | .pre_reset = usb_stor_pre_reset, |
1711 | */ | 1861 | .post_reset = usb_stor_post_reset, |
1712 | int usbat_transport(struct scsi_cmnd *srb, struct us_data *us) | 1862 | .id_table = usbat_usb_ids, |
1863 | .soft_unbind = 1, | ||
1864 | }; | ||
1865 | |||
1866 | static int __init usbat_init(void) | ||
1713 | { | 1867 | { |
1714 | struct usbat_info *info = (struct usbat_info*) (us->extra); | 1868 | return usb_register(&usbat_driver); |
1715 | 1869 | } | |
1716 | if (usbat_set_transport(us, info, 0)) | ||
1717 | return USB_STOR_TRANSPORT_ERROR; | ||
1718 | 1870 | ||
1719 | return us->transport(srb, us); | 1871 | static void __exit usbat_exit(void) |
1872 | { | ||
1873 | usb_deregister(&usbat_driver); | ||
1720 | } | 1874 | } |
1875 | |||
1876 | module_init(usbat_init); | ||
1877 | module_exit(usbat_exit); | ||
diff --git a/drivers/usb/storage/shuttle_usbat.h b/drivers/usb/storage/shuttle_usbat.h deleted file mode 100644 index d8bfc43e9044..000000000000 --- a/drivers/usb/storage/shuttle_usbat.h +++ /dev/null | |||
@@ -1,123 +0,0 @@ | |||
1 | /* Driver for SCM Microsystems USB-ATAPI cable | ||
2 | * Header File | ||
3 | * | ||
4 | * Current development and maintenance by: | ||
5 | * (c) 2000 Robert Baruch (autophile@dol.net) | ||
6 | * (c) 2004, 2005 Daniel Drake <dsd@gentoo.org> | ||
7 | * | ||
8 | * See shuttle_usbat.c for more explanation | ||
9 | * | ||
10 | * This program is free software; you can redistribute it and/or modify it | ||
11 | * under the terms of the GNU General Public License as published by the | ||
12 | * Free Software Foundation; either version 2, or (at your option) any | ||
13 | * later version. | ||
14 | * | ||
15 | * This program is distributed in the hope that it will be useful, but | ||
16 | * WITHOUT ANY WARRANTY; without even the implied warranty of | ||
17 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | ||
18 | * General Public License for more details. | ||
19 | * | ||
20 | * You should have received a copy of the GNU General Public License along | ||
21 | * with this program; if not, write to the Free Software Foundation, Inc., | ||
22 | * 675 Mass Ave, Cambridge, MA 02139, USA. | ||
23 | */ | ||
24 | |||
25 | #ifndef _USB_SHUTTLE_USBAT_H | ||
26 | #define _USB_SHUTTLE_USBAT_H | ||
27 | |||
28 | /* Supported device types */ | ||
29 | #define USBAT_DEV_HP8200 0x01 | ||
30 | #define USBAT_DEV_FLASH 0x02 | ||
31 | |||
32 | #define USBAT_EPP_PORT 0x10 | ||
33 | #define USBAT_EPP_REGISTER 0x30 | ||
34 | #define USBAT_ATA 0x40 | ||
35 | #define USBAT_ISA 0x50 | ||
36 | |||
37 | /* Commands (need to be logically OR'd with an access type */ | ||
38 | #define USBAT_CMD_READ_REG 0x00 | ||
39 | #define USBAT_CMD_WRITE_REG 0x01 | ||
40 | #define USBAT_CMD_READ_BLOCK 0x02 | ||
41 | #define USBAT_CMD_WRITE_BLOCK 0x03 | ||
42 | #define USBAT_CMD_COND_READ_BLOCK 0x04 | ||
43 | #define USBAT_CMD_COND_WRITE_BLOCK 0x05 | ||
44 | #define USBAT_CMD_WRITE_REGS 0x07 | ||
45 | |||
46 | /* Commands (these don't need an access type) */ | ||
47 | #define USBAT_CMD_EXEC_CMD 0x80 | ||
48 | #define USBAT_CMD_SET_FEAT 0x81 | ||
49 | #define USBAT_CMD_UIO 0x82 | ||
50 | |||
51 | /* Methods of accessing UIO register */ | ||
52 | #define USBAT_UIO_READ 1 | ||
53 | #define USBAT_UIO_WRITE 0 | ||
54 | |||
55 | /* Qualifier bits */ | ||
56 | #define USBAT_QUAL_FCQ 0x20 /* full compare */ | ||
57 | #define USBAT_QUAL_ALQ 0x10 /* auto load subcount */ | ||
58 | |||
59 | /* USBAT Flash Media status types */ | ||
60 | #define USBAT_FLASH_MEDIA_NONE 0 | ||
61 | #define USBAT_FLASH_MEDIA_CF 1 | ||
62 | |||
63 | /* USBAT Flash Media change types */ | ||
64 | #define USBAT_FLASH_MEDIA_SAME 0 | ||
65 | #define USBAT_FLASH_MEDIA_CHANGED 1 | ||
66 | |||
67 | /* USBAT ATA registers */ | ||
68 | #define USBAT_ATA_DATA 0x10 /* read/write data (R/W) */ | ||
69 | #define USBAT_ATA_FEATURES 0x11 /* set features (W) */ | ||
70 | #define USBAT_ATA_ERROR 0x11 /* error (R) */ | ||
71 | #define USBAT_ATA_SECCNT 0x12 /* sector count (R/W) */ | ||
72 | #define USBAT_ATA_SECNUM 0x13 /* sector number (R/W) */ | ||
73 | #define USBAT_ATA_LBA_ME 0x14 /* cylinder low (R/W) */ | ||
74 | #define USBAT_ATA_LBA_HI 0x15 /* cylinder high (R/W) */ | ||
75 | #define USBAT_ATA_DEVICE 0x16 /* head/device selection (R/W) */ | ||
76 | #define USBAT_ATA_STATUS 0x17 /* device status (R) */ | ||
77 | #define USBAT_ATA_CMD 0x17 /* device command (W) */ | ||
78 | #define USBAT_ATA_ALTSTATUS 0x0E /* status (no clear IRQ) (R) */ | ||
79 | |||
80 | /* USBAT User I/O Data registers */ | ||
81 | #define USBAT_UIO_EPAD 0x80 /* Enable Peripheral Control Signals */ | ||
82 | #define USBAT_UIO_CDT 0x40 /* Card Detect (Read Only) */ | ||
83 | /* CDT = ACKD & !UI1 & !UI0 */ | ||
84 | #define USBAT_UIO_1 0x20 /* I/O 1 */ | ||
85 | #define USBAT_UIO_0 0x10 /* I/O 0 */ | ||
86 | #define USBAT_UIO_EPP_ATA 0x08 /* 1=EPP mode, 0=ATA mode */ | ||
87 | #define USBAT_UIO_UI1 0x04 /* Input 1 */ | ||
88 | #define USBAT_UIO_UI0 0x02 /* Input 0 */ | ||
89 | #define USBAT_UIO_INTR_ACK 0x01 /* Interrupt (ATA/ISA)/Acknowledge (EPP) */ | ||
90 | |||
91 | /* USBAT User I/O Enable registers */ | ||
92 | #define USBAT_UIO_DRVRST 0x80 /* Reset Peripheral */ | ||
93 | #define USBAT_UIO_ACKD 0x40 /* Enable Card Detect */ | ||
94 | #define USBAT_UIO_OE1 0x20 /* I/O 1 set=output/clr=input */ | ||
95 | /* If ACKD=1, set OE1 to 1 also. */ | ||
96 | #define USBAT_UIO_OE0 0x10 /* I/O 0 set=output/clr=input */ | ||
97 | #define USBAT_UIO_ADPRST 0x01 /* Reset SCM chip */ | ||
98 | |||
99 | /* USBAT Features */ | ||
100 | #define USBAT_FEAT_ETEN 0x80 /* External trigger enable */ | ||
101 | #define USBAT_FEAT_U1 0x08 | ||
102 | #define USBAT_FEAT_U0 0x04 | ||
103 | #define USBAT_FEAT_ET1 0x02 | ||
104 | #define USBAT_FEAT_ET2 0x01 | ||
105 | |||
106 | extern int usbat_transport(struct scsi_cmnd *srb, struct us_data *us); | ||
107 | extern int init_usbat_cd(struct us_data *us); | ||
108 | extern int init_usbat_flash(struct us_data *us); | ||
109 | extern int init_usbat_probe(struct us_data *us); | ||
110 | |||
111 | struct usbat_info { | ||
112 | int devicetype; | ||
113 | |||
114 | /* Used for Flash readers only */ | ||
115 | unsigned long sectors; /* total sector count */ | ||
116 | unsigned long ssize; /* sector size in bytes */ | ||
117 | |||
118 | unsigned char sense_key; | ||
119 | unsigned long sense_asc; /* additional sense code */ | ||
120 | unsigned long sense_ascq; /* additional sense code qualifier */ | ||
121 | }; | ||
122 | |||
123 | #endif | ||
diff --git a/drivers/usb/storage/unusual_devs.h b/drivers/usb/storage/unusual_devs.h index eff97aed7bfe..6462c4c54dc0 100644 --- a/drivers/usb/storage/unusual_devs.h +++ b/drivers/usb/storage/unusual_devs.h | |||
@@ -85,18 +85,6 @@ UNUSUAL_DEV( 0x03f0, 0x0107, 0x0200, 0x0200, | |||
85 | "CD-Writer+", | 85 | "CD-Writer+", |
86 | US_SC_8070, US_PR_CB, NULL, 0), | 86 | US_SC_8070, US_PR_CB, NULL, 0), |
87 | 87 | ||
88 | #ifdef CONFIG_USB_STORAGE_USBAT | ||
89 | UNUSUAL_DEV( 0x03f0, 0x0207, 0x0001, 0x0001, | ||
90 | "HP", | ||
91 | "CD-Writer+ 8200e", | ||
92 | US_SC_8070, US_PR_USBAT, init_usbat_cd, 0), | ||
93 | |||
94 | UNUSUAL_DEV( 0x03f0, 0x0307, 0x0001, 0x0001, | ||
95 | "HP", | ||
96 | "CD-Writer+ CD-4e", | ||
97 | US_SC_8070, US_PR_USBAT, init_usbat_cd, 0), | ||
98 | #endif | ||
99 | |||
100 | /* Reported by Ben Efros <ben@pc-doctor.com> */ | 88 | /* Reported by Ben Efros <ben@pc-doctor.com> */ |
101 | UNUSUAL_DEV( 0x03f0, 0x070c, 0x0000, 0x0000, | 89 | UNUSUAL_DEV( 0x03f0, 0x070c, 0x0000, 0x0000, |
102 | "HP", | 90 | "HP", |
@@ -506,14 +494,6 @@ UNUSUAL_DEV( 0x04e6, 0x0101, 0x0200, 0x0200, | |||
506 | "CD-RW Device", | 494 | "CD-RW Device", |
507 | US_SC_8020, US_PR_CB, NULL, 0), | 495 | US_SC_8020, US_PR_CB, NULL, 0), |
508 | 496 | ||
509 | #ifdef CONFIG_USB_STORAGE_USBAT | ||
510 | UNUSUAL_DEV( 0x04e6, 0x1010, 0x0000, 0x9999, | ||
511 | "Shuttle/SCM", | ||
512 | "USBAT-02", | ||
513 | US_SC_SCSI, US_PR_USBAT, init_usbat_flash, | ||
514 | US_FL_SINGLE_LUN), | ||
515 | #endif | ||
516 | |||
517 | /* Reported by Dmitry Khlystov <adminimus@gmail.com> */ | 497 | /* Reported by Dmitry Khlystov <adminimus@gmail.com> */ |
518 | UNUSUAL_DEV( 0x04e8, 0x507c, 0x0220, 0x0220, | 498 | UNUSUAL_DEV( 0x04e8, 0x507c, 0x0220, 0x0220, |
519 | "Samsung", | 499 | "Samsung", |
@@ -972,14 +952,6 @@ UNUSUAL_DEV( 0x0781, 0x0002, 0x0009, 0x0009, | |||
972 | US_SC_DEVICE, US_PR_DEVICE, NULL, | 952 | US_SC_DEVICE, US_PR_DEVICE, NULL, |
973 | US_FL_FIX_CAPACITY ), | 953 | US_FL_FIX_CAPACITY ), |
974 | 954 | ||
975 | #ifdef CONFIG_USB_STORAGE_USBAT | ||
976 | UNUSUAL_DEV( 0x0781, 0x0005, 0x0005, 0x0005, | ||
977 | "Sandisk", | ||
978 | "ImageMate SDDR-05b", | ||
979 | US_SC_SCSI, US_PR_USBAT, init_usbat_flash, | ||
980 | US_FL_SINGLE_LUN ), | ||
981 | #endif | ||
982 | |||
983 | UNUSUAL_DEV( 0x0781, 0x0100, 0x0100, 0x0100, | 955 | UNUSUAL_DEV( 0x0781, 0x0100, 0x0100, 0x0100, |
984 | "Sandisk", | 956 | "Sandisk", |
985 | "ImageMate SDDR-12", | 957 | "ImageMate SDDR-12", |
diff --git a/drivers/usb/storage/unusual_usbat.h b/drivers/usb/storage/unusual_usbat.h new file mode 100644 index 000000000000..80e869f10180 --- /dev/null +++ b/drivers/usb/storage/unusual_usbat.h | |||
@@ -0,0 +1,43 @@ | |||
1 | /* Unusual Devices File for SCM Microsystems (a.k.a. Shuttle) USB-ATAPI cable | ||
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_USBAT) || \ | ||
19 | defined(CONFIG_USB_STORAGE_USBAT_MODULE) | ||
20 | |||
21 | UNUSUAL_DEV( 0x03f0, 0x0207, 0x0001, 0x0001, | ||
22 | "HP", | ||
23 | "CD-Writer+ 8200e", | ||
24 | US_SC_8070, US_PR_USBAT, init_usbat_cd, 0), | ||
25 | |||
26 | UNUSUAL_DEV( 0x03f0, 0x0307, 0x0001, 0x0001, | ||
27 | "HP", | ||
28 | "CD-Writer+ CD-4e", | ||
29 | US_SC_8070, US_PR_USBAT, init_usbat_cd, 0), | ||
30 | |||
31 | UNUSUAL_DEV( 0x04e6, 0x1010, 0x0000, 0x9999, | ||
32 | "Shuttle/SCM", | ||
33 | "USBAT-02", | ||
34 | US_SC_SCSI, US_PR_USBAT, init_usbat_flash, | ||
35 | US_FL_SINGLE_LUN), | ||
36 | |||
37 | UNUSUAL_DEV( 0x0781, 0x0005, 0x0005, 0x0005, | ||
38 | "Sandisk", | ||
39 | "ImageMate SDDR-05b", | ||
40 | US_SC_SCSI, US_PR_USBAT, init_usbat_flash, | ||
41 | US_FL_SINGLE_LUN), | ||
42 | |||
43 | #endif /* defined(CONFIG_USB_STORAGE_USBAT) || ... */ | ||
diff --git a/drivers/usb/storage/usb.c b/drivers/usb/storage/usb.c index 241e1944cf10..3ad22a8142cc 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_USBAT | ||
70 | #include "shuttle_usbat.h" | ||
71 | #endif | ||
72 | #ifdef CONFIG_USB_STORAGE_FREECOM | 69 | #ifdef CONFIG_USB_STORAGE_FREECOM |
73 | #include "freecom.h" | 70 | #include "freecom.h" |
74 | #endif | 71 | #endif |
@@ -610,15 +607,6 @@ static void get_transport(struct us_data *us) | |||
610 | us->transport_reset = usb_stor_Bulk_reset; | 607 | us->transport_reset = usb_stor_Bulk_reset; |
611 | break; | 608 | break; |
612 | 609 | ||
613 | #ifdef CONFIG_USB_STORAGE_USBAT | ||
614 | case US_PR_USBAT: | ||
615 | us->transport_name = "Shuttle USBAT"; | ||
616 | us->transport = usbat_transport; | ||
617 | us->transport_reset = usb_stor_CB_reset; | ||
618 | us->max_lun = 1; | ||
619 | break; | ||
620 | #endif | ||
621 | |||
622 | #ifdef CONFIG_USB_STORAGE_FREECOM | 610 | #ifdef CONFIG_USB_STORAGE_FREECOM |
623 | case US_PR_FREECOM: | 611 | case US_PR_FREECOM: |
624 | us->transport_name = "Freecom"; | 612 | us->transport_name = "Freecom"; |
diff --git a/drivers/usb/storage/usual-tables.c b/drivers/usb/storage/usual-tables.c index be461ee9f005..899a8c8da712 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[] = { | |||
81 | # include "unusual_isd200.h" | 81 | # include "unusual_isd200.h" |
82 | # include "unusual_sddr09.h" | 82 | # include "unusual_sddr09.h" |
83 | # include "unusual_sddr55.h" | 83 | # include "unusual_sddr55.h" |
84 | # include "unusual_usbat.h" | ||
84 | { } /* Terminating entry */ | 85 | { } /* Terminating entry */ |
85 | }; | 86 | }; |
86 | 87 | ||