-diff --git a/drivers/usb/typec/tcpm/fusb302.c b/drivers/usb/typec/tcpm/fusb302.c
-index 72f9001b0792..cb26793f90f8 100644
---- a/drivers/usb/typec/tcpm/fusb302.c
-+++ b/drivers/usb/typec/tcpm/fusb302.c
-@@ -440,6 +440,16 @@ static int tcpm_get_current_limit(struct tcpc_dev *dev)
- int current_limit = 0;
- unsigned long timeout;
-
-+ /*
-+ * To avoid cycles in OF dependencies, we get extcon when necessary
-+ * outside of probe function.
-+ */
-+ if (of_property_read_bool(chip->dev->of_node, "extcon") && !chip->extcon) {
-+ chip->extcon = extcon_get_edev_by_phandle(chip->dev, 0);
-+ if (IS_ERR(chip->extcon))
-+ chip->extcon = NULL;
-+ }
-+
- if (!chip->extcon)
- return 0;
-
-@@ -498,6 +508,7 @@ static int fusb302_set_toggling(struct fusb302_chip *chip,
- enum toggling_mode mode)
- {
- int ret = 0;
-+ u8 reg;
-
- /* first disable toggling */
- ret = fusb302_i2c_clear_bits(chip, FUSB_REG_CONTROL2,
-@@ -556,6 +567,12 @@ static int fusb302_set_toggling(struct fusb302_chip *chip,
- } else {
- /* Datasheet says vconn MUST be off when toggling */
- WARN(chip->vconn_on, "Vconn is on during toggle start");
-+
-+ /* clear interrupts */
-+ ret = fusb302_i2c_read(chip, FUSB_REG_INTERRUPT, ®);
-+ if (ret < 0)
-+ return ret;
-+
- /* unmask TOGDONE interrupt */
- ret = fusb302_i2c_clear_bits(chip, FUSB_REG_MASKA,
- FUSB_REG_MASKA_TOGDONE);
-@@ -635,6 +652,14 @@ static int tcpm_set_cc(struct tcpc_dev *dev, enum typec_cc_status cc)
- goto done;
- }
-
-+ /* adjust current for SRC */
-+ ret = fusb302_set_src_current(chip, cc_src_current[cc]);
-+ if (ret < 0) {
-+ fusb302_log(chip, "cannot set src current %s, ret=%d",
-+ typec_cc_status_name[cc], ret);
-+ goto done;
-+ }
-+
- ret = fusb302_i2c_mask_write(chip, FUSB_REG_SWITCHES0,
- switches0_mask, switches0_data);
- if (ret < 0) {
-@@ -645,14 +670,6 @@ static int tcpm_set_cc(struct tcpc_dev *dev, enum typec_cc_status cc)
- chip->cc1 = TYPEC_CC_OPEN;
- chip->cc2 = TYPEC_CC_OPEN;
-
-- /* adjust current for SRC */
-- ret = fusb302_set_src_current(chip, cc_src_current[cc]);
-- if (ret < 0) {
-- fusb302_log(chip, "cannot set src current %s, ret=%d",
-- typec_cc_status_name[cc], ret);
-- goto done;
-- }
--
- /* enable/disable interrupts, BC_LVL for SNK and COMP_CHNG for SRC */
- switch (cc) {
- case TYPEC_CC_RP_DEF:
-@@ -1528,14 +1545,16 @@ static void fusb302_irq_work(struct work_struct *work)
- "IRQ: 0x%02x, a: 0x%02x, b: 0x%02x, status0: 0x%02x",
- interrupt, interrupta, interruptb, status0);
-
-- if (interrupt & FUSB_REG_INTERRUPT_VBUSOK) {
-- vbus_present = !!(status0 & FUSB_REG_STATUS0_VBUSOK);
-+ vbus_present = !!(status0 & FUSB_REG_STATUS0_VBUSOK);
-+ if (interrupt & FUSB_REG_INTERRUPT_VBUSOK)
- fusb302_log(chip, "IRQ: VBUS_OK, vbus=%s",
- vbus_present ? "On" : "Off");
-- if (vbus_present != chip->vbus_present) {
-- chip->vbus_present = vbus_present;
-- tcpm_vbus_change(chip->tcpm_port);
-- }
-+ if (vbus_present != chip->vbus_present) {
-+ chip->vbus_present = vbus_present;
-+ if (!(interrupt & FUSB_REG_INTERRUPT_VBUSOK))
-+ fusb302_log(chip, "IRQ: VBUS changed without interrupt, vbus=%s",
-+ vbus_present ? "On" : "Off");
-+ tcpm_vbus_change(chip->tcpm_port);
- }
-
- if ((interrupta & FUSB_REG_INTERRUPTA_TOGDONE) && intr_togdone) {
-diff --git a/drivers/usb/typec/tcpm/fusb302_reg.h b/drivers/usb/typec/tcpm/fusb302_reg.h
-index edc0e4b0f1e6..f37d226c5027 100644
---- a/drivers/usb/typec/tcpm/fusb302_reg.h
-+++ b/drivers/usb/typec/tcpm/fusb302_reg.h
-@@ -27,14 +27,13 @@
- #define FUSB_REG_SWITCHES1_TXCC2_EN BIT(1)
- #define FUSB_REG_SWITCHES1_TXCC1_EN BIT(0)
- #define FUSB_REG_MEASURE 0x04
--#define FUSB_REG_MEASURE_MDAC5 BIT(7)
--#define FUSB_REG_MEASURE_MDAC4 BIT(6)
--#define FUSB_REG_MEASURE_MDAC3 BIT(5)
--#define FUSB_REG_MEASURE_MDAC2 BIT(4)
--#define FUSB_REG_MEASURE_MDAC1 BIT(3)
--#define FUSB_REG_MEASURE_MDAC0 BIT(2)
--#define FUSB_REG_MEASURE_VBUS BIT(1)
--#define FUSB_REG_MEASURE_XXXX5 BIT(0)
-+#define FUSB_REG_MEASURE_VBUS BIT(6)
-+#define FUSB_REG_MEASURE_MDAC5 BIT(5)
-+#define FUSB_REG_MEASURE_MDAC4 BIT(4)
-+#define FUSB_REG_MEASURE_MDAC3 BIT(3)
-+#define FUSB_REG_MEASURE_MDAC2 BIT(2)
-+#define FUSB_REG_MEASURE_MDAC1 BIT(1)
-+#define FUSB_REG_MEASURE_MDAC0 BIT(0)
- #define FUSB_REG_CONTROL0 0x06
- #define FUSB_REG_CONTROL0_TX_FLUSH BIT(6)
- #define FUSB_REG_CONTROL0_INT_MASK BIT(5)
-@@ -105,7 +104,6 @@
- #define FUSB_REG_STATUS0A_RX_SOFT_RESET BIT(1)
- #define FUSB_REG_STATUS0A_RX_HARD_RESET BIT(0)
- #define FUSB_REG_STATUS1A 0x3D
--#define FUSB_REG_STATUS1A_TOGSS BIT(3)
- #define FUSB_REG_STATUS1A_TOGSS_RUNNING 0x0
- #define FUSB_REG_STATUS1A_TOGSS_SRC1 0x1
- #define FUSB_REG_STATUS1A_TOGSS_SRC2 0x2
---
-2.34.1
-
-From 6af2e6a2d59bd755234e5e15a47dfa669788143c Mon Sep 17 00:00:00 2001
-From: Dan Johansen <strit@manjaro.org>
-Date: Sun, 2 Jan 2022 16:47:40 +0100
-Subject: [PATCH 2/2] usb: typec: Add megis typex to extcon bridge driver
-
-Signed-off-by: Dan Johansen <strit@manjaro.org>
----
- drivers/usb/typec/typec-extcon.c | 337 +++++++++++++++++++++++++++++++
- 1 file changed, 337 insertions(+)
- create mode 100644 drivers/usb/typec/typec-extcon.c
-