1 /* SPDX-License-Identifier: GPL-2.0 */ 2 /* 3 * Copyright (c) 2025 Intel Corporation. 4 * 5 */ 6 7 #ifndef _LINUX_USBIO_H_ 8 #define _LINUX_USBIO_H_ 9 10 #include <linux/auxiliary_bus.h> 11 #include <linux/byteorder/generic.h> 12 #include <linux/list.h> 13 #include <linux/types.h> 14 15 /*********************** 16 * USBIO Clients Names * 17 ***********************/ 18 #define USBIO_GPIO_CLIENT "usbio-gpio" 19 #define USBIO_I2C_CLIENT "usbio-i2c" 20 21 /**************** 22 * USBIO quirks * 23 ****************/ 24 #define USBIO_QUIRK_BULK_MAXP_63 BIT(0) /* Force bulk endpoint maxp to 63 */ 25 #define USBIO_QUIRK_I2C_NO_INIT_ACK BIT(8) /* Do not ask for ack on I2C init */ 26 #define USBIO_QUIRK_I2C_MAX_RW_LEN_52 BIT(9) /* Set i2c-adapter max r/w len to 52 */ 27 #define USBIO_QUIRK_I2C_USE_CHUNK_LEN BIT(10) /* Send chunk-len for split xfers */ 28 #define USBIO_QUIRK_I2C_ALLOW_400KHZ BIT(11) /* Override desc, allowing 400 KHz */ 29 30 /************************** 31 * USBIO Type Definitions * 32 **************************/ 33 34 /* USBIO Packet Type */ 35 #define USBIO_PKTTYPE_CTRL 1 36 #define USBIO_PKTTYPE_DBG 2 37 #define USBIO_PKTTYPE_GPIO 3 38 #define USBIO_PKTTYPE_I2C 4 39 40 /* USBIO Packet Header */ 41 struct usbio_packet_header { 42 u8 type; 43 u8 cmd; 44 u8 flags; 45 } __packed; 46 47 /* USBIO Control Transfer Packet */ 48 struct usbio_ctrl_packet { 49 struct usbio_packet_header header; 50 u8 len; 51 u8 data[] __counted_by(len); 52 } __packed; 53 54 /* USBIO Bulk Transfer Packet */ 55 struct usbio_bulk_packet { 56 struct usbio_packet_header header; 57 __le16 len; 58 u8 data[] __counted_by(len); 59 } __packed; 60 61 /* USBIO GPIO commands */ 62 enum usbio_gpio_cmd { 63 USBIO_GPIOCMD_DEINIT, 64 USBIO_GPIOCMD_INIT, 65 USBIO_GPIOCMD_READ, 66 USBIO_GPIOCMD_WRITE, 67 USBIO_GPIOCMD_END 68 }; 69 70 /* USBIO GPIO config */ 71 enum usbio_gpio_pincfg { 72 USBIO_GPIO_PINCFG_DEFAULT, 73 USBIO_GPIO_PINCFG_PULLUP, 74 USBIO_GPIO_PINCFG_PULLDOWN, 75 USBIO_GPIO_PINCFG_PUSHPULL 76 }; 77 78 #define USBIO_GPIO_PINCFG_SHIFT 2 79 #define USBIO_GPIO_PINCFG_MASK (0x3 << USBIO_GPIO_PINCFG_SHIFT) 80 #define USBIO_GPIO_SET_PINCFG(pincfg) \ 81 (((pincfg) << USBIO_GPIO_PINCFG_SHIFT) & USBIO_GPIO_PINCFG_MASK) 82 83 enum usbio_gpio_pinmode { 84 USBIO_GPIO_PINMOD_INVAL, 85 USBIO_GPIO_PINMOD_INPUT, 86 USBIO_GPIO_PINMOD_OUTPUT, 87 USBIO_GPIO_PINMOD_MAXVAL 88 }; 89 90 #define USBIO_GPIO_PINMOD_MASK 0x3 91 #define USBIO_GPIO_SET_PINMOD(pin) (pin & USBIO_GPIO_PINMOD_MASK) 92 93 /************************* 94 * USBIO GPIO Controller * 95 *************************/ 96 97 #define USBIO_MAX_GPIOBANKS 5 98 #define USBIO_GPIOSPERBANK 32 99 100 struct usbio_gpio_bank_desc { 101 u8 id; 102 u8 pins; 103 __le32 bmap; 104 } __packed; 105 106 struct usbio_gpio_init { 107 u8 bankid; 108 u8 config; 109 u8 pincount; 110 u8 pin; 111 } __packed; 112 113 struct usbio_gpio_rw { 114 u8 bankid; 115 u8 pincount; 116 u8 pin; 117 __le32 value; 118 } __packed; 119 120 /* USBIO I2C commands */ 121 enum usbio_i2c_cmd { 122 USBIO_I2CCMD_UNINIT, 123 USBIO_I2CCMD_INIT, 124 USBIO_I2CCMD_READ, 125 USBIO_I2CCMD_WRITE, 126 USBIO_I2CCMD_END 127 }; 128 129 /************************ 130 * USBIO I2C Controller * 131 ************************/ 132 133 #define USBIO_MAX_I2CBUSES 5 134 135 #define USBIO_I2C_BUS_ADDR_CAP_10B BIT(3) /* 10bit address support */ 136 #define USBIO_I2C_BUS_MODE_CAP_MASK 0x3 137 #define USBIO_I2C_BUS_MODE_CAP_SM 0 /* Standard Mode */ 138 #define USBIO_I2C_BUS_MODE_CAP_FM 1 /* Fast Mode */ 139 #define USBIO_I2C_BUS_MODE_CAP_FMP 2 /* Fast Mode+ */ 140 #define USBIO_I2C_BUS_MODE_CAP_HSM 3 /* High-Speed Mode */ 141 142 struct usbio_i2c_bus_desc { 143 u8 id; 144 u8 caps; 145 } __packed; 146 147 struct usbio_i2c_uninit { 148 u8 busid; 149 __le16 config; 150 } __packed; 151 152 struct usbio_i2c_init { 153 u8 busid; 154 __le16 config; 155 __le32 speed; 156 } __packed; 157 158 struct usbio_i2c_rw { 159 u8 busid; 160 __le16 config; 161 __le16 size; 162 u8 data[] __counted_by(size); 163 } __packed; 164 165 int usbio_control_msg(struct auxiliary_device *adev, u8 type, u8 cmd, 166 const void *obuf, u16 obuf_len, void *ibuf, u16 ibuf_len); 167 168 int usbio_bulk_msg(struct auxiliary_device *adev, u8 type, u8 cmd, bool last, 169 const void *obuf, u16 obuf_len, void *ibuf, u16 ibuf_len); 170 171 int usbio_acquire(struct auxiliary_device *adev); 172 void usbio_release(struct auxiliary_device *adev); 173 void usbio_get_txrxbuf_len(struct auxiliary_device *adev, u16 *txbuf_len, u16 *rxbuf_len); 174 unsigned long usbio_get_quirks(struct auxiliary_device *adev); 175 void usbio_acpi_bind(struct auxiliary_device *adev, const struct acpi_device_id *hids); 176 177 #endif 178