From 0d214d66bf26609303f946b1f1b6aff7fa1d9d86 Mon Sep 17 00:00:00 2001 From: Dongwoo Lee Date: Tue, 18 Feb 2020 13:36:40 +0900 Subject: [PATCH] usb: dwc2: gadget: Set extcon state for usb cable as always true To inform to userspace as enable usb features always, set extcon state for usb cable as connected permanently. To enable this, add "g-extcon-always-on" property on dt. Change-Id: I5bcc1b7560278dab8bde6fc80549bc145179574c Signed-off-by: Dongwoo Lee --- drivers/usb/dwc2/core.h | 3 +++ drivers/usb/dwc2/gadget.c | 20 ++++++++++++++++++++ drivers/usb/dwc2/params.c | 6 +++++- 3 files changed, 28 insertions(+), 1 deletion(-) diff --git a/drivers/usb/dwc2/core.h b/drivers/usb/dwc2/core.h index cc9c93a..32d2be1 100644 --- a/drivers/usb/dwc2/core.h +++ b/drivers/usb/dwc2/core.h @@ -487,6 +487,9 @@ struct dwc2_core_params { u32 g_rx_fifo_size; u32 g_np_tx_fifo_size; u32 g_tx_fifo_size[MAX_EPS_CHANNELS]; +#if IS_ENABLED(CONFIG_EXTCON) + bool g_extcon_always_on; +#endif bool change_speed_quirk; }; diff --git a/drivers/usb/dwc2/gadget.c b/drivers/usb/dwc2/gadget.c index d842483..aa5d7de 100644 --- a/drivers/usb/dwc2/gadget.c +++ b/drivers/usb/dwc2/gadget.c @@ -23,6 +23,7 @@ #include #include #include +#include #include #include @@ -4767,6 +4768,25 @@ int dwc2_gadget_init(struct dwc2_hsotg *hsotg) } dwc2_hsotg_dump(hsotg); +#if IS_ENABLED(CONFIG_EXTCON) + if (hsotg->params.g_extcon_always_on) { + struct extcon_dev *edev; + static const unsigned int supported_cable[] = { + EXTCON_USB, + EXTCON_NONE, + }; + + edev = devm_extcon_dev_allocate(dev, supported_cable); + if (IS_ERR(edev)) + return PTR_ERR(edev); + + ret = devm_extcon_dev_register(dev, edev); + if (ret) + return ret; + + extcon_set_state_sync(edev, EXTCON_USB, true); + } +#endif return 0; } diff --git a/drivers/usb/dwc2/params.c b/drivers/usb/dwc2/params.c index a93415f..d674a48 100644 --- a/drivers/usb/dwc2/params.c +++ b/drivers/usb/dwc2/params.c @@ -369,7 +369,11 @@ static void dwc2_get_device_properties(struct dwc2_hsotg *hsotg) num = device_property_read_u32_array(hsotg->dev, "g-tx-fifo-size", NULL, 0); - +#if IS_ENABLED(CONFIG_EXTCON) + if (of_find_property(hsotg->dev->of_node, + "g-extcon-always-on", NULL)) + p->g_extcon_always_on = 1; +#endif if (num > 0) { num = min(num, 15); memset(p->g_tx_fifo_size, 0, -- 2.7.4