umcpmio_hid_reports.h revision 1.2 1 1.2 riastrad /* $NetBSD: umcpmio_hid_reports.h,v 1.2 2025/03/17 18:24:08 riastradh Exp $ */
2 1.1 brad
3 1.1 brad /*
4 1.1 brad * Copyright (c) 2024 Brad Spencer <brad (at) anduin.eldar.org>
5 1.1 brad *
6 1.1 brad * Permission to use, copy, modify, and distribute this software for any
7 1.1 brad * purpose with or without fee is hereby granted, provided that the above
8 1.1 brad * copyright notice and this permission notice appear in all copies.
9 1.1 brad *
10 1.1 brad * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
11 1.1 brad * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
12 1.1 brad * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
13 1.1 brad * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
14 1.1 brad * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
15 1.1 brad * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
16 1.1 brad * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
17 1.1 brad */
18 1.1 brad
19 1.2 riastrad #ifndef _UMCPMIO_HID_REPORTS_H_
20 1.2 riastrad #define _UMCPMIO_HID_REPORTS_H_
21 1.1 brad
22 1.1 brad #include <sys/types.h>
23 1.1 brad
24 1.2 riastrad /*
25 1.2 riastrad * It is nice that all HID reports want a 64 byte request and return a
26 1.2 riastrad * 64 byte response.
27 1.1 brad */
28 1.1 brad
29 1.1 brad #define MCP2221_REQ_BUFFER_SIZE 64
30 1.1 brad #define MCP2221_RES_BUFFER_SIZE 64
31 1.1 brad
32 1.1 brad #define MCP2221_CMD_STATUS 0x10
33 1.1 brad
34 1.1 brad #define MCP2221_CMD_I2C_FETCH_READ_DATA 0x40
35 1.1 brad
36 1.1 brad #define MCP2221_CMD_SET_GPIO_CFG 0x50
37 1.1 brad #define MCP2221_CMD_GET_GPIO_CFG 0x51
38 1.1 brad
39 1.1 brad #define MCP2221_CMD_SET_SRAM 0x60
40 1.1 brad #define MCP2221_CMD_GET_SRAM 0x61
41 1.1 brad
42 1.1 brad #define MCP2221_I2C_WRITE_DATA 0x90
43 1.1 brad #define MCP2221_I2C_READ_DATA 0x91
44 1.1 brad #define MCP2221_I2C_WRITE_DATA_RS 0x92
45 1.1 brad #define MCP2221_I2C_READ_DATA_RS 0x93
46 1.1 brad #define MCP2221_I2C_WRITE_DATA_NS 0x94
47 1.1 brad
48 1.1 brad #define MCP2221_CMD_GET_FLASH 0xb0
49 1.1 brad #define MCP2221_CMD_SET_FLASH 0xb1
50 1.1 brad #define MCP2221_CMD_SEND_FLASH_PASSWORD 0xb2
51 1.1 brad
52 1.1 brad #define MCP2221_CMD_COMPLETE_OK 0x00
53 1.1 brad #define MCP2221_CMD_COMPLETE_NO_SUPPORT 0x02
54 1.1 brad #define MCP2221_CMD_COMPLETE_EPERM 0x03
55 1.1 brad
56 1.1 brad #define MCP2221_I2C_DO_CANCEL 0x10
57 1.1 brad #define MCP2221_INTERNAL_CLOCK 12000000
58 1.1 brad #define MCP2221_DEFAULT_I2C_SPEED 100000
59 1.1 brad #define MCP2221_I2C_SET_SPEED 0x20
60 1.1 brad
61 1.1 brad /* The request and response structures are, perhaps, over literal. */
62 1.1 brad
63 1.1 brad struct mcp2221_status_req {
64 1.1 brad uint8_t cmd; /* MCP2221_CMD_STATUS */
65 1.1 brad uint8_t dontcare1;
66 1.1 brad uint8_t cancel_transfer;
67 1.1 brad uint8_t set_i2c_speed;
68 1.1 brad uint8_t i2c_clock_divider;
69 1.1 brad uint8_t dontcare2[59];
70 1.1 brad };
71 1.1 brad
72 1.1 brad #define MCP2221_I2C_SPEED_SET 0x20
73 1.1 brad #define MCP2221_I2C_SPEED_BUSY 0x21
74 1.1 brad #define MCP2221_ENGINE_T1_MASK_NACK 0x40
75 1.1 brad
76 1.1 brad struct mcp2221_status_res {
77 1.1 brad uint8_t cmd;
78 1.1 brad uint8_t completion;
79 1.1 brad uint8_t cancel_transfer;
80 1.1 brad uint8_t set_i2c_speed;
81 1.1 brad uint8_t i2c_clock_divider;
82 1.1 brad uint8_t dontcare2[3];
83 1.1 brad uint8_t internal_i2c_state;
84 1.1 brad uint8_t lsb_i2c_req_len;
85 1.1 brad uint8_t msb_i2c_req_len;
86 1.1 brad uint8_t lsb_i2c_trans_len;
87 1.1 brad uint8_t msb_i2c_trans_len;
88 1.1 brad uint8_t internal_i2c_bcount;
89 1.1 brad uint8_t i2c_speed_divider;
90 1.1 brad uint8_t i2c_timeout_value;
91 1.1 brad uint8_t lsb_i2c_address;
92 1.1 brad uint8_t msb_i2c_address;
93 1.1 brad uint8_t dontcare3a[2];
94 1.1 brad uint8_t internal_i2c_state20;
95 1.1 brad uint8_t dontcare3b;
96 1.1 brad uint8_t scl_line_value;
97 1.1 brad uint8_t sda_line_value;
98 1.1 brad uint8_t interrupt_edge_state;
99 1.1 brad uint8_t i2c_read_pending;
100 1.1 brad uint8_t dontcare4[20];
101 1.1 brad uint8_t mcp2221_hardware_rev_major;
102 1.1 brad uint8_t mcp2221_hardware_rev_minor;
103 1.1 brad uint8_t mcp2221_firmware_rev_major;
104 1.1 brad uint8_t mcp2221_firmware_rev_minor;
105 1.1 brad uint8_t adc_channel0_lsb;
106 1.1 brad uint8_t adc_channel0_msb;
107 1.1 brad uint8_t adc_channel1_lsb;
108 1.1 brad uint8_t adc_channel1_msb;
109 1.1 brad uint8_t adc_channel2_lsb;
110 1.1 brad uint8_t adc_channel2_msb;
111 1.1 brad uint8_t dontcare5[8];
112 1.1 brad };
113 1.1 brad
114 1.1 brad #define MCP2221_GPIO_CFG_ALTER 0xff
115 1.1 brad
116 1.1 brad struct mcp2221_set_gpio_cfg_req {
117 1.1 brad uint8_t cmd; /* MCP2221_CMD_SET_GPIO_CFG */
118 1.1 brad uint8_t dontcare1;
119 1.1 brad
120 1.1 brad uint8_t alter_gp0_value;
121 1.1 brad uint8_t new_gp0_value;
122 1.1 brad uint8_t alter_gp0_dir;
123 1.1 brad uint8_t new_gp0_dir;
124 1.1 brad
125 1.1 brad uint8_t alter_gp1_value;
126 1.1 brad uint8_t new_gp1_value;
127 1.1 brad uint8_t alter_gp1_dir;
128 1.1 brad uint8_t new_gp1_dir;
129 1.1 brad
130 1.1 brad uint8_t alter_gp2_value;
131 1.1 brad uint8_t new_gp2_value;
132 1.1 brad uint8_t alter_gp2_dir;
133 1.1 brad uint8_t new_gp2_dir;
134 1.1 brad
135 1.1 brad uint8_t alter_gp3_value;
136 1.1 brad uint8_t new_gp3_value;
137 1.1 brad uint8_t alter_gp3_dir;
138 1.1 brad uint8_t new_gp3_dir;
139 1.1 brad
140 1.1 brad uint8_t reserved[46];
141 1.1 brad };
142 1.1 brad
143 1.1 brad struct mcp2221_set_gpio_cfg_res {
144 1.1 brad uint8_t cmd;
145 1.1 brad uint8_t completion;
146 1.1 brad
147 1.1 brad uint8_t alter_gp0_value;
148 1.1 brad uint8_t new_gp0_value;
149 1.1 brad uint8_t alter_gp0_dir;
150 1.1 brad uint8_t new_gp0_dir;
151 1.1 brad
152 1.1 brad uint8_t alter_gp1_value;
153 1.1 brad uint8_t new_gp1_value;
154 1.1 brad uint8_t alter_gp1_dir;
155 1.1 brad uint8_t new_gp1_dir;
156 1.1 brad
157 1.1 brad uint8_t alter_gp2_value;
158 1.1 brad uint8_t new_gp2_value;
159 1.1 brad uint8_t alter_gp2_dir;
160 1.1 brad uint8_t new_gp2_dir;
161 1.1 brad
162 1.1 brad uint8_t alter_gp3_value;
163 1.1 brad uint8_t new_gp3_value;
164 1.1 brad uint8_t alter_gp3_dir;
165 1.1 brad uint8_t new_gp3_dir;
166 1.1 brad
167 1.1 brad uint8_t dontcare[46];
168 1.1 brad };
169 1.1 brad
170 1.1 brad struct mcp2221_get_gpio_cfg_req {
171 1.1 brad uint8_t cmd; /* MCP2221_CMD_GET_GPIO_CFG */
172 1.1 brad uint8_t dontcare[63];
173 1.1 brad };
174 1.1 brad
175 1.1 brad #define MCP2221_GPIO_CFG_VALUE_NOT_GPIO 0xEE
176 1.1 brad #define MCP2221_GPIO_CFG_DIR_NOT_GPIO 0xEF
177 1.1 brad #define MCP2221_GPIO_CFG_DIR_INPUT 0x01
178 1.1 brad #define MCP2221_GPIO_CFG_DIR_OUTPUT 0x00
179 1.1 brad
180 1.1 brad struct mcp2221_get_gpio_cfg_res {
181 1.1 brad uint8_t cmd;
182 1.1 brad uint8_t completion;
183 1.1 brad
184 1.1 brad uint8_t gp0_pin_value;
185 1.1 brad uint8_t gp0_pin_dir;
186 1.1 brad
187 1.1 brad uint8_t gp1_pin_value;
188 1.1 brad uint8_t gp1_pin_dir;
189 1.1 brad
190 1.1 brad uint8_t gp2_pin_value;
191 1.1 brad uint8_t gp2_pin_dir;
192 1.1 brad
193 1.1 brad uint8_t gp3_pin_value;
194 1.1 brad uint8_t gp3_pin_dir;
195 1.1 brad
196 1.1 brad uint8_t dontcare[54];
197 1.1 brad };
198 1.1 brad
199 1.1 brad #define MCP2221_SRAM_GPIO_CHANGE_DCCD 0x80
200 1.1 brad
201 1.1 brad #define MCP2221_SRAM_GPIO_CLOCK_DC_MASK 0x18
202 1.1 brad #define MCP2221_SRAM_GPIO_CLOCK_DC_75 0x18
203 1.1 brad #define MCP2221_SRAM_GPIO_CLOCK_DC_50 0x10
204 1.1 brad #define MCP2221_SRAM_GPIO_CLOCK_DC_25 0x08
205 1.1 brad #define MCP2221_SRAM_GPIO_CLOCK_DC_0 0x00
206 1.1 brad
207 1.1 brad #define MCP2221_SRAM_GPIO_CLOCK_CD_MASK 0x07
208 1.1 brad #define MCP2221_SRAM_GPIO_CLOCK_CD_375KHZ 0x07
209 1.1 brad #define MCP2221_SRAM_GPIO_CLOCK_CD_750KHZ 0x06
210 1.1 brad #define MCP2221_SRAM_GPIO_CLOCK_CD_1P5MHZ 0x05
211 1.1 brad #define MCP2221_SRAM_GPIO_CLOCK_CD_3MHZ 0x04
212 1.1 brad #define MCP2221_SRAM_GPIO_CLOCK_CD_6MHZ 0x03
213 1.1 brad #define MCP2221_SRAM_GPIO_CLOCK_CD_12MHZ 0x02
214 1.1 brad #define MCP2221_SRAM_GPIO_CLOCK_CD_24MHZ 0x01
215 1.1 brad
216 1.1 brad #define MCP2221_SRAM_CHANGE_DAC_VREF 0x80
217 1.1 brad #define MCP2221_SRAM_DAC_IS_VRM 0x20
218 1.1 brad #define MCP2221_SRAM_DAC_VRM_MASK 0xC0
219 1.1 brad #define MCP2221_SRAM_DAC_VRM_4096V 0xC0
220 1.1 brad #define MCP2221_SRAM_DAC_VRM_2048V 0x80
221 1.1 brad #define MCP2221_SRAM_DAC_VRM_1024V 0x40
222 1.1 brad #define MCP2221_SRAM_DAC_VRM_OFF 0x00
223 1.1 brad #define MCP2221_SRAM_CHANGE_DAC_VALUE 0x80
224 1.1 brad #define MCP2221_SRAM_DAC_VALUE_MASK 0x1F
225 1.1 brad
226 1.1 brad #define MCP2221_SRAM_CHANGE_ADC_VREF 0x80
227 1.1 brad #define MCP2221_SRAM_ADC_IS_VRM 0x04
228 1.1 brad #define MCP2221_SRAM_ADC_VRM_MASK 0x18
229 1.1 brad #define MCP2221_SRAM_ADC_VRM_4096V 0x18
230 1.1 brad #define MCP2221_SRAM_ADC_VRM_2048V 0x10
231 1.1 brad #define MCP2221_SRAM_ADC_VRM_1024V 0x08
232 1.1 brad #define MCP2221_SRAM_ADC_VRM_OFF 0x00
233 1.1 brad
234 1.1 brad #define MCP2221_SRAM_ALTER_IRQ 0x80
235 1.1 brad #define MCP2221_SRAM_ALTER_POS_EDGE 0x10
236 1.1 brad #define MCP2221_SRAM_ENABLE_POS_EDGE 0x08
237 1.1 brad #define MCP2221_SRAM_ALTER_NEG_EDGE 0x04
238 1.1 brad #define MCP2221_SRAM_ENABLE_NEG_EDGE 0x02
239 1.1 brad #define MCP2221_SRAM_CLEAR_IRQ 0x01
240 1.1 brad
241 1.1 brad #define MCP2221_SRAM_ALTER_GPIO 0xff
242 1.1 brad #define MCP2221_SRAM_GPIO_HIGH 0x0f
243 1.1 brad #define MCP2221_SRAM_GPIO_OUTPUT_HIGH 0x10
244 1.1 brad #define MCP2221_SRAM_GPIO_TYPE_MASK 0x08
245 1.1 brad #define MCP2221_SRAM_GPIO_INPUT 0x08
246 1.1 brad #define MCP2221_SRAM_PIN_TYPE_MASK 0x07
247 1.1 brad #define MCP2221_SRAM_PIN_IS_GPIO 0x00
248 1.1 brad #define MCP2221_SRAM_PIN_IS_DED 0x01
249 1.1 brad #define MCP2221_SRAM_PIN_IS_ALT0 0x02
250 1.1 brad #define MCP2221_SRAM_PIN_IS_ALT1 0x03
251 1.1 brad #define MCP2221_SRAM_PIN_IS_ALT2 0x04
252 1.1 brad
253 1.1 brad struct mcp2221_set_sram_req {
254 1.1 brad uint8_t cmd; /* MCP2221_CMD_SET_SRAM */
255 1.1 brad uint8_t dontcare1;
256 1.1 brad
257 1.1 brad uint8_t clock_output_divider;
258 1.1 brad uint8_t dac_voltage_reference;
259 1.1 brad uint8_t set_dac_output_value;
260 1.1 brad uint8_t adc_voltage_reference;
261 1.1 brad uint8_t irq_config;
262 1.1 brad
263 1.1 brad uint8_t alter_gpio_config;
264 1.1 brad uint8_t gp0_settings;
265 1.1 brad uint8_t gp1_settings;
266 1.1 brad uint8_t gp2_settings;
267 1.1 brad uint8_t gp3_settings;
268 1.1 brad
269 1.1 brad uint8_t reserved[52];
270 1.1 brad };
271 1.1 brad
272 1.1 brad struct mcp2221_set_sram_res {
273 1.1 brad uint8_t cmd;
274 1.1 brad uint8_t completion;
275 1.1 brad uint8_t dontcare[62];
276 1.1 brad };
277 1.1 brad
278 1.1 brad struct mcp2221_get_sram_req {
279 1.1 brad uint8_t cmd; /* MCP2221_CMD_GET_SRAM */
280 1.1 brad uint8_t dontcare[63];
281 1.1 brad };
282 1.1 brad
283 1.1 brad struct mcp2221_get_sram_res {
284 1.1 brad uint8_t cmd;
285 1.1 brad uint8_t completion;
286 1.1 brad
287 1.1 brad uint8_t len_chip_setting;
288 1.1 brad uint8_t len_gpio_setting;
289 1.1 brad
290 1.1 brad uint8_t sn_initial_ps_cs;
291 1.1 brad uint8_t clock_divider;
292 1.1 brad uint8_t dac_reference_voltage;
293 1.1 brad uint8_t irq_adc_reference_voltage;
294 1.1 brad
295 1.1 brad uint8_t lsb_usb_vid;
296 1.1 brad uint8_t msb_usb_vid;
297 1.1 brad uint8_t lsb_usb_pid;
298 1.1 brad uint8_t msb_usb_pid;
299 1.1 brad
300 1.1 brad uint8_t usb_power_attributes;
301 1.1 brad uint8_t usb_requested_ma;
302 1.1 brad
303 1.1 brad uint8_t current_password_byte_1;
304 1.1 brad uint8_t current_password_byte_2;
305 1.1 brad uint8_t current_password_byte_3;
306 1.1 brad uint8_t current_password_byte_4;
307 1.1 brad uint8_t current_password_byte_5;
308 1.1 brad uint8_t current_password_byte_6;
309 1.1 brad uint8_t current_password_byte_7;
310 1.1 brad uint8_t current_password_byte_8;
311 1.1 brad
312 1.1 brad uint8_t gp0_settings;
313 1.1 brad uint8_t gp1_settings;
314 1.1 brad uint8_t gp2_settings;
315 1.1 brad uint8_t gp3_settings;
316 1.1 brad
317 1.1 brad uint8_t dontcare[38];
318 1.1 brad };
319 1.1 brad
320 1.1 brad #define MCP2221_I2C_ENGINE_BUSY 0x01
321 1.1 brad #define MCP2221_ENGINE_STARTTIMEOUT 0x12
322 1.1 brad #define MCP2221_ENGINE_REPSTARTTIMEOUT 0x17
323 1.1 brad #define MCP2221_ENGINE_STOPTIMEOUT 0x62
324 1.1 brad #define MCP2221_ENGINE_ADDRSEND 0x21
325 1.1 brad #define MCP2221_ENGINE_ADDRTIMEOUT 0x23
326 1.1 brad #define MCP2221_ENGINE_PARTIALDATA 0x41
327 1.1 brad #define MCP2221_ENGINE_READMORE 0x43
328 1.1 brad #define MCP2221_ENGINE_WRITETIMEOUT 0x44
329 1.1 brad #define MCP2221_ENGINE_READTIMEOUT 0x52
330 1.1 brad #define MCP2221_ENGINE_READPARTIAL 0x54
331 1.1 brad #define MCP2221_ENGINE_READCOMPLETE 0x55
332 1.1 brad #define MCP2221_ENGINE_ADDRNACK 0x25
333 1.1 brad #define MCP2221_ENGINE_WRITINGNOSTOP 0x45
334 1.1 brad
335 1.1 brad struct mcp2221_i2c_req {
336 1.1 brad uint8_t cmd; /* MCP2221_I2C_WRITE_DATA
337 1.1 brad * MCP2221_I2C_READ_DATA
338 1.1 brad * MCP2221_I2C_WRITE_DATA_RS
339 1.1 brad * MCP2221_I2C_READ_DATA_RS
340 1.1 brad * MCP2221_I2C_WRITE_DATA_NS
341 1.1 brad */
342 1.1 brad uint8_t lsblen;
343 1.1 brad uint8_t msblen;
344 1.1 brad uint8_t slaveaddr;
345 1.1 brad uint8_t data[60];
346 1.1 brad };
347 1.1 brad
348 1.1 brad struct mcp2221_i2c_res {
349 1.1 brad uint8_t cmd;
350 1.1 brad uint8_t completion;
351 1.1 brad uint8_t internal_i2c_state;
352 1.1 brad uint8_t dontcare[61];
353 1.1 brad };
354 1.1 brad
355 1.1 brad #define MCP2221_FETCH_READ_PARTIALDATA 0x41
356 1.1 brad #define MCP2221_FETCH_READERROR 0x7F
357 1.1 brad
358 1.1 brad struct mcp2221_i2c_fetch_req {
359 1.1 brad uint8_t cmd; /* MCP2221_CMD_I2C_FETCH_READ_DATA */
360 1.1 brad uint8_t dontcare[63];
361 1.1 brad };
362 1.1 brad
363 1.1 brad struct mcp2221_i2c_fetch_res {
364 1.1 brad uint8_t cmd;
365 1.1 brad uint8_t completion;
366 1.1 brad uint8_t internal_i2c_state;
367 1.1 brad uint8_t fetchlen;
368 1.1 brad uint8_t data[60];
369 1.1 brad };
370 1.1 brad
371 1.1 brad #define MCP2221_FLASH_SUBCODE_CS 0x00
372 1.1 brad #define MCP2221_FLASH_SUBCODE_GP 0x01
373 1.1 brad #define MCP2221_FLASH_SUBCODE_USBMAN 0x02
374 1.1 brad #define MCP2221_FLASH_SUBCODE_USBPROD 0x03
375 1.1 brad #define MCP2221_FLASH_SUBCODE_USBSN 0x04
376 1.1 brad #define MCP2221_FLASH_SUBCODE_CHIPSN 0x05
377 1.1 brad
378 1.1 brad struct mcp2221_get_flash_req {
379 1.1 brad uint8_t cmd; /* MCP2221_CMD_GET_FLASH */
380 1.1 brad uint8_t subcode;
381 1.1 brad uint8_t reserved[62];
382 1.1 brad };
383 1.1 brad
384 1.1 brad struct mcp2221_get_flash_res {
385 1.1 brad uint8_t cmd;
386 1.1 brad uint8_t completion;
387 1.1 brad uint8_t res_len;
388 1.1 brad union {
389 1.1 brad struct {
390 1.1 brad uint8_t dontcare;
391 1.1 brad uint8_t uartenum_led_protection;
392 1.1 brad uint8_t clock_divider;
393 1.1 brad uint8_t dac_reference_voltage;
394 1.1 brad uint8_t irq_adc_reference_voltage;
395 1.1 brad uint8_t lsb_usb_vid;
396 1.1 brad uint8_t msb_usb_vid;
397 1.1 brad uint8_t lsb_usb_pid;
398 1.1 brad uint8_t msb_usb_pid;
399 1.1 brad uint8_t usb_power_attributes;
400 1.1 brad uint8_t usb_requested_ma;
401 1.1 brad uint8_t dontcare2[50];
402 1.1 brad } cs;
403 1.1 brad struct {
404 1.1 brad uint8_t dontcare;
405 1.1 brad uint8_t gp0_settings;
406 1.1 brad uint8_t gp1_settings;
407 1.1 brad uint8_t gp2_settings;
408 1.1 brad uint8_t gp3_settings;
409 1.1 brad uint8_t dontcare2[56];
410 1.1 brad } gp;
411 1.1 brad struct {
412 1.1 brad uint8_t always0x03;
413 1.1 brad uint8_t unicode_man_descriptor[60];
414 1.1 brad } usbman;
415 1.1 brad struct {
416 1.1 brad uint8_t always0x03;
417 1.1 brad uint8_t unicode_product_descriptor[60];
418 1.1 brad } usbprod;
419 1.1 brad struct usbsn {
420 1.1 brad uint8_t always0x03;
421 1.1 brad uint8_t unicode_serial_number[60];
422 1.1 brad } usbsn;
423 1.1 brad struct {
424 1.1 brad uint8_t dontcare;
425 1.1 brad uint8_t factory_serial_number[60];
426 1.1 brad } chipsn;
427 1.1 brad } u;
428 1.1 brad };
429 1.1 brad
430 1.1 brad #define MCP2221_FLASH_GPIO_HIGH 0x0f
431 1.1 brad #define MCP2221_FLASH_GPIO_VALUE_MASK 0x10
432 1.1 brad #define MCP2221_FLASH_GPIO_TYPE_MASK 0x08
433 1.1 brad #define MCP2221_FLASH_GPIO_INPUT 0x08
434 1.1 brad #define MCP2221_FLASH_PIN_TYPE_MASK 0x07
435 1.1 brad #define MCP2221_FLASH_PIN_IS_GPIO 0x00
436 1.1 brad #define MCP2221_FLASH_PIN_IS_DED 0x01
437 1.1 brad #define MCP2221_FLASH_PIN_IS_ALT0 0x02
438 1.1 brad #define MCP2221_FLASH_PIN_IS_ALT1 0x03
439 1.1 brad #define MCP2221_FLASH_PIN_IS_ALT2 0x04
440 1.1 brad
441 1.1 brad struct mcp2221_put_flash_req {
442 1.1 brad uint8_t cmd; /* MCP2221_CMD_SET_FLASH */
443 1.1 brad uint8_t subcode;
444 1.1 brad union {
445 1.1 brad struct {
446 1.1 brad uint8_t uartenum_led_protection;
447 1.1 brad uint8_t clock_divider;
448 1.1 brad uint8_t dac_reference_voltage;
449 1.1 brad uint8_t irq_adc_reference_voltage;
450 1.1 brad uint8_t lsb_usb_vid;
451 1.1 brad uint8_t msb_usb_vid;
452 1.1 brad uint8_t lsb_usb_pid;
453 1.1 brad uint8_t msb_usb_pid;
454 1.1 brad uint8_t usb_power_attributes;
455 1.1 brad uint8_t usb_requested_ma;
456 1.1 brad uint8_t password_byte_1;
457 1.1 brad uint8_t password_byte_2;
458 1.1 brad uint8_t password_byte_3;
459 1.1 brad uint8_t password_byte_4;
460 1.1 brad uint8_t password_byte_5;
461 1.1 brad uint8_t password_byte_6;
462 1.1 brad uint8_t password_byte_7;
463 1.1 brad uint8_t password_byte_8;
464 1.1 brad uint8_t dontcare[44];
465 1.1 brad } cs;
466 1.1 brad struct {
467 1.1 brad uint8_t gp0_settings;
468 1.1 brad uint8_t gp1_settings;
469 1.1 brad uint8_t gp2_settings;
470 1.1 brad uint8_t gp3_settings;
471 1.1 brad uint8_t dontcare[58];
472 1.1 brad } gp;
473 1.1 brad struct {
474 1.1 brad uint8_t len;
475 1.1 brad uint8_t always0x03;
476 1.1 brad uint8_t unicode_man_descriptor[60];
477 1.1 brad } usbman;
478 1.1 brad struct {
479 1.1 brad uint8_t len;
480 1.1 brad uint8_t always0x03;
481 1.1 brad uint8_t unicode_product_descriptor[60];
482 1.1 brad } usbprod;
483 1.1 brad struct {
484 1.1 brad uint8_t len;
485 1.1 brad uint8_t always0x03;
486 1.1 brad uint8_t unicode_serial_number[60];
487 1.1 brad } usbsn;
488 1.1 brad } u;
489 1.1 brad };
490 1.1 brad
491 1.1 brad struct mcp2221_put_flash_res {
492 1.1 brad uint8_t cmd;
493 1.1 brad uint8_t completion;
494 1.1 brad uint8_t dontcare[62];
495 1.1 brad };
496 1.1 brad
497 1.1 brad /* XXX - missing is the submit password call to unlock the chip */
498 1.1 brad
499 1.2 riastrad #endif /* _UMCPMIO_HID_REPORTS_H_ */
500