[alsa-devel] [PATCH] Gallant SC-6000 driver (3rd version)

Krzysztof Helt krzysztof.h1 at wp.pl
Wed Sep 5 06:42:41 CEST 2007


On Wed, 05 Sep 2007 01:04:46 +0200
Rene Herman <rene.herman at gmail.com> wrote:

> On 09/04/2007 09:11 PM, Krzysztof Helt wrote:
> 
> By the way -- something along the email path to you rejects my messages due 
> to taking an SPF-neutral result from gmail as negative...
> 
I'll contact portal administrators.

> > +#define SNDRV_LEGACY_FIND_FREE_IRQ
> > +#define SNDRV_LEGACY_FIND_FREE_DMA
> > +#include <sound/initval.h>
> 
> Personally I rather detest ISA autoprobing, so if you only included it as a 
> "I see that the ALSA thing to do", feel free to try without as far as I'm 
> concerned...

ok.

> > +/*
> > + * sc6000_dma_to_softcfg - Decode dma number into cfg code.
> > + */
> > +static inline unsigned char sc6000_dma_to_softcfg(int dma)
> > +{
> > +	unsigned char val = 0;
> > +
> > +	switch (dma) {
> > +	case 0:
> > +		val = 1;
> > +		break;
> > +	case 1:
> > +		val = 2;
> > +		break;
> > +	case 3:
> > +		val = 3;
> > +		break;
> > +	default:
> > +		break;
> > +	}
> > +	return val;
> > +}
> 
> Deja vu from sgalaxy...
> 
> But also -- please no inlines. There's no point to them. Kernel policy is 
> basically "no inlines other than for things that would definitely be macros 
> if we weren't fond of the typesafety inline functions give". GCC will figure 
> things out on its own...
> 

These things were actually macros in the 2.4 driver.

> > +/*
> > + * We must request the port region because these are the I/O
> > + * ports to access card's control registers.
> > + */
> > +	if (!request_region(port[dev], 0x10, "sc-6000 (base)")) {
> > +		snd_printk(KERN_ERR
> > +			   "SC-6000 port I/O port region is already in use.\n");
> > +		return -EBUSY;
> > +	}
> > +
> > +	err = sc6000_init_board(port[dev], irq, dma,
> > +				mss_port[dev], mpu_irq[dev]);
> > +
> > +	release_region(port[dev], 0x10);
> 
> So what happens if now someone starts poking at port[dev]? You probably want 
> to keep these requested no?
> 

Sgalaxy dejavu.

> > +	if (mpu_port[dev] != SNDRV_AUTO_PORT &&
> > +	    (mpu_port[dev] & ~0x30l) != 0x300) {
> 
> Eh, what?
> 

Checking if mpu_port[dev] is one 0x3X0 where X is from 0 to 3

> > +		printk(KERN_ERR PFX "invalid MPU-401 port %lx\n",
> > +			mpu_port[dev]);
> > +		return 0;
> > +	}
> > +	if (mpu_port[dev] != SNDRV_AUTO_PORT &&
> > +	    mpu_irq[dev] != SNDRV_AUTO_IRQ && mpu_irq[dev] != 0 &&
> > +	    !sc6000_mpu_irq_to_softcfg(mpu_irq[dev])) {
> > +		printk(KERN_ERR PFX "invalid MPU-401 IRQ %d\n", mpu_irq[dev]);
> > +		return 0;
> > +	}
> > +	return 1;
> > +}
> > +
> > +static int __devinit snd_sc6000_probe(struct device *devptr, unsigned int dev)
> > +{
> > +	static int possible_irqs[] = { 7, 9, 10, 11, -1 };
> 
> In the above, IRQ 5 also seems to be allowed. This is all rather massive 
> sgalaxy deja-vu...
> 

Do you think that this card can be handled by sgalaxy driver (with minimal changes to sgalaxy)?

Regards,
Krzysztof


More information about the Alsa-devel mailing list