Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

at master 1358 lines 31 kB view raw
1// SPDX-License-Identifier: GPL-2.0-only 2/* 3 * MCP2221A - Microchip USB to I2C Host Protocol Bridge 4 * 5 * Copyright (c) 2020, Rishi Gupta <gupt21@gmail.com> 6 * 7 * Datasheet: https://ww1.microchip.com/downloads/en/DeviceDoc/20005565B.pdf 8 */ 9 10#include <linux/module.h> 11#include <linux/err.h> 12#include <linux/mutex.h> 13#include <linux/bitfield.h> 14#include <linux/completion.h> 15#include <linux/delay.h> 16#include <linux/hid.h> 17#include <linux/hidraw.h> 18#include <linux/i2c.h> 19#include <linux/gpio/driver.h> 20#include <linux/iio/iio.h> 21#include <linux/minmax.h> 22#include <linux/moduleparam.h> 23#include "hid-ids.h" 24 25static bool gpio_mode_enforce; 26 27module_param(gpio_mode_enforce, bool, 0644); 28MODULE_PARM_DESC(gpio_mode_enforce, 29 "Enforce GPIO mode for GP0 thru GP3 (default: false, will be used for IIO)"); 30 31/* Commands codes in a raw output report */ 32enum { 33 MCP2221_I2C_WR_DATA = 0x90, 34 MCP2221_I2C_WR_NO_STOP = 0x94, 35 MCP2221_I2C_RD_DATA = 0x91, 36 MCP2221_I2C_RD_RPT_START = 0x93, 37 MCP2221_I2C_GET_DATA = 0x40, 38 MCP2221_I2C_PARAM_OR_STATUS = 0x10, 39 MCP2221_I2C_SET_SPEED = 0x20, 40 MCP2221_I2C_CANCEL = 0x10, 41 MCP2221_GPIO_SET = 0x50, 42 MCP2221_GPIO_GET = 0x51, 43 MCP2221_SET_SRAM_SETTINGS = 0x60, 44 MCP2221_GET_SRAM_SETTINGS = 0x61, 45 MCP2221_READ_FLASH_DATA = 0xb0, 46}; 47 48/* Response codes in a raw input report */ 49enum { 50 MCP2221_SUCCESS = 0x00, 51 MCP2221_I2C_ENG_BUSY = 0x01, 52 MCP2221_I2C_START_TOUT = 0x12, 53 MCP2221_I2C_STOP_TOUT = 0x62, 54 MCP2221_I2C_WRADDRL_TOUT = 0x23, 55 MCP2221_I2C_WRDATA_TOUT = 0x44, 56 MCP2221_I2C_WRADDRL_NACK = 0x25, 57 MCP2221_I2C_MASK_ADDR_NACK = 0x40, 58 MCP2221_I2C_WRADDRL_SEND = 0x21, 59 MCP2221_I2C_ADDR_NACK = 0x25, 60 MCP2221_I2C_READ_PARTIAL = 0x54, 61 MCP2221_I2C_READ_COMPL = 0x55, 62 MCP2221_ALT_F_NOT_GPIOV = 0xEE, 63 MCP2221_ALT_F_NOT_GPIOD = 0xEF, 64}; 65 66/* MCP SRAM read offsets cmd: MCP2221_GET_SRAM_SETTINGS */ 67enum { 68 MCP2221_SRAM_RD_GP0 = 22, 69 MCP2221_SRAM_RD_GP1 = 23, 70 MCP2221_SRAM_RD_GP2 = 24, 71 MCP2221_SRAM_RD_GP3 = 25, 72}; 73 74/* MCP SRAM write offsets cmd: MCP2221_SET_SRAM_SETTINGS */ 75enum { 76 MCP2221_SRAM_WR_GP_ENA_ALTER = 7, 77 MCP2221_SRAM_WR_GP0 = 8, 78 MCP2221_SRAM_WR_GP1 = 9, 79 MCP2221_SRAM_WR_GP2 = 10, 80 MCP2221_SRAM_WR_GP3 = 11, 81}; 82 83#define MCP2221_SRAM_GP_DESIGN_MASK 0x07 84#define MCP2221_SRAM_GP_DIRECTION_MASK 0x08 85#define MCP2221_SRAM_GP_VALUE_MASK 0x10 86 87/* MCP GPIO direction encoding */ 88enum { 89 MCP2221_DIR_OUT = 0x00, 90 MCP2221_DIR_IN = 0x01, 91}; 92 93#define MCP_NGPIO 4 94 95/* MCP GPIO set command layout */ 96struct mcp_set_gpio { 97 u8 cmd; 98 u8 dummy; 99 struct { 100 u8 change_value; 101 u8 value; 102 u8 change_direction; 103 u8 direction; 104 } gpio[MCP_NGPIO]; 105} __packed; 106 107/* MCP GPIO get command layout */ 108struct mcp_get_gpio { 109 u8 cmd; 110 u8 dummy; 111 struct { 112 u8 value; 113 u8 direction; 114 } gpio[MCP_NGPIO]; 115} __packed; 116 117/* 118 * There is no way to distinguish responses. Therefore next command 119 * is sent only after response to previous has been received. Mutex 120 * lock is used for this purpose mainly. 121 */ 122struct mcp2221 { 123 struct hid_device *hdev; 124 struct i2c_adapter adapter; 125 struct mutex lock; 126 struct completion wait_in_report; 127 struct delayed_work init_work; 128 u8 *rxbuf; 129 u8 txbuf[64]; 130 int rxbuf_idx; 131 int status; 132 u8 cur_i2c_clk_div; 133 struct gpio_chip *gc; 134 u8 gp_idx; 135 u8 gpio_dir; 136 u8 mode[4]; 137#if IS_REACHABLE(CONFIG_IIO) 138 struct iio_chan_spec iio_channels[3]; 139 u16 adc_values[3]; 140 u8 adc_scale; 141 u8 dac_value; 142 u16 dac_scale; 143#endif 144}; 145 146struct mcp2221_iio { 147 struct mcp2221 *mcp; 148}; 149 150/* 151 * Default i2c bus clock frequency 400 kHz. Modify this if you 152 * want to set some other frequency (min 50 kHz - max 400 kHz). 153 */ 154static uint i2c_clk_freq = 400; 155 156/* Synchronously send output report to the device */ 157static int mcp_send_report(struct mcp2221 *mcp, 158 u8 *out_report, size_t len) 159{ 160 u8 *buf; 161 int ret; 162 163 buf = kmemdup(out_report, len, GFP_KERNEL); 164 if (!buf) 165 return -ENOMEM; 166 167 /* mcp2221 uses interrupt endpoint for out reports */ 168 ret = hid_hw_output_report(mcp->hdev, buf, len); 169 kfree(buf); 170 171 if (ret < 0) 172 return ret; 173 return 0; 174} 175 176/* 177 * Send o/p report to the device and wait for i/p report to be 178 * received from the device. If the device does not respond, 179 * we timeout. 180 */ 181static int mcp_send_data_req_status(struct mcp2221 *mcp, 182 u8 *out_report, int len) 183{ 184 int ret; 185 unsigned long t; 186 187 reinit_completion(&mcp->wait_in_report); 188 189 ret = mcp_send_report(mcp, out_report, len); 190 if (ret) 191 return ret; 192 193 t = wait_for_completion_timeout(&mcp->wait_in_report, 194 msecs_to_jiffies(4000)); 195 if (!t) 196 return -ETIMEDOUT; 197 198 return mcp->status; 199} 200 201/* Check pass/fail for actual communication with i2c slave */ 202static int mcp_chk_last_cmd_status(struct mcp2221 *mcp) 203{ 204 memset(mcp->txbuf, 0, 8); 205 mcp->txbuf[0] = MCP2221_I2C_PARAM_OR_STATUS; 206 207 return mcp_send_data_req_status(mcp, mcp->txbuf, 8); 208} 209 210/* Cancels last command releasing i2c bus just in case occupied */ 211static int mcp_cancel_last_cmd(struct mcp2221 *mcp) 212{ 213 memset(mcp->txbuf, 0, 8); 214 mcp->txbuf[0] = MCP2221_I2C_PARAM_OR_STATUS; 215 mcp->txbuf[2] = MCP2221_I2C_CANCEL; 216 217 return mcp_send_data_req_status(mcp, mcp->txbuf, 8); 218} 219 220/* Check if the last command succeeded or failed and return the result. 221 * If the command did fail, cancel that command which will free the i2c bus. 222 */ 223static int mcp_chk_last_cmd_status_free_bus(struct mcp2221 *mcp) 224{ 225 int ret; 226 227 ret = mcp_chk_last_cmd_status(mcp); 228 if (ret) { 229 /* The last command was a failure. 230 * Send a cancel which will also free the bus. 231 */ 232 usleep_range(980, 1000); 233 mcp_cancel_last_cmd(mcp); 234 } 235 236 return ret; 237} 238 239static int mcp_set_i2c_speed(struct mcp2221 *mcp) 240{ 241 int ret; 242 243 memset(mcp->txbuf, 0, 8); 244 mcp->txbuf[0] = MCP2221_I2C_PARAM_OR_STATUS; 245 mcp->txbuf[3] = MCP2221_I2C_SET_SPEED; 246 mcp->txbuf[4] = mcp->cur_i2c_clk_div; 247 248 ret = mcp_send_data_req_status(mcp, mcp->txbuf, 8); 249 if (ret) { 250 /* Small delay is needed here */ 251 usleep_range(980, 1000); 252 mcp_cancel_last_cmd(mcp); 253 } 254 255 return 0; 256} 257 258/* 259 * An output report can contain minimum 1 and maximum 60 user data 260 * bytes. If the number of data bytes is more then 60, we send it 261 * in chunks of 60 bytes. Last chunk may contain exactly 60 or less 262 * bytes. Total number of bytes is informed in very first report to 263 * mcp2221, from that point onwards it first collect all the data 264 * from host and then send to i2c slave device. 265 */ 266static int mcp_i2c_write(struct mcp2221 *mcp, 267 struct i2c_msg *msg, int type, u8 last_status) 268{ 269 int ret, len, idx, sent; 270 271 idx = 0; 272 sent = 0; 273 len = min(msg->len, 60); 274 275 do { 276 mcp->txbuf[0] = type; 277 mcp->txbuf[1] = msg->len & 0xff; 278 mcp->txbuf[2] = msg->len >> 8; 279 mcp->txbuf[3] = (u8)(msg->addr << 1); 280 281 memcpy(&mcp->txbuf[4], &msg->buf[idx], len); 282 283 ret = mcp_send_data_req_status(mcp, mcp->txbuf, len + 4); 284 if (ret) 285 return ret; 286 287 usleep_range(980, 1000); 288 289 if (last_status) { 290 ret = mcp_chk_last_cmd_status_free_bus(mcp); 291 if (ret) 292 return ret; 293 } 294 295 sent = sent + len; 296 if (sent >= msg->len) 297 break; 298 299 idx = idx + len; 300 len = min(msg->len - sent, 60); 301 302 /* 303 * Testing shows delay is needed between successive writes 304 * otherwise next write fails on first-try from i2c core. 305 * This value is obtained through automated stress testing. 306 */ 307 usleep_range(980, 1000); 308 } while (len > 0); 309 310 return ret; 311} 312 313/* 314 * Device reads all data (0 - 65535 bytes) from i2c slave device and 315 * stores it in device itself. This data is read back from device to 316 * host in multiples of 60 bytes using input reports. 317 */ 318static int mcp_i2c_smbus_read(struct mcp2221 *mcp, 319 struct i2c_msg *msg, int type, u16 smbus_addr, 320 u8 smbus_len, u8 *smbus_buf) 321{ 322 int ret; 323 u16 total_len; 324 int retries = 0; 325 326 mcp->txbuf[0] = type; 327 if (msg) { 328 mcp->txbuf[1] = msg->len & 0xff; 329 mcp->txbuf[2] = msg->len >> 8; 330 mcp->txbuf[3] = (u8)(msg->addr << 1); 331 total_len = msg->len; 332 mcp->rxbuf = msg->buf; 333 } else { 334 mcp->txbuf[1] = smbus_len; 335 mcp->txbuf[2] = 0; 336 mcp->txbuf[3] = (u8)(smbus_addr << 1); 337 total_len = smbus_len; 338 mcp->rxbuf = smbus_buf; 339 } 340 341 ret = mcp_send_data_req_status(mcp, mcp->txbuf, 4); 342 if (ret) 343 return ret; 344 345 mcp->rxbuf_idx = 0; 346 347 do { 348 /* Wait for the data to be read by the device */ 349 usleep_range(980, 1000); 350 351 memset(mcp->txbuf, 0, 4); 352 mcp->txbuf[0] = MCP2221_I2C_GET_DATA; 353 354 ret = mcp_send_data_req_status(mcp, mcp->txbuf, 1); 355 if (ret) { 356 if (retries < 5) { 357 /* The data wasn't ready to read. 358 * Wait a bit longer and try again. 359 */ 360 usleep_range(90, 100); 361 retries++; 362 } else { 363 usleep_range(980, 1000); 364 mcp_cancel_last_cmd(mcp); 365 return ret; 366 } 367 } else { 368 retries = 0; 369 } 370 } while (mcp->rxbuf_idx < total_len); 371 372 usleep_range(980, 1000); 373 ret = mcp_chk_last_cmd_status_free_bus(mcp); 374 375 return ret; 376} 377 378static int mcp_i2c_xfer(struct i2c_adapter *adapter, 379 struct i2c_msg msgs[], int num) 380{ 381 int ret; 382 struct mcp2221 *mcp = i2c_get_adapdata(adapter); 383 384 hid_hw_power(mcp->hdev, PM_HINT_FULLON); 385 386 mutex_lock(&mcp->lock); 387 388 if (num == 1) { 389 if (msgs->flags & I2C_M_RD) { 390 ret = mcp_i2c_smbus_read(mcp, msgs, MCP2221_I2C_RD_DATA, 391 0, 0, NULL); 392 } else { 393 ret = mcp_i2c_write(mcp, msgs, MCP2221_I2C_WR_DATA, 1); 394 } 395 if (ret) 396 goto exit; 397 ret = num; 398 } else if (num == 2) { 399 /* Ex transaction; send reg address and read its contents */ 400 if (msgs[0].addr == msgs[1].addr && 401 !(msgs[0].flags & I2C_M_RD) && 402 (msgs[1].flags & I2C_M_RD)) { 403 404 ret = mcp_i2c_write(mcp, &msgs[0], 405 MCP2221_I2C_WR_NO_STOP, 0); 406 if (ret) 407 goto exit; 408 409 ret = mcp_i2c_smbus_read(mcp, &msgs[1], 410 MCP2221_I2C_RD_RPT_START, 411 0, 0, NULL); 412 if (ret) 413 goto exit; 414 ret = num; 415 } else { 416 dev_err(&adapter->dev, 417 "unsupported multi-msg i2c transaction\n"); 418 ret = -EOPNOTSUPP; 419 } 420 } else { 421 dev_err(&adapter->dev, 422 "unsupported multi-msg i2c transaction\n"); 423 ret = -EOPNOTSUPP; 424 } 425 426exit: 427 hid_hw_power(mcp->hdev, PM_HINT_NORMAL); 428 mutex_unlock(&mcp->lock); 429 return ret; 430} 431 432static int mcp_smbus_write(struct mcp2221 *mcp, u16 addr, 433 u8 command, u8 *buf, u8 len, int type, 434 u8 last_status) 435{ 436 int data_len, ret; 437 438 mcp->txbuf[0] = type; 439 mcp->txbuf[1] = len + 1; /* 1 is due to command byte itself */ 440 mcp->txbuf[2] = 0; 441 mcp->txbuf[3] = (u8)(addr << 1); 442 mcp->txbuf[4] = command; 443 444 switch (len) { 445 case 0: 446 data_len = 5; 447 break; 448 case 1: 449 mcp->txbuf[5] = buf[0]; 450 data_len = 6; 451 break; 452 case 2: 453 mcp->txbuf[5] = buf[0]; 454 mcp->txbuf[6] = buf[1]; 455 data_len = 7; 456 break; 457 default: 458 if (len > I2C_SMBUS_BLOCK_MAX) 459 return -EINVAL; 460 461 memcpy(&mcp->txbuf[5], buf, len); 462 data_len = len + 5; 463 } 464 465 ret = mcp_send_data_req_status(mcp, mcp->txbuf, data_len); 466 if (ret) 467 return ret; 468 469 if (last_status) { 470 usleep_range(980, 1000); 471 472 ret = mcp_chk_last_cmd_status_free_bus(mcp); 473 } 474 475 return ret; 476} 477 478static int mcp_smbus_xfer(struct i2c_adapter *adapter, u16 addr, 479 unsigned short flags, char read_write, 480 u8 command, int size, 481 union i2c_smbus_data *data) 482{ 483 int ret; 484 struct mcp2221 *mcp = i2c_get_adapdata(adapter); 485 486 hid_hw_power(mcp->hdev, PM_HINT_FULLON); 487 488 mutex_lock(&mcp->lock); 489 490 switch (size) { 491 492 case I2C_SMBUS_QUICK: 493 if (read_write == I2C_SMBUS_READ) 494 ret = mcp_i2c_smbus_read(mcp, NULL, MCP2221_I2C_RD_DATA, 495 addr, 0, &data->byte); 496 else 497 ret = mcp_smbus_write(mcp, addr, command, NULL, 498 0, MCP2221_I2C_WR_DATA, 1); 499 break; 500 case I2C_SMBUS_BYTE: 501 if (read_write == I2C_SMBUS_READ) 502 ret = mcp_i2c_smbus_read(mcp, NULL, MCP2221_I2C_RD_DATA, 503 addr, 1, &data->byte); 504 else 505 ret = mcp_smbus_write(mcp, addr, command, NULL, 506 0, MCP2221_I2C_WR_DATA, 1); 507 break; 508 case I2C_SMBUS_BYTE_DATA: 509 if (read_write == I2C_SMBUS_READ) { 510 ret = mcp_smbus_write(mcp, addr, command, NULL, 511 0, MCP2221_I2C_WR_NO_STOP, 0); 512 if (ret) 513 goto exit; 514 515 ret = mcp_i2c_smbus_read(mcp, NULL, 516 MCP2221_I2C_RD_RPT_START, 517 addr, 1, &data->byte); 518 } else { 519 ret = mcp_smbus_write(mcp, addr, command, &data->byte, 520 1, MCP2221_I2C_WR_DATA, 1); 521 } 522 break; 523 case I2C_SMBUS_WORD_DATA: 524 if (read_write == I2C_SMBUS_READ) { 525 ret = mcp_smbus_write(mcp, addr, command, NULL, 526 0, MCP2221_I2C_WR_NO_STOP, 0); 527 if (ret) 528 goto exit; 529 530 ret = mcp_i2c_smbus_read(mcp, NULL, 531 MCP2221_I2C_RD_RPT_START, 532 addr, 2, (u8 *)&data->word); 533 } else { 534 ret = mcp_smbus_write(mcp, addr, command, 535 (u8 *)&data->word, 2, 536 MCP2221_I2C_WR_DATA, 1); 537 } 538 break; 539 case I2C_SMBUS_BLOCK_DATA: 540 if (read_write == I2C_SMBUS_READ) { 541 ret = mcp_smbus_write(mcp, addr, command, NULL, 542 0, MCP2221_I2C_WR_NO_STOP, 1); 543 if (ret) 544 goto exit; 545 546 ret = mcp_i2c_smbus_read(mcp, NULL, 547 MCP2221_I2C_RD_RPT_START, 548 addr, data->block[0] + 1, 549 data->block); 550 if (ret) 551 goto exit; 552 } else { 553 if (!data->block[0]) { 554 ret = -EINVAL; 555 goto exit; 556 } 557 ret = mcp_smbus_write(mcp, addr, command, data->block, 558 data->block[0] + 1, 559 MCP2221_I2C_WR_DATA, 1); 560 } 561 break; 562 case I2C_SMBUS_I2C_BLOCK_DATA: 563 if (read_write == I2C_SMBUS_READ) { 564 ret = mcp_smbus_write(mcp, addr, command, NULL, 565 0, MCP2221_I2C_WR_NO_STOP, 0); 566 if (ret) 567 goto exit; 568 569 ret = mcp_i2c_smbus_read(mcp, NULL, 570 MCP2221_I2C_RD_RPT_START, 571 addr, data->block[0], 572 &data->block[1]); 573 if (ret) 574 goto exit; 575 } else { 576 if (!data->block[0]) { 577 ret = -EINVAL; 578 goto exit; 579 } 580 ret = mcp_smbus_write(mcp, addr, command, 581 &data->block[1], data->block[0], 582 MCP2221_I2C_WR_DATA, 1); 583 } 584 break; 585 case I2C_SMBUS_PROC_CALL: 586 ret = mcp_smbus_write(mcp, addr, command, 587 (u8 *)&data->word, 588 2, MCP2221_I2C_WR_NO_STOP, 0); 589 if (ret) 590 goto exit; 591 592 ret = mcp_i2c_smbus_read(mcp, NULL, 593 MCP2221_I2C_RD_RPT_START, 594 addr, 2, (u8 *)&data->word); 595 break; 596 case I2C_SMBUS_BLOCK_PROC_CALL: 597 ret = mcp_smbus_write(mcp, addr, command, data->block, 598 data->block[0] + 1, 599 MCP2221_I2C_WR_NO_STOP, 0); 600 if (ret) 601 goto exit; 602 603 ret = mcp_i2c_smbus_read(mcp, NULL, 604 MCP2221_I2C_RD_RPT_START, 605 addr, I2C_SMBUS_BLOCK_MAX, 606 data->block); 607 break; 608 default: 609 dev_err(&mcp->adapter.dev, 610 "unsupported smbus transaction size:%d\n", size); 611 ret = -EOPNOTSUPP; 612 } 613 614exit: 615 hid_hw_power(mcp->hdev, PM_HINT_NORMAL); 616 mutex_unlock(&mcp->lock); 617 return ret; 618} 619 620static u32 mcp_i2c_func(struct i2c_adapter *adapter) 621{ 622 return I2C_FUNC_I2C | 623 I2C_FUNC_SMBUS_READ_BLOCK_DATA | 624 I2C_FUNC_SMBUS_BLOCK_PROC_CALL | 625 (I2C_FUNC_SMBUS_EMUL & ~I2C_FUNC_SMBUS_PEC); 626} 627 628static const struct i2c_algorithm mcp_i2c_algo = { 629 .master_xfer = mcp_i2c_xfer, 630 .smbus_xfer = mcp_smbus_xfer, 631 .functionality = mcp_i2c_func, 632}; 633 634#if IS_REACHABLE(CONFIG_GPIOLIB) 635static int mcp_gpio_read_sram(struct mcp2221 *mcp) 636{ 637 int ret; 638 639 memset(mcp->txbuf, 0, 64); 640 mcp->txbuf[0] = MCP2221_GET_SRAM_SETTINGS; 641 642 mutex_lock(&mcp->lock); 643 ret = mcp_send_data_req_status(mcp, mcp->txbuf, 64); 644 mutex_unlock(&mcp->lock); 645 646 return ret; 647} 648 649/* 650 * If CONFIG_IIO is not enabled, check for the gpio pins 651 * if they are in gpio mode. For the ones which are not 652 * in gpio mode, set them into gpio mode. 653 */ 654static int mcp2221_check_gpio_pinfunc(struct mcp2221 *mcp) 655{ 656 int i; 657 int needgpiofix = 0; 658 int ret; 659 660 if (IS_ENABLED(CONFIG_IIO) && !gpio_mode_enforce) 661 return 0; 662 663 ret = mcp_gpio_read_sram(mcp); 664 if (ret) 665 return ret; 666 667 for (i = 0; i < MCP_NGPIO; i++) { 668 if ((mcp->mode[i] & MCP2221_SRAM_GP_DESIGN_MASK) != 0x0) { 669 dev_warn(&mcp->hdev->dev, 670 "GPIO %d not in gpio mode\n", i); 671 needgpiofix = 1; 672 } 673 } 674 675 if (!needgpiofix) 676 return 0; 677 678 /* 679 * Set all bytes to 0, so Bit 7 is not set. The chip 680 * only changes content of a register when bit 7 is set. 681 */ 682 memset(mcp->txbuf, 0, 64); 683 mcp->txbuf[0] = MCP2221_SET_SRAM_SETTINGS; 684 685 /* 686 * Set bit 7 in MCP2221_SRAM_WR_GP_ENA_ALTER to enable 687 * loading of a new set of gpio settings to GP SRAM 688 */ 689 mcp->txbuf[MCP2221_SRAM_WR_GP_ENA_ALTER] = 0x80; 690 for (i = 0; i < MCP_NGPIO; i++) { 691 if ((mcp->mode[i] & MCP2221_SRAM_GP_DESIGN_MASK) == 0x0) { 692 /* write current GPIO mode */ 693 mcp->txbuf[MCP2221_SRAM_WR_GP0 + i] = mcp->mode[i]; 694 } else { 695 /* pin is not in gpio mode, set it to input mode */ 696 mcp->txbuf[MCP2221_SRAM_WR_GP0 + i] = 0x08; 697 dev_warn(&mcp->hdev->dev, 698 "Set GPIO mode for gpio pin %d!\n", i); 699 } 700 } 701 702 mutex_lock(&mcp->lock); 703 ret = mcp_send_data_req_status(mcp, mcp->txbuf, 64); 704 mutex_unlock(&mcp->lock); 705 706 return ret; 707} 708 709static int mcp_gpio_get(struct gpio_chip *gc, 710 unsigned int offset) 711{ 712 int ret; 713 struct mcp2221 *mcp = gpiochip_get_data(gc); 714 715 mcp->txbuf[0] = MCP2221_GPIO_GET; 716 717 mcp->gp_idx = offsetof(struct mcp_get_gpio, gpio[offset]); 718 719 mutex_lock(&mcp->lock); 720 ret = mcp_send_data_req_status(mcp, mcp->txbuf, 1); 721 mutex_unlock(&mcp->lock); 722 723 return ret; 724} 725 726static int mcp_gpio_set(struct gpio_chip *gc, unsigned int offset, int value) 727{ 728 struct mcp2221 *mcp = gpiochip_get_data(gc); 729 int ret; 730 731 memset(mcp->txbuf, 0, 18); 732 mcp->txbuf[0] = MCP2221_GPIO_SET; 733 734 mcp->gp_idx = offsetof(struct mcp_set_gpio, gpio[offset].value); 735 736 mcp->txbuf[mcp->gp_idx - 1] = 1; 737 mcp->txbuf[mcp->gp_idx] = !!value; 738 739 mutex_lock(&mcp->lock); 740 ret = mcp_send_data_req_status(mcp, mcp->txbuf, 18); 741 mutex_unlock(&mcp->lock); 742 743 return ret; 744} 745 746static int mcp_gpio_dir_set(struct mcp2221 *mcp, 747 unsigned int offset, u8 val) 748{ 749 memset(mcp->txbuf, 0, 18); 750 mcp->txbuf[0] = MCP2221_GPIO_SET; 751 752 mcp->gp_idx = offsetof(struct mcp_set_gpio, gpio[offset].direction); 753 754 mcp->txbuf[mcp->gp_idx - 1] = 1; 755 mcp->txbuf[mcp->gp_idx] = val; 756 757 return mcp_send_data_req_status(mcp, mcp->txbuf, 18); 758} 759 760static int mcp_gpio_direction_input(struct gpio_chip *gc, 761 unsigned int offset) 762{ 763 int ret; 764 struct mcp2221 *mcp = gpiochip_get_data(gc); 765 766 mutex_lock(&mcp->lock); 767 ret = mcp_gpio_dir_set(mcp, offset, MCP2221_DIR_IN); 768 mutex_unlock(&mcp->lock); 769 770 return ret; 771} 772 773static int mcp_gpio_direction_output(struct gpio_chip *gc, 774 unsigned int offset, int value) 775{ 776 int ret; 777 struct mcp2221 *mcp = gpiochip_get_data(gc); 778 779 mutex_lock(&mcp->lock); 780 ret = mcp_gpio_dir_set(mcp, offset, MCP2221_DIR_OUT); 781 mutex_unlock(&mcp->lock); 782 783 /* Can't configure as output, bailout early */ 784 if (ret) 785 return ret; 786 787 mcp_gpio_set(gc, offset, value); 788 789 return 0; 790} 791 792static int mcp_gpio_get_direction(struct gpio_chip *gc, 793 unsigned int offset) 794{ 795 int ret; 796 struct mcp2221 *mcp = gpiochip_get_data(gc); 797 798 mcp->txbuf[0] = MCP2221_GPIO_GET; 799 800 mcp->gp_idx = offsetof(struct mcp_get_gpio, gpio[offset]); 801 802 mutex_lock(&mcp->lock); 803 ret = mcp_send_data_req_status(mcp, mcp->txbuf, 1); 804 mutex_unlock(&mcp->lock); 805 806 if (ret) 807 return ret; 808 809 if (mcp->gpio_dir == MCP2221_DIR_IN) 810 return GPIO_LINE_DIRECTION_IN; 811 812 return GPIO_LINE_DIRECTION_OUT; 813} 814#endif 815 816/* Gives current state of i2c engine inside mcp2221 */ 817static int mcp_get_i2c_eng_state(struct mcp2221 *mcp, 818 u8 *data, u8 idx) 819{ 820 int ret; 821 822 switch (data[idx]) { 823 case MCP2221_I2C_WRADDRL_NACK: 824 case MCP2221_I2C_WRADDRL_SEND: 825 ret = -ENXIO; 826 break; 827 case MCP2221_I2C_START_TOUT: 828 case MCP2221_I2C_STOP_TOUT: 829 case MCP2221_I2C_WRADDRL_TOUT: 830 case MCP2221_I2C_WRDATA_TOUT: 831 ret = -ETIMEDOUT; 832 break; 833 case MCP2221_I2C_ENG_BUSY: 834 ret = -EAGAIN; 835 break; 836 case MCP2221_SUCCESS: 837 ret = 0x00; 838 break; 839 default: 840 ret = -EIO; 841 } 842 843 return ret; 844} 845 846/* 847 * MCP2221 uses interrupt endpoint for input reports. This function 848 * is called by HID layer when it receives i/p report from mcp2221, 849 * which is actually a response to the previously sent command. 850 * 851 * MCP2221A firmware specific return codes are parsed and 0 or 852 * appropriate negative error code is returned. Delayed response 853 * results in timeout error and stray reponses results in -EIO. 854 */ 855static int mcp2221_raw_event(struct hid_device *hdev, 856 struct hid_report *report, u8 *data, int size) 857{ 858 u8 *buf; 859 struct mcp2221 *mcp = hid_get_drvdata(hdev); 860 861 switch (data[0]) { 862 863 case MCP2221_I2C_WR_DATA: 864 case MCP2221_I2C_WR_NO_STOP: 865 case MCP2221_I2C_RD_DATA: 866 case MCP2221_I2C_RD_RPT_START: 867 switch (data[1]) { 868 case MCP2221_SUCCESS: 869 mcp->status = 0; 870 break; 871 default: 872 mcp->status = mcp_get_i2c_eng_state(mcp, data, 2); 873 } 874 complete(&mcp->wait_in_report); 875 break; 876 877 case MCP2221_I2C_PARAM_OR_STATUS: 878 switch (data[1]) { 879 case MCP2221_SUCCESS: 880 if ((mcp->txbuf[3] == MCP2221_I2C_SET_SPEED) && 881 (data[3] != MCP2221_I2C_SET_SPEED)) { 882 mcp->status = -EAGAIN; 883 break; 884 } 885 if (data[20] & MCP2221_I2C_MASK_ADDR_NACK) { 886 mcp->status = -ENXIO; 887 break; 888 } 889 mcp->status = mcp_get_i2c_eng_state(mcp, data, 8); 890#if IS_REACHABLE(CONFIG_IIO) 891 memcpy(&mcp->adc_values, &data[50], sizeof(mcp->adc_values)); 892#endif 893 break; 894 default: 895 mcp->status = -EIO; 896 } 897 complete(&mcp->wait_in_report); 898 break; 899 900 case MCP2221_I2C_GET_DATA: 901 switch (data[1]) { 902 case MCP2221_SUCCESS: 903 if (data[2] == MCP2221_I2C_ADDR_NACK) { 904 mcp->status = -ENXIO; 905 break; 906 } 907 if (!mcp_get_i2c_eng_state(mcp, data, 2) 908 && (data[3] == 0)) { 909 mcp->status = 0; 910 break; 911 } 912 if (data[3] == 127) { 913 mcp->status = -EIO; 914 break; 915 } 916 if (data[2] == MCP2221_I2C_READ_COMPL || 917 data[2] == MCP2221_I2C_READ_PARTIAL) { 918 if (!mcp->rxbuf || mcp->rxbuf_idx < 0 || data[3] > 60) { 919 mcp->status = -EINVAL; 920 break; 921 } 922 buf = mcp->rxbuf; 923 memcpy(&buf[mcp->rxbuf_idx], &data[4], data[3]); 924 mcp->rxbuf_idx = mcp->rxbuf_idx + data[3]; 925 mcp->status = 0; 926 break; 927 } 928 mcp->status = -EIO; 929 break; 930 default: 931 mcp->status = -EIO; 932 } 933 complete(&mcp->wait_in_report); 934 break; 935 936 case MCP2221_GPIO_GET: 937 switch (data[1]) { 938 case MCP2221_SUCCESS: 939 if ((data[mcp->gp_idx] == MCP2221_ALT_F_NOT_GPIOV) || 940 (data[mcp->gp_idx + 1] == MCP2221_ALT_F_NOT_GPIOD)) { 941 mcp->status = -ENOENT; 942 } else { 943 mcp->status = !!data[mcp->gp_idx]; 944 mcp->gpio_dir = data[mcp->gp_idx + 1]; 945 } 946 break; 947 default: 948 mcp->status = -EAGAIN; 949 } 950 complete(&mcp->wait_in_report); 951 break; 952 953 case MCP2221_GPIO_SET: 954 switch (data[1]) { 955 case MCP2221_SUCCESS: 956 if ((data[mcp->gp_idx] == MCP2221_ALT_F_NOT_GPIOV) || 957 (data[mcp->gp_idx - 1] == MCP2221_ALT_F_NOT_GPIOV)) { 958 mcp->status = -ENOENT; 959 } else { 960 mcp->status = 0; 961 } 962 break; 963 default: 964 mcp->status = -EAGAIN; 965 } 966 complete(&mcp->wait_in_report); 967 break; 968 969 case MCP2221_SET_SRAM_SETTINGS: 970 switch (data[1]) { 971 case MCP2221_SUCCESS: 972 mcp->status = 0; 973 break; 974 default: 975 mcp->status = -EAGAIN; 976 } 977 complete(&mcp->wait_in_report); 978 break; 979 980 case MCP2221_GET_SRAM_SETTINGS: 981 switch (data[1]) { 982 case MCP2221_SUCCESS: 983 memcpy(&mcp->mode, &data[22], 4); 984#if IS_REACHABLE(CONFIG_IIO) 985 mcp->dac_value = data[6] & GENMASK(4, 0); 986#endif 987 mcp->status = 0; 988 break; 989 default: 990 mcp->status = -EAGAIN; 991 } 992 complete(&mcp->wait_in_report); 993 break; 994 995 case MCP2221_READ_FLASH_DATA: 996 switch (data[1]) { 997 case MCP2221_SUCCESS: 998 mcp->status = 0; 999 1000 /* Only handles CHIP SETTINGS subpage currently */ 1001 if (mcp->txbuf[1] != 0) { 1002 mcp->status = -EIO; 1003 break; 1004 } 1005 1006#if IS_REACHABLE(CONFIG_IIO) 1007 { 1008 u8 tmp; 1009 /* DAC scale value */ 1010 tmp = FIELD_GET(GENMASK(7, 6), data[6]); 1011 if ((data[6] & BIT(5)) && tmp) 1012 mcp->dac_scale = tmp + 4; 1013 else 1014 mcp->dac_scale = 5; 1015 1016 /* ADC scale value */ 1017 tmp = FIELD_GET(GENMASK(4, 3), data[7]); 1018 if ((data[7] & BIT(2)) && tmp) 1019 mcp->adc_scale = tmp - 1; 1020 else 1021 mcp->adc_scale = 0; 1022 } 1023#endif 1024 1025 break; 1026 default: 1027 mcp->status = -EAGAIN; 1028 } 1029 complete(&mcp->wait_in_report); 1030 break; 1031 1032 default: 1033 mcp->status = -EIO; 1034 complete(&mcp->wait_in_report); 1035 } 1036 1037 return 1; 1038} 1039 1040/* Device resource managed function for HID unregistration */ 1041static void mcp2221_hid_unregister(void *ptr) 1042{ 1043 struct hid_device *hdev = ptr; 1044 1045 hid_hw_close(hdev); 1046 hid_hw_stop(hdev); 1047} 1048 1049/* This is needed to be sure hid_hw_stop() isn't called twice by the subsystem */ 1050static void mcp2221_remove(struct hid_device *hdev) 1051{ 1052#if IS_REACHABLE(CONFIG_IIO) 1053 struct mcp2221 *mcp = hid_get_drvdata(hdev); 1054 1055 if (!gpio_mode_enforce) 1056 cancel_delayed_work_sync(&mcp->init_work); 1057#endif 1058} 1059 1060#if IS_REACHABLE(CONFIG_IIO) 1061static int mcp2221_read_raw(struct iio_dev *indio_dev, 1062 struct iio_chan_spec const *channel, int *val, 1063 int *val2, long mask) 1064{ 1065 struct mcp2221_iio *priv = iio_priv(indio_dev); 1066 struct mcp2221 *mcp = priv->mcp; 1067 int ret; 1068 1069 if (mask == IIO_CHAN_INFO_SCALE) { 1070 if (channel->output) 1071 *val = 1 << mcp->dac_scale; 1072 else 1073 *val = 1 << mcp->adc_scale; 1074 1075 return IIO_VAL_INT; 1076 } 1077 1078 mutex_lock(&mcp->lock); 1079 1080 if (channel->output) { 1081 *val = mcp->dac_value; 1082 ret = IIO_VAL_INT; 1083 } else { 1084 /* Read ADC values */ 1085 ret = mcp_chk_last_cmd_status(mcp); 1086 1087 if (!ret) { 1088 *val = le16_to_cpu((__force __le16) mcp->adc_values[channel->address]); 1089 if (*val >= BIT(10)) 1090 ret = -EINVAL; 1091 else 1092 ret = IIO_VAL_INT; 1093 } 1094 } 1095 1096 mutex_unlock(&mcp->lock); 1097 1098 return ret; 1099} 1100 1101static int mcp2221_write_raw(struct iio_dev *indio_dev, 1102 struct iio_chan_spec const *chan, 1103 int val, int val2, long mask) 1104{ 1105 struct mcp2221_iio *priv = iio_priv(indio_dev); 1106 struct mcp2221 *mcp = priv->mcp; 1107 int ret; 1108 1109 if (val < 0 || val >= BIT(5)) 1110 return -EINVAL; 1111 1112 mutex_lock(&mcp->lock); 1113 1114 memset(mcp->txbuf, 0, 12); 1115 mcp->txbuf[0] = MCP2221_SET_SRAM_SETTINGS; 1116 mcp->txbuf[4] = BIT(7) | val; 1117 1118 ret = mcp_send_data_req_status(mcp, mcp->txbuf, 12); 1119 if (!ret) 1120 mcp->dac_value = val; 1121 1122 mutex_unlock(&mcp->lock); 1123 1124 return ret; 1125} 1126 1127static const struct iio_info mcp2221_info = { 1128 .read_raw = &mcp2221_read_raw, 1129 .write_raw = &mcp2221_write_raw, 1130}; 1131 1132static int mcp_iio_channels(struct mcp2221 *mcp) 1133{ 1134 int idx, cnt = 0; 1135 bool dac_created = false; 1136 1137 /* GP0 doesn't have ADC/DAC alternative function */ 1138 for (idx = 1; idx < MCP_NGPIO; idx++) { 1139 struct iio_chan_spec *chan = &mcp->iio_channels[cnt]; 1140 1141 switch (mcp->mode[idx]) { 1142 case 2: 1143 chan->address = idx - 1; 1144 chan->channel = cnt++; 1145 break; 1146 case 3: 1147 /* GP1 doesn't have DAC alternative function */ 1148 if (idx == 1 || dac_created) 1149 continue; 1150 /* DAC1 and DAC2 outputs are connected to the same DAC */ 1151 dac_created = true; 1152 chan->output = 1; 1153 cnt++; 1154 break; 1155 default: 1156 continue; 1157 } 1158 1159 chan->type = IIO_VOLTAGE; 1160 chan->indexed = 1; 1161 chan->info_mask_separate = BIT(IIO_CHAN_INFO_RAW); 1162 chan->info_mask_shared_by_type = BIT(IIO_CHAN_INFO_SCALE); 1163 chan->scan_index = -1; 1164 } 1165 1166 return cnt; 1167} 1168 1169static void mcp_init_work(struct work_struct *work) 1170{ 1171 struct iio_dev *indio_dev; 1172 struct mcp2221 *mcp = container_of(work, struct mcp2221, init_work.work); 1173 struct mcp2221_iio *data; 1174 static int retries = 5; 1175 int ret, num_channels; 1176 1177 hid_hw_power(mcp->hdev, PM_HINT_FULLON); 1178 mutex_lock(&mcp->lock); 1179 1180 mcp->txbuf[0] = MCP2221_GET_SRAM_SETTINGS; 1181 ret = mcp_send_data_req_status(mcp, mcp->txbuf, 1); 1182 1183 if (ret == -EAGAIN) 1184 goto reschedule_task; 1185 1186 num_channels = mcp_iio_channels(mcp); 1187 if (!num_channels) 1188 goto unlock; 1189 1190 mcp->txbuf[0] = MCP2221_READ_FLASH_DATA; 1191 mcp->txbuf[1] = 0; 1192 ret = mcp_send_data_req_status(mcp, mcp->txbuf, 2); 1193 1194 if (ret == -EAGAIN) 1195 goto reschedule_task; 1196 1197 indio_dev = devm_iio_device_alloc(&mcp->hdev->dev, sizeof(*data)); 1198 if (!indio_dev) 1199 goto unlock; 1200 1201 data = iio_priv(indio_dev); 1202 data->mcp = mcp; 1203 1204 indio_dev->name = "mcp2221"; 1205 indio_dev->modes = INDIO_DIRECT_MODE; 1206 indio_dev->info = &mcp2221_info; 1207 indio_dev->channels = mcp->iio_channels; 1208 indio_dev->num_channels = num_channels; 1209 1210 devm_iio_device_register(&mcp->hdev->dev, indio_dev); 1211 1212unlock: 1213 mutex_unlock(&mcp->lock); 1214 hid_hw_power(mcp->hdev, PM_HINT_NORMAL); 1215 1216 return; 1217 1218reschedule_task: 1219 mutex_unlock(&mcp->lock); 1220 hid_hw_power(mcp->hdev, PM_HINT_NORMAL); 1221 1222 if (!retries--) 1223 return; 1224 1225 /* Device is not ready to read SRAM or FLASH data, try again */ 1226 schedule_delayed_work(&mcp->init_work, msecs_to_jiffies(100)); 1227} 1228#endif 1229 1230static int mcp2221_probe(struct hid_device *hdev, 1231 const struct hid_device_id *id) 1232{ 1233 int ret; 1234 struct mcp2221 *mcp; 1235 1236 mcp = devm_kzalloc(&hdev->dev, sizeof(*mcp), GFP_KERNEL); 1237 if (!mcp) 1238 return -ENOMEM; 1239 1240 ret = hid_parse(hdev); 1241 if (ret) { 1242 hid_err(hdev, "can't parse reports\n"); 1243 return ret; 1244 } 1245 1246 /* 1247 * This driver uses the .raw_event callback and therefore does not need any 1248 * HID_CONNECT_xxx flags. 1249 */ 1250 ret = hid_hw_start(hdev, 0); 1251 if (ret) { 1252 hid_err(hdev, "can't start hardware\n"); 1253 return ret; 1254 } 1255 1256 hid_info(hdev, "USB HID v%x.%02x Device [%s] on %s\n", hdev->version >> 8, 1257 hdev->version & 0xff, hdev->name, hdev->phys); 1258 1259 ret = hid_hw_open(hdev); 1260 if (ret) { 1261 hid_err(hdev, "can't open device\n"); 1262 hid_hw_stop(hdev); 1263 return ret; 1264 } 1265 1266 mutex_init(&mcp->lock); 1267 init_completion(&mcp->wait_in_report); 1268 hid_set_drvdata(hdev, mcp); 1269 mcp->hdev = hdev; 1270 1271 ret = devm_add_action_or_reset(&hdev->dev, mcp2221_hid_unregister, hdev); 1272 if (ret) 1273 return ret; 1274 1275 hid_device_io_start(hdev); 1276 1277 /* Set I2C bus clock diviser */ 1278 if (i2c_clk_freq > 400) 1279 i2c_clk_freq = 400; 1280 if (i2c_clk_freq < 50) 1281 i2c_clk_freq = 50; 1282 mcp->cur_i2c_clk_div = (12000000 / (i2c_clk_freq * 1000)) - 3; 1283 ret = mcp_set_i2c_speed(mcp); 1284 if (ret) { 1285 hid_err(hdev, "can't set i2c speed: %d\n", ret); 1286 return ret; 1287 } 1288 1289 mcp->adapter.owner = THIS_MODULE; 1290 mcp->adapter.class = I2C_CLASS_HWMON; 1291 mcp->adapter.algo = &mcp_i2c_algo; 1292 mcp->adapter.retries = 1; 1293 mcp->adapter.dev.parent = &hdev->dev; 1294 ACPI_COMPANION_SET(&mcp->adapter.dev, ACPI_COMPANION(hdev->dev.parent)); 1295 snprintf(mcp->adapter.name, sizeof(mcp->adapter.name), 1296 "MCP2221 usb-i2c bridge"); 1297 1298 i2c_set_adapdata(&mcp->adapter, mcp); 1299 ret = devm_i2c_add_adapter(&hdev->dev, &mcp->adapter); 1300 if (ret) { 1301 hid_err(hdev, "can't add usb-i2c adapter: %d\n", ret); 1302 return ret; 1303 } 1304 1305#if IS_REACHABLE(CONFIG_GPIOLIB) 1306 /* Setup GPIO chip */ 1307 mcp->gc = devm_kzalloc(&hdev->dev, sizeof(*mcp->gc), GFP_KERNEL); 1308 if (!mcp->gc) 1309 return -ENOMEM; 1310 1311 mcp->gc->label = "mcp2221_gpio"; 1312 mcp->gc->direction_input = mcp_gpio_direction_input; 1313 mcp->gc->direction_output = mcp_gpio_direction_output; 1314 mcp->gc->get_direction = mcp_gpio_get_direction; 1315 mcp->gc->set = mcp_gpio_set; 1316 mcp->gc->get = mcp_gpio_get; 1317 mcp->gc->ngpio = MCP_NGPIO; 1318 mcp->gc->base = -1; 1319 mcp->gc->can_sleep = 1; 1320 mcp->gc->parent = &hdev->dev; 1321 1322 ret = devm_gpiochip_add_data(&hdev->dev, mcp->gc, mcp); 1323 if (ret) 1324 return ret; 1325 1326 mcp2221_check_gpio_pinfunc(mcp); 1327#endif 1328 1329#if IS_REACHABLE(CONFIG_IIO) 1330 if (!gpio_mode_enforce) { 1331 INIT_DELAYED_WORK(&mcp->init_work, mcp_init_work); 1332 schedule_delayed_work(&mcp->init_work, msecs_to_jiffies(100)); 1333 } 1334#endif 1335 1336 return 0; 1337} 1338 1339static const struct hid_device_id mcp2221_devices[] = { 1340 { HID_USB_DEVICE(USB_VENDOR_ID_MICROCHIP, USB_DEVICE_ID_MCP2221) }, 1341 { } 1342}; 1343MODULE_DEVICE_TABLE(hid, mcp2221_devices); 1344 1345static struct hid_driver mcp2221_driver = { 1346 .name = "mcp2221", 1347 .id_table = mcp2221_devices, 1348 .probe = mcp2221_probe, 1349 .remove = mcp2221_remove, 1350 .raw_event = mcp2221_raw_event, 1351}; 1352 1353/* Register with HID core */ 1354module_hid_driver(mcp2221_driver); 1355 1356MODULE_AUTHOR("Rishi Gupta <gupt21@gmail.com>"); 1357MODULE_DESCRIPTION("MCP2221 Microchip HID USB to I2C master bridge"); 1358MODULE_LICENSE("GPL v2");