]> err.no Git - linux-2.6/blobdiff - drivers/pnp/isapnp/core.c
ISAPNP: handle independent options following dependent ones
[linux-2.6] / drivers / pnp / isapnp / core.c
index 90718be6646300d703fce2b09e755fb57d86da36..53cc4d6133e6bebe77237ed1e3c912bd1c273cff 100644 (file)
@@ -584,14 +584,14 @@ static int __init isapnp_create_device(struct pnp_card *card,
 {
        int number = 0, skip = 0, priority, compat = 0;
        unsigned char type, tmp[17];
-       struct pnp_option *option;
+       struct pnp_option *option, *option_independent;
        struct pnp_dev *dev;
        u32 eisa_id;
        char id[8];
 
        if ((dev = isapnp_parse_device(card, size, number++)) == NULL)
                return 1;
-       option = pnp_register_independent_option(dev);
+       option_independent = option = pnp_register_independent_option(dev);
        if (!option) {
                kfree(dev);
                return 1;
@@ -613,6 +613,7 @@ static int __init isapnp_create_device(struct pnp_card *card,
                                size = 0;
                                skip = 0;
                                option = pnp_register_independent_option(dev);
+                               option_independent = option;
                                if (!option) {
                                        kfree(dev);
                                        return 1;
@@ -662,6 +663,10 @@ static int __init isapnp_create_device(struct pnp_card *card,
                case _STAG_ENDDEP:
                        if (size != 0)
                                goto __skip;
+                       if (option_independent == option)
+                               dev_warn(&dev->dev, "missing "
+                                        "_STAG_STARTDEP tag\n");
+                       option = option_independent;
                        dev_dbg(&dev->dev, "end dependent options\n");
                        break;
                case _STAG_IOPORT: