Commit 37538928 authored by Christoph Schulz's avatar Christoph Schulz Committed by Jaroslav Kysela

[ALSA] cs4236-irq-handling-fix.patch

CS4236+ driver
Background: The card/chipset supports an external MIDI interrupt.  By
default, this interrupt isn't used (because the isapnp mechanism chooses a
configuration without an assigned interrupt).  If the user wishes to
explicitly select an interrupt via the mpu_irq parameter for such a
configured device, it doesn't work: The driver always shows:

isapnp MPU: port=0x330, irq=-1

(note the 'irq=-1')

Problem: The driver only allows to set the irq if pnp_irq_valid returns
true for this particular pnp device.  This, however, is only true if an
interrupt has already been assigned (pnp_valid_irq returns true if the flag
IORESOURCE_IRQ is set and IORESOURCE_UNSET is not set).  If no interrupt
has been assigned so far, IORESOURCE_UNSET is set and pnp_irq_valid returns
false, thereby inhibiting the selection of a valid irq.

Solution: Don't check for a valid (= already assigned) irq at the point of
calling pnp_resource_change.

Tested successfully on Linux 2.6.11.
Signed-off-by: default avatarAndrew Morton <akpm@osdl.org>
Signed-off-by: default avatarJaroslav Kysela <perex@suse.cz>
parent 5ac0fab9
...@@ -349,8 +349,7 @@ static int __devinit snd_card_cs4236_pnp(int dev, struct snd_card_cs4236 *acard, ...@@ -349,8 +349,7 @@ static int __devinit snd_card_cs4236_pnp(int dev, struct snd_card_cs4236 *acard,
pnp_init_resource_table(cfg); pnp_init_resource_table(cfg);
if (mpu_port[dev] != SNDRV_AUTO_PORT) if (mpu_port[dev] != SNDRV_AUTO_PORT)
pnp_resource_change(&cfg->port_resource[0], mpu_port[dev], 2); pnp_resource_change(&cfg->port_resource[0], mpu_port[dev], 2);
if (mpu_irq[dev] != SNDRV_AUTO_IRQ && mpu_irq[dev] >= 0 && if (mpu_irq[dev] != SNDRV_AUTO_IRQ && mpu_irq[dev] >= 0)
pnp_irq_valid(pdev, 0))
pnp_resource_change(&cfg->irq_resource[0], mpu_irq[dev], 1); pnp_resource_change(&cfg->irq_resource[0], mpu_irq[dev], 1);
err = pnp_manual_config_dev(pdev, cfg, 0); err = pnp_manual_config_dev(pdev, cfg, 0);
if (err < 0) if (err < 0)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment