forked from ~ljy/RK356X_SDK_RELEASE

hc
2024-05-13 9d77db3c730780c8ef5ccd4b66403ff5675cfe4e
kernel/drivers/usb/typec/tcpm/wcove.c
....@@ -356,7 +356,8 @@
356356
357357 static int wcove_pd_transmit(struct tcpc_dev *tcpc,
358358 enum tcpm_transmit_type type,
359
- const struct pd_message *msg)
359
+ const struct pd_message *msg,
360
+ unsigned int negotiated_rev)
360361 {
361362 struct wcove_typec *wcove = tcpc_to_wcove(tcpc);
362363 unsigned int info = 0;
....@@ -377,7 +378,7 @@
377378 const u8 *data = (void *)msg;
378379 int i;
379380
380
- for (i = 0; i < pd_header_cnt(msg->header) * 4 + 2; i++) {
381
+ for (i = 0; i < pd_header_cnt_le(msg->header) * 4 + 2; i++) {
381382 ret = regmap_write(wcove->regmap, USBC_TX_DATA + i,
382383 data[i]);
383384 if (ret)
....@@ -591,17 +592,14 @@
591592 PDO_VAR(5000, 12000, 3000),
592593 };
593594
594
-static struct tcpc_config wcove_typec_config = {
595
- .src_pdo = src_pdo,
596
- .nr_src_pdo = ARRAY_SIZE(src_pdo),
597
- .snk_pdo = snk_pdo,
598
- .nr_snk_pdo = ARRAY_SIZE(snk_pdo),
599
-
600
- .operating_snk_mw = 15000,
601
-
602
- .type = TYPEC_PORT_DRP,
603
- .data = TYPEC_PORT_DRD,
604
- .default_role = TYPEC_SINK,
595
+static const struct property_entry wcove_props[] = {
596
+ PROPERTY_ENTRY_STRING("data-role", "dual"),
597
+ PROPERTY_ENTRY_STRING("power-role", "dual"),
598
+ PROPERTY_ENTRY_STRING("try-power-role", "sink"),
599
+ PROPERTY_ENTRY_U32_ARRAY("source-pdos", src_pdo),
600
+ PROPERTY_ENTRY_U32_ARRAY("sink-pdos", snk_pdo),
601
+ PROPERTY_ENTRY_U32("op-sink-microwatt", 15000000),
602
+ { }
605603 };
606604
607605 static int wcove_typec_probe(struct platform_device *pdev)
....@@ -620,10 +618,8 @@
620618 wcove->regmap = pmic->regmap;
621619
622620 irq = platform_get_irq(pdev, 0);
623
- if (irq < 0) {
624
- dev_err(&pdev->dev, "Failed to get IRQ: %d\n", irq);
621
+ if (irq < 0)
625622 return irq;
626
- }
627623
628624 irq = regmap_irq_get_virq(pmic->irq_chip_data_chgr, irq);
629625 if (irq < 0)
....@@ -652,17 +648,22 @@
652648 wcove->tcpc.set_roles = wcove_set_roles;
653649 wcove->tcpc.pd_transmit = wcove_pd_transmit;
654650
655
- wcove->tcpc.config = &wcove_typec_config;
651
+ wcove->tcpc.fwnode = fwnode_create_software_node(wcove_props, NULL);
652
+ if (IS_ERR(wcove->tcpc.fwnode))
653
+ return PTR_ERR(wcove->tcpc.fwnode);
656654
657655 wcove->tcpm = tcpm_register_port(wcove->dev, &wcove->tcpc);
658
- if (IS_ERR(wcove->tcpm))
656
+ if (IS_ERR(wcove->tcpm)) {
657
+ fwnode_remove_software_node(wcove->tcpc.fwnode);
659658 return PTR_ERR(wcove->tcpm);
659
+ }
660660
661661 ret = devm_request_threaded_irq(&pdev->dev, irq, NULL,
662662 wcove_typec_irq, IRQF_ONESHOT,
663663 "wcove_typec", wcove);
664664 if (ret) {
665665 tcpm_unregister_port(wcove->tcpm);
666
+ fwnode_remove_software_node(wcove->tcpc.fwnode);
666667 return ret;
667668 }
668669
....@@ -682,6 +683,7 @@
682683 regmap_write(wcove->regmap, USBC_IRQMASK2, val | USBC_IRQMASK2_ALL);
683684
684685 tcpm_unregister_port(wcove->tcpm);
686
+ fwnode_remove_software_node(wcove->tcpc.fwnode);
685687
686688 return 0;
687689 }