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; }
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; }
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 */ }
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; }
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; }
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; }
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; }
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; }
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; }
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; }
/* 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; }
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; }
/* 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; }
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;