aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/usb/serial/ezusb.c
diff options
context:
space:
mode:
authorRene Buergel <rene.buergel@sohard.de>2012-09-18 03:00:41 -0400
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>2012-09-18 12:23:47 -0400
commitcc183e2a5ebfdddc8d3498149cae6b4c40551a68 (patch)
treec1e07cdd398ac4f535da041ada1cb9f145a36357 /drivers/usb/serial/ezusb.c
parent9fa5780beea1274d498a224822397100022da7d4 (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.c37
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 */ 17struct 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 */ 23struct ezusb_fx_type ezusb_fx1 = {
24 .cpucs_reg = 0x7F92,
25 .max_internal_adress = 0x1B3F,
26};
27
28struct 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
23int ezusb_writememory(struct usb_device *dev, int address, 37int 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}
45EXPORT_SYMBOL_GPL(ezusb_writememory); 59EXPORT_SYMBOL_GPL(ezusb_writememory);
46 60
47int ezusb_set_reset(struct usb_device *dev, unsigned char reset_bit) 61int 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}
55EXPORT_SYMBOL_GPL(ezusb_set_reset);
56 70
71int 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}
75EXPORT_SYMBOL_GPL(ezusb_fx1_set_reset);
76
77int 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}
81EXPORT_SYMBOL_GPL(ezusb_fx2_set_reset);