]> www.infradead.org Git - users/jedix/linux-maple.git/commitdiff
usb: chipidea: imx: add imx_usbmisc_pullup() hook
authorXu Yang <xu.yang_2@nxp.com>
Sat, 14 Jun 2025 12:56:44 +0000 (20:56 +0800)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Thu, 19 Jun 2025 10:28:25 +0000 (12:28 +0200)
It's used to do other pullup related operations if needs.

Signed-off-by: Xu Yang <xu.yang_2@nxp.com>
Acked-by: Peter Chen <peter.chen@kernel.org>
Link: https://lore.kernel.org/r/20250614125645.207732-3-xu.yang_2@nxp.com
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/usb/chipidea/ci_hdrc_imx.h
drivers/usb/chipidea/usbmisc_imx.c

index 88b8da79d51840622e42e6cc68b1b689ebf98c4b..cb95c84d0322f60429d534772c829fe043396f71 100644 (file)
@@ -37,5 +37,6 @@ int imx_usbmisc_hsic_set_connect(struct imx_usbmisc_data *data);
 int imx_usbmisc_charger_detection(struct imx_usbmisc_data *data, bool connect);
 int imx_usbmisc_suspend(struct imx_usbmisc_data *data, bool wakeup);
 int imx_usbmisc_resume(struct imx_usbmisc_data *data, bool wakeup);
+int imx_usbmisc_pullup(struct imx_usbmisc_data *data, bool on);
 
 #endif /* __DRIVER_USB_CHIPIDEA_CI_HDRC_IMX_H */
index 118b9a68496bd478824824d4bab8d5583badb9dd..9db67d6d0ec4dcf77be94e52569f1675e4e4fdc9 100644 (file)
@@ -170,6 +170,9 @@ struct usbmisc_ops {
        int (*charger_detection)(struct imx_usbmisc_data *data);
        /* It's called when system resume from usb power lost */
        int (*power_lost_check)(struct imx_usbmisc_data *data);
+       /* It's called when device controller changed pullup status */
+       void (*pullup)(struct imx_usbmisc_data *data, bool on);
+       /* It's called during suspend/resume to save power */
        void (*vbus_comparator_on)(struct imx_usbmisc_data *data, bool on);
 };
 
@@ -1225,6 +1228,21 @@ int imx_usbmisc_charger_detection(struct imx_usbmisc_data *data, bool connect)
 }
 EXPORT_SYMBOL_GPL(imx_usbmisc_charger_detection);
 
+int imx_usbmisc_pullup(struct imx_usbmisc_data *data, bool on)
+{
+       struct imx_usbmisc *usbmisc;
+
+       if (!data)
+               return 0;
+
+       usbmisc = dev_get_drvdata(data->dev);
+       if (usbmisc->ops->pullup)
+               usbmisc->ops->pullup(data, on);
+
+       return 0;
+}
+EXPORT_SYMBOL_GPL(imx_usbmisc_pullup);
+
 int imx_usbmisc_suspend(struct imx_usbmisc_data *data, bool wakeup)
 {
        struct imx_usbmisc *usbmisc;