File Index
Files and directories
Sign in
FILE

usbio.h

File preview with syntax highlighting.

linux-6.19.14/include/linux/usb/usbio.h C
  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 */
 41struct usbio_packet_header {
 42	u8 type;
 43	u8 cmd;
 44	u8 flags;
 45} __packed;
 46
 47/* USBIO Control Transfer Packet */
 48struct 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 */
 55struct 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 */
 62enum 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 */
 71enum 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
 83enum 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
100struct usbio_gpio_bank_desc {
101	u8 id;
102	u8 pins;
103	__le32 bmap;
104} __packed;
105
106struct usbio_gpio_init {
107	u8 bankid;
108	u8 config;
109	u8 pincount;
110	u8 pin;
111} __packed;
112
113struct usbio_gpio_rw {
114	u8 bankid;
115	u8 pincount;
116	u8 pin;
117	__le32 value;
118} __packed;
119
120/* USBIO I2C commands */
121enum 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
142struct usbio_i2c_bus_desc {
143	u8 id;
144	u8 caps;
145} __packed;
146
147struct usbio_i2c_uninit {
148	u8 busid;
149	__le16 config;
150} __packed;
151
152struct usbio_i2c_init {
153	u8 busid;
154	__le16 config;
155	__le32 speed;
156} __packed;
157
158struct usbio_i2c_rw {
159	u8 busid;
160	__le16 config;
161	__le16 size;
162	u8 data[] __counted_by(size);
163} __packed;
164
165int usbio_control_msg(struct auxiliary_device *adev, u8 type, u8 cmd,
166		      const void *obuf, u16 obuf_len, void *ibuf, u16 ibuf_len);
167
168int 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
171int usbio_acquire(struct auxiliary_device *adev);
172void usbio_release(struct auxiliary_device *adev);
173void usbio_get_txrxbuf_len(struct auxiliary_device *adev, u16 *txbuf_len, u16 *rxbuf_len);
174unsigned long usbio_get_quirks(struct auxiliary_device *adev);
175void usbio_acpi_bind(struct auxiliary_device *adev, const struct acpi_device_id *hids);
176
177#endif
~/ Read-only file preview.