diff options
| -rw-r--r-- | drivers/pnp/manager.c | 41 |
1 files changed, 22 insertions, 19 deletions
diff --git a/drivers/pnp/manager.c b/drivers/pnp/manager.c index c706dd2ddb02..1adc83fdabb6 100644 --- a/drivers/pnp/manager.c +++ b/drivers/pnp/manager.c | |||
| @@ -26,7 +26,7 @@ static int pnp_assign_port(struct pnp_dev *dev, struct pnp_port *rule, int idx) | |||
| 26 | dev_dbg(&dev->dev, " io %d already set to %#llx-%#llx " | 26 | dev_dbg(&dev->dev, " io %d already set to %#llx-%#llx " |
| 27 | "flags %#lx\n", idx, (unsigned long long) res->start, | 27 | "flags %#lx\n", idx, (unsigned long long) res->start, |
| 28 | (unsigned long long) res->end, res->flags); | 28 | (unsigned long long) res->end, res->flags); |
| 29 | return 1; | 29 | return 0; |
| 30 | } | 30 | } |
| 31 | 31 | ||
| 32 | res = &local_res; | 32 | res = &local_res; |
| @@ -51,13 +51,13 @@ static int pnp_assign_port(struct pnp_dev *dev, struct pnp_port *rule, int idx) | |||
| 51 | "(min %#llx max %#llx)\n", idx, | 51 | "(min %#llx max %#llx)\n", idx, |
| 52 | (unsigned long long) rule->min, | 52 | (unsigned long long) rule->min, |
| 53 | (unsigned long long) rule->max); | 53 | (unsigned long long) rule->max); |
| 54 | return 0; | 54 | return -EBUSY; |
| 55 | } | 55 | } |
| 56 | } | 56 | } |
| 57 | 57 | ||
| 58 | __add: | 58 | __add: |
| 59 | pnp_add_io_resource(dev, res->start, res->end, res->flags); | 59 | pnp_add_io_resource(dev, res->start, res->end, res->flags); |
| 60 | return 1; | 60 | return 0; |
| 61 | } | 61 | } |
| 62 | 62 | ||
| 63 | static int pnp_assign_mem(struct pnp_dev *dev, struct pnp_mem *rule, int idx) | 63 | static int pnp_assign_mem(struct pnp_dev *dev, struct pnp_mem *rule, int idx) |
| @@ -69,7 +69,7 @@ static int pnp_assign_mem(struct pnp_dev *dev, struct pnp_mem *rule, int idx) | |||
| 69 | dev_dbg(&dev->dev, " mem %d already set to %#llx-%#llx " | 69 | dev_dbg(&dev->dev, " mem %d already set to %#llx-%#llx " |
| 70 | "flags %#lx\n", idx, (unsigned long long) res->start, | 70 | "flags %#lx\n", idx, (unsigned long long) res->start, |
| 71 | (unsigned long long) res->end, res->flags); | 71 | (unsigned long long) res->end, res->flags); |
| 72 | return 1; | 72 | return 0; |
| 73 | } | 73 | } |
| 74 | 74 | ||
| 75 | res = &local_res; | 75 | res = &local_res; |
| @@ -103,13 +103,13 @@ static int pnp_assign_mem(struct pnp_dev *dev, struct pnp_mem *rule, int idx) | |||
| 103 | "(min %#llx max %#llx)\n", idx, | 103 | "(min %#llx max %#llx)\n", idx, |
| 104 | (unsigned long long) rule->min, | 104 | (unsigned long long) rule->min, |
| 105 | (unsigned long long) rule->max); | 105 | (unsigned long long) rule->max); |
| 106 | return 0; | 106 | return -EBUSY; |
| 107 | } | 107 | } |
| 108 | } | 108 | } |
| 109 | 109 | ||
| 110 | __add: | 110 | __add: |
| 111 | pnp_add_mem_resource(dev, res->start, res->end, res->flags); | 111 | pnp_add_mem_resource(dev, res->start, res->end, res->flags); |
| 112 | return 1; | 112 | return 0; |
| 113 | } | 113 | } |
| 114 | 114 | ||
| 115 | static int pnp_assign_irq(struct pnp_dev *dev, struct pnp_irq *rule, int idx) | 115 | static int pnp_assign_irq(struct pnp_dev *dev, struct pnp_irq *rule, int idx) |
| @@ -126,7 +126,7 @@ static int pnp_assign_irq(struct pnp_dev *dev, struct pnp_irq *rule, int idx) | |||
| 126 | if (res) { | 126 | if (res) { |
| 127 | dev_dbg(&dev->dev, " irq %d already set to %d flags %#lx\n", | 127 | dev_dbg(&dev->dev, " irq %d already set to %d flags %#lx\n", |
| 128 | idx, (int) res->start, res->flags); | 128 | idx, (int) res->start, res->flags); |
| 129 | return 1; | 129 | return 0; |
| 130 | } | 130 | } |
| 131 | 131 | ||
| 132 | res = &local_res; | 132 | res = &local_res; |
| @@ -154,14 +154,14 @@ static int pnp_assign_irq(struct pnp_dev *dev, struct pnp_irq *rule, int idx) | |||
| 154 | } | 154 | } |
| 155 | } | 155 | } |
| 156 | dev_dbg(&dev->dev, " couldn't assign irq %d\n", idx); | 156 | dev_dbg(&dev->dev, " couldn't assign irq %d\n", idx); |
| 157 | return 0; | 157 | return -EBUSY; |
| 158 | 158 | ||
| 159 | __add: | 159 | __add: |
| 160 | pnp_add_irq_resource(dev, res->start, res->flags); | 160 | pnp_add_irq_resource(dev, res->start, res->flags); |
| 161 | return 1; | 161 | return 0; |
| 162 | } | 162 | } |
| 163 | 163 | ||
| 164 | static void pnp_assign_dma(struct pnp_dev *dev, struct pnp_dma *rule, int idx) | 164 | static int pnp_assign_dma(struct pnp_dev *dev, struct pnp_dma *rule, int idx) |
| 165 | { | 165 | { |
| 166 | struct resource *res, local_res; | 166 | struct resource *res, local_res; |
| 167 | int i; | 167 | int i; |
| @@ -175,7 +175,7 @@ static void pnp_assign_dma(struct pnp_dev *dev, struct pnp_dma *rule, int idx) | |||
| 175 | if (res) { | 175 | if (res) { |
| 176 | dev_dbg(&dev->dev, " dma %d already set to %d flags %#lx\n", | 176 | dev_dbg(&dev->dev, " dma %d already set to %d flags %#lx\n", |
| 177 | idx, (int) res->start, res->flags); | 177 | idx, (int) res->start, res->flags); |
| 178 | return; | 178 | return 0; |
| 179 | } | 179 | } |
| 180 | 180 | ||
| 181 | res = &local_res; | 181 | res = &local_res; |
| @@ -198,6 +198,7 @@ static void pnp_assign_dma(struct pnp_dev *dev, struct pnp_dma *rule, int idx) | |||
| 198 | 198 | ||
| 199 | __add: | 199 | __add: |
| 200 | pnp_add_dma_resource(dev, res->start, res->flags); | 200 | pnp_add_dma_resource(dev, res->start, res->flags); |
| 201 | return 0; | ||
| 201 | } | 202 | } |
| 202 | 203 | ||
| 203 | void pnp_init_resources(struct pnp_dev *dev) | 204 | void pnp_init_resources(struct pnp_dev *dev) |
| @@ -243,25 +244,26 @@ static int pnp_assign_resources(struct pnp_dev *dev, int depnum) | |||
| 243 | irq = dev->independent->irq; | 244 | irq = dev->independent->irq; |
| 244 | dma = dev->independent->dma; | 245 | dma = dev->independent->dma; |
| 245 | while (port) { | 246 | while (port) { |
| 246 | if (!pnp_assign_port(dev, port, nport)) | 247 | if (pnp_assign_port(dev, port, nport) < 0) |
| 247 | goto fail; | 248 | goto fail; |
| 248 | nport++; | 249 | nport++; |
| 249 | port = port->next; | 250 | port = port->next; |
| 250 | } | 251 | } |
| 251 | while (mem) { | 252 | while (mem) { |
| 252 | if (!pnp_assign_mem(dev, mem, nmem)) | 253 | if (pnp_assign_mem(dev, mem, nmem) < 0) |
| 253 | goto fail; | 254 | goto fail; |
| 254 | nmem++; | 255 | nmem++; |
| 255 | mem = mem->next; | 256 | mem = mem->next; |
| 256 | } | 257 | } |
| 257 | while (irq) { | 258 | while (irq) { |
| 258 | if (!pnp_assign_irq(dev, irq, nirq)) | 259 | if (pnp_assign_irq(dev, irq, nirq) < 0) |
| 259 | goto fail; | 260 | goto fail; |
| 260 | nirq++; | 261 | nirq++; |
| 261 | irq = irq->next; | 262 | irq = irq->next; |
| 262 | } | 263 | } |
| 263 | while (dma) { | 264 | while (dma) { |
| 264 | pnp_assign_dma(dev, dma, ndma); | 265 | if (pnp_assign_dma(dev, dma, ndma) < 0) |
| 266 | goto fail; | ||
| 265 | ndma++; | 267 | ndma++; |
| 266 | dma = dma->next; | 268 | dma = dma->next; |
| 267 | } | 269 | } |
| @@ -281,25 +283,26 @@ static int pnp_assign_resources(struct pnp_dev *dev, int depnum) | |||
| 281 | irq = dep->irq; | 283 | irq = dep->irq; |
| 282 | dma = dep->dma; | 284 | dma = dep->dma; |
| 283 | while (port) { | 285 | while (port) { |
| 284 | if (!pnp_assign_port(dev, port, nport)) | 286 | if (pnp_assign_port(dev, port, nport) < 0) |
| 285 | goto fail; | 287 | goto fail; |
| 286 | nport++; | 288 | nport++; |
| 287 | port = port->next; | 289 | port = port->next; |
| 288 | } | 290 | } |
| 289 | while (mem) { | 291 | while (mem) { |
| 290 | if (!pnp_assign_mem(dev, mem, nmem)) | 292 | if (pnp_assign_mem(dev, mem, nmem) < 0) |
| 291 | goto fail; | 293 | goto fail; |
| 292 | nmem++; | 294 | nmem++; |
| 293 | mem = mem->next; | 295 | mem = mem->next; |
| 294 | } | 296 | } |
| 295 | while (irq) { | 297 | while (irq) { |
| 296 | if (!pnp_assign_irq(dev, irq, nirq)) | 298 | if (pnp_assign_irq(dev, irq, nirq) < 0) |
| 297 | goto fail; | 299 | goto fail; |
| 298 | nirq++; | 300 | nirq++; |
| 299 | irq = irq->next; | 301 | irq = irq->next; |
| 300 | } | 302 | } |
| 301 | while (dma) { | 303 | while (dma) { |
| 302 | pnp_assign_dma(dev, dma, ndma); | 304 | if (pnp_assign_dma(dev, dma, ndma) < 0) |
| 305 | goto fail; | ||
| 303 | ndma++; | 306 | ndma++; |
| 304 | dma = dma->next; | 307 | dma = dma->next; |
| 305 | } | 308 | } |
