PNP: factor pnp_init_resource_table() and pnp_clean_resource_table()
authorBjorn Helgaas <bjorn.helgaas@hp.com>
Mon, 28 Apr 2008 22:34:13 +0000 (16:34 -0600)
committerLen Brown <len.brown@intel.com>
Tue, 29 Apr 2008 07:22:23 +0000 (03:22 -0400)
Move the common part of pnp_init_resource_table() and
pnp_clean_resource_table() into a new pnp_init_resource().
This reduces a little code duplication and will be
useful later to initialize an individual resource.

Signed-off-by: Bjorn Helgaas <bjorn.helgaas@hp.com>
Signed-off-by: Len Brown <len.brown@intel.com>
drivers/pnp/base.h
drivers/pnp/manager.c

index 0c5cb1d58c6ceee495ae7904e945a5168bbe192b..eb43fc6bff1114df1328ebccfa4087f18f08cc37 100644 (file)
@@ -18,3 +18,5 @@ int pnp_check_irq(struct pnp_dev * dev, int idx);
 int pnp_check_dma(struct pnp_dev * dev, int idx);
 
 void dbg_pnp_show_resources(struct pnp_dev *dev, char *desc);
+
+void pnp_init_resource(struct resource *res);
index d407c07b5b9d372031bee70a3ce6d351d1d06387..8267efd679a1fd06e9d86c50d0ecea3a02c20b28 100644 (file)
@@ -234,42 +234,52 @@ static void pnp_assign_dma(struct pnp_dev *dev, struct pnp_dma *rule, int idx)
        dev_dbg(&dev->dev, "  disable dma %d\n", idx);
 }
 
+void pnp_init_resource(struct resource *res)
+{
+       unsigned long type;
+
+       type = res->flags & (IORESOURCE_IO  | IORESOURCE_MEM |
+                            IORESOURCE_IRQ | IORESOURCE_DMA);
+
+       res->name = NULL;
+       res->flags = type | IORESOURCE_AUTO | IORESOURCE_UNSET;
+       if (type == IORESOURCE_IRQ || type == IORESOURCE_DMA) {
+               res->start = -1;
+               res->end = -1;
+       } else {
+               res->start = 0;
+               res->end = 0;
+       }
+}
+
 /**
  * pnp_init_resources - Resets a resource table to default values.
  * @table: pointer to the desired resource table
  */
 void pnp_init_resources(struct pnp_dev *dev)
 {
-       struct pnp_resource_table *table = &dev->res;
+       struct resource *res;
        int idx;
 
        for (idx = 0; idx < PNP_MAX_IRQ; idx++) {
-               table->irq_resource[idx].name = NULL;
-               table->irq_resource[idx].start = -1;
-               table->irq_resource[idx].end = -1;
-               table->irq_resource[idx].flags =
-                   IORESOURCE_IRQ | IORESOURCE_AUTO | IORESOURCE_UNSET;
+               res = &dev->res.irq_resource[idx];
+               res->flags = IORESOURCE_IRQ;
+               pnp_init_resource(res);
        }
        for (idx = 0; idx < PNP_MAX_DMA; idx++) {
-               table->dma_resource[idx].name = NULL;
-               table->dma_resource[idx].start = -1;
-               table->dma_resource[idx].end = -1;
-               table->dma_resource[idx].flags =
-                   IORESOURCE_DMA | IORESOURCE_AUTO | IORESOURCE_UNSET;
+               res = &dev->res.dma_resource[idx];
+               res->flags = IORESOURCE_DMA;
+               pnp_init_resource(res);
        }
        for (idx = 0; idx < PNP_MAX_PORT; idx++) {
-               table->port_resource[idx].name = NULL;
-               table->port_resource[idx].start = 0;
-               table->port_resource[idx].end = 0;
-               table->port_resource[idx].flags =
-                   IORESOURCE_IO | IORESOURCE_AUTO | IORESOURCE_UNSET;
+               res = &dev->res.port_resource[idx];
+               res->flags = IORESOURCE_IO;
+               pnp_init_resource(res);
        }
        for (idx = 0; idx < PNP_MAX_MEM; idx++) {
-               table->mem_resource[idx].name = NULL;
-               table->mem_resource[idx].start = 0;
-               table->mem_resource[idx].end = 0;
-               table->mem_resource[idx].flags =
-                   IORESOURCE_MEM | IORESOURCE_AUTO | IORESOURCE_UNSET;
+               res = &dev->res.mem_resource[idx];
+               res->flags = IORESOURCE_MEM;
+               pnp_init_resource(res);
        }
 }
 
@@ -279,40 +289,36 @@ void pnp_init_resources(struct pnp_dev *dev)
  */
 static void pnp_clean_resource_table(struct pnp_dev *dev)
 {
-       struct pnp_resource_table *res = &dev->res;
+       struct resource *res;
        int idx;
 
        for (idx = 0; idx < PNP_MAX_IRQ; idx++) {
-               if (!(res->irq_resource[idx].flags & IORESOURCE_AUTO))
-                       continue;
-               res->irq_resource[idx].start = -1;
-               res->irq_resource[idx].end = -1;
-               res->irq_resource[idx].flags =
-                   IORESOURCE_IRQ | IORESOURCE_AUTO | IORESOURCE_UNSET;
+               res = &dev->res.irq_resource[idx];
+               if (res->flags & IORESOURCE_AUTO) {
+                       res->flags = IORESOURCE_IRQ;
+                       pnp_init_resource(res);
+               }
        }
        for (idx = 0; idx < PNP_MAX_DMA; idx++) {
-               if (!(res->dma_resource[idx].flags & IORESOURCE_AUTO))
-                       continue;
-               res->dma_resource[idx].start = -1;
-               res->dma_resource[idx].end = -1;
-               res->dma_resource[idx].flags =
-                   IORESOURCE_DMA | IORESOURCE_AUTO | IORESOURCE_UNSET;
+               res = &dev->res.dma_resource[idx];
+               if (res->flags & IORESOURCE_AUTO) {
+                       res->flags = IORESOURCE_DMA;
+                       pnp_init_resource(res);
+               }
        }
        for (idx = 0; idx < PNP_MAX_PORT; idx++) {
-               if (!(res->port_resource[idx].flags & IORESOURCE_AUTO))
-                       continue;
-               res->port_resource[idx].start = 0;
-               res->port_resource[idx].end = 0;
-               res->port_resource[idx].flags =
-                   IORESOURCE_IO | IORESOURCE_AUTO | IORESOURCE_UNSET;
+               res = &dev->res.port_resource[idx];
+               if (res->flags & IORESOURCE_AUTO) {
+                       res->flags = IORESOURCE_IO;
+                       pnp_init_resource(res);
+               }
        }
        for (idx = 0; idx < PNP_MAX_MEM; idx++) {
-               if (!(res->mem_resource[idx].flags & IORESOURCE_AUTO))
-                       continue;
-               res->mem_resource[idx].start = 0;
-               res->mem_resource[idx].end = 0;
-               res->mem_resource[idx].flags =
-                   IORESOURCE_MEM | IORESOURCE_AUTO | IORESOURCE_UNSET;
+               res = &dev->res.mem_resource[idx];
+               if (res->flags & IORESOURCE_AUTO) {
+                       res->flags = IORESOURCE_MEM;
+                       pnp_init_resource(res);
+               }
        }
 }