diff options
-rw-r--r-- | drivers/dio/dio-driver.c | 9 | ||||
-rw-r--r-- | drivers/net/hplance.c | 2 | ||||
-rw-r--r-- | drivers/serial/8250_hp300.c | 10 | ||||
-rw-r--r-- | drivers/video/hpfb.c | 4 | ||||
-rw-r--r-- | include/linux/dio.h | 32 |
5 files changed, 11 insertions, 46 deletions
diff --git a/drivers/dio/dio-driver.c b/drivers/dio/dio-driver.c index ca8e69d2f64d..e4c48e329367 100644 --- a/drivers/dio/dio-driver.c +++ b/drivers/dio/dio-driver.c | |||
@@ -71,22 +71,17 @@ static int dio_device_probe(struct device *dev) | |||
71 | * @drv: the driver structure to register | 71 | * @drv: the driver structure to register |
72 | * | 72 | * |
73 | * Adds the driver structure to the list of registered drivers | 73 | * Adds the driver structure to the list of registered drivers |
74 | * Returns the number of DIO devices which were claimed by the driver | 74 | * Returns zero or a negative error value. |
75 | * during registration. The driver remains registered even if the | ||
76 | * return value is zero. | ||
77 | */ | 75 | */ |
78 | 76 | ||
79 | int dio_register_driver(struct dio_driver *drv) | 77 | int dio_register_driver(struct dio_driver *drv) |
80 | { | 78 | { |
81 | int count = 0; | ||
82 | |||
83 | /* initialize common driver fields */ | 79 | /* initialize common driver fields */ |
84 | drv->driver.name = drv->name; | 80 | drv->driver.name = drv->name; |
85 | drv->driver.bus = &dio_bus_type; | 81 | drv->driver.bus = &dio_bus_type; |
86 | 82 | ||
87 | /* register with core */ | 83 | /* register with core */ |
88 | count = driver_register(&drv->driver); | 84 | return driver_register(&drv->driver); |
89 | return count ? count : 1; | ||
90 | } | 85 | } |
91 | 86 | ||
92 | 87 | ||
diff --git a/drivers/net/hplance.c b/drivers/net/hplance.c index d8410634bcaf..685693464605 100644 --- a/drivers/net/hplance.c +++ b/drivers/net/hplance.c | |||
@@ -217,7 +217,7 @@ static int hplance_close(struct net_device *dev) | |||
217 | 217 | ||
218 | int __init hplance_init_module(void) | 218 | int __init hplance_init_module(void) |
219 | { | 219 | { |
220 | return dio_module_init(&hplance_driver); | 220 | return dio_register_driver(&hplance_driver); |
221 | } | 221 | } |
222 | 222 | ||
223 | void __exit hplance_cleanup_module(void) | 223 | void __exit hplance_cleanup_module(void) |
diff --git a/drivers/serial/8250_hp300.c b/drivers/serial/8250_hp300.c index 4315afe9c080..53e81a44c1a3 100644 --- a/drivers/serial/8250_hp300.c +++ b/drivers/serial/8250_hp300.c | |||
@@ -55,6 +55,8 @@ static struct dio_driver hpdca_driver = { | |||
55 | 55 | ||
56 | #endif | 56 | #endif |
57 | 57 | ||
58 | static unsigned int num_ports; | ||
59 | |||
58 | extern int hp300_uart_scode; | 60 | extern int hp300_uart_scode; |
59 | 61 | ||
60 | /* Offset to UART registers from base of DCA */ | 62 | /* Offset to UART registers from base of DCA */ |
@@ -199,6 +201,8 @@ static int __devinit hpdca_init_one(struct dio_dev *d, | |||
199 | out_8(d->resource.start + DIO_VIRADDRBASE + DCA_ID, 0xff); | 201 | out_8(d->resource.start + DIO_VIRADDRBASE + DCA_ID, 0xff); |
200 | udelay(100); | 202 | udelay(100); |
201 | 203 | ||
204 | num_ports++; | ||
205 | |||
202 | return 0; | 206 | return 0; |
203 | } | 207 | } |
204 | #endif | 208 | #endif |
@@ -206,7 +210,6 @@ static int __devinit hpdca_init_one(struct dio_dev *d, | |||
206 | static int __init hp300_8250_init(void) | 210 | static int __init hp300_8250_init(void) |
207 | { | 211 | { |
208 | static int called = 0; | 212 | static int called = 0; |
209 | int num_ports; | ||
210 | #ifdef CONFIG_HPAPCI | 213 | #ifdef CONFIG_HPAPCI |
211 | int line; | 214 | int line; |
212 | unsigned long base; | 215 | unsigned long base; |
@@ -221,11 +224,8 @@ static int __init hp300_8250_init(void) | |||
221 | if (!MACH_IS_HP300) | 224 | if (!MACH_IS_HP300) |
222 | return -ENODEV; | 225 | return -ENODEV; |
223 | 226 | ||
224 | num_ports = 0; | ||
225 | |||
226 | #ifdef CONFIG_HPDCA | 227 | #ifdef CONFIG_HPDCA |
227 | if (dio_module_init(&hpdca_driver) == 0) | 228 | dio_register_driver(&hpdca_driver); |
228 | num_ports++; | ||
229 | #endif | 229 | #endif |
230 | #ifdef CONFIG_HPAPCI | 230 | #ifdef CONFIG_HPAPCI |
231 | if (hp300_model < HP_400) { | 231 | if (hp300_model < HP_400) { |
diff --git a/drivers/video/hpfb.c b/drivers/video/hpfb.c index bebdac59d231..abd920a663a0 100644 --- a/drivers/video/hpfb.c +++ b/drivers/video/hpfb.c | |||
@@ -386,7 +386,9 @@ int __init hpfb_init(void) | |||
386 | if (fb_get_options("hpfb", NULL)) | 386 | if (fb_get_options("hpfb", NULL)) |
387 | return -ENODEV; | 387 | return -ENODEV; |
388 | 388 | ||
389 | dio_module_init(&hpfb_driver); | 389 | err = dio_register_driver(&hpfb_driver); |
390 | if (err) | ||
391 | return err; | ||
390 | 392 | ||
391 | fs = get_fs(); | 393 | fs = get_fs(); |
392 | set_fs(KERNEL_DS); | 394 | set_fs(KERNEL_DS); |
diff --git a/include/linux/dio.h b/include/linux/dio.h index fae9395fcf4f..1e65ebc2a3db 100644 --- a/include/linux/dio.h +++ b/include/linux/dio.h | |||
@@ -276,37 +276,5 @@ static inline void dio_set_drvdata (struct dio_dev *d, void *data) | |||
276 | dev_set_drvdata(&d->dev, data); | 276 | dev_set_drvdata(&d->dev, data); |
277 | } | 277 | } |
278 | 278 | ||
279 | /* | ||
280 | * A helper function which helps ensure correct dio_driver | ||
281 | * setup and cleanup for commonly-encountered hotplug/modular cases | ||
282 | * | ||
283 | * This MUST stay in a header, as it checks for -DMODULE | ||
284 | */ | ||
285 | static inline int dio_module_init(struct dio_driver *drv) | ||
286 | { | ||
287 | int rc = dio_register_driver(drv); | ||
288 | |||
289 | if (rc > 0) | ||
290 | return 0; | ||
291 | |||
292 | /* iff CONFIG_HOTPLUG and built into kernel, we should | ||
293 | * leave the driver around for future hotplug events. | ||
294 | * For the module case, a hotplug daemon of some sort | ||
295 | * should load a module in response to an insert event. */ | ||
296 | #if defined(CONFIG_HOTPLUG) && !defined(MODULE) | ||
297 | if (rc == 0) | ||
298 | return 0; | ||
299 | #else | ||
300 | if (rc == 0) | ||
301 | rc = -ENODEV; | ||
302 | #endif | ||
303 | |||
304 | /* if we get here, we need to clean up DIO driver instance | ||
305 | * and return some sort of error */ | ||
306 | dio_unregister_driver(drv); | ||
307 | |||
308 | return rc; | ||
309 | } | ||
310 | |||
311 | #endif /* __KERNEL__ */ | 279 | #endif /* __KERNEL__ */ |
312 | #endif /* ndef _LINUX_DIO_H */ | 280 | #endif /* ndef _LINUX_DIO_H */ |