static int __maybe_unused mtu3_resume(struct device *dev) { struct platform_device *pdev = to_platform_device(dev); struct ssusb_mtk *ssusb = platform_get_drvdata(pdev); int ret; dev_dbg(dev, "%s\n", __func__); if (!ssusb->is_host) return 0; ssusb_wakeup_set(ssusb, false); ret = ssusb_clks_enable(ssusb); if (ret) goto clks_err; ret = ssusb_phy_power_on(ssusb); if (ret) goto phy_err; ssusb_host_enable(ssusb); return 0; phy_err: ssusb_clks_disable(ssusb); clks_err: return ret; }
static void ssusb_rscs_exit(struct ssusb_mtk *ssusb) { ssusb_clks_disable(ssusb); regulator_disable(ssusb->vusb33); ssusb_phy_power_off(ssusb); ssusb_phy_exit(ssusb); }
/* * when support dual-role mode, we reject suspend when * it works as device mode; */ static int __maybe_unused mtu3_suspend(struct device *dev) { struct ssusb_mtk *ssusb = dev_get_drvdata(dev); dev_dbg(dev, "%s\n", __func__); /* REVISIT: disconnect it for only device mode? */ if (!ssusb->is_host) return 0; ssusb_host_disable(ssusb, true); ssusb_phy_power_off(ssusb); ssusb_clks_disable(ssusb); ssusb_wakeup_set(ssusb, true); return 0; }
static int ssusb_rscs_init(struct ssusb_mtk *ssusb) { int ret = 0; ret = regulator_enable(ssusb->vusb33); if (ret) { dev_err(ssusb->dev, "failed to enable vusb33\n"); goto vusb33_err; } ret = ssusb_clks_enable(ssusb); if (ret) goto clks_err; ret = ssusb_phy_init(ssusb); if (ret) { dev_err(ssusb->dev, "failed to init phy\n"); goto phy_init_err; } ret = ssusb_phy_power_on(ssusb); if (ret) { dev_err(ssusb->dev, "failed to power on phy\n"); goto phy_err; } return 0; phy_err: ssusb_phy_exit(ssusb); phy_init_err: ssusb_clks_disable(ssusb); clks_err: regulator_disable(ssusb->vusb33); vusb33_err: return ret; }