s3c-hsudc: add a remove function
From: Heiko Stuebner <heiko@...> Date: Sun, 11 Dec 2011 16:11:10 +0100
Commit-Message
As the driver is also buildable as a module it should need a cleanup function for the removal of the module. Signed-off-by: Heiko Stuebner <heiko@...>
Patch-Comment
drivers/usb/gadget/s3c-hsudc.c | 25 +++++++++++++++++++++++++ 1 files changed, 25 insertions(+), 0 deletions(-)
Statistics
- 25 lines added
- 0 lines removed
Changes
------------------------ drivers/usb/gadget/s3c-hsudc.c ------------------------
index 3e5673d..7cb0850 100644
@@ -1370,12 +1370,37 @@ err_res:
return ret;
}
+static int __devexit s3c_hsudc_remove(struct platform_device *pdev)
+{
+ struct s3c_hsudc *hsudc = the_controller;
+
+ usb_del_gadget_udc(&hsudc->gadget);
+
+ clk_disable(hsudc->uclk);
+ clk_put(hsudc->uclk);
+
+ free_irq(hsudc->irq, hsudc);
+
+ iounmap(hsudc->regs);
+
+ release_resource(hsudc->mem_rsrc);
+ kfree(hsudc->mem_rsrc);
+
+ if (hsudc->transceiver)
+ otg_put_transceiver(hsudc->transceiver);
+
+ the_controller = NULL;
+ kfree(hsudc);
+ return 0;
+}
+
static struct platform_driver s3c_hsudc_driver = {
.driver = {
.owner = THIS_MODULE,
.name = "s3c-hsudc",
},
.probe = s3c_hsudc_probe,
+ .remove = __devexit_p(s3c_hsudc_remove),
};
module_platform_driver(s3c_hsudc_driver);