lkml.org 
[lkml]   [2006]   [Mar]   [22]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 10/12] PNP: adjust pnp_register_card_driver() signature
    Date
    Remove the assumption that pnp_register_card_driver() returns the
    number of devices claimed. And fix some __init/__devinit issues.

    Signed-off-by: Bjorn Helgaas <bjorn.helgaas@hp.com>

    Index: work-mm6/sound/oss/sb_card.c
    ===================================================================
    --- work-mm6.orig/sound/oss/sb_card.c 2006-03-22 11:24:41.000000000 -0700
    +++ work-mm6/sound/oss/sb_card.c 2006-03-22 12:18:20.000000000 -0700
    @@ -52,6 +52,7 @@
    static struct sb_card_config *legacy = NULL;

    #ifdef CONFIG_PNP
    +static int pnp_registered;
    static int __initdata pnp = 1;
    /*
    static int __initdata uart401 = 0;
    @@ -133,7 +134,7 @@
    }

    /* Register legacy card with OSS subsystem */
    -static int sb_init_legacy(void)
    +static int __init sb_init_legacy(void)
    {
    struct sb_module_options sbmo = {0};

    @@ -234,6 +235,8 @@
    }
    }

    +static unsigned int sb_pnp_devices;
    +
    /* Probe callback function for the PnP API */
    static int sb_pnp_probe(struct pnp_card_link *card, const struct pnp_card_device_id *card_id)
    {
    @@ -264,6 +267,7 @@
    scc->conf.dma, scc->conf.dma2);

    pnp_set_card_drvdata(card, scc);
    + sb_pnp_devices++;

    return sb_register_oss(scc, &sbmo);
    }
    @@ -289,6 +293,14 @@
    MODULE_DEVICE_TABLE(pnp_card, sb_pnp_card_table);
    #endif /* CONFIG_PNP */

    +static void __init_or_module sb_unregister_all(void)
    +{
    +#ifdef CONFIG_PNP
    + if (pnp_registered)
    + pnp_unregister_card_driver(&sb_pnp_driver);
    +#endif
    +}
    +
    static int __init sb_init(void)
    {
    int lres = 0;
    @@ -307,17 +319,18 @@

    #ifdef CONFIG_PNP
    if(pnp) {
    - pres = pnp_register_card_driver(&sb_pnp_driver);
    + int err = pnp_register_card_driver(&sb_pnp_driver);
    + if (!err)
    + pnp_registered = 1;
    + pres = sb_pnp_devices;
    }
    #endif
    printk(KERN_INFO "sb: Init: Done\n");

    /* If either PnP or Legacy registered a card then return
    * success */
    - if (pres <= 0 && lres <= 0) {
    -#ifdef CONFIG_PNP
    - pnp_unregister_card_driver(&sb_pnp_driver);
    -#endif
    + if (pres == 0 && lres <= 0) {
    + sb_unregister_all();
    return -ENODEV;
    }
    return 0;
    @@ -333,9 +346,7 @@
    sb_unload(legacy);
    }

    -#ifdef CONFIG_PNP
    - pnp_unregister_card_driver(&sb_pnp_driver);
    -#endif
    + sb_unregister_all();

    vfree(smw_free);
    smw_free = NULL;
    -
    To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
    the body of a message to majordomo@vger.kernel.org
    More majordomo info at http://vger.kernel.org/majordomo-info.html
    Please read the FAQ at http://www.tux.org/lkml/
    \
     
     \ /
      Last update: 2006-03-22 23:19    [W:0.050 / U:29.864 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site