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