From b1d7a18f5de5e6233408db76354b37e0fc2a2de7 Mon Sep 17 00:00:00 2001 From: Simo Piiroinen Date: Tue, 18 Oct 2016 09:02:34 +0300 Subject: [PATCH] [udev] Cancel mode selection when charger is detected. Fixes MER#1677 When charger is connected, usb-moded can see first "USB" (=cable) connection event from udev followed by "USB_CDP" (=charger) event. Due to cached something-connected flag usb moded still behaves as if pc cable were connected - which leaves ui thinking mode selection can/should be done etc. If dedicated charger is reported after pc cable, clear the low level something-connected flag before acting on charger connected info. Signed-off-by: Simo Piiroinen --- src/usb_moded-udev.c | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/src/usb_moded-udev.c b/src/usb_moded-udev.c index 7f7fae1..f02d39f 100644 --- a/src/usb_moded-udev.c +++ b/src/usb_moded-udev.c @@ -311,6 +311,20 @@ static void setup_charger_connection(void) cancel_cable_connection_timeout(); log_debug("UDEV:USB dedicated charger connected\n"); + + if (cable) { + /* The connection was initially reported incorrectly + * as pc cable, then later on declared as charger. + * + * Clear "connected" boolean flag so that the + * set_charger_connected() call below acts as if charger + * were detected already on connect: mode gets declared + * as dedicated charger (and the mode selection dialog + * shown by ui gets closed). + */ + set_usb_connection_state(FALSE); + } + charger = 1; cable = 0; set_charger_connected(TRUE);