File Index
Files and directories
Sign in
FILE

viperboard.h

File preview with syntax highlighting.

linux-6.19.14/include/linux/mfd/viperboard.h C
  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__ */
~/ Read-only file preview.