From 594d400d3d805f7fc9a3a53bc2b2eeac80ab1238 Mon Sep 17 00:00:00 2001 From: Ajit Pal Singh Date: Fri, 13 Jul 2018 14:05:59 +0530 Subject: [PATCH] qcacld-3.0: Add shutdown/reinit support for PLD_CNSS_USB Populate shutdown/reinit callback functions for PLD_CNSS_USB Change-Id: If0ad6ca69a85778574d874d9a9b9f0df6146e89b CRs-Fixed: 2279206 --- core/pld/src/pld_usb.c | 46 +++++++++++++++++++++++++++++++++++++++--- 1 file changed, 43 insertions(+), 3 deletions(-) diff --git a/core/pld/src/pld_usb.c b/core/pld/src/pld_usb.c index 4ccb0569c253..7c8e23771546 100644 --- a/core/pld/src/pld_usb.c +++ b/core/pld/src/pld_usb.c @@ -159,16 +159,56 @@ static int pld_usb_reset_resume(struct usb_interface *interface) } #ifdef CONFIG_PLD_USB_CNSS +/** + * pld_usb_reinit() - SSR re-initialize function for USB device + * @interface: Pointer to struct usb_interface + * @id: Pointer to USB device ID + * + * Return: int + */ +static int pld_usb_reinit(struct usb_interface *interface, + const struct usb_device_id *id) +{ + struct pld_context *pld_context; + struct usb_device *pdev = interface_to_usbdev(interface); + + pld_context = pld_get_global_context(); + if (pld_context->ops->reinit) + return pld_context->ops->reinit(&pdev->dev, PLD_BUS_TYPE_USB, + interface, (void *)id); + + return -ENODEV; +} + +/** + * pld_usb_shutdown() - SSR shutdown function for USB device + * @interface: Pointer to struct usb_interface + * + * Return: void + */ +static void pld_usb_shutdown(struct usb_interface *interface) +{ + struct pld_context *pld_context; + struct usb_device *pdev = interface_to_usbdev(interface); + + pld_context = pld_get_global_context(); + if (pld_context->ops->shutdown) + pld_context->ops->shutdown(&pdev->dev, PLD_BUS_TYPE_USB); +} + struct cnss_usb_wlan_driver pld_usb_ops = { .name = "pld_usb_cnss", .id_table = pld_usb_id_table, .probe = pld_usb_probe, - .disconnect = pld_usb_remove, + .remove = pld_usb_remove, + .shutdown = pld_usb_shutdown, + .reinit = pld_usb_reinit, #ifdef CONFIG_PM .suspend = pld_usb_suspend, .resume = pld_usb_resume, .reset_resume = pld_usb_reset_resume, #endif +}; /** * pld_usb_register_driver() - registration routine for wlan usb drive @@ -178,7 +218,7 @@ struct cnss_usb_wlan_driver pld_usb_ops = { int pld_usb_register_driver(void) { pr_info("%s usb_register\n", __func__); - return cnss_wlan_register_driver(&pld_usb_ops); + return cnss_usb_wlan_register_driver(&pld_usb_ops); } /** @@ -188,7 +228,7 @@ int pld_usb_register_driver(void) */ void pld_usb_unregister_driver(void) { - cnss_wlan_register_driver(&pld_usb_ops); + cnss_usb_wlan_unregister_driver(&pld_usb_ops); pr_info("%s usb_deregister done!\n", __func__); }