lkml.org 
[lkml]   [2009]   [Jul]   [5]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH] RTC: mark if rtc-cmos drivers were successfully registered.
    Date
    rtc-cmos has two drivers, one PNP and one platform. When PNP has not
    succeeded probing, platform is registered. However, it tries to
    unregister both drivers unconditionally, instead of only unregistering
    those that were successfully registered. Fix that with a boolean
    variable for each driver indicating whether registering was successful.

    Signed-off-by: Thadeu Lima de Souza Cascardo <cascardo@holoscopio.com>
    ---
    drivers/rtc/rtc-cmos.c | 23 ++++++++++++++++++-----
    1 files changed, 18 insertions(+), 5 deletions(-)

    diff --git a/drivers/rtc/rtc-cmos.c b/drivers/rtc/rtc-cmos.c
    index 23e10b6..f7a4701 100644
    --- a/drivers/rtc/rtc-cmos.c
    +++ b/drivers/rtc/rtc-cmos.c
    @@ -1174,23 +1174,34 @@ static struct platform_driver cmos_platform_driver = {
    }
    };

    +#ifdef CONFIG_PNP
    +static bool pnp_driver_registered;
    +#endif
    +static bool platform_driver_registered;
    +
    static int __init cmos_init(void)
    {
    int retval = 0;

    #ifdef CONFIG_PNP
    - pnp_register_driver(&cmos_pnp_driver);
    + retval = pnp_register_driver(&cmos_pnp_driver);
    + if (retval == 0)
    + pnp_driver_registered = true;
    #endif

    - if (!cmos_rtc.dev)
    + if (!cmos_rtc.dev) {
    retval = platform_driver_probe(&cmos_platform_driver,
    cmos_platform_probe);
    + if (retval == 0)
    + platform_driver_registered = true;
    + }

    if (retval == 0)
    return 0;

    #ifdef CONFIG_PNP
    - pnp_unregister_driver(&cmos_pnp_driver);
    + if (pnp_driver_registered)
    + pnp_unregister_driver(&cmos_pnp_driver);
    #endif
    return retval;
    }
    @@ -1199,9 +1210,11 @@ module_init(cmos_init);
    static void __exit cmos_exit(void)
    {
    #ifdef CONFIG_PNP
    - pnp_unregister_driver(&cmos_pnp_driver);
    + if (pnp_driver_registered)
    + pnp_unregister_driver(&cmos_pnp_driver);
    #endif
    - platform_driver_unregister(&cmos_platform_driver);
    + if (platform_driver_registered)
    + platform_driver_unregister(&cmos_platform_driver);
    }
    module_exit(cmos_exit);

    --
    1.6.3


    \
     
     \ /
      Last update: 2009-07-05 06:11    [W:6.949 / U:0.292 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site