mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-08 12:58:12 -04:00
usb: dwc3: add DWC3_CONTROLLER_PULLUP event
when gadget pullup, add this event allow redriver do some operation according to the pullup state. Change-Id: I9cbd3f9e95aae327e1f872aff7ebff7a8926e5a5 Signed-off-by: Linyu Yuan <linyyuan@codeaurora.org>
This commit is contained in:
parent
f3872ee37a
commit
163554e4c7
3 changed files with 14 additions and 4 deletions
|
|
@ -1694,6 +1694,7 @@ enum dwc3_notify_event {
|
|||
DWC3_CONTROLLER_NOTIFY_OTG_EVENT,
|
||||
DWC3_CONTROLLER_SET_CURRENT_DRAW_EVENT,
|
||||
DWC3_CONTROLLER_NOTIFY_DISABLE_UPDXFER,
|
||||
DWC3_CONTROLLER_PULLUP,
|
||||
|
||||
/* USB GSI event buffer related notification */
|
||||
DWC3_GSI_EVT_BUF_ALLOC,
|
||||
|
|
|
|||
|
|
@ -498,6 +498,8 @@ struct dwc3_msm {
|
|||
struct usb_role_switch *role_switch;
|
||||
bool ss_release_called;
|
||||
int orientation_override;
|
||||
|
||||
struct device_node *ss_redriver_node;
|
||||
};
|
||||
|
||||
#define USB_HSPHY_3P3_VOL_MIN 3050000 /* uV */
|
||||
|
|
@ -2381,6 +2383,10 @@ static void dwc3_msm_notify_event(struct dwc3 *dwc,
|
|||
dev_dbg(mdwc->dev, "DWC3_CONTROLLER_SET_CURRENT_DRAW_EVENT received\n");
|
||||
schedule_work(&mdwc->vbus_draw_work);
|
||||
break;
|
||||
case DWC3_CONTROLLER_PULLUP:
|
||||
dev_dbg(mdwc->dev, "DWC3_CONTROLLER_PULLUP received\n");
|
||||
redriver_gadget_pullup(mdwc->ss_redriver_node, value);
|
||||
break;
|
||||
case DWC3_GSI_EVT_BUF_ALLOC:
|
||||
dev_dbg(mdwc->dev, "DWC3_GSI_EVT_BUF_ALLOC\n");
|
||||
dwc3_gsi_event_buf_alloc(dwc);
|
||||
|
|
@ -4108,7 +4114,6 @@ int dwc3_msm_release_ss_lane(struct device *dev)
|
|||
{
|
||||
struct dwc3_msm *mdwc = dev_get_drvdata(dev);
|
||||
struct dwc3 *dwc = NULL;
|
||||
struct device_node *ssusb_redriver_node;
|
||||
|
||||
if (mdwc == NULL) {
|
||||
dev_err(dev, "dwc3-msm is not initialized yet.\n");
|
||||
|
|
@ -4126,9 +4131,7 @@ int dwc3_msm_release_ss_lane(struct device *dev)
|
|||
flush_work(&mdwc->resume_work);
|
||||
drain_workqueue(mdwc->sm_usb_wq);
|
||||
|
||||
ssusb_redriver_node =
|
||||
of_parse_phandle(mdwc->dev->of_node, "ssusb_redriver", 0);
|
||||
redriver_release_usb_lanes(ssusb_redriver_node);
|
||||
redriver_release_usb_lanes(mdwc->ss_redriver_node);
|
||||
|
||||
mdwc->ss_release_called = true;
|
||||
if (mdwc->id_state == DWC3_ID_GROUND) {
|
||||
|
|
@ -4444,6 +4447,8 @@ static int dwc3_msm_probe(struct platform_device *pdev)
|
|||
|
||||
mutex_init(&mdwc->suspend_resume_mutex);
|
||||
|
||||
mdwc->ss_redriver_node = of_parse_phandle(node, "ssusb_redriver", 0);
|
||||
|
||||
if (of_property_read_bool(node, "usb-role-switch")) {
|
||||
role_desc.fwnode = dev_fwnode(&pdev->dev);
|
||||
mdwc->role_switch = usb_role_switch_register(mdwc->dev,
|
||||
|
|
@ -4527,6 +4532,7 @@ static int dwc3_msm_probe(struct platform_device *pdev)
|
|||
|
||||
put_dwc3:
|
||||
usb_role_switch_unregister(mdwc->role_switch);
|
||||
of_node_put(mdwc->ss_redriver_node);
|
||||
platform_device_put(mdwc->dwc3);
|
||||
for (i = 0; i < ARRAY_SIZE(mdwc->icc_paths); i++)
|
||||
icc_put(mdwc->icc_paths[i]);
|
||||
|
|
@ -4545,6 +4551,7 @@ static int dwc3_msm_remove(struct platform_device *pdev)
|
|||
int i, ret_pm;
|
||||
|
||||
usb_role_switch_unregister(mdwc->role_switch);
|
||||
of_node_put(mdwc->ss_redriver_node);
|
||||
device_remove_file(&pdev->dev, &dev_attr_mode);
|
||||
device_remove_file(&pdev->dev, &dev_attr_speed);
|
||||
device_remove_file(&pdev->dev, &dev_attr_bus_vote);
|
||||
|
|
|
|||
|
|
@ -2232,6 +2232,8 @@ static int dwc3_gadget_pullup(struct usb_gadget *g, int is_on)
|
|||
if (is_on)
|
||||
dwc3_device_core_soft_reset(dwc);
|
||||
|
||||
dwc3_notify_event(dwc, DWC3_CONTROLLER_PULLUP, is_on);
|
||||
|
||||
spin_lock_irqsave(&dwc->lock, flags);
|
||||
if (dwc->ep0state != EP0_SETUP_PHASE)
|
||||
dbg_event(0xFF, "EP0 is not in SETUP phase\n", dwc->ep0state);
|
||||
|
|
|
|||
Loading…
Reference in a new issue