Merge "usb: dwc3: dwc3-msm-core: MOVE perf_vote_enable in msm_suspend"
This commit is contained in:
commit
3804d957c2
@ -4224,7 +4224,6 @@ static int dwc3_msm_suspend(struct dwc3_msm *mdwc, bool force_power_collapse)
|
||||
return 0;
|
||||
}
|
||||
|
||||
msm_dwc3_perf_vote_enable(mdwc, false);
|
||||
if (dwc) {
|
||||
if (!mdwc->in_host_mode) {
|
||||
evt = dwc->ev_buf;
|
||||
@ -4281,6 +4280,8 @@ static int dwc3_msm_suspend(struct dwc3_msm *mdwc, bool force_power_collapse)
|
||||
return ret;
|
||||
}
|
||||
|
||||
msm_dwc3_perf_vote_enable(mdwc, false);
|
||||
|
||||
/* disable power event irq, hs and ss phy irq is used as wake up src */
|
||||
disable_irq_nosync(mdwc->wakeup_irq[PWR_EVNT_IRQ].irq);
|
||||
|
||||
@ -6174,6 +6175,43 @@ static int dwc3_msm_parse_params(struct dwc3_msm *mdwc, struct device_node *node
|
||||
|
||||
return 0;
|
||||
}
|
||||
static int dwc3_msm_register_interrupts(struct platform_device *pdev)
|
||||
{
|
||||
struct dwc3_msm *mdwc = platform_get_drvdata(pdev);
|
||||
int ret = 0;
|
||||
int i;
|
||||
|
||||
for (i = 0; i < USB_MAX_IRQ; i++) {
|
||||
mdwc->wakeup_irq[i].irq = platform_get_irq_byname(pdev,
|
||||
usb_irq_info[i].name);
|
||||
if (mdwc->wakeup_irq[i].irq < 0) {
|
||||
/* pwr_evnt_irq is only mandatory irq */
|
||||
if (usb_irq_info[i].required) {
|
||||
dev_err(&pdev->dev, "get_irq for %s failed\n\n",
|
||||
usb_irq_info[i].name);
|
||||
return -EINVAL;
|
||||
}
|
||||
mdwc->wakeup_irq[i].irq = 0;
|
||||
} else {
|
||||
irq_set_status_flags(mdwc->wakeup_irq[i].irq,
|
||||
IRQ_NOAUTOEN);
|
||||
|
||||
ret = devm_request_threaded_irq(&pdev->dev,
|
||||
mdwc->wakeup_irq[i].irq,
|
||||
msm_dwc3_pwr_irq,
|
||||
msm_dwc3_pwr_irq_thread,
|
||||
usb_irq_info[i].irq_type,
|
||||
usb_irq_info[i].name, mdwc);
|
||||
if (ret) {
|
||||
dev_err(&pdev->dev, "irq req %s failed: %d\n\n",
|
||||
usb_irq_info[i].name, ret);
|
||||
return ret;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int dwc3_msm_probe(struct platform_device *pdev)
|
||||
{
|
||||
@ -6244,35 +6282,9 @@ static int dwc3_msm_probe(struct platform_device *pdev)
|
||||
mdwc->lpm_to_suspend_delay = 0;
|
||||
}
|
||||
|
||||
for (i = 0; i < USB_MAX_IRQ; i++) {
|
||||
mdwc->wakeup_irq[i].irq = platform_get_irq_byname(pdev,
|
||||
usb_irq_info[i].name);
|
||||
if (mdwc->wakeup_irq[i].irq < 0) {
|
||||
/* pwr_evnt_irq is only mandatory irq */
|
||||
if (usb_irq_info[i].required) {
|
||||
dev_err(&pdev->dev, "get_irq for %s failed\n\n",
|
||||
usb_irq_info[i].name);
|
||||
ret = -EINVAL;
|
||||
goto err;
|
||||
}
|
||||
mdwc->wakeup_irq[i].irq = 0;
|
||||
} else {
|
||||
irq_set_status_flags(mdwc->wakeup_irq[i].irq,
|
||||
IRQ_NOAUTOEN);
|
||||
|
||||
ret = devm_request_threaded_irq(&pdev->dev,
|
||||
mdwc->wakeup_irq[i].irq,
|
||||
msm_dwc3_pwr_irq,
|
||||
msm_dwc3_pwr_irq_thread,
|
||||
usb_irq_info[i].irq_type,
|
||||
usb_irq_info[i].name, mdwc);
|
||||
if (ret) {
|
||||
dev_err(&pdev->dev, "irq req %s failed: %d\n\n",
|
||||
usb_irq_info[i].name, ret);
|
||||
goto err;
|
||||
}
|
||||
}
|
||||
}
|
||||
ret = dwc3_msm_register_interrupts(pdev);
|
||||
if (ret)
|
||||
goto err;
|
||||
|
||||
res = platform_get_resource_byname(pdev, IORESOURCE_MEM, "core_base");
|
||||
if (!res) {
|
||||
@ -6473,6 +6485,12 @@ static int dwc3_msm_probe(struct platform_device *pdev)
|
||||
}
|
||||
|
||||
mdwc->force_disconnect = false;
|
||||
|
||||
/* Add pm_qos with default mode intially */
|
||||
if (mdwc->pm_qos_latency)
|
||||
cpu_latency_qos_add_request(&mdwc->pm_qos_req_dma,
|
||||
PM_QOS_DEFAULT_VALUE);
|
||||
|
||||
return 0;
|
||||
|
||||
put_dwc3:
|
||||
@ -6523,6 +6541,10 @@ static int dwc3_msm_remove(struct platform_device *pdev)
|
||||
msm_dwc3_perf_vote_enable(mdwc, false);
|
||||
cancel_work_sync(&mdwc->sm_work);
|
||||
|
||||
/* Remove pm_qos request */
|
||||
if (mdwc->pm_qos_latency)
|
||||
cpu_latency_qos_remove_request(&mdwc->pm_qos_req_dma);
|
||||
|
||||
if (mdwc->hs_phy)
|
||||
mdwc->hs_phy->flags &= ~PHY_HOST_MODE;
|
||||
dwc3_msm_notify_event(dwc, DWC3_GSI_EVT_BUF_FREE, 0);
|
||||
@ -6834,9 +6856,6 @@ static void msm_dwc3_perf_vote_enable(struct dwc3_msm *mdwc, bool enable)
|
||||
/* make sure when enable work, save a valid start irq count */
|
||||
mdwc->irq_cnt = irq_desc->tot_count;
|
||||
|
||||
/* start default mode intially */
|
||||
cpu_latency_qos_add_request(&mdwc->pm_qos_req_dma,
|
||||
PM_QOS_DEFAULT_VALUE);
|
||||
schedule_delayed_work(&mdwc->perf_vote_work,
|
||||
msecs_to_jiffies(PM_QOS_DEFAULT_SAMPLE_MS));
|
||||
} else {
|
||||
@ -6844,7 +6863,6 @@ static void msm_dwc3_perf_vote_enable(struct dwc3_msm *mdwc, bool enable)
|
||||
return;
|
||||
cancel_delayed_work_sync(&mdwc->perf_vote_work);
|
||||
msm_dwc3_perf_vote_update(mdwc, false);
|
||||
cpu_latency_qos_remove_request(&mdwc->pm_qos_req_dma);
|
||||
}
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user