0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012 #ifndef __MFD_VIPERBOARD_H__
0013 #define __MFD_VIPERBOARD_H__
0014
0015 #include <linux/types.h>
0016 #include <linux/usb.h>
0017
0018 #define VPRBRD_EP_OUT 0x02
0019 #define VPRBRD_EP_IN 0x86
0020
0021 #define VPRBRD_I2C_MSG_LEN 512
0022
0023 #define VPRBRD_I2C_FREQ_6MHZ 1
0024 #define VPRBRD_I2C_FREQ_3MHZ 2
0025 #define VPRBRD_I2C_FREQ_1MHZ 3
0026 #define VPRBRD_I2C_FREQ_FAST 4
0027 #define VPRBRD_I2C_FREQ_400KHZ VPRBRD_I2C_FREQ_FAST
0028 #define VPRBRD_I2C_FREQ_200KHZ 5
0029 #define VPRBRD_I2C_FREQ_STD 6
0030 #define VPRBRD_I2C_FREQ_100KHZ VPRBRD_I2C_FREQ_STD
0031 #define VPRBRD_I2C_FREQ_10KHZ 7
0032
0033 #define VPRBRD_I2C_CMD_WRITE 0x00
0034 #define VPRBRD_I2C_CMD_READ 0x01
0035 #define VPRBRD_I2C_CMD_ADDR 0x02
0036
0037 #define VPRBRD_USB_TYPE_OUT 0x40
0038 #define VPRBRD_USB_TYPE_IN 0xc0
0039 #define VPRBRD_USB_TIMEOUT_MS 100
0040 #define VPRBRD_USB_REQUEST_I2C_FREQ 0xe6
0041 #define VPRBRD_USB_REQUEST_I2C 0xe9
0042 #define VPRBRD_USB_REQUEST_MAJOR 0xea
0043 #define VPRBRD_USB_REQUEST_MINOR 0xeb
0044 #define VPRBRD_USB_REQUEST_ADC 0xec
0045 #define VPRBRD_USB_REQUEST_GPIOA 0xed
0046 #define VPRBRD_USB_REQUEST_GPIOB 0xdd
0047
0048 struct vprbrd_i2c_write_hdr {
0049 u8 cmd;
0050 u16 addr;
0051 u8 len1;
0052 u8 len2;
0053 u8 last;
0054 u8 chan;
0055 u16 spi;
0056 } __packed;
0057
0058 struct vprbrd_i2c_read_hdr {
0059 u8 cmd;
0060 u16 addr;
0061 u8 len0;
0062 u8 len1;
0063 u8 len2;
0064 u8 len3;
0065 u8 len4;
0066 u8 len5;
0067 u16 tf1;
0068 u16 tf2;
0069 } __packed;
0070
0071 struct vprbrd_i2c_status {
0072 u8 unknown[11];
0073 u8 status;
0074 } __packed;
0075
0076 struct vprbrd_i2c_write_msg {
0077 struct vprbrd_i2c_write_hdr header;
0078 u8 data[VPRBRD_I2C_MSG_LEN
0079 - sizeof(struct vprbrd_i2c_write_hdr)];
0080 } __packed;
0081
0082 struct vprbrd_i2c_read_msg {
0083 struct vprbrd_i2c_read_hdr header;
0084 u8 data[VPRBRD_I2C_MSG_LEN
0085 - sizeof(struct vprbrd_i2c_read_hdr)];
0086 } __packed;
0087
0088 struct vprbrd_i2c_addr_msg {
0089 u8 cmd;
0090 u8 addr;
0091 u8 unknown1;
0092 u16 len;
0093 u8 unknown2;
0094 u8 unknown3;
0095 } __packed;
0096
0097
0098 struct vprbrd {
0099 struct usb_device *usb_dev;
0100 struct mutex lock;
0101 u8 buf[sizeof(struct vprbrd_i2c_write_msg)];
0102 struct platform_device pdev;
0103 };
0104
0105 #endif