usb: chipidea: usbmisc: add power lost check for imx7d

imx7d can shutdown domain power supply if none of peripheral in this
domain is registered as wakeup source, this patch add related codes to
check if power is lost.

Signed-off-by: Li Jun <jun.li@nxp.com>
Link: https://lore.kernel.org/r/20221013151442.3262951-8-xu.yang_2@nxp.com
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
Li Jun 2022-10-13 23:14:41 +08:00 committed by Greg Kroah-Hartman
parent 04ff4d31af
commit 604ceaa9e9
1 changed files with 20 additions and 0 deletions

View File

@ -939,6 +939,25 @@ static int usbmisc_imx7ulp_init(struct imx_usbmisc_data *data)
return 0; return 0;
} }
static int usbmisc_imx7d_power_lost_check(struct imx_usbmisc_data *data)
{
struct imx_usbmisc *usbmisc = dev_get_drvdata(data->dev);
unsigned long flags;
u32 val;
spin_lock_irqsave(&usbmisc->lock, flags);
val = readl(usbmisc->base);
spin_unlock_irqrestore(&usbmisc->lock, flags);
/*
* Here use a power on reset value to judge
* if the controller experienced a power lost
*/
if (val == 0x30001000)
return 1;
else
return 0;
}
static int usbmisc_imx6sx_power_lost_check(struct imx_usbmisc_data *data) static int usbmisc_imx6sx_power_lost_check(struct imx_usbmisc_data *data)
{ {
struct imx_usbmisc *usbmisc = dev_get_drvdata(data->dev); struct imx_usbmisc *usbmisc = dev_get_drvdata(data->dev);
@ -998,6 +1017,7 @@ static const struct usbmisc_ops imx7d_usbmisc_ops = {
.init = usbmisc_imx7d_init, .init = usbmisc_imx7d_init,
.set_wakeup = usbmisc_imx7d_set_wakeup, .set_wakeup = usbmisc_imx7d_set_wakeup,
.charger_detection = imx7d_charger_detection, .charger_detection = imx7d_charger_detection,
.power_lost_check = usbmisc_imx7d_power_lost_check,
}; };
static const struct usbmisc_ops imx7ulp_usbmisc_ops = { static const struct usbmisc_ops imx7ulp_usbmisc_ops = {