viperboard.h (2802B)
1/* SPDX-License-Identifier: GPL-2.0-or-later */ 2/* 3 * include/linux/mfd/viperboard.h 4 * 5 * Nano River Technologies viperboard definitions 6 * 7 * (C) 2012 by Lemonage GmbH 8 * Author: Lars Poeschel <poeschel@lemonage.de> 9 * All rights reserved. 10 */ 11 12#ifndef __MFD_VIPERBOARD_H__ 13#define __MFD_VIPERBOARD_H__ 14 15#include <linux/types.h> 16#include <linux/usb.h> 17 18#define VPRBRD_EP_OUT 0x02 19#define VPRBRD_EP_IN 0x86 20 21#define VPRBRD_I2C_MSG_LEN 512 /* max length of a msg on USB level */ 22 23#define VPRBRD_I2C_FREQ_6MHZ 1 /* 6 MBit/s */ 24#define VPRBRD_I2C_FREQ_3MHZ 2 /* 3 MBit/s */ 25#define VPRBRD_I2C_FREQ_1MHZ 3 /* 1 MBit/s */ 26#define VPRBRD_I2C_FREQ_FAST 4 /* 400 kbit/s */ 27#define VPRBRD_I2C_FREQ_400KHZ VPRBRD_I2C_FREQ_FAST 28#define VPRBRD_I2C_FREQ_200KHZ 5 /* 200 kbit/s */ 29#define VPRBRD_I2C_FREQ_STD 6 /* 100 kbit/s */ 30#define VPRBRD_I2C_FREQ_100KHZ VPRBRD_I2C_FREQ_STD 31#define VPRBRD_I2C_FREQ_10KHZ 7 /* 10 kbit/s */ 32 33#define VPRBRD_I2C_CMD_WRITE 0x00 34#define VPRBRD_I2C_CMD_READ 0x01 35#define VPRBRD_I2C_CMD_ADDR 0x02 36 37#define VPRBRD_USB_TYPE_OUT 0x40 38#define VPRBRD_USB_TYPE_IN 0xc0 39#define VPRBRD_USB_TIMEOUT_MS 100 40#define VPRBRD_USB_REQUEST_I2C_FREQ 0xe6 41#define VPRBRD_USB_REQUEST_I2C 0xe9 42#define VPRBRD_USB_REQUEST_MAJOR 0xea 43#define VPRBRD_USB_REQUEST_MINOR 0xeb 44#define VPRBRD_USB_REQUEST_ADC 0xec 45#define VPRBRD_USB_REQUEST_GPIOA 0xed 46#define VPRBRD_USB_REQUEST_GPIOB 0xdd 47 48struct vprbrd_i2c_write_hdr { 49 u8 cmd; 50 u16 addr; 51 u8 len1; 52 u8 len2; 53 u8 last; 54 u8 chan; 55 u16 spi; 56} __packed; 57 58struct vprbrd_i2c_read_hdr { 59 u8 cmd; 60 u16 addr; 61 u8 len0; 62 u8 len1; 63 u8 len2; 64 u8 len3; 65 u8 len4; 66 u8 len5; 67 u16 tf1; /* transfer 1 length */ 68 u16 tf2; /* transfer 2 length */ 69} __packed; 70 71struct vprbrd_i2c_status { 72 u8 unknown[11]; 73 u8 status; 74} __packed; 75 76struct vprbrd_i2c_write_msg { 77 struct vprbrd_i2c_write_hdr header; 78 u8 data[VPRBRD_I2C_MSG_LEN 79 - sizeof(struct vprbrd_i2c_write_hdr)]; 80} __packed; 81 82struct vprbrd_i2c_read_msg { 83 struct vprbrd_i2c_read_hdr header; 84 u8 data[VPRBRD_I2C_MSG_LEN 85 - sizeof(struct vprbrd_i2c_read_hdr)]; 86} __packed; 87 88struct vprbrd_i2c_addr_msg { 89 u8 cmd; 90 u8 addr; 91 u8 unknown1; 92 u16 len; 93 u8 unknown2; 94 u8 unknown3; 95} __packed; 96 97/* Structure to hold all device specific stuff */ 98struct vprbrd { 99 struct usb_device *usb_dev; /* the usb device for this device */ 100 struct mutex lock; 101 u8 buf[sizeof(struct vprbrd_i2c_write_msg)]; 102 struct platform_device pdev; 103}; 104 105#endif /* __MFD_VIPERBOARD_H__ */