pci_set_dma_mask(pcidev, 0xffffffff)) { 
pci_set_dma_mask(pcidev, DMA_32BIT_MASK)) { 
static int __devinit solo1_probe(struct pci_dev *pcidev, const struct pci_device_id *pciid){	struct solo1_state *s;	int gpio;	int ret; 	if ((ret=pci_enable_device(pcidev)))		return ret;	if (!(pci_resource_flags(pcidev, 0) & IORESOURCE_IO) ||	    !(pci_resource_flags(pcidev, 1) & IORESOURCE_IO) ||	    !(pci_resource_flags(pcidev, 2) & IORESOURCE_IO) ||	    !(pci_resource_flags(pcidev, 3) & IORESOURCE_IO))		return -ENODEV;	if (pcidev->irq == 0)		return -ENODEV;	/* Recording requires 24-bit DMA, so attempt to set dma mask	 * to 24 bits first, then 32 bits (playback only) if that fails.	 */	if (pci_set_dma_mask(pcidev, 0x00ffffff) &&	    pci_set_dma_mask(pcidev, 0xffffffff)) {		printk(KERN_WARNING "solo1: architecture does not support 24bit or 32bit PCI busmaster DMA\n");		return -ENODEV;	}	if (!(s = kmalloc(sizeof(struct solo1_state), GFP_KERNEL))) {		printk(KERN_WARNING "solo1: out of memory\n");		return -ENOMEM;	}	memset(s, 0, sizeof(struct solo1_state));	init_waitqueue_head(&s->dma_adc.wait);	init_waitqueue_head(&s->dma_dac.wait);	init_waitqueue_head(&s->open_wait);	init_waitqueue_head(&s->midi.iwait);	init_waitqueue_head(&s->midi.owait);	init_MUTEX(&s->open_sem);	spin_lock_init(&s->lock);	s->magic = SOLO1_MAGIC;	s->dev = pcidev;	s->iobase = pci_resource_start(pcidev, 0);	s->sbbase = pci_resource_start(pcidev, 1);	s->vcbase = pci_resource_start(pcidev, 2);	s->ddmabase = s->vcbase + DDMABASE_OFFSET;	s->mpubase = pci_resource_start(pcidev, 3);	gpio = pci_resource_start(pcidev, 4);	s->irq = pcidev->irq;	ret = -EBUSY;	if (!request_region(s->iobase, IOBASE_EXTENT, "ESS Solo1")) {		printk(KERN_ERR "solo1: io ports in use\n");		goto err_region1;	}	if (!request_region(s->sbbase+FMSYNTH_EXTENT, SBBASE_EXTENT-FMSYNTH_EXTENT, "ESS Solo1")) {		printk(KERN_ERR "solo1: io ports in use\n");		goto err_region2;	}	if (!request_region(s->ddmabase, DDMABASE_EXTENT, "ESS Solo1")) {		printk(KERN_ERR "solo1: io ports in use\n");		goto err_region3;	}	if (!request_region(s->mpubase, MPUBASE_EXTENT, "ESS Solo1")) {		printk(KERN_ERR "solo1: io ports in use\n");		goto err_region4;	}	if ((ret=request_irq(s->irq,solo1_interrupt,SA_SHIRQ,"ESS Solo1",s))) {		printk(KERN_ERR "solo1: irq %u in use\n", s->irq);		goto err_irq;	}	/* register devices */	if ((s->dev_audio = register_sound_dsp(&solo1_audio_fops, -1)) < 0) {		ret = s->dev_audio;		goto err_dev1;	}	if ((s->dev_mixer = register_sound_mixer(&solo1_mixer_fops, -1)) < 0) {		ret = s->dev_mixer;		goto err_dev2;	}	if ((s->dev_midi = register_sound_midi(&solo1_midi_fops, -1)) < 0) {		ret = s->dev_midi;		goto err_dev3;	}	if ((s->dev_dmfm = register_sound_special(&solo1_dmfm_fops, 15 /* ?? */)) < 0) {		ret = s->dev_dmfm;		goto err_dev4;	}	if (setup_solo1(s)) {		ret = -EIO;		goto err;	}	/* register gameport */	solo1_register_gameport(s, gpio);	/* store it in the driver field */	pci_set_drvdata(pcidev, s);	return 0; err:	unregister_sound_special(s->dev_dmfm); err_dev4:	unregister_sound_midi(s->dev_midi); err_dev3:	unregister_sound_mixer(s->dev_mixer); err_dev2:	unregister_sound_dsp(s->dev_audio); err_dev1:	printk(KERN_ERR "solo1: initialisation error\n");	free_irq(s->irq, s); err_irq:	release_region(s->mpubase, MPUBASE_EXTENT); err_region4:	release_region(s->ddmabase, DDMABASE_EXTENT); err_region3:	release_region(s->sbbase+FMSYNTH_EXTENT, SBBASE_EXTENT-FMSYNTH_EXTENT); err_region2:	release_region(s->iobase, IOBASE_EXTENT); err_region1:	kfree(s);	return ret;}
4520	/local/tlutelli/issta_data/temp/c/2005_temp/2005/4520/caac3a444ce3b5a8d76069abfbb699d2a65b3f09/esssolo1.c/buggy/sound/oss/esssolo1.c