MLK-10510-3 usb: chipidea: usbmisc_imx: add power lost check for i.MX7D
authorLi Jun <jun.li@freescale.com>
Mon, 30 Mar 2015 05:19:42 +0000 (13:19 +0800)
committerNitin Garg <nitin.garg@nxp.com>
Mon, 19 Mar 2018 19:47:05 +0000 (14:47 -0500)
Add power lost check implementation for i.MX7D.

Acked-by: Peter Chen <peter.chen@freescale.com>
Signed-off-by: Li Jun <jun.li@freescale.com>
(cherry picked from commit 59102c3b9756923f1c8cdba8bcab7b8611685321)

drivers/usb/chipidea/usbmisc_imx.c

index a92ac17..690b61f 100644 (file)
@@ -506,6 +506,26 @@ static int usbmisc_imx7d_init(struct imx_usbmisc_data *data)
        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;
+}
+
+
 /***************************************************************************/
 /*                         imx usb charger detecton                        */
 /***************************************************************************/
@@ -702,6 +722,7 @@ static const struct usbmisc_ops imx6sx_usbmisc_ops = {
 static const struct usbmisc_ops imx7d_usbmisc_ops = {
        .init = usbmisc_imx7d_init,
        .set_wakeup = usbmisc_imx7d_set_wakeup,
+       .power_lost_check = usbmisc_imx7d_power_lost_check,
 };
 
 int imx_usbmisc_init(struct imx_usbmisc_data *data)