From 7f6415a516cf9cbc17a233c8e2745fe0f2341460 Mon Sep 17 00:00:00 2001 From: Chengwei Yang Date: Wed, 26 Sep 2012 12:28:00 +0800 Subject: [PATCH] Export usb connection status There are several components depends on kernel export usb connection status correctly. First, system-server check usb status by calling OEM interface to launch usb-server; second, usb-server does the usb mode setting work and launch syspopup. In addition, setting usb mode from UI depends on usb-server too. This also fix TZSP-3142. Change-Id: I430e588069a807b195cb364846d1a6421cafff14 Signed-off-by: Chengwei Yang --- .../intel-mid/device_libs/platform_msic_audio.c | 2 +- drivers/usb/otg/penwell_otg.c | 24 +++++++++++++++++++--- 2 files changed, 22 insertions(+), 4 deletions(-) diff --git a/arch/x86/platform/intel-mid/device_libs/platform_msic_audio.c b/arch/x86/platform/intel-mid/device_libs/platform_msic_audio.c index b1f0006..773f455 100644 --- a/arch/x86/platform/intel-mid/device_libs/platform_msic_audio.c +++ b/arch/x86/platform/intel-mid/device_libs/platform_msic_audio.c @@ -56,7 +56,7 @@ static struct msic_audio_platform_data msic_audio_pdata = { #ifdef CONFIG_JACK_MON static struct jack_platform_data jack_data = { - .usb_online = -1, + .usb_online = 0, .charger_online = -1, .hdmi_online = -1, .earjack_online = 0, diff --git a/drivers/usb/otg/penwell_otg.c b/drivers/usb/otg/penwell_otg.c index 7988b3f..4553226 100644 --- a/drivers/usb/otg/penwell_otg.c +++ b/drivers/usb/otg/penwell_otg.c @@ -38,6 +38,7 @@ #include #include #include +#include #include #include #include "../core/usb.h" @@ -2482,6 +2483,14 @@ static void penwell_otg_psc_notify_work(struct work_struct *work) power_supply_charger_event(psc_cap); } +static bool connected(enum usb_otg_state state) +{ + if (state == OTG_STATE_A_HOST || state == OTG_STATE_A_PERIPHERAL || + state == OTG_STATE_B_HOST || state == OTG_STATE_B_PERIPHERAL) + return true; + return false; +} + static void penwell_otg_work(struct work_struct *work) { struct penwell_otg *pnw = container_of(work, @@ -2493,9 +2502,12 @@ static void penwell_otg_work(struct work_struct *work) int retval; struct pci_dev *pdev; unsigned long flags; + enum usb_otg_state old_state; + enum usb_otg_state new_state; + old_state = iotg->otg.state; dev_dbg(pnw->dev, - "old state = %s\n", state_string(iotg->otg.state)); + "old state = %s\n", state_string(old_state)); pm_runtime_get_sync(pnw->dev); @@ -2704,7 +2716,6 @@ static void penwell_otg_work(struct work_struct *work) penwell_otg_start_ulpi_poll(); iotg->otg.state = OTG_STATE_B_PERIPHERAL; - } else if ((hsm->b_bus_req || hsm->power_up || hsm->adp_change || hsm->otg_srp_reqd) && !hsm->b_srp_fail_tmr) { @@ -3712,8 +3723,15 @@ static void penwell_otg_work(struct work_struct *work) pm_runtime_put_sync(pnw->dev); + new_state = iotg->otg.state; dev_dbg(pnw->dev, - "new state = %s\n", state_string(iotg->otg.state)); + "new state = %s\n", state_string(new_state)); +#ifdef CONFIG_JACK_MON + if (connected(old_state) && !connected(new_state)) + jack_event_handler("usb", 0); + else if (!connected(old_state) && connected(new_state)) + jack_event_handler("usb", 1); +#endif } static ssize_t -- 2.7.4