1 // SPDX-License-Identifier: GPL-2.0 2 /* 3 * Driver for TI TPS6598x USB Power Delivery controller family 4 * 5 * Copyright (C) 2017, Intel Corporation 6 * Author: Heikki Krogerus <heikki.krogerus@linux.intel.com> 7 */ 8 9 #include <linux/i2c.h> 10 #include <linux/acpi.h> 11 #include <linux/module.h> 12 #include <linux/of.h> 13 #include <linux/power_supply.h> 14 #include <linux/regmap.h> 15 #include <linux/interrupt.h> 16 #include <linux/usb/typec.h> 17 #include <linux/usb/typec_altmode.h> 18 #include <linux/usb/role.h> 19 #include <linux/workqueue.h> 20 21 #include "tps6598x.h" 22 #include "trace.h" 23 24 /* Register offsets */ 25 #define TPS_REG_VID 0x00 26 #define TPS_REG_MODE 0x03 27 #define TPS_REG_CMD1 0x08 28 #define TPS_REG_DATA1 0x09 29 #define TPS_REG_INT_EVENT1 0x14 30 #define TPS_REG_INT_EVENT2 0x15 31 #define TPS_REG_INT_MASK1 0x16 32 #define TPS_REG_INT_MASK2 0x17 33 #define TPS_REG_INT_CLEAR1 0x18 34 #define TPS_REG_INT_CLEAR2 0x19 35 #define TPS_REG_SYSTEM_POWER_STATE 0x20 36 #define TPS_REG_STATUS 0x1a 37 #define TPS_REG_SYSTEM_CONF 0x28 38 #define TPS_REG_CTRL_CONF 0x29 39 #define TPS_REG_POWER_STATUS 0x3f 40 #define TPS_REG_RX_IDENTITY_SOP 0x48 41 #define TPS_REG_DATA_STATUS 0x5f 42 43 /* TPS_REG_SYSTEM_CONF bits */ 44 #define TPS_SYSCONF_PORTINFO(c) ((c) & 7) 45 46 enum { 47 TPS_PORTINFO_SINK, 48 TPS_PORTINFO_SINK_ACCESSORY, 49 TPS_PORTINFO_DRP_UFP, 50 TPS_PORTINFO_DRP_UFP_DRD, 51 TPS_PORTINFO_DRP_DFP, 52 TPS_PORTINFO_DRP_DFP_DRD, 53 TPS_PORTINFO_SOURCE, 54 }; 55 56 /* TPS_REG_RX_IDENTITY_SOP */ 57 struct tps6598x_rx_identity_reg { 58 u8 status; 59 struct usb_pd_identity identity; 60 } __packed; 61 62 /* Standard Task return codes */ 63 #define TPS_TASK_TIMEOUT 1 64 #define TPS_TASK_REJECTED 3 65 66 enum { 67 TPS_MODE_APP, 68 TPS_MODE_BOOT, 69 TPS_MODE_BIST, 70 TPS_MODE_DISC, 71 }; 72 73 static const char *const modes[] = { 74 [TPS_MODE_APP] = "APP ", 75 [TPS_MODE_BOOT] = "BOOT", 76 [TPS_MODE_BIST] = "BIST", 77 [TPS_MODE_DISC] = "DISC", 78 }; 79 80 /* Unrecognized commands will be replaced with "!CMD" */ 81 #define INVALID_CMD(_cmd_) (_cmd_ == 0x444d4321) 82 83 struct tps6598x { 84 struct device *dev; 85 struct regmap *regmap; 86 struct mutex lock; /* device lock */ 87 u8 i2c_protocol:1; 88 89 struct typec_port *port; 90 struct typec_partner *partner; 91 struct usb_pd_identity partner_identity; 92 struct usb_role_switch *role_sw; 93 struct typec_capability typec_cap; 94 95 struct power_supply *psy; 96 struct power_supply_desc psy_desc; 97 enum power_supply_usb_type usb_type; 98 99 int wakeup; 100 u16 pwr_status; 101 struct delayed_work wq_poll; 102 irq_handler_t irq_handler; 103 }; 104 105 static enum power_supply_property tps6598x_psy_props[] = { 106 POWER_SUPPLY_PROP_USB_TYPE, 107 POWER_SUPPLY_PROP_ONLINE, 108 }; 109 110 static enum power_supply_usb_type tps6598x_psy_usb_types[] = { 111 POWER_SUPPLY_USB_TYPE_C, 112 POWER_SUPPLY_USB_TYPE_PD, 113 }; 114 115 static const char *tps6598x_psy_name_prefix = "tps6598x-source-psy-"; 116 117 /* 118 * Max data bytes for Data1, Data2, and other registers. See ch 1.3.2: 119 * https://www.ti.com/lit/ug/slvuan1a/slvuan1a.pdf 120 */ 121 #define TPS_MAX_LEN 64 122 123 static int 124 tps6598x_block_read(struct tps6598x *tps, u8 reg, void *val, size_t len) 125 { 126 u8 data[TPS_MAX_LEN + 1]; 127 int ret; 128 129 if (len + 1 > sizeof(data)) 130 return -EINVAL; 131 132 if (!tps->i2c_protocol) 133 return regmap_raw_read(tps->regmap, reg, val, len); 134 135 ret = regmap_raw_read(tps->regmap, reg, data, len + 1); 136 if (ret) 137 return ret; 138 139 if (data[0] < len) 140 return -EIO; 141 142 memcpy(val, &data[1], len); 143 return 0; 144 } 145 146 static int tps6598x_block_write(struct tps6598x *tps, u8 reg, 147 const void *val, size_t len) 148 { 149 u8 data[TPS_MAX_LEN + 1]; 150 151 if (len + 1 > sizeof(data)) 152 return -EINVAL; 153 154 if (!tps->i2c_protocol) 155 return regmap_raw_write(tps->regmap, reg, val, len); 156 157 data[0] = len; 158 memcpy(&data[1], val, len); 159 160 return regmap_raw_write(tps->regmap, reg, data, len + 1); 161 } 162 163 static inline int tps6598x_read8(struct tps6598x *tps, u8 reg, u8 *val) 164 { 165 return tps6598x_block_read(tps, reg, val, sizeof(u8)); 166 } 167 168 static inline int tps6598x_read16(struct tps6598x *tps, u8 reg, u16 *val) 169 { 170 return tps6598x_block_read(tps, reg, val, sizeof(u16)); 171 } 172 173 static inline int tps6598x_read32(struct tps6598x *tps, u8 reg, u32 *val) 174 { 175 return tps6598x_block_read(tps, reg, val, sizeof(u32)); 176 } 177 178 static inline int tps6598x_read64(struct tps6598x *tps, u8 reg, u64 *val) 179 { 180 return tps6598x_block_read(tps, reg, val, sizeof(u64)); 181 } 182 183 static inline int tps6598x_write64(struct tps6598x *tps, u8 reg, u64 val) 184 { 185 return tps6598x_block_write(tps, reg, &val, sizeof(u64)); 186 } 187 188 static inline int 189 tps6598x_write_4cc(struct tps6598x *tps, u8 reg, const char *val) 190 { 191 return tps6598x_block_write(tps, reg, val, 4); 192 } 193 194 static int tps6598x_read_partner_identity(struct tps6598x *tps) 195 { 196 struct tps6598x_rx_identity_reg id; 197 int ret; 198 199 ret = tps6598x_block_read(tps, TPS_REG_RX_IDENTITY_SOP, 200 &id, sizeof(id)); 201 if (ret) 202 return ret; 203 204 tps->partner_identity = id.identity; 205 206 return 0; 207 } 208 209 static void tps6598x_set_data_role(struct tps6598x *tps, 210 enum typec_data_role role, bool connected) 211 { 212 enum usb_role role_val; 213 214 if (role == TYPEC_HOST) 215 role_val = USB_ROLE_HOST; 216 else 217 role_val = USB_ROLE_DEVICE; 218 219 if (!connected) 220 role_val = USB_ROLE_NONE; 221 222 usb_role_switch_set_role(tps->role_sw, role_val); 223 typec_set_data_role(tps->port, role); 224 } 225 226 static int tps6598x_connect(struct tps6598x *tps, u32 status) 227 { 228 struct typec_partner_desc desc; 229 enum typec_pwr_opmode mode; 230 int ret; 231 232 if (tps->partner) 233 return 0; 234 235 mode = TPS_POWER_STATUS_PWROPMODE(tps->pwr_status); 236 237 desc.usb_pd = mode == TYPEC_PWR_MODE_PD; 238 desc.accessory = TYPEC_ACCESSORY_NONE; /* XXX: handle accessories */ 239 desc.identity = NULL; 240 241 if (desc.usb_pd) { 242 ret = tps6598x_read_partner_identity(tps); 243 if (ret) 244 return ret; 245 desc.identity = &tps->partner_identity; 246 } 247 248 typec_set_pwr_opmode(tps->port, mode); 249 typec_set_pwr_role(tps->port, TPS_STATUS_TO_TYPEC_PORTROLE(status)); 250 typec_set_vconn_role(tps->port, TPS_STATUS_TO_TYPEC_VCONN(status)); 251 if (TPS_STATUS_TO_UPSIDE_DOWN(status)) 252 typec_set_orientation(tps->port, TYPEC_ORIENTATION_REVERSE); 253 else 254 typec_set_orientation(tps->port, TYPEC_ORIENTATION_NORMAL); 255 typec_set_mode(tps->port, TYPEC_STATE_USB); 256 tps6598x_set_data_role(tps, TPS_STATUS_TO_TYPEC_DATAROLE(status), true); 257 258 tps->partner = typec_register_partner(tps->port, &desc); 259 if (IS_ERR(tps->partner)) 260 return PTR_ERR(tps->partner); 261 262 if (desc.identity) 263 typec_partner_set_identity(tps->partner); 264 265 power_supply_changed(tps->psy); 266 267 return 0; 268 } 269 270 static void tps6598x_disconnect(struct tps6598x *tps, u32 status) 271 { 272 if (!IS_ERR(tps->partner)) 273 typec_unregister_partner(tps->partner); 274 tps->partner = NULL; 275 typec_set_pwr_opmode(tps->port, TYPEC_PWR_MODE_USB); 276 typec_set_pwr_role(tps->port, TPS_STATUS_TO_TYPEC_PORTROLE(status)); 277 typec_set_vconn_role(tps->port, TPS_STATUS_TO_TYPEC_VCONN(status)); 278 typec_set_orientation(tps->port, TYPEC_ORIENTATION_NONE); 279 typec_set_mode(tps->port, TYPEC_STATE_SAFE); 280 tps6598x_set_data_role(tps, TPS_STATUS_TO_TYPEC_DATAROLE(status), false); 281 282 power_supply_changed(tps->psy); 283 } 284 285 static int tps6598x_exec_cmd(struct tps6598x *tps, const char *cmd, 286 size_t in_len, u8 *in_data, 287 size_t out_len, u8 *out_data) 288 { 289 unsigned long timeout; 290 u32 val; 291 int ret; 292 293 ret = tps6598x_read32(tps, TPS_REG_CMD1, &val); 294 if (ret) 295 return ret; 296 if (val && !INVALID_CMD(val)) 297 return -EBUSY; 298 299 if (in_len) { 300 ret = tps6598x_block_write(tps, TPS_REG_DATA1, 301 in_data, in_len); 302 if (ret) 303 return ret; 304 } 305 306 ret = tps6598x_write_4cc(tps, TPS_REG_CMD1, cmd); 307 if (ret < 0) 308 return ret; 309 310 /* XXX: Using 1s for now, but it may not be enough for every command. */ 311 timeout = jiffies + msecs_to_jiffies(1000); 312 313 do { 314 ret = tps6598x_read32(tps, TPS_REG_CMD1, &val); 315 if (ret) 316 return ret; 317 if (INVALID_CMD(val)) 318 return -EINVAL; 319 320 if (time_is_before_jiffies(timeout)) 321 return -ETIMEDOUT; 322 } while (val); 323 324 if (out_len) { 325 ret = tps6598x_block_read(tps, TPS_REG_DATA1, 326 out_data, out_len); 327 if (ret) 328 return ret; 329 val = out_data[0]; 330 } else { 331 ret = tps6598x_block_read(tps, TPS_REG_DATA1, &val, sizeof(u8)); 332 if (ret) 333 return ret; 334 } 335 336 switch (val) { 337 case TPS_TASK_TIMEOUT: 338 return -ETIMEDOUT; 339 case TPS_TASK_REJECTED: 340 return -EPERM; 341 default: 342 break; 343 } 344 345 return 0; 346 } 347 348 static int tps6598x_dr_set(struct typec_port *port, enum typec_data_role role) 349 { 350 const char *cmd = (role == TYPEC_DEVICE) ? "SWUF" : "SWDF"; 351 struct tps6598x *tps = typec_get_drvdata(port); 352 u32 status; 353 int ret; 354 355 mutex_lock(&tps->lock); 356 357 ret = tps6598x_exec_cmd(tps, cmd, 0, NULL, 0, NULL); 358 if (ret) 359 goto out_unlock; 360 361 ret = tps6598x_read32(tps, TPS_REG_STATUS, &status); 362 if (ret) 363 goto out_unlock; 364 365 if (role != TPS_STATUS_TO_TYPEC_DATAROLE(status)) { 366 ret = -EPROTO; 367 goto out_unlock; 368 } 369 370 tps6598x_set_data_role(tps, role, true); 371 372 out_unlock: 373 mutex_unlock(&tps->lock); 374 375 return ret; 376 } 377 378 static int tps6598x_pr_set(struct typec_port *port, enum typec_role role) 379 { 380 const char *cmd = (role == TYPEC_SINK) ? "SWSk" : "SWSr"; 381 struct tps6598x *tps = typec_get_drvdata(port); 382 u32 status; 383 int ret; 384 385 mutex_lock(&tps->lock); 386 387 ret = tps6598x_exec_cmd(tps, cmd, 0, NULL, 0, NULL); 388 if (ret) 389 goto out_unlock; 390 391 ret = tps6598x_read32(tps, TPS_REG_STATUS, &status); 392 if (ret) 393 goto out_unlock; 394 395 if (role != TPS_STATUS_TO_TYPEC_PORTROLE(status)) { 396 ret = -EPROTO; 397 goto out_unlock; 398 } 399 400 typec_set_pwr_role(tps->port, role); 401 402 out_unlock: 403 mutex_unlock(&tps->lock); 404 405 return ret; 406 } 407 408 static const struct typec_operations tps6598x_ops = { 409 .dr_set = tps6598x_dr_set, 410 .pr_set = tps6598x_pr_set, 411 }; 412 413 static bool tps6598x_read_status(struct tps6598x *tps, u32 *status) 414 { 415 int ret; 416 417 ret = tps6598x_read32(tps, TPS_REG_STATUS, status); 418 if (ret) { 419 dev_err(tps->dev, "%s: failed to read status\n", __func__); 420 return false; 421 } 422 trace_tps6598x_status(*status); 423 424 return true; 425 } 426 427 static bool tps6598x_read_data_status(struct tps6598x *tps) 428 { 429 u32 data_status; 430 int ret; 431 432 ret = tps6598x_read32(tps, TPS_REG_DATA_STATUS, &data_status); 433 if (ret < 0) { 434 dev_err(tps->dev, "failed to read data status: %d\n", ret); 435 return false; 436 } 437 trace_tps6598x_data_status(data_status); 438 439 return true; 440 } 441 442 static bool tps6598x_read_power_status(struct tps6598x *tps) 443 { 444 u16 pwr_status; 445 int ret; 446 447 ret = tps6598x_read16(tps, TPS_REG_POWER_STATUS, &pwr_status); 448 if (ret < 0) { 449 dev_err(tps->dev, "failed to read power status: %d\n", ret); 450 return false; 451 } 452 tps->pwr_status = pwr_status; 453 trace_tps6598x_power_status(pwr_status); 454 455 return true; 456 } 457 458 static void tps6598x_handle_plug_event(struct tps6598x *tps, u32 status) 459 { 460 int ret; 461 462 if (status & TPS_STATUS_PLUG_PRESENT) { 463 ret = tps6598x_connect(tps, status); 464 if (ret) 465 dev_err(tps->dev, "failed to register partner\n"); 466 } else { 467 tps6598x_disconnect(tps, status); 468 } 469 } 470 471 static irqreturn_t cd321x_interrupt(int irq, void *data) 472 { 473 struct tps6598x *tps = data; 474 u64 event = 0; 475 u32 status; 476 int ret; 477 478 mutex_lock(&tps->lock); 479 480 ret = tps6598x_read64(tps, TPS_REG_INT_EVENT1, &event); 481 if (ret) { 482 dev_err(tps->dev, "%s: failed to read events\n", __func__); 483 goto err_unlock; 484 } 485 trace_cd321x_irq(event); 486 487 if (!event) 488 goto err_unlock; 489 490 if (!tps6598x_read_status(tps, &status)) 491 goto err_clear_ints; 492 493 if (event & APPLE_CD_REG_INT_POWER_STATUS_UPDATE) 494 if (!tps6598x_read_power_status(tps)) 495 goto err_clear_ints; 496 497 if (event & APPLE_CD_REG_INT_DATA_STATUS_UPDATE) 498 if (!tps6598x_read_data_status(tps)) 499 goto err_clear_ints; 500 501 /* Handle plug insert or removal */ 502 if (event & APPLE_CD_REG_INT_PLUG_EVENT) 503 tps6598x_handle_plug_event(tps, status); 504 505 err_clear_ints: 506 tps6598x_write64(tps, TPS_REG_INT_CLEAR1, event); 507 508 err_unlock: 509 mutex_unlock(&tps->lock); 510 511 if (event) 512 return IRQ_HANDLED; 513 return IRQ_NONE; 514 } 515 516 static irqreturn_t tps6598x_interrupt(int irq, void *data) 517 { 518 struct tps6598x *tps = data; 519 u64 event1 = 0; 520 u64 event2 = 0; 521 u32 status; 522 int ret; 523 524 mutex_lock(&tps->lock); 525 526 ret = tps6598x_read64(tps, TPS_REG_INT_EVENT1, &event1); 527 ret |= tps6598x_read64(tps, TPS_REG_INT_EVENT2, &event2); 528 if (ret) { 529 dev_err(tps->dev, "%s: failed to read events\n", __func__); 530 goto err_unlock; 531 } 532 trace_tps6598x_irq(event1, event2); 533 534 if (!(event1 | event2)) 535 goto err_unlock; 536 537 if (!tps6598x_read_status(tps, &status)) 538 goto err_clear_ints; 539 540 if ((event1 | event2) & TPS_REG_INT_POWER_STATUS_UPDATE) 541 if (!tps6598x_read_power_status(tps)) 542 goto err_clear_ints; 543 544 if ((event1 | event2) & TPS_REG_INT_DATA_STATUS_UPDATE) 545 if (!tps6598x_read_data_status(tps)) 546 goto err_clear_ints; 547 548 /* Handle plug insert or removal */ 549 if ((event1 | event2) & TPS_REG_INT_PLUG_EVENT) 550 tps6598x_handle_plug_event(tps, status); 551 552 err_clear_ints: 553 tps6598x_write64(tps, TPS_REG_INT_CLEAR1, event1); 554 tps6598x_write64(tps, TPS_REG_INT_CLEAR2, event2); 555 556 err_unlock: 557 mutex_unlock(&tps->lock); 558 559 if (event1 | event2) 560 return IRQ_HANDLED; 561 return IRQ_NONE; 562 } 563 564 /* Time interval for Polling */ 565 #define POLL_INTERVAL 500 /* msecs */ 566 static void tps6598x_poll_work(struct work_struct *work) 567 { 568 struct tps6598x *tps = container_of(to_delayed_work(work), 569 struct tps6598x, wq_poll); 570 571 tps->irq_handler(0, tps); 572 queue_delayed_work(system_power_efficient_wq, 573 &tps->wq_poll, msecs_to_jiffies(POLL_INTERVAL)); 574 } 575 576 static int tps6598x_check_mode(struct tps6598x *tps) 577 { 578 char mode[5] = { }; 579 int ret; 580 581 ret = tps6598x_read32(tps, TPS_REG_MODE, (void *)mode); 582 if (ret) 583 return ret; 584 585 switch (match_string(modes, ARRAY_SIZE(modes), mode)) { 586 case TPS_MODE_APP: 587 return 0; 588 case TPS_MODE_BOOT: 589 dev_warn(tps->dev, "dead-battery condition\n"); 590 return 0; 591 case TPS_MODE_BIST: 592 case TPS_MODE_DISC: 593 default: 594 dev_err(tps->dev, "controller in unsupported mode \"%s\"\n", 595 mode); 596 break; 597 } 598 599 return -ENODEV; 600 } 601 602 static const struct regmap_config tps6598x_regmap_config = { 603 .reg_bits = 8, 604 .val_bits = 8, 605 .max_register = 0x7F, 606 }; 607 608 static int tps6598x_psy_get_online(struct tps6598x *tps, 609 union power_supply_propval *val) 610 { 611 if (TPS_POWER_STATUS_CONNECTION(tps->pwr_status) && 612 TPS_POWER_STATUS_SOURCESINK(tps->pwr_status)) { 613 val->intval = 1; 614 } else { 615 val->intval = 0; 616 } 617 return 0; 618 } 619 620 static int tps6598x_psy_get_prop(struct power_supply *psy, 621 enum power_supply_property psp, 622 union power_supply_propval *val) 623 { 624 struct tps6598x *tps = power_supply_get_drvdata(psy); 625 int ret = 0; 626 627 switch (psp) { 628 case POWER_SUPPLY_PROP_USB_TYPE: 629 if (TPS_POWER_STATUS_PWROPMODE(tps->pwr_status) == TYPEC_PWR_MODE_PD) 630 val->intval = POWER_SUPPLY_USB_TYPE_PD; 631 else 632 val->intval = POWER_SUPPLY_USB_TYPE_C; 633 break; 634 case POWER_SUPPLY_PROP_ONLINE: 635 ret = tps6598x_psy_get_online(tps, val); 636 break; 637 default: 638 ret = -EINVAL; 639 break; 640 } 641 642 return ret; 643 } 644 645 static int cd321x_switch_power_state(struct tps6598x *tps, u8 target_state) 646 { 647 u8 state; 648 int ret; 649 650 ret = tps6598x_read8(tps, TPS_REG_SYSTEM_POWER_STATE, &state); 651 if (ret) 652 return ret; 653 654 if (state == target_state) 655 return 0; 656 657 ret = tps6598x_exec_cmd(tps, "SSPS", sizeof(u8), &target_state, 0, NULL); 658 if (ret) 659 return ret; 660 661 ret = tps6598x_read8(tps, TPS_REG_SYSTEM_POWER_STATE, &state); 662 if (ret) 663 return ret; 664 665 if (state != target_state) 666 return -EINVAL; 667 668 return 0; 669 } 670 671 static int devm_tps6598_psy_register(struct tps6598x *tps) 672 { 673 struct power_supply_config psy_cfg = {}; 674 const char *port_dev_name = dev_name(tps->dev); 675 char *psy_name; 676 677 psy_cfg.drv_data = tps; 678 psy_cfg.fwnode = dev_fwnode(tps->dev); 679 680 psy_name = devm_kasprintf(tps->dev, GFP_KERNEL, "%s%s", tps6598x_psy_name_prefix, 681 port_dev_name); 682 if (!psy_name) 683 return -ENOMEM; 684 685 tps->psy_desc.name = psy_name; 686 tps->psy_desc.type = POWER_SUPPLY_TYPE_USB; 687 tps->psy_desc.usb_types = tps6598x_psy_usb_types; 688 tps->psy_desc.num_usb_types = ARRAY_SIZE(tps6598x_psy_usb_types); 689 tps->psy_desc.properties = tps6598x_psy_props; 690 tps->psy_desc.num_properties = ARRAY_SIZE(tps6598x_psy_props); 691 tps->psy_desc.get_property = tps6598x_psy_get_prop; 692 693 tps->usb_type = POWER_SUPPLY_USB_TYPE_C; 694 695 tps->psy = devm_power_supply_register(tps->dev, &tps->psy_desc, 696 &psy_cfg); 697 return PTR_ERR_OR_ZERO(tps->psy); 698 } 699 700 static int tps6598x_probe(struct i2c_client *client) 701 { 702 irq_handler_t irq_handler = tps6598x_interrupt; 703 struct device_node *np = client->dev.of_node; 704 struct typec_capability typec_cap = { }; 705 struct tps6598x *tps; 706 struct fwnode_handle *fwnode; 707 u32 status; 708 u32 conf; 709 u32 vid; 710 int ret; 711 u64 mask1; 712 713 tps = devm_kzalloc(&client->dev, sizeof(*tps), GFP_KERNEL); 714 if (!tps) 715 return -ENOMEM; 716 717 mutex_init(&tps->lock); 718 tps->dev = &client->dev; 719 720 tps->regmap = devm_regmap_init_i2c(client, &tps6598x_regmap_config); 721 if (IS_ERR(tps->regmap)) 722 return PTR_ERR(tps->regmap); 723 724 ret = tps6598x_read32(tps, TPS_REG_VID, &vid); 725 if (ret < 0 || !vid) 726 return -ENODEV; 727 728 /* 729 * Checking can the adapter handle SMBus protocol. If it can not, the 730 * driver needs to take care of block reads separately. 731 */ 732 if (i2c_check_functionality(client->adapter, I2C_FUNC_I2C)) 733 tps->i2c_protocol = true; 734 735 if (np && of_device_is_compatible(np, "apple,cd321x")) { 736 /* Switch CD321X chips to the correct system power state */ 737 ret = cd321x_switch_power_state(tps, TPS_SYSTEM_POWER_STATE_S0); 738 if (ret) 739 return ret; 740 741 /* CD321X chips have all interrupts masked initially */ 742 mask1 = APPLE_CD_REG_INT_POWER_STATUS_UPDATE | 743 APPLE_CD_REG_INT_DATA_STATUS_UPDATE | 744 APPLE_CD_REG_INT_PLUG_EVENT; 745 746 irq_handler = cd321x_interrupt; 747 } else { 748 /* Enable power status, data status and plug event interrupts */ 749 mask1 = TPS_REG_INT_POWER_STATUS_UPDATE | 750 TPS_REG_INT_DATA_STATUS_UPDATE | 751 TPS_REG_INT_PLUG_EVENT; 752 } 753 754 tps->irq_handler = irq_handler; 755 /* Make sure the controller has application firmware running */ 756 ret = tps6598x_check_mode(tps); 757 if (ret) 758 return ret; 759 760 ret = tps6598x_write64(tps, TPS_REG_INT_MASK1, mask1); 761 if (ret) 762 return ret; 763 764 ret = tps6598x_read32(tps, TPS_REG_STATUS, &status); 765 if (ret < 0) 766 goto err_clear_mask; 767 trace_tps6598x_status(status); 768 769 ret = tps6598x_read32(tps, TPS_REG_SYSTEM_CONF, &conf); 770 if (ret < 0) 771 goto err_clear_mask; 772 773 /* 774 * This fwnode has a "compatible" property, but is never populated as a 775 * struct device. Instead we simply parse it to read the properties. 776 * This breaks fw_devlink=on. To maintain backward compatibility 777 * with existing DT files, we work around this by deleting any 778 * fwnode_links to/from this fwnode. 779 */ 780 fwnode = device_get_named_child_node(&client->dev, "connector"); 781 if (fwnode) 782 fw_devlink_purge_absent_suppliers(fwnode); 783 784 tps->role_sw = fwnode_usb_role_switch_get(fwnode); 785 if (IS_ERR(tps->role_sw)) { 786 ret = PTR_ERR(tps->role_sw); 787 goto err_fwnode_put; 788 } 789 790 typec_cap.revision = USB_TYPEC_REV_1_2; 791 typec_cap.pd_revision = 0x200; 792 typec_cap.prefer_role = TYPEC_NO_PREFERRED_ROLE; 793 typec_cap.driver_data = tps; 794 typec_cap.ops = &tps6598x_ops; 795 typec_cap.fwnode = fwnode; 796 797 switch (TPS_SYSCONF_PORTINFO(conf)) { 798 case TPS_PORTINFO_SINK_ACCESSORY: 799 case TPS_PORTINFO_SINK: 800 typec_cap.type = TYPEC_PORT_SNK; 801 typec_cap.data = TYPEC_PORT_UFP; 802 break; 803 case TPS_PORTINFO_DRP_UFP_DRD: 804 case TPS_PORTINFO_DRP_DFP_DRD: 805 typec_cap.type = TYPEC_PORT_DRP; 806 typec_cap.data = TYPEC_PORT_DRD; 807 break; 808 case TPS_PORTINFO_DRP_UFP: 809 typec_cap.type = TYPEC_PORT_DRP; 810 typec_cap.data = TYPEC_PORT_UFP; 811 break; 812 case TPS_PORTINFO_DRP_DFP: 813 typec_cap.type = TYPEC_PORT_DRP; 814 typec_cap.data = TYPEC_PORT_DFP; 815 break; 816 case TPS_PORTINFO_SOURCE: 817 typec_cap.type = TYPEC_PORT_SRC; 818 typec_cap.data = TYPEC_PORT_DFP; 819 break; 820 default: 821 ret = -ENODEV; 822 goto err_role_put; 823 } 824 825 ret = devm_tps6598_psy_register(tps); 826 if (ret) 827 goto err_role_put; 828 829 tps->port = typec_register_port(&client->dev, &typec_cap); 830 if (IS_ERR(tps->port)) { 831 ret = PTR_ERR(tps->port); 832 goto err_role_put; 833 } 834 835 if (status & TPS_STATUS_PLUG_PRESENT) { 836 ret = tps6598x_read16(tps, TPS_REG_POWER_STATUS, &tps->pwr_status); 837 if (ret < 0) { 838 dev_err(tps->dev, "failed to read power status: %d\n", ret); 839 goto err_unregister_port; 840 } 841 ret = tps6598x_connect(tps, status); 842 if (ret) 843 dev_err(&client->dev, "failed to register partner\n"); 844 } 845 846 if (client->irq) { 847 ret = devm_request_threaded_irq(&client->dev, client->irq, NULL, 848 irq_handler, 849 IRQF_SHARED | IRQF_ONESHOT, 850 dev_name(&client->dev), tps); 851 } else { 852 dev_warn(tps->dev, "Unable to find the interrupt, switching to polling\n"); 853 INIT_DELAYED_WORK(&tps->wq_poll, tps6598x_poll_work); 854 queue_delayed_work(system_power_efficient_wq, &tps->wq_poll, 855 msecs_to_jiffies(POLL_INTERVAL)); 856 } 857 858 if (ret) 859 goto err_disconnect; 860 861 i2c_set_clientdata(client, tps); 862 fwnode_handle_put(fwnode); 863 864 tps->wakeup = device_property_read_bool(tps->dev, "wakeup-source"); 865 if (tps->wakeup && client->irq) { 866 device_init_wakeup(&client->dev, true); 867 enable_irq_wake(client->irq); 868 } 869 870 return 0; 871 872 err_disconnect: 873 tps6598x_disconnect(tps, 0); 874 err_unregister_port: 875 typec_unregister_port(tps->port); 876 err_role_put: 877 usb_role_switch_put(tps->role_sw); 878 err_fwnode_put: 879 fwnode_handle_put(fwnode); 880 err_clear_mask: 881 tps6598x_write64(tps, TPS_REG_INT_MASK1, 0); 882 return ret; 883 } 884 885 static void tps6598x_remove(struct i2c_client *client) 886 { 887 struct tps6598x *tps = i2c_get_clientdata(client); 888 889 tps6598x_disconnect(tps, 0); 890 typec_unregister_port(tps->port); 891 usb_role_switch_put(tps->role_sw); 892 } 893 894 static int __maybe_unused tps6598x_suspend(struct device *dev) 895 { 896 struct i2c_client *client = to_i2c_client(dev); 897 struct tps6598x *tps = i2c_get_clientdata(client); 898 899 if (tps->wakeup) { 900 disable_irq(client->irq); 901 enable_irq_wake(client->irq); 902 } 903 904 if (!client->irq) 905 cancel_delayed_work_sync(&tps->wq_poll); 906 907 return 0; 908 } 909 910 static int __maybe_unused tps6598x_resume(struct device *dev) 911 { 912 struct i2c_client *client = to_i2c_client(dev); 913 struct tps6598x *tps = i2c_get_clientdata(client); 914 915 if (tps->wakeup) { 916 disable_irq_wake(client->irq); 917 enable_irq(client->irq); 918 } 919 920 if (client->irq) 921 queue_delayed_work(system_power_efficient_wq, &tps->wq_poll, 922 msecs_to_jiffies(POLL_INTERVAL)); 923 924 return 0; 925 } 926 927 static const struct dev_pm_ops tps6598x_pm_ops = { 928 SET_SYSTEM_SLEEP_PM_OPS(tps6598x_suspend, tps6598x_resume) 929 }; 930 931 static const struct of_device_id tps6598x_of_match[] = { 932 { .compatible = "ti,tps6598x", }, 933 { .compatible = "apple,cd321x", }, 934 {} 935 }; 936 MODULE_DEVICE_TABLE(of, tps6598x_of_match); 937 938 static const struct i2c_device_id tps6598x_id[] = { 939 { "tps6598x" }, 940 { } 941 }; 942 MODULE_DEVICE_TABLE(i2c, tps6598x_id); 943 944 static struct i2c_driver tps6598x_i2c_driver = { 945 .driver = { 946 .name = "tps6598x", 947 .pm = &tps6598x_pm_ops, 948 .of_match_table = tps6598x_of_match, 949 }, 950 .probe_new = tps6598x_probe, 951 .remove = tps6598x_remove, 952 .id_table = tps6598x_id, 953 }; 954 module_i2c_driver(tps6598x_i2c_driver); 955 956 MODULE_AUTHOR("Heikki Krogerus <heikki.krogerus@linux.intel.com>"); 957 MODULE_LICENSE("GPL v2"); 958 MODULE_DESCRIPTION("TI TPS6598x USB Power Delivery Controller Driver"); 959