[PATCH 3/7] s3c-hsudc: add a remove function
Heiko Stübner
heiko at sntech.de
Sat Dec 17 14:26:33 EST 2011
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 at sntech.de>
---
drivers/usb/gadget/s3c-hsudc.c | 25 +++++++++++++++++++++++++
1 files changed, 25 insertions(+), 0 deletions(-)
diff --git a/drivers/usb/gadget/s3c-hsudc.c b/drivers/usb/gadget/s3c-hsudc.c
index 3e5673d..7cb0850 100644
--- a/drivers/usb/gadget/s3c-hsudc.c
+++ b/drivers/usb/gadget/s3c-hsudc.c
@@ -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);
--
1.7.2.3
More information about the linux-arm-kernel
mailing list