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@xxxxxxxxx> --- 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 -- To unsubscribe from this list: send the line "unsubscribe linux-usb" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html