On 03/29/2007 01:20 AM, Rask Ingemann Lambertsen wrote:
Playback sounds normal except for a click for each "pointer ..." message. Any ideas? /proc/interrupts increments by 11.
This additional patch fixes it:
Mmm, well, that looks like it makes sense...
I checked the MPU IRQs (you allow 2/9, 3, 5, 7, 10, 15 while the DOS driver only allows 2/9, 3, 5, 7).
All of 2/9, 3, 5, 7, and 10 work fine here and 15 does not work. 15 also doesn't work here for the Jazz IRQ though while the DOS driver does allow 15 for that one, so I expect that's a local problem (no, nothing evident; no IDE, 15 reserved for ISA, ...). If you need me to I'll try in a different machine, but if 15 works fine for the Jazz IRQ for you, I'd write it not working for either IRQ for me off as an uninteresting glitch.
The Jazz16 has nice MPU-401 behaviour by the way; if I sent MIDI to its gameport, it loops it back out immediately unless I'm actually recording it from the Jazz16. That's sort of nice for testing...
I also checked the 210, 230 and 250 base values the DOS driver allows me to set the "Jazz16 I/O Port" to and all of those work fine. A change to jazz16pnp is attached as the first attachment. Has been tested, works fine.
Lastly, how would you feel about setting the DOS/Windows default resource values as the preffered values and all the others as mere acceptable? This will help keep the behaviour consistent over dual booting for one, and is more in line with any documentation someone might have on their card.
Ie, something like the second attachment (on top of first). Has also been tested, and also works fine.
Rene.
diff --git a/drivers/pnp/jazz16pnp.c b/drivers/pnp/jazz16pnp.c index cacb1df..e665945 100644 --- a/drivers/pnp/jazz16pnp.c +++ b/drivers/pnp/jazz16pnp.c @@ -181,7 +181,7 @@ out_no_dev: };
static struct pnp_port jazz16pnp_ports[2] __initdata = { - { .min = 0x220, .max = 0x260, .align = 0x20, .size = 0x10 }, + { .min = 0x210, .max = 0x260, .align = 0x10, .size = 0x10 }, { .min = 0x300, .max = 0x330, .align = 0x10, .size = 0x02 }, };
@@ -247,8 +247,11 @@ static void jazz16_port_setup(const uint u8 config;
switch (sbport) { + case 0x210: case 0x220: + case 0x230: case 0x240: + case 0x250: case 0x260: config = sbport & 0x70; jazz16_sb_port = sbport; @@ -508,7 +511,7 @@ static int __init jazz16pnp_init(void) if (jazz16pnp_verbose) printk(PFX_DEBUG "Scanning for Jazz16 cards...\n");
- for (base = 0x260; base >= 0x220; base -= 0x20) { + for (base = 0x260; base >= 0x210; base -= 0x10) { if (!request_region(base, 16, "Jazz16 PnP probe")) continue; if (jazz16pnp_verbose) @@ -522,7 +525,7 @@ static int __init jazz16pnp_init(void) if (jazz16pnp_count) break; } - if (base < 0x220) + if (base < 0x210) goto out_no_sbbase; if (!jazz16pnp_count) { err = -ENODEV;
diff --git a/drivers/pnp/jazz16pnp.c b/drivers/pnp/jazz16pnp.c index e665945..a7f173d 100644 --- a/drivers/pnp/jazz16pnp.c +++ b/drivers/pnp/jazz16pnp.c @@ -180,12 +180,18 @@ out_no_dev: return -ENOMEM; };
-static struct pnp_port jazz16pnp_ports[2] __initdata = { +static struct pnp_port jazz16pnp_ports[] __initdata = { + { .min = 0x220, .max = 0x220, .align = 0, .size = 0x10 }, + { .min = 0x330, .max = 0x330, .align = 0, .size = 0x02 }, { .min = 0x210, .max = 0x260, .align = 0x10, .size = 0x10 }, { .min = 0x300, .max = 0x330, .align = 0x10, .size = 0x02 }, };
-static struct pnp_irq jazz16pnp_irqs[2] __initdata = { +static struct pnp_irq jazz16pnp_irqs[] __initdata = { + { .map[0] = (1 << 5), + .flags = IORESOURCE_IRQ_HIGHEDGE }, + { .map[0] = (1 << 9), + .flags = IORESOURCE_IRQ_HIGHEDGE }, { .map[0] = (1 << 3) | (1 << 5) | (1 << 7) | (1 << 9) | (1 << 10) | (1 << 15), .flags = IORESOURCE_IRQ_HIGHEDGE }, @@ -194,7 +200,9 @@ static struct pnp_irq jazz16pnp_irqs[2] .flags = IORESOURCE_IRQ_HIGHEDGE }, };
-static struct pnp_dma jazz16pnp_dmas[2] __initdata = { +static struct pnp_dma jazz16pnp_dmas[] __initdata = { + { .map = (1 << 1), .flags = IORESOURCE_DMA_8BIT, }, + { .map = (1 << 5), .flags = IORESOURCE_DMA_16BIT, }, { .map = (1 << 1) | (1 << 3), .flags = IORESOURCE_DMA_8BIT, }, { .map = (1 << 5) | (1 << 7), .flags = IORESOURCE_DMA_16BIT, }, }; @@ -215,9 +223,14 @@ static int __init jazz16pnp_add_sb(void) jazz16pnp_dmas, 2)) goto out_no_sboption; if (!jazz16pnp_easy_option(sbdev, PNP_RES_PRIORITY_ACCEPTABLE, - jazz16pnp_ports, 2, - jazz16pnp_irqs, 1, - jazz16pnp_dmas, 2)) + &jazz16pnp_ports[2], 2, + &jazz16pnp_irqs[2], 2, + &jazz16pnp_dmas[2], 2)) + goto out_no_sboption; + if (!jazz16pnp_easy_option(sbdev, PNP_RES_PRIORITY_ACCEPTABLE, + &jazz16pnp_ports[2], 2, + &jazz16pnp_irqs[2], 1, + &jazz16pnp_dmas[2], 2)) goto out_no_sboption; memcpy(sbid->id, "PNPb00f", PNP_ID_LEN); pnp_add_id(sbid, sbdev);