diff options
author | Russell King <rmk@dyn-67.arm.linux.org.uk> | 2006-01-18 04:54:29 -0500 |
---|---|---|
committer | Russell King <rmk+kernel@arm.linux.org.uk> | 2006-01-18 04:54:29 -0500 |
commit | bc965a7f43d3fc37584f9c16c6d7a84a911a9d9c (patch) | |
tree | 9d7ac6b356c9a884941b374555cebb5d3f465d61 /drivers/serial/8250.c | |
parent | 7eb9b2f56c9812d03ac63031869bcc42151067b1 (diff) |
[SERIAL] Fix serial8250 driver initialisation ordering
Commit 7493a314cb83797ce612a577475aacaedc553fed changed the ordering
of the registration of the platform device driver vs the 8250 drivers
internal initialisation. This led to the probe function being called
before the driver had finished its internal initialisation, causing
mayhem. Revert the ordering change.
Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
Diffstat (limited to 'drivers/serial/8250.c')
-rw-r--r-- | drivers/serial/8250.c | 13 |
1 files changed, 5 insertions, 8 deletions
diff --git a/drivers/serial/8250.c b/drivers/serial/8250.c index d9ce8c54941..bc36edff205 100644 --- a/drivers/serial/8250.c +++ b/drivers/serial/8250.c | |||
@@ -2595,15 +2595,11 @@ static int __init serial8250_init(void) | |||
2595 | if (ret) | 2595 | if (ret) |
2596 | goto out; | 2596 | goto out; |
2597 | 2597 | ||
2598 | ret = platform_driver_register(&serial8250_isa_driver); | ||
2599 | if (ret) | ||
2600 | goto unreg_uart_drv; | ||
2601 | |||
2602 | serial8250_isa_devs = platform_device_alloc("serial8250", | 2598 | serial8250_isa_devs = platform_device_alloc("serial8250", |
2603 | PLAT8250_DEV_LEGACY); | 2599 | PLAT8250_DEV_LEGACY); |
2604 | if (!serial8250_isa_devs) { | 2600 | if (!serial8250_isa_devs) { |
2605 | ret = -ENOMEM; | 2601 | ret = -ENOMEM; |
2606 | goto unreg_plat_drv; | 2602 | goto unreg_uart_drv; |
2607 | } | 2603 | } |
2608 | 2604 | ||
2609 | ret = platform_device_add(serial8250_isa_devs); | 2605 | ret = platform_device_add(serial8250_isa_devs); |
@@ -2612,12 +2608,13 @@ static int __init serial8250_init(void) | |||
2612 | 2608 | ||
2613 | serial8250_register_ports(&serial8250_reg, &serial8250_isa_devs->dev); | 2609 | serial8250_register_ports(&serial8250_reg, &serial8250_isa_devs->dev); |
2614 | 2610 | ||
2615 | goto out; | 2611 | ret = platform_driver_register(&serial8250_isa_driver); |
2612 | if (ret == 0) | ||
2613 | goto out; | ||
2616 | 2614 | ||
2615 | platform_device_del(serial8250_isa_devs); | ||
2617 | put_dev: | 2616 | put_dev: |
2618 | platform_device_put(serial8250_isa_devs); | 2617 | platform_device_put(serial8250_isa_devs); |
2619 | unreg_plat_drv: | ||
2620 | platform_driver_unregister(&serial8250_isa_driver); | ||
2621 | unreg_uart_drv: | 2618 | unreg_uart_drv: |
2622 | uart_unregister_driver(&serial8250_reg); | 2619 | uart_unregister_driver(&serial8250_reg); |
2623 | out: | 2620 | out: |