Back to home page

OSCL-LXR

 
 

    


0001 /* SPDX-License-Identifier: GPL-2.0-or-later */
0002 /*
0003  *  include/linux/mfd/viperboard.h
0004  *
0005  *  Nano River Technologies viperboard definitions
0006  *
0007  *  (C) 2012 by Lemonage GmbH
0008  *  Author: Lars Poeschel <poeschel@lemonage.de>
0009  *  All rights reserved.
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 /* max length of a msg on USB level */
0022 
0023 #define VPRBRD_I2C_FREQ_6MHZ        1                        /*   6 MBit/s */
0024 #define VPRBRD_I2C_FREQ_3MHZ        2                        /*   3 MBit/s */
0025 #define VPRBRD_I2C_FREQ_1MHZ        3                        /*   1 MBit/s */
0026 #define VPRBRD_I2C_FREQ_FAST        4                        /* 400 kbit/s */
0027 #define VPRBRD_I2C_FREQ_400KHZ      VPRBRD_I2C_FREQ_FAST
0028 #define VPRBRD_I2C_FREQ_200KHZ      5                        /* 200 kbit/s */
0029 #define VPRBRD_I2C_FREQ_STD         6                        /* 100 kbit/s */
0030 #define VPRBRD_I2C_FREQ_100KHZ      VPRBRD_I2C_FREQ_STD
0031 #define VPRBRD_I2C_FREQ_10KHZ       7                        /*  10 kbit/s */
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;                        /* transfer 1 length */
0068     u16 tf2;                        /* transfer 2 length */
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 /* Structure to hold all device specific stuff */
0098 struct vprbrd {
0099     struct usb_device *usb_dev; /* the usb device for this device */
0100     struct mutex lock;
0101     u8 buf[sizeof(struct vprbrd_i2c_write_msg)];
0102     struct platform_device pdev;
0103 };
0104 
0105 #endif /* __MFD_VIPERBOARD_H__ */