From 8d6bfdaec7c3ce44969ca0930b84442ff93cd80b Mon Sep 17 00:00:00 2001 From: Robert Jarzmik Date: Fri, 20 Jan 2012 21:17:24 +0100 Subject: usb/gadget: fix poller NPE in early polling The timings of the poller calling have changed, digging out a latent bug in pxa27x udc controller. The polling routine is called before the probe function is called, and the driver internal are not initialized at that time. This triggers a NULL pointer exception. Fix it by moving poller registration after driver probe. Signed-off-by: Robert Jarzmik Signed-off-by: Sascha Hauer --- drivers/usb/gadget/pxa27x_udc.c | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-) diff --git a/drivers/usb/gadget/pxa27x_udc.c b/drivers/usb/gadget/pxa27x_udc.c index d0dbee9824..56525559f6 100644 --- a/drivers/usb/gadget/pxa27x_udc.c +++ b/drivers/usb/gadget/pxa27x_udc.c @@ -1473,6 +1473,14 @@ static struct pxa_udc memory = { } }; +static int pxa27x_udc_poller(struct poller_struct *poller) +{ + return usb_gadget_poll(); +} +static struct poller_struct poller = { + .func = pxa27x_udc_poller +}; + static int __init pxa_udc_probe(struct device_d *dev) { struct pxa_udc *udc = &memory; @@ -1496,6 +1504,8 @@ static int __init pxa_udc_probe(struct device_d *dev) the_controller = udc; udc_init_data(udc); pxa_eps_setup(udc); + poller_register(&poller); + return 0; } @@ -1506,18 +1516,9 @@ static struct driver_d udc_driver = { .probe = pxa_udc_probe, }; -static int pxa27x_udc_poller(struct poller_struct *poller) -{ - return usb_gadget_poll(); -} -static struct poller_struct poller = { - .func = pxa27x_udc_poller -}; - static int __init pxa27x_udc_init(void) { register_driver(&udc_driver); - poller_register(&poller); return 0; } -- cgit v1.2.3