PnP/ALSA - Manual Resource Setting Updates (2/3)
RFC PATCH 1/1 PnP/ALSA - Manual Resource Setting Updates (2/3)
Hi Jaroslav,
This patch updates the manual resource setting code to allow for partial manual setting of resources as needed by ALSA.
I would appreciate any comments.
Thanks,
Adam
drivers/pnp/manager.c +35 -2
@@ -532,6 +532,39 @@return error; } +static void pnp_process_manual_resources (struct pnp_resource_table * ctab,struct pnp_resource_table * ntab) +{ +int idx; +for (idx =0 ; idx <PNP_MAX_IRQ ; idx++) { +if (ntab->irq_resource[idx].flags &IORESOURCE_AUTO ) +continue ; + ctab->irq_resource[idx].start = ntab->irq_resource[idx].start; + ctab->irq_resource[idx].end = ntab->irq_resource[idx].end; + ctab->irq_resource[idx].flags = ntab->irq_resource[idx].flags; + } +for (idx =0 ; idx <PNP_MAX_DMA ; idx++) { +if (ntab->dma_resource[idx].flags &IORESOURCE_AUTO ) +continue ; + ctab->dma_resource[idx].start = ntab->dma_resource[idx].start; + ctab->dma_resource[idx].end = ntab->dma_resource[idx].end; + ctab->dma_resource[idx].flags = ntab->dma_resource[idx].flags; + } +for (idx =0 ; idx <PNP_MAX_PORT ; idx++) { +if (ntab->port_resource[idx].flags &IORESOURCE_AUTO ) +continue ; + ctab->port_resource[idx].start = ntab->port_resource[idx].start; + ctab->port_resource[idx].end = ntab->port_resource[idx].end; + ctab->port_resource[idx].flags = ntab->port_resource[idx].flags; + } +for (idx =0 ; idx <PNP_MAX_MEM ; idx++) { +if (ntab->irq_resource[idx].flags &IORESOURCE_AUTO ) +continue ; + ctab->irq_resource[idx].start = ntab->mem_resource[idx].start; + ctab->irq_resource[idx].end = ntab->mem_resource[idx].end; + ctab->irq_resource[idx].flags = ntab->mem_resource[idx].flags; + } +} +/** * pnp_manual_config_dev - Disables Auto Config and Manually sets the resource table * @dev: pointer to the desired device
@@ -554,7 +587,7 @@ *bak = dev->res;spin_lock (&pnp_lock); - dev->res = *res; +pnp_process_manual_resources (&dev->res, res);if (!(mode &PNP_CONFIG_FORCE )) {for (i =0 ; i <PNP_MAX_PORT ; i++) {if (pnp_check_port (dev,i))
@@ -681,7 +714,7 @@return -1 ; } dev->active =0 ;/* just in case the protocol doesn't do this */ -pnp_dbg ("the device '%s' has been disabled." , dev->dev.bus_id); +pnp_dbg ("res: the device '%s' has been disabled." , dev->dev.bus_id);return 0 ; }
drivers/pnp/resource.c +4 -4
@@ -558,25 +558,25 @@ table->irq_resource[idx].name =NULL ; table->irq_resource[idx].start =-1 ; table->irq_resource[idx].end =-1 ; - table->irq_resource[idx].flags =0 ; + table->irq_resource[idx].flags =IORESOURCE_AUTO ; }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 =0 ; + table->dma_resource[idx].flags =IORESOURCE_AUTO ; }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 =0 ; + table->port_resource[idx].flags =IORESOURCE_AUTO ; }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 =0 ; + table->mem_resource[idx].flags =IORESOURCE_AUTO ; } }