summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--driver/bc12/pi3usb9281.c12
-rw-r--r--include/usb_charge.h7
2 files changed, 9 insertions, 10 deletions
diff --git a/driver/bc12/pi3usb9281.c b/driver/bc12/pi3usb9281.c
index eb4e6a8b6d..0c43bb199b 100644
--- a/driver/bc12/pi3usb9281.c
+++ b/driver/bc12/pi3usb9281.c
@@ -37,7 +37,6 @@
/* Store the state of our USB data switches so that they can be restored. */
static int usb_switch_state[CONFIG_USB_PD_PORT_COUNT];
-static struct mutex usb_switch_lock[CONFIG_USB_PD_PORT_COUNT];
static int pi3usb9281_reset(int port);
static int pi3usb9281_get_interrupts(int port);
@@ -278,14 +277,10 @@ void usb_charger_set_switches(int port, enum usb_switch setting)
/* If switch is not changing then return */
if (setting == usb_switch_state[port])
return;
-
- mutex_lock(&usb_switch_lock[port]);
if (setting != USB_SWITCH_RESTORE)
usb_switch_state[port] = setting;
-
- pi3usb9281_set_switches(port, usb_switch_state[port]);
-
- mutex_unlock(&usb_switch_lock[port]);
+ CPRINTS("USB MUX %d", usb_switch_state[port]);
+ task_set_event(TASK_ID_USB_CHG_P0 + port, USB_CHG_EVENT_MUX, 0);
}
static int pc3usb9281_read_interrupt(int port)
@@ -438,6 +433,9 @@ void usb_charger_task(void *u)
evt = bc12_detect(port);
}
+ if (evt & USB_CHG_EVENT_MUX)
+ pi3usb9281_set_switches(port, usb_switch_state[port]);
+
/*
* Re-enable interrupts on pericom charger detector since the
* chip may periodically reset itself, and come back up with
diff --git a/include/usb_charge.h b/include/usb_charge.h
index e7de9a0b3f..ed19b742fa 100644
--- a/include/usb_charge.h
+++ b/include/usb_charge.h
@@ -40,9 +40,10 @@ enum usb_charge_mode {
int usb_charge_set_mode(int usb_port_id, enum usb_charge_mode mode);
#ifdef HAS_TASK_USB_CHG_P0
-#define USB_CHG_EVENT_BC12 TASK_EVENT_CUSTOM(1)
-#define USB_CHG_EVENT_VBUS TASK_EVENT_CUSTOM(2)
-#define USB_CHG_EVENT_INTR TASK_EVENT_CUSTOM(4)
+#define USB_CHG_EVENT_BC12 TASK_EVENT_CUSTOM(1 << 0)
+#define USB_CHG_EVENT_VBUS TASK_EVENT_CUSTOM(1 << 1)
+#define USB_CHG_EVENT_INTR TASK_EVENT_CUSTOM(1 << 2)
+#define USB_CHG_EVENT_MUX TASK_EVENT_CUSTOM(1 << 3)
#endif
/*