diff options
author | Rene Buergel <rene.buergel@sohard.de> | 2012-09-18 03:00:41 -0400 |
---|---|---|
committer | Greg Kroah-Hartman <gregkh@linuxfoundation.org> | 2012-09-18 12:23:47 -0400 |
commit | cc183e2a5ebfdddc8d3498149cae6b4c40551a68 (patch) | |
tree | c1e07cdd398ac4f535da041ada1cb9f145a36357 /drivers/usb/serial/ezusb.c | |
parent | 9fa5780beea1274d498a224822397100022da7d4 (diff) |
USB: ezusb: add support for Cypress FX2LP
This Patch adds support for the newer Cypress FX2LP. It also adapts
three drivers currently using ezusb to the interface change. (whiteheat
and keyspan[_pda])
Signed-off-by: René Bürgel <rene.buergel@sohard.de>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Diffstat (limited to 'drivers/usb/serial/ezusb.c')
-rw-r--r-- | drivers/usb/serial/ezusb.c | 37 |
1 files changed, 31 insertions, 6 deletions
diff --git a/drivers/usb/serial/ezusb.c b/drivers/usb/serial/ezusb.c index a9b5263221fa..bc3076f2c066 100644 --- a/drivers/usb/serial/ezusb.c +++ b/drivers/usb/serial/ezusb.c | |||
@@ -14,11 +14,25 @@ | |||
14 | #include <linux/module.h> | 14 | #include <linux/module.h> |
15 | #include <linux/usb.h> | 15 | #include <linux/usb.h> |
16 | 16 | ||
17 | /* EZ-USB Control and Status Register. Bit 0 controls 8051 reset */ | 17 | struct ezusb_fx_type { |
18 | #define CPUCS_REG 0x7F92 | 18 | /* EZ-USB Control and Status Register. Bit 0 controls 8051 reset */ |
19 | unsigned short cpucs_reg; | ||
20 | unsigned short max_internal_adress; | ||
21 | }; | ||
19 | 22 | ||
20 | /* Command for writing to internal memory */ | 23 | struct ezusb_fx_type ezusb_fx1 = { |
24 | .cpucs_reg = 0x7F92, | ||
25 | .max_internal_adress = 0x1B3F, | ||
26 | }; | ||
27 | |||
28 | struct ezusb_fx_type ezusb_fx2 = { | ||
29 | .cpucs_reg = 0xE600, | ||
30 | .max_internal_adress = 0x3FFF, | ||
31 | }; | ||
32 | |||
33 | /* Commands for writing to memory */ | ||
21 | #define WRITE_INT_RAM 0xA0 | 34 | #define WRITE_INT_RAM 0xA0 |
35 | #define WRITE_EXT_RAM 0xA3 | ||
22 | 36 | ||
23 | int ezusb_writememory(struct usb_device *dev, int address, | 37 | int ezusb_writememory(struct usb_device *dev, int address, |
24 | unsigned char *data, int length, __u8 request) | 38 | unsigned char *data, int length, __u8 request) |
@@ -44,13 +58,24 @@ int ezusb_writememory(struct usb_device *dev, int address, | |||
44 | } | 58 | } |
45 | EXPORT_SYMBOL_GPL(ezusb_writememory); | 59 | EXPORT_SYMBOL_GPL(ezusb_writememory); |
46 | 60 | ||
47 | int ezusb_set_reset(struct usb_device *dev, unsigned char reset_bit) | 61 | int ezusb_set_reset(struct usb_device *dev, unsigned short cpucs_reg, |
62 | unsigned char reset_bit) | ||
48 | { | 63 | { |
49 | int response = ezusb_writememory(dev, CPUCS_REG, &reset_bit, 1, WRITE_INT_RAM); | 64 | int response = ezusb_writememory(dev, cpucs_reg, &reset_bit, 1, WRITE_INT_RAM); |
50 | if (response < 0) | 65 | if (response < 0) |
51 | dev_err(&dev->dev, "%s-%d failed: %d\n", | 66 | dev_err(&dev->dev, "%s-%d failed: %d\n", |
52 | __func__, reset_bit, response); | 67 | __func__, reset_bit, response); |
53 | return response; | 68 | return response; |
54 | } | 69 | } |
55 | EXPORT_SYMBOL_GPL(ezusb_set_reset); | ||
56 | 70 | ||
71 | int ezusb_fx1_set_reset(struct usb_device *dev, unsigned char reset_bit) | ||
72 | { | ||
73 | return ezusb_set_reset(dev, ezusb_fx1.cpucs_reg, reset_bit); | ||
74 | } | ||
75 | EXPORT_SYMBOL_GPL(ezusb_fx1_set_reset); | ||
76 | |||
77 | int ezusb_fx2_set_reset(struct usb_device *dev, unsigned char reset_bit) | ||
78 | { | ||
79 | return ezusb_set_reset(dev, ezusb_fx2.cpucs_reg, reset_bit); | ||
80 | } | ||
81 | EXPORT_SYMBOL_GPL(ezusb_fx2_set_reset); | ||