qcom 105 drivers/usb/dwc3/dwc3-qcom.c static void dwc3_qcom_vbus_overrride_enable(struct dwc3_qcom *qcom, bool enable) qcom 108 drivers/usb/dwc3/dwc3-qcom.c dwc3_qcom_setbits(qcom->qscratch_base, QSCRATCH_SS_PHY_CTRL, qcom 110 drivers/usb/dwc3/dwc3-qcom.c dwc3_qcom_setbits(qcom->qscratch_base, QSCRATCH_HS_PHY_CTRL, qcom 113 drivers/usb/dwc3/dwc3-qcom.c dwc3_qcom_clrbits(qcom->qscratch_base, QSCRATCH_SS_PHY_CTRL, qcom 115 drivers/usb/dwc3/dwc3-qcom.c dwc3_qcom_clrbits(qcom->qscratch_base, QSCRATCH_HS_PHY_CTRL, qcom 123 drivers/usb/dwc3/dwc3-qcom.c struct dwc3_qcom *qcom = container_of(nb, struct dwc3_qcom, vbus_nb); qcom 126 drivers/usb/dwc3/dwc3-qcom.c dwc3_qcom_vbus_overrride_enable(qcom, event); qcom 127 drivers/usb/dwc3/dwc3-qcom.c qcom->mode = event ? USB_DR_MODE_PERIPHERAL : USB_DR_MODE_HOST; qcom 135 drivers/usb/dwc3/dwc3-qcom.c struct dwc3_qcom *qcom = container_of(nb, struct dwc3_qcom, host_nb); qcom 138 drivers/usb/dwc3/dwc3-qcom.c dwc3_qcom_vbus_overrride_enable(qcom, !event); qcom 139 drivers/usb/dwc3/dwc3-qcom.c qcom->mode = event ? USB_DR_MODE_HOST : USB_DR_MODE_PERIPHERAL; qcom 144 drivers/usb/dwc3/dwc3-qcom.c static int dwc3_qcom_register_extcon(struct dwc3_qcom *qcom) qcom 146 drivers/usb/dwc3/dwc3-qcom.c struct device *dev = qcom->dev; qcom 153 drivers/usb/dwc3/dwc3-qcom.c qcom->edev = extcon_get_edev_by_phandle(dev, 0); qcom 154 drivers/usb/dwc3/dwc3-qcom.c if (IS_ERR(qcom->edev)) qcom 155 drivers/usb/dwc3/dwc3-qcom.c return PTR_ERR(qcom->edev); qcom 157 drivers/usb/dwc3/dwc3-qcom.c qcom->vbus_nb.notifier_call = dwc3_qcom_vbus_notifier; qcom 159 drivers/usb/dwc3/dwc3-qcom.c qcom->host_edev = extcon_get_edev_by_phandle(dev, 1); qcom 160 drivers/usb/dwc3/dwc3-qcom.c if (IS_ERR(qcom->host_edev)) qcom 161 drivers/usb/dwc3/dwc3-qcom.c qcom->host_edev = NULL; qcom 163 drivers/usb/dwc3/dwc3-qcom.c ret = devm_extcon_register_notifier(dev, qcom->edev, EXTCON_USB, qcom 164 drivers/usb/dwc3/dwc3-qcom.c &qcom->vbus_nb); qcom 170 drivers/usb/dwc3/dwc3-qcom.c if (qcom->host_edev) qcom 171 drivers/usb/dwc3/dwc3-qcom.c host_edev = qcom->host_edev; qcom 173 drivers/usb/dwc3/dwc3-qcom.c host_edev = qcom->edev; qcom 175 drivers/usb/dwc3/dwc3-qcom.c qcom->host_nb.notifier_call = dwc3_qcom_host_notifier; qcom 177 drivers/usb/dwc3/dwc3-qcom.c &qcom->host_nb); qcom 184 drivers/usb/dwc3/dwc3-qcom.c if (extcon_get_state(qcom->edev, EXTCON_USB) || qcom 186 drivers/usb/dwc3/dwc3-qcom.c dwc3_qcom_vbus_notifier(&qcom->vbus_nb, true, qcom->edev); qcom 188 drivers/usb/dwc3/dwc3-qcom.c dwc3_qcom_vbus_notifier(&qcom->vbus_nb, false, qcom->edev); qcom 193 drivers/usb/dwc3/dwc3-qcom.c static void dwc3_qcom_disable_interrupts(struct dwc3_qcom *qcom) qcom 195 drivers/usb/dwc3/dwc3-qcom.c if (qcom->hs_phy_irq) { qcom 196 drivers/usb/dwc3/dwc3-qcom.c disable_irq_wake(qcom->hs_phy_irq); qcom 197 drivers/usb/dwc3/dwc3-qcom.c disable_irq_nosync(qcom->hs_phy_irq); qcom 200 drivers/usb/dwc3/dwc3-qcom.c if (qcom->dp_hs_phy_irq) { qcom 201 drivers/usb/dwc3/dwc3-qcom.c disable_irq_wake(qcom->dp_hs_phy_irq); qcom 202 drivers/usb/dwc3/dwc3-qcom.c disable_irq_nosync(qcom->dp_hs_phy_irq); qcom 205 drivers/usb/dwc3/dwc3-qcom.c if (qcom->dm_hs_phy_irq) { qcom 206 drivers/usb/dwc3/dwc3-qcom.c disable_irq_wake(qcom->dm_hs_phy_irq); qcom 207 drivers/usb/dwc3/dwc3-qcom.c disable_irq_nosync(qcom->dm_hs_phy_irq); qcom 210 drivers/usb/dwc3/dwc3-qcom.c if (qcom->ss_phy_irq) { qcom 211 drivers/usb/dwc3/dwc3-qcom.c disable_irq_wake(qcom->ss_phy_irq); qcom 212 drivers/usb/dwc3/dwc3-qcom.c disable_irq_nosync(qcom->ss_phy_irq); qcom 216 drivers/usb/dwc3/dwc3-qcom.c static void dwc3_qcom_enable_interrupts(struct dwc3_qcom *qcom) qcom 218 drivers/usb/dwc3/dwc3-qcom.c if (qcom->hs_phy_irq) { qcom 219 drivers/usb/dwc3/dwc3-qcom.c enable_irq(qcom->hs_phy_irq); qcom 220 drivers/usb/dwc3/dwc3-qcom.c enable_irq_wake(qcom->hs_phy_irq); qcom 223 drivers/usb/dwc3/dwc3-qcom.c if (qcom->dp_hs_phy_irq) { qcom 224 drivers/usb/dwc3/dwc3-qcom.c enable_irq(qcom->dp_hs_phy_irq); qcom 225 drivers/usb/dwc3/dwc3-qcom.c enable_irq_wake(qcom->dp_hs_phy_irq); qcom 228 drivers/usb/dwc3/dwc3-qcom.c if (qcom->dm_hs_phy_irq) { qcom 229 drivers/usb/dwc3/dwc3-qcom.c enable_irq(qcom->dm_hs_phy_irq); qcom 230 drivers/usb/dwc3/dwc3-qcom.c enable_irq_wake(qcom->dm_hs_phy_irq); qcom 233 drivers/usb/dwc3/dwc3-qcom.c if (qcom->ss_phy_irq) { qcom 234 drivers/usb/dwc3/dwc3-qcom.c enable_irq(qcom->ss_phy_irq); qcom 235 drivers/usb/dwc3/dwc3-qcom.c enable_irq_wake(qcom->ss_phy_irq); qcom 239 drivers/usb/dwc3/dwc3-qcom.c static int dwc3_qcom_suspend(struct dwc3_qcom *qcom) qcom 244 drivers/usb/dwc3/dwc3-qcom.c if (qcom->is_suspended) qcom 247 drivers/usb/dwc3/dwc3-qcom.c val = readl(qcom->qscratch_base + PWR_EVNT_IRQ_STAT_REG); qcom 249 drivers/usb/dwc3/dwc3-qcom.c dev_err(qcom->dev, "HS-PHY not in L2\n"); qcom 251 drivers/usb/dwc3/dwc3-qcom.c for (i = qcom->num_clocks - 1; i >= 0; i--) qcom 252 drivers/usb/dwc3/dwc3-qcom.c clk_disable_unprepare(qcom->clks[i]); qcom 254 drivers/usb/dwc3/dwc3-qcom.c qcom->is_suspended = true; qcom 255 drivers/usb/dwc3/dwc3-qcom.c dwc3_qcom_enable_interrupts(qcom); qcom 260 drivers/usb/dwc3/dwc3-qcom.c static int dwc3_qcom_resume(struct dwc3_qcom *qcom) qcom 265 drivers/usb/dwc3/dwc3-qcom.c if (!qcom->is_suspended) qcom 268 drivers/usb/dwc3/dwc3-qcom.c dwc3_qcom_disable_interrupts(qcom); qcom 270 drivers/usb/dwc3/dwc3-qcom.c for (i = 0; i < qcom->num_clocks; i++) { qcom 271 drivers/usb/dwc3/dwc3-qcom.c ret = clk_prepare_enable(qcom->clks[i]); qcom 274 drivers/usb/dwc3/dwc3-qcom.c clk_disable_unprepare(qcom->clks[i]); qcom 280 drivers/usb/dwc3/dwc3-qcom.c dwc3_qcom_setbits(qcom->qscratch_base, PWR_EVNT_IRQ_STAT_REG, qcom 283 drivers/usb/dwc3/dwc3-qcom.c qcom->is_suspended = false; qcom 290 drivers/usb/dwc3/dwc3-qcom.c struct dwc3_qcom *qcom = data; qcom 291 drivers/usb/dwc3/dwc3-qcom.c struct dwc3 *dwc = platform_get_drvdata(qcom->dwc3); qcom 294 drivers/usb/dwc3/dwc3-qcom.c if (qcom->pm_suspended) qcom 303 drivers/usb/dwc3/dwc3-qcom.c static void dwc3_qcom_select_utmi_clk(struct dwc3_qcom *qcom) qcom 306 drivers/usb/dwc3/dwc3-qcom.c dwc3_qcom_setbits(qcom->qscratch_base, QSCRATCH_GENERAL_CFG, qcom 311 drivers/usb/dwc3/dwc3-qcom.c dwc3_qcom_setbits(qcom->qscratch_base, QSCRATCH_GENERAL_CFG, qcom 316 drivers/usb/dwc3/dwc3-qcom.c dwc3_qcom_clrbits(qcom->qscratch_base, QSCRATCH_GENERAL_CFG, qcom 336 drivers/usb/dwc3/dwc3-qcom.c struct dwc3_qcom *qcom = platform_get_drvdata(pdev); qcom 337 drivers/usb/dwc3/dwc3-qcom.c const struct dwc3_acpi_pdata *pdata = qcom->acpi_pdata; qcom 344 drivers/usb/dwc3/dwc3-qcom.c ret = devm_request_threaded_irq(qcom->dev, irq, NULL, qcom 347 drivers/usb/dwc3/dwc3-qcom.c "qcom_dwc3 HS", qcom); qcom 349 drivers/usb/dwc3/dwc3-qcom.c dev_err(qcom->dev, "hs_phy_irq failed: %d\n", ret); qcom 352 drivers/usb/dwc3/dwc3-qcom.c qcom->hs_phy_irq = irq; qcom 359 drivers/usb/dwc3/dwc3-qcom.c ret = devm_request_threaded_irq(qcom->dev, irq, NULL, qcom 362 drivers/usb/dwc3/dwc3-qcom.c "qcom_dwc3 DP_HS", qcom); qcom 364 drivers/usb/dwc3/dwc3-qcom.c dev_err(qcom->dev, "dp_hs_phy_irq failed: %d\n", ret); qcom 367 drivers/usb/dwc3/dwc3-qcom.c qcom->dp_hs_phy_irq = irq; qcom 374 drivers/usb/dwc3/dwc3-qcom.c ret = devm_request_threaded_irq(qcom->dev, irq, NULL, qcom 377 drivers/usb/dwc3/dwc3-qcom.c "qcom_dwc3 DM_HS", qcom); qcom 379 drivers/usb/dwc3/dwc3-qcom.c dev_err(qcom->dev, "dm_hs_phy_irq failed: %d\n", ret); qcom 382 drivers/usb/dwc3/dwc3-qcom.c qcom->dm_hs_phy_irq = irq; qcom 389 drivers/usb/dwc3/dwc3-qcom.c ret = devm_request_threaded_irq(qcom->dev, irq, NULL, qcom 392 drivers/usb/dwc3/dwc3-qcom.c "qcom_dwc3 SS", qcom); qcom 394 drivers/usb/dwc3/dwc3-qcom.c dev_err(qcom->dev, "ss_phy_irq failed: %d\n", ret); qcom 397 drivers/usb/dwc3/dwc3-qcom.c qcom->ss_phy_irq = irq; qcom 403 drivers/usb/dwc3/dwc3-qcom.c static int dwc3_qcom_clk_init(struct dwc3_qcom *qcom, int count) qcom 405 drivers/usb/dwc3/dwc3-qcom.c struct device *dev = qcom->dev; qcom 415 drivers/usb/dwc3/dwc3-qcom.c qcom->num_clocks = count; qcom 417 drivers/usb/dwc3/dwc3-qcom.c qcom->clks = devm_kcalloc(dev, qcom->num_clocks, qcom 419 drivers/usb/dwc3/dwc3-qcom.c if (!qcom->clks) qcom 422 drivers/usb/dwc3/dwc3-qcom.c for (i = 0; i < qcom->num_clocks; i++) { qcom 429 drivers/usb/dwc3/dwc3-qcom.c clk_put(qcom->clks[i]); qcom 436 drivers/usb/dwc3/dwc3-qcom.c clk_disable_unprepare(qcom->clks[i]); qcom 437 drivers/usb/dwc3/dwc3-qcom.c clk_put(qcom->clks[i]); qcom 444 drivers/usb/dwc3/dwc3-qcom.c qcom->clks[i] = clk; qcom 457 drivers/usb/dwc3/dwc3-qcom.c struct dwc3_qcom *qcom = platform_get_drvdata(pdev); qcom 463 drivers/usb/dwc3/dwc3-qcom.c qcom->dwc3 = platform_device_alloc("dwc3", PLATFORM_DEVID_AUTO); qcom 464 drivers/usb/dwc3/dwc3-qcom.c if (!qcom->dwc3) qcom 467 drivers/usb/dwc3/dwc3-qcom.c qcom->dwc3->dev.parent = dev; qcom 468 drivers/usb/dwc3/dwc3-qcom.c qcom->dwc3->dev.type = dev->type; qcom 469 drivers/usb/dwc3/dwc3-qcom.c qcom->dwc3->dev.dma_mask = dev->dma_mask; qcom 470 drivers/usb/dwc3/dwc3-qcom.c qcom->dwc3->dev.dma_parms = dev->dma_parms; qcom 471 drivers/usb/dwc3/dwc3-qcom.c qcom->dwc3->dev.coherent_dma_mask = dev->coherent_dma_mask; qcom 487 drivers/usb/dwc3/dwc3-qcom.c qcom->acpi_pdata->dwc3_core_base_size; qcom 493 drivers/usb/dwc3/dwc3-qcom.c ret = platform_device_add_resources(qcom->dwc3, child_res, 2); qcom 499 drivers/usb/dwc3/dwc3-qcom.c ret = platform_device_add_properties(qcom->dwc3, qcom 506 drivers/usb/dwc3/dwc3-qcom.c ret = platform_device_add(qcom->dwc3); qcom 517 drivers/usb/dwc3/dwc3-qcom.c struct dwc3_qcom *qcom = platform_get_drvdata(pdev); qcom 534 drivers/usb/dwc3/dwc3-qcom.c qcom->dwc3 = of_find_device_by_node(dwc3_np); qcom 535 drivers/usb/dwc3/dwc3-qcom.c if (!qcom->dwc3) { qcom 557 drivers/usb/dwc3/dwc3-qcom.c struct dwc3_qcom *qcom; qcom 562 drivers/usb/dwc3/dwc3-qcom.c qcom = devm_kzalloc(&pdev->dev, sizeof(*qcom), GFP_KERNEL); qcom 563 drivers/usb/dwc3/dwc3-qcom.c if (!qcom) qcom 566 drivers/usb/dwc3/dwc3-qcom.c platform_set_drvdata(pdev, qcom); qcom 567 drivers/usb/dwc3/dwc3-qcom.c qcom->dev = &pdev->dev; qcom 570 drivers/usb/dwc3/dwc3-qcom.c qcom->acpi_pdata = acpi_device_get_match_data(dev); qcom 571 drivers/usb/dwc3/dwc3-qcom.c if (!qcom->acpi_pdata) { qcom 577 drivers/usb/dwc3/dwc3-qcom.c qcom->resets = devm_reset_control_array_get_optional_exclusive(dev); qcom 578 drivers/usb/dwc3/dwc3-qcom.c if (IS_ERR(qcom->resets)) { qcom 579 drivers/usb/dwc3/dwc3-qcom.c ret = PTR_ERR(qcom->resets); qcom 584 drivers/usb/dwc3/dwc3-qcom.c ret = reset_control_assert(qcom->resets); qcom 592 drivers/usb/dwc3/dwc3-qcom.c ret = reset_control_deassert(qcom->resets); qcom 598 drivers/usb/dwc3/dwc3-qcom.c ret = dwc3_qcom_clk_init(qcom, of_clk_get_parent_count(np)); qcom 614 drivers/usb/dwc3/dwc3-qcom.c qcom->acpi_pdata->qscratch_base_offset; qcom 616 drivers/usb/dwc3/dwc3-qcom.c qcom->acpi_pdata->qscratch_base_size; qcom 619 drivers/usb/dwc3/dwc3-qcom.c qcom->qscratch_base = devm_ioremap_resource(dev, parent_res); qcom 620 drivers/usb/dwc3/dwc3-qcom.c if (IS_ERR(qcom->qscratch_base)) { qcom 622 drivers/usb/dwc3/dwc3-qcom.c ret = PTR_ERR(qcom->qscratch_base); qcom 639 drivers/usb/dwc3/dwc3-qcom.c dwc3_qcom_select_utmi_clk(qcom); qcom 651 drivers/usb/dwc3/dwc3-qcom.c qcom->mode = usb_get_dr_mode(&qcom->dwc3->dev); qcom 654 drivers/usb/dwc3/dwc3-qcom.c if (qcom->mode == USB_DR_MODE_PERIPHERAL) qcom 655 drivers/usb/dwc3/dwc3-qcom.c dwc3_qcom_vbus_overrride_enable(qcom, true); qcom 658 drivers/usb/dwc3/dwc3-qcom.c ret = dwc3_qcom_register_extcon(qcom); qcom 663 drivers/usb/dwc3/dwc3-qcom.c qcom->is_suspended = false; qcom 676 drivers/usb/dwc3/dwc3-qcom.c for (i = qcom->num_clocks - 1; i >= 0; i--) { qcom 677 drivers/usb/dwc3/dwc3-qcom.c clk_disable_unprepare(qcom->clks[i]); qcom 678 drivers/usb/dwc3/dwc3-qcom.c clk_put(qcom->clks[i]); qcom 681 drivers/usb/dwc3/dwc3-qcom.c reset_control_assert(qcom->resets); qcom 688 drivers/usb/dwc3/dwc3-qcom.c struct dwc3_qcom *qcom = platform_get_drvdata(pdev); qcom 694 drivers/usb/dwc3/dwc3-qcom.c for (i = qcom->num_clocks - 1; i >= 0; i--) { qcom 695 drivers/usb/dwc3/dwc3-qcom.c clk_disable_unprepare(qcom->clks[i]); qcom 696 drivers/usb/dwc3/dwc3-qcom.c clk_put(qcom->clks[i]); qcom 698 drivers/usb/dwc3/dwc3-qcom.c qcom->num_clocks = 0; qcom 700 drivers/usb/dwc3/dwc3-qcom.c reset_control_assert(qcom->resets); qcom 710 drivers/usb/dwc3/dwc3-qcom.c struct dwc3_qcom *qcom = dev_get_drvdata(dev); qcom 713 drivers/usb/dwc3/dwc3-qcom.c ret = dwc3_qcom_suspend(qcom); qcom 715 drivers/usb/dwc3/dwc3-qcom.c qcom->pm_suspended = true; qcom 722 drivers/usb/dwc3/dwc3-qcom.c struct dwc3_qcom *qcom = dev_get_drvdata(dev); qcom 725 drivers/usb/dwc3/dwc3-qcom.c ret = dwc3_qcom_resume(qcom); qcom 727 drivers/usb/dwc3/dwc3-qcom.c qcom->pm_suspended = false; qcom 734 drivers/usb/dwc3/dwc3-qcom.c struct dwc3_qcom *qcom = dev_get_drvdata(dev); qcom 736 drivers/usb/dwc3/dwc3-qcom.c return dwc3_qcom_suspend(qcom); qcom 741 drivers/usb/dwc3/dwc3-qcom.c struct dwc3_qcom *qcom = dev_get_drvdata(dev); qcom 743 drivers/usb/dwc3/dwc3-qcom.c return dwc3_qcom_resume(qcom);