usb: mtu3: add helper to power on/down device
Add helper to power on/down device ports and ip, it will be used when support device suspend/resume Signed-off-by: Chunfeng Yun <chunfeng.yun@mediatek.com> Link: https://lore.kernel.org/r/1626340078-29111-12-git-send-email-chunfeng.yun@mediatek.com Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
Родитель
fa6f59e28c
Коммит
6244831543
|
@ -141,6 +141,28 @@ static void mtu3_device_disable(struct mtu3 *mtu)
|
||||||
mtu3_setbits(ibase, U3D_SSUSB_IP_PW_CTRL2, SSUSB_IP_DEV_PDN);
|
mtu3_setbits(ibase, U3D_SSUSB_IP_PW_CTRL2, SSUSB_IP_DEV_PDN);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void mtu3_dev_power_on(struct mtu3 *mtu)
|
||||||
|
{
|
||||||
|
void __iomem *ibase = mtu->ippc_base;
|
||||||
|
|
||||||
|
mtu3_clrbits(ibase, U3D_SSUSB_IP_PW_CTRL2, SSUSB_IP_DEV_PDN);
|
||||||
|
if (mtu->is_u3_ip)
|
||||||
|
mtu3_clrbits(ibase, SSUSB_U3_CTRL(0), SSUSB_U3_PORT_PDN);
|
||||||
|
|
||||||
|
mtu3_clrbits(ibase, SSUSB_U2_CTRL(0), SSUSB_U2_PORT_PDN);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void mtu3_dev_power_down(struct mtu3 *mtu)
|
||||||
|
{
|
||||||
|
void __iomem *ibase = mtu->ippc_base;
|
||||||
|
|
||||||
|
if (mtu->is_u3_ip)
|
||||||
|
mtu3_setbits(ibase, SSUSB_U3_CTRL(0), SSUSB_U3_PORT_PDN);
|
||||||
|
|
||||||
|
mtu3_setbits(ibase, SSUSB_U2_CTRL(0), SSUSB_U2_PORT_PDN);
|
||||||
|
mtu3_setbits(ibase, U3D_SSUSB_IP_PW_CTRL2, SSUSB_IP_DEV_PDN);
|
||||||
|
}
|
||||||
|
|
||||||
/* reset U3D's device module. */
|
/* reset U3D's device module. */
|
||||||
static void mtu3_device_reset(struct mtu3 *mtu)
|
static void mtu3_device_reset(struct mtu3 *mtu)
|
||||||
{
|
{
|
||||||
|
@ -333,12 +355,7 @@ void mtu3_start(struct mtu3 *mtu)
|
||||||
dev_dbg(mtu->dev, "%s devctl 0x%x\n", __func__,
|
dev_dbg(mtu->dev, "%s devctl 0x%x\n", __func__,
|
||||||
mtu3_readl(mbase, U3D_DEVICE_CONTROL));
|
mtu3_readl(mbase, U3D_DEVICE_CONTROL));
|
||||||
|
|
||||||
mtu3_clrbits(mtu->ippc_base, U3D_SSUSB_IP_PW_CTRL2, SSUSB_IP_DEV_PDN);
|
mtu3_dev_power_on(mtu);
|
||||||
if (mtu->is_u3_ip)
|
|
||||||
mtu3_clrbits(mtu->ippc_base, SSUSB_U3_CTRL(0), SSUSB_U3_PORT_PDN);
|
|
||||||
|
|
||||||
mtu3_clrbits(mtu->ippc_base, SSUSB_U2_CTRL(0), SSUSB_U2_PORT_PDN);
|
|
||||||
|
|
||||||
mtu3_csr_init(mtu);
|
mtu3_csr_init(mtu);
|
||||||
mtu3_set_speed(mtu, mtu->speed);
|
mtu3_set_speed(mtu, mtu->speed);
|
||||||
|
|
||||||
|
@ -360,12 +377,7 @@ void mtu3_stop(struct mtu3 *mtu)
|
||||||
mtu3_dev_on_off(mtu, 0);
|
mtu3_dev_on_off(mtu, 0);
|
||||||
|
|
||||||
mtu->is_active = 0;
|
mtu->is_active = 0;
|
||||||
|
mtu3_dev_power_down(mtu);
|
||||||
if (mtu->is_u3_ip)
|
|
||||||
mtu3_setbits(mtu->ippc_base, SSUSB_U3_CTRL(0), SSUSB_U3_PORT_PDN);
|
|
||||||
|
|
||||||
mtu3_setbits(mtu->ippc_base, SSUSB_U2_CTRL(0), SSUSB_U2_PORT_PDN);
|
|
||||||
mtu3_setbits(mtu->ippc_base, U3D_SSUSB_IP_PW_CTRL2, SSUSB_IP_DEV_PDN);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* for non-ep0 */
|
/* for non-ep0 */
|
||||||
|
|
Загрузка…
Ссылка в новой задаче