Esempio n. 1
0
static int __init dac_audio_init(void)
{
	int retval;

	if ((device_major = register_sound_dsp(&dac_audio_fops, -1)) < 0) {
		printk(KERN_ERR "Cannot register dsp device");
		return device_major;
	}

	in_use = 0;

	data_buffer = (char *)kmalloc(BUFFER_SIZE, GFP_KERNEL);
	if (data_buffer == NULL)
		return -ENOMEM;

	dac_audio_reset();
	rate = 8000;
	dac_audio_set_rate();

	retval =
	    request_irq(TIMER1_IRQ, timer1_interrupt, SA_INTERRUPT, MODNAME, 0);
	if (retval < 0) {
		printk(KERN_ERR "sh_dac_audio: IRQ %d request failed\n",
		       TIMER1_IRQ);
		return retval;
	}

	return 0;
}
static int __init pangolin_uda1341_init(void)
{
	unsigned long flags;
	int ret;

	if (!machine_is_pangolin())
		return -ENODEV;

	ret = l3_attach_client(&uda1341, "l3-bit-sa1100-gpio", "uda1341");
	if (ret)
		goto out;

	/* register devices */
	audio_dev_id = register_sound_dsp(&pangolin_audio_fops, -1);
	mixer_dev_id = register_sound_mixer(&pangolin_mixer_fops, -1);

	local_irq_save(flags);
	GAFR &= ~(SpeakerOffPin | QmutePin);
	GPDR |=  (SpeakerOffPin | QmutePin);
	local_irq_restore(flags);

	printk(KERN_INFO "Pangolin UDA1341 audio driver initialized\n");
	return 0;

release_l3:
	l3_detach_client(&uda1341);
out:
	return ret;
}
Esempio n. 3
0
static int sa1100ssp_audio_probe(struct device *_dev)
{
	audio_dev_id = register_sound_dsp(&ssp_audio_fops, -1);

	printk(KERN_INFO AUDIO_NAME " initialized\n");
	return 0;
}
Esempio n. 4
0
int ar7240_i2s_init_module(void)
{
	unsigned long flags;
	//int result = -1;
	ar7240_i2s_softc_t *sc = &sc_buf_var;
	
	sc->sc_irq = AR7240_MISC_IRQ_DMA;
#if 0

	/* Establish ISR would take care of enabling the interrupt */
	result = request_irq(sc->sc_irq, ar7240_i2s_intr, IRQF_DISABLED,"ar7240_i2s", NULL);
	if (result) {
		printk(KERN_INFO"i2s: can't get assigned irq %d returns %d\n",sc->sc_irq, result);	
	}
#endif	
	local_irq_save(flags);
	glzt_set_gpio_to_l3();
	glzt_set_gpio_to_iis();
 	local_irq_restore(flags);

	init_s3c2410_iis_bus(); 
	
	init_wm8978();

	
	audio_dev_dsp = register_sound_dsp(&ar7240_i2s_fops, -1);
	
	audio_dev_mixer = register_sound_mixer(&smdk2410_mixer_fops, -1);

	I2S_LOCK_INIT(&sc_buf_var);
	return 0;		/* succeed */
    
}
Esempio n. 5
0
static int __init assabet_uda1341_init(void)
{
	int ret;

	if (!machine_is_assabet())
		return -ENODEV;

	ret = l3_attach_client(&uda1341, "l3-bit-sa1100-gpio", "uda1341");
	if (ret)
		goto out;

	/* register devices */
	audio_dev_id = register_sound_dsp(&assabet_audio_fops, -1);
	mixer_dev_id = register_sound_mixer(&assabet_mixer_fops, -1);

#ifdef FIX_POWER_DRAIN
	{
		unsigned long flags;
		local_irq_save(flags);
		ASSABET_BCR_set(ASSABET_BCR_CODEC_RST);
		GPSR = GPIO_SSP_SFRM;
		GPDR |= GPIO_SSP_SFRM;
		GPCR = GPIO_SSP_SFRM;
		local_irq_restore(flags);
	}
#endif

	printk(KERN_INFO "Assabet UDA1341 audio driver initialized\n");
	return 0;

release_l3:
	l3_detach_client(&uda1341);
out:
	return ret;
}
Esempio n. 6
0
static int sound_alloc_audiodev(void)
{ 
    int i = register_sound_dsp(&oss_sound_fops, -1);
    if(i==-1)
        return i;
    i>>=4;
    if(i>=num_audiodevs)
        num_audiodevs = i + 1;
    return i;
}
Esempio n. 7
0
static int h3x00_audio_probe(struct device *_dev)
{
	int ret;

	ret = l3_attach_client(&uda1341, "l3-bit-sa1100-gpio", "uda1341");
	if (ret)
		goto out;

	/* register devices */
	audio_dev_id = register_sound_dsp(&h3600_audio_fops, -1);
	mixer_dev_id = register_sound_mixer(&h3600_mixer_fops, -1);

	printk( KERN_INFO "iPAQ audio support initialized\n" );

 out:
	return ret;
}
Esempio n. 8
0
static int jornada56x_uda1345_probe(struct device *dev)
{
	input_stream.dev = dev;
	output_stream.dev = dev;
	l3_jornada56x_adapter.data = dev;

	l3_add_adapter(&l3_jornada56x_adapter);

	uda1341 = uda1341_attach("l3-jornada56x");
	
	/* register devices */
	audio_dev_id = register_sound_dsp(&jornada56x_audio_fops, -1);
	mixer_dev_id = register_sound_mixer(&uda1341_mixer_fops, -1);

	printk(KERN_INFO "Sound: SA1100 UDA1345 on Jornada 56x: dsp id %d mixer id %d\n",
		audio_dev_id, mixer_dev_id);
	return 0;

}
Esempio n. 9
0
static int __init omap1510_uda1341_init(void)
{
	int ret;

printk(__FUNCTION__ "called\n");
	ret = l3_attach_client(&uda1341, "l3-bit-omap1510-gpio", "uda1341");
	if (ret)
		goto out;

	/* register devices */
	audio_dev_id = register_sound_dsp(&omap1510_audio_fops, -1);
	mixer_dev_id = register_sound_mixer(&omap1510_mixer_fops, -1);

	printk( KERN_INFO "OMAP1510 audio support initialized\n" );
	return 0;

out:
	return ret;
}
Esempio n. 10
0
static int __init sa1111_uda1341_init(void)
{
	struct uda1341_cfg cfg;
	int ret;

	if ( !(	(machine_is_assabet() && machine_has_neponset()) ||
		machine_is_jornada720() ))
		return -ENODEV;

	ret = l3_attach_client(&uda1341, "l3-sa1111", "uda1341");
	if (ret)
		goto out;

	/* Acquire and initialize DMA */
	ret = sa1111_sac_request_dma(&output_stream.dma_ch, "SA1111 audio out",
				     SA1111_SAC_XMT_CHANNEL);
	if (ret < 0)
		goto release_l3;
	
	ret = sa1111_sac_request_dma(&input_stream.dma_ch, "SA1111 audio in",
				     SA1111_SAC_RCV_CHANNEL);
	if (ret < 0)
		goto release_dma;

	cfg.fs     = 256;
	cfg.format = FMT_I2S;
	l3_command(&uda1341, L3_UDA1341_CONFIGURE, &cfg);

	/* register devices */
	audio_dev_id = register_sound_dsp(&sa1111_audio_fops, -1);
	mixer_dev_id = register_sound_mixer(&uda1341_mixer_fops, -1);

	printk(KERN_INFO "SA1111 UDA1341 audio driver initialized\n");
	return 0;

release_dma:
	sa1100_free_dma(output_stream.dma_ch);
release_l3:
	l3_detach_client(&uda1341);
out:
	return ret;
}
Esempio n. 11
0
static int __init hostaudio_init_module(void)
{
        printk(KERN_INFO "UML Audio Relay (host dsp = %s, host mixer = %s)\n",
	       dsp, mixer);

	module_data.dev_audio = register_sound_dsp(&hostaudio_fops, -1);
        if(module_data.dev_audio < 0){
                printk(KERN_ERR "hostaudio: couldn't register DSP device!\n");
                return -ENODEV;
        }

	module_data.dev_mixer = register_sound_mixer(&hostmixer_fops, -1);
        if(module_data.dev_mixer < 0){
                printk(KERN_ERR "hostmixer: couldn't register mixer "
		       "device!\n");
                unregister_sound_dsp(module_data.dev_audio);
                return -ENODEV;
        }

        return 0;
}
static int __init h3600_uda1341_init(void)
{
	int ret;

	if (!machine_is_h3xxx())
		return -ENODEV;

	ret = l3_attach_client(&uda1341, "l3-bit-sa1100-gpio", "uda1341");
	if (ret)
		goto out;

	/* register devices */
	audio_dev_id = register_sound_dsp(&h3600_audio_fops, -1);
	mixer_dev_id = register_sound_mixer(&h3600_mixer_fops, -1);

	printk( KERN_INFO "iPAQ audio support initialized\n" );
	return 0;

release_l3:
	l3_detach_client(&uda1341);
out:
	return ret;
}
Esempio n. 13
0
/* Initialize this modules and register the device. */
static int __init audio_dev_init (void)
{
	int result = 0;

	printk ("%s: output buffer size %dk\n", DEVICE_NAME, (AUDIO_BUFFER_SZ / 1024));

	init_waitqueue_head (&audio_state.wq);
	init_MUTEX(&audio_state.sem);

	audio_state.buf = 
		(u8 *)__get_free_pages(GFP_KERNEL, get_order(AUDIO_BUFFER_SZ));
	if (audio_state.buf == NULL) {
		printk ("%s: could not allocate audio buffer\n", DEVICE_NAME);
		return -ENOMEM;
	}

	audio_state.dev_audio = register_sound_dsp(&audio_fops, -1);
	if (audio_state.dev_audio < 0) {
		result = -ENODEV;
		goto init_error;
	}
	if ((result = request_irq (INT_ATU, audio_isr, 0, 
					DEVICE_NAME, NULL)) != 0) {
		printk ("%s: could not register interrupt %d\n", 
						DEVICE_NAME, INT_ATU);
		goto init_error;
		return result;
	}

	return 0;
init_error:
	free_pages((unsigned long)audio_state.buf, 
					get_order(AUDIO_BUFFER_SZ));
	return result;

}
Esempio n. 14
0
int ar7240_i2s_init_module(void)
{

	ar7240_i2s_softc_t *sc = &sc_buf_var;
	int result = -1;
	int master = 1;

	/*
	 * Get a range of minor numbers to work with, asking for a dynamic
	 * major unless directed otherwise at load time.
	 */
	 
#ifdef GLZT_I2S_310KERNEL_CLASS
/*
	dev_t devno = MKDEV(ar7240_i2s_major, ar7240_i2s_minor);

	result = register_chrdev_region(devno,ar7240_i2s_num, "glzt_i2s");
	if (result < 0) {
		printk("register_chrdev_region\n");
		return result;
	}

	cdev_init(&cdev, &ar7240_i2s_fops);
	cdev.owner = THIS_MODULE;
	
	result  = cdev_add(&cdev, devno, ar7240_i2s_num);
	if (result  < 0) {
		printk("cdev_add\n");
		goto err1;
	}

	glzt_i2s_class = class_create(THIS_MODULE, "glzt_i2s");
	glzt_i2s_class_dev = device_create(glzt_i2s_class, NULL, devno, NULL, "i2s"); 
*/
	audio_dev_dsp = register_sound_dsp(&ar7240_i2s_fops, -1);
	audio_dev_mixer = register_sound_mixer(&smdk2410_mixer_fops, -1);

#else
	dev_t devno = MKDEV(ar7240_i2s_major, ar7240_i2s_minor);

	

	if (ar7240_i2s_major) {
			/* Establish ISR would take care of enabling the interrupt */
		result = register_chrdev(ar7240_i2s_major, "ath_i2s",
				    &ar7240_i2s_fops);
	}
	if (result < 0) {
		printk(KERN_WARNING "ar7240_i2s: can't get major %d\n",
		       ar7240_i2s_major);
		return result;
	}
	glzt_i2s_class = class_create(THIS_MODULE, "glzt_i2s");
	//glzt_i2s_class_dev = device_create(glzt_i2s_class, NULL, devno, NULL, "i2s"); /* /dev/buttons */
	glzt_i2s_class_dev = device_create(glzt_i2s_class, NULL, devno, NULL, "dsp");
	
#endif


	sc->sc_irq = AR7240_MISC_IRQ_DMA;

	/* Establish ISR would take care of enabling the interrupt */
	result = request_irq(sc->sc_irq, ar7240_i2s_intr, IRQF_DISABLED,"ar7240_i2s", NULL);
	if (result) {
		printk(KERN_INFO
		       "i2s: can't get assigned irq %d returns %d\n",sc->sc_irq, result);
		
	}
	ar7240_i2sound_i2slink_on(master);

	I2S_LOCK_INIT(&sc_buf_var);

	return 0;		/* succeed */

//err2:
	//cdev_del(&cdev);

//err1:
	//unregister_chrdev_region(devno, ar7240_i2s_num);
//	return result;

}
Esempio n. 15
0
/* Driver initialization routine */
static int __devinit emu10k1_probe(struct pci_dev *pci_dev, const struct pci_device_id *pci_id)
{
	struct emu10k1_card *card;

	if ((card = kmalloc(sizeof(struct emu10k1_card), GFP_KERNEL)) == NULL) {
		printk(KERN_ERR "emu10k1: out of memory\n");
		return -ENOMEM;
	}
	memset(card, 0, sizeof(struct emu10k1_card));

#if LINUX_VERSION_CODE > 0x020320
	if (!pci_dma_supported(pci_dev, EMU10K1_DMA_MASK)) {
		printk(KERN_ERR "emu10k1: architecture does not support 32bit PCI busmaster DMA\n");
		kfree(card);
		return -ENODEV;
	}

	if (pci_enable_device(pci_dev)) {
		printk(KERN_ERR "emu10k1: couldn't enable device\n");
		kfree(card);
		return -ENODEV;
	}

	pci_set_master(pci_dev);

	card->iobase = pci_dev->resource[0].start;

	if (request_region(card->iobase, EMU10K1_EXTENT, card_names[pci_id->driver_data]) == NULL) {
		printk(KERN_ERR "emu10k1: IO space in use\n");
		kfree(card);
		return -ENODEV;
	}
	pci_dev->driver_data = card;
	pci_dev->dma_mask = EMU10K1_DMA_MASK;
#else
	pci_set_master(pci_dev);

	card->iobase = pci_dev->base_address[0] & PCI_BASE_ADDRESS_IO_MASK;

	if (check_region(card->iobase, EMU10K1_EXTENT)) {
		printk(KERN_ERR "emu10k1: IO space in use\n");
		kfree(card);
		return -ENODEV;
	}

	request_region(card->iobase, EMU10K1_EXTENT, card_names[pci_id->driver_data]);
#endif
	card->irq = pci_dev->irq;
	card->pci_dev = pci_dev;

	/* Reserve IRQ Line */
	if (request_irq(card->irq, emu10k1_interrupt, SA_SHIRQ, card_names[pci_id->driver_data], card)) {
		printk(KERN_ERR "emu10k1: IRQ in use\n");
		goto err_irq;
	}

	pci_read_config_byte(pci_dev, PCI_REVISION_ID, &card->chiprev);

	printk(KERN_INFO "emu10k1: %s rev %d found at IO 0x%04lx, IRQ %d\n", card_names[pci_id->driver_data], card->chiprev, card->iobase, card->irq);

	spin_lock_init(&card->lock);
	card->mixeraddx = card->iobase + AC97DATA;
	init_MUTEX(&card->open_sem);
	card->open_mode = 0;
	init_waitqueue_head(&card->open_wait);

	/* Register devices */
	if ((card->audio1_num = register_sound_dsp(&emu10k1_audio_fops, -1)) < 0) {
		printk(KERN_ERR "emu10k1: cannot register first audio device!\n");
		goto err_dev0;
	}

	if ((card->audio2_num = register_sound_dsp(&emu10k1_audio_fops, -1)) < 0) {
		printk(KERN_ERR "emu10k1: cannot register second audio device!\n");
		goto err_dev1;
	}

	if ((card->mixer_num = register_sound_mixer(&emu10k1_mixer_fops, -1)) < 0) {
		printk(KERN_ERR "emu10k1: cannot register mixer device!\n");
		goto err_dev2;
	}

	if ((card->midi_num = register_sound_midi(&emu10k1_midi_fops, -1)) < 0) {
		printk(KERN_ERR "emu10k1: cannot register midi device!\n");
		goto err_dev3;
	}

	if (emu10k1_init(card) != CTSTATUS_SUCCESS) {
		printk(KERN_ERR "emu10k1: cannot initialize device!\n");
		goto err_emu10k1_init;
	}

	if (audio_init(card) != CTSTATUS_SUCCESS) {
		printk(KERN_ERR "emu10k1: cannot initialize audio!\n");
		goto err_audio_init;
	}

	if (midi_init(card) != CTSTATUS_SUCCESS) {
		printk(KERN_ERR "emu10k1: cannot initialize midi!\n");
		goto err_midi_init;
	}

	mixer_init(card);

	DPD(2, "Hardware initialized. TRAM allocated: %u bytes\n", (unsigned int) card->tmemsize);

	list_add(&card->list, &emu10k1_devs);

	return 0;

      err_midi_init:
	audio_exit(card);

      err_audio_init:
	emu10k1_exit(card);

      err_emu10k1_init:
	unregister_sound_midi(card->midi_num);

      err_dev3:
	unregister_sound_mixer(card->mixer_num);

      err_dev2:
	unregister_sound_dsp(card->audio2_num);

      err_dev1:
	unregister_sound_dsp(card->audio1_num);

      err_dev0:
	free_irq(card->irq, card);

      err_irq:
	release_region(card->iobase, EMU10K1_EXTENT);
	kfree(card);

	return -ENODEV;
}
static int __devinit ad1889_probe(struct pci_dev *pcidev, const struct pci_device_id *ent)
{
	int err;
	ad1889_dev_t *dev;
	unsigned long bar;
	struct proc_dir_entry *proc_root = NULL;

	if ((err = pci_enable_device(pcidev)) != 0) {
		printk(KERN_ERR DEVNAME ": pci_enable_device failed\n");
		return err;
	}

	pci_set_master(pcidev);
	if ((dev = ad1889_alloc_dev(pcidev)) == NULL) {
		printk(KERN_ERR DEVNAME ": cannot allocate memory for device\n");
		return -ENOMEM;
	}
	pci_set_drvdata(pcidev, dev);
	bar = pci_resource_start(pcidev, 0);
	
        if (!(pci_resource_flags(pcidev, 0) & IORESOURCE_MEM)) {
		printk(KERN_ERR DEVNAME ": memory region not assigned\n");
		goto err_free_mem;
	}

	if (request_irq(pcidev->irq, ad1889_interrupt, SA_SHIRQ, DEVNAME, dev) != 0) {
		printk(KERN_ERR DEVNAME ": unable to request interrupt\n");
		goto err_free_mem;
	}

	request_mem_region(bar, AD_DSIOMEMSIZE, DEVNAME);
	dev->regbase = (unsigned long)ioremap_nocache(bar, AD_DSIOMEMSIZE);

	printk(KERN_INFO DEVNAME ": %s at 0x%lx IRQ %d\n",
		(char *)ent->driver_data, dev->regbase, pcidev->irq);

	if (ad1889_aclink_reset(pcidev) != 0)
		goto err_free_mem;

	/* register /dev/dsp */
	if ((dev->dev_audio = register_sound_dsp(&ad1889_fops, -1)) < 0) {
		printk(KERN_ERR DEVNAME ": cannot register /dev/dsp\n");
		goto err_free_irq;
	}

	if ((err = ad1889_ac97_init(dev, 0)) != 0)
		goto err_free_dsp;

	if (((proc_root = proc_mkdir("driver/ad1889", 0)) == NULL) ||
	    create_proc_read_entry("ac97", S_IFREG|S_IRUGO, proc_root, ac97_read_proc, dev->ac97_codec) == NULL ||
	    create_proc_read_entry("info", S_IFREG|S_IRUGO, proc_root, ad1889_read_proc, dev) == NULL) 
		goto err_free_dsp;
	
	ad1889_initcfg(dev);

	//DBG(DEVNAME ": Driver initialization done!\n");

	ad1889_dev = dev;

	return 0;

err_free_dsp:
	unregister_sound_dsp(dev->dev_audio);

err_free_irq:
	free_irq(pcidev->irq, dev);

err_free_mem:
	ad1889_free_dev(dev);
	pci_set_drvdata(pcidev, 0);

	return -ENODEV;
}
Esempio n. 17
0
		audio_unregister_codec(&aic33_state);
		return -EPERM;
	}

	aic33_local.volume = DEFAULT_OUTPUT_VOLUME;
	aic33_local.line = DEFAULT_INPUT_VOLUME;
	/* either of SOUND_MASK_LINE/SOUND_MASK_MIC */
	aic33_local.recsrc = SOUND_MASK_LINE;
	aic33_local.igain = DEFAULT_INPUT_IGAIN | (DEFAULT_INPUT_IGAIN << 8);
	aic33_local.ogain = DEFAULT_INPUT_OGAIN | (DEFAULT_INPUT_OGAIN << 8);
	aic33_local.nochan = STEREO;
	aic33_local.micbias = 1;
	aic33_local.mod_cnt = 0;

	/* register devices */
	audio_dev_id = register_sound_dsp(davinci_audio_fops, -1);
	mixer_dev_id = register_sound_mixer(&davinci_mixer_fops, -1);

#ifdef CONFIG_PROC_FS
	create_proc_read_entry(PROC_START_FILE, 0 /* default mode */ ,
			       NULL /* parent dir */ ,
			       codec_start, NULL /* client data */ );

	create_proc_read_entry(PROC_STOP_FILE, 0 /* default mode */ ,
			       NULL /* parent dir */ ,
			       codec_stop, NULL /* client data */ );
#endif

	/* Announcement Time */
	DPRINTK(PLATFORM_NAME " " CODEC_NAME " audio support initialized\n");
	return 0;