root/include/linux/mfd/viperboard.h

/* [<][>][^][v][top][bottom][index][help] */

INCLUDED FROM


   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 
  48 struct 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 
  58 struct 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 
  71 struct vprbrd_i2c_status {
  72         u8 unknown[11];
  73         u8 status;
  74 } __packed;
  75 
  76 struct 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 
  82 struct 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 
  88 struct 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 */
  98 struct 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__ */

/* [<][>][^][v][top][bottom][index][help] */