From 5a8da163c842b08c6dbf1df6921507ec2fd5a534 Mon Sep 17 00:00:00 2001 From: Michael Sevakis Date: Mon, 2 Jan 2012 18:32:35 +0000 Subject: i.MX31 - Dethreading operations continue Dispense with "pmic" thread and process PMIC events directly within ISR. Add sense bit reading as part of the handling. git-svn-id: svn://svn.rockbox.org/rockbox/trunk@31528 a1c6a512-1295-4272-9138-f99709370657 --- firmware/target/arm/imx31/gigabeat-s/usb-gigabeat-s.c | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) (limited to 'firmware/target/arm/imx31/gigabeat-s/usb-gigabeat-s.c') diff --git a/firmware/target/arm/imx31/gigabeat-s/usb-gigabeat-s.c b/firmware/target/arm/imx31/gigabeat-s/usb-gigabeat-s.c index b157544016..1584ffb574 100644 --- a/firmware/target/arm/imx31/gigabeat-s/usb-gigabeat-s.c +++ b/firmware/target/arm/imx31/gigabeat-s/usb-gigabeat-s.c @@ -59,16 +59,23 @@ bool usb_plugged(void) return mc13783_read(MC13783_INTERRUPT_SENSE0) & MC13783_USB4V4S; } -void usb_connect_event(void) +/* Helper to update the USB cable status */ +static void update_usb_status(bool sense) { - /* Read the immediate state of the cable from the PMIC */ - int status = usb_plugged() ? USB_INSERTED : USB_EXTRACTED; + int status = sense ? USB_INSERTED : USB_EXTRACTED; usb_status = status; /* Notify power that USB charging is potentially available */ charger_usb_detect_event(status); usb_status_event(status); } +/* Detect presence of USB bus - called from PMIC ISR */ +void usb_connect_event(void) +{ + /* Read the associated sense value */ + update_usb_status(mc13783_event_sense(MC13783_USB_EVENT)); +} + int usb_detect(void) { return usb_status; @@ -80,10 +87,10 @@ void usb_init_device(void) usb_drv_startup(); /* Initially poll */ - usb_connect_event(); + update_usb_status(usb_plugged()); /* Enable PMIC event */ - mc13783_enable_event(MC13783_USB_EVENT); + mc13783_enable_event(MC13783_USB_EVENT, true); } void usb_enable(bool on) -- cgit v1.2.3