Lines Matching refs:emu
199 struct emu10k1x *emu; member
207 struct emu10k1x *emu; member
214 struct emu10k1x *emu; member
225 void (*interrupt)(struct emu10k1x *emu, unsigned int status);
295 static unsigned int snd_emu10k1x_ptr_read(struct emu10k1x * emu, in snd_emu10k1x_ptr_read() argument
304 spin_lock_irqsave(&emu->emu_lock, flags); in snd_emu10k1x_ptr_read()
305 outl(regptr, emu->port + PTR); in snd_emu10k1x_ptr_read()
306 val = inl(emu->port + DATA); in snd_emu10k1x_ptr_read()
307 spin_unlock_irqrestore(&emu->emu_lock, flags); in snd_emu10k1x_ptr_read()
311 static void snd_emu10k1x_ptr_write(struct emu10k1x *emu, in snd_emu10k1x_ptr_write() argument
321 spin_lock_irqsave(&emu->emu_lock, flags); in snd_emu10k1x_ptr_write()
322 outl(regptr, emu->port + PTR); in snd_emu10k1x_ptr_write()
323 outl(data, emu->port + DATA); in snd_emu10k1x_ptr_write()
324 spin_unlock_irqrestore(&emu->emu_lock, flags); in snd_emu10k1x_ptr_write()
327 static void snd_emu10k1x_intr_enable(struct emu10k1x *emu, unsigned int intrenb) in snd_emu10k1x_intr_enable() argument
332 spin_lock_irqsave(&emu->emu_lock, flags); in snd_emu10k1x_intr_enable()
333 intr_enable = inl(emu->port + INTE) | intrenb; in snd_emu10k1x_intr_enable()
334 outl(intr_enable, emu->port + INTE); in snd_emu10k1x_intr_enable()
335 spin_unlock_irqrestore(&emu->emu_lock, flags); in snd_emu10k1x_intr_enable()
338 static void snd_emu10k1x_intr_disable(struct emu10k1x *emu, unsigned int intrenb) in snd_emu10k1x_intr_disable() argument
343 spin_lock_irqsave(&emu->emu_lock, flags); in snd_emu10k1x_intr_disable()
344 intr_enable = inl(emu->port + INTE) & ~intrenb; in snd_emu10k1x_intr_disable()
345 outl(intr_enable, emu->port + INTE); in snd_emu10k1x_intr_disable()
346 spin_unlock_irqrestore(&emu->emu_lock, flags); in snd_emu10k1x_intr_disable()
349 static void snd_emu10k1x_gpio_write(struct emu10k1x *emu, unsigned int value) in snd_emu10k1x_gpio_write() argument
353 spin_lock_irqsave(&emu->emu_lock, flags); in snd_emu10k1x_gpio_write()
354 outl(value, emu->port + GPIO); in snd_emu10k1x_gpio_write()
355 spin_unlock_irqrestore(&emu->emu_lock, flags); in snd_emu10k1x_gpio_write()
363 static void snd_emu10k1x_pcm_interrupt(struct emu10k1x *emu, struct emu10k1x_voice *voice) in snd_emu10k1x_pcm_interrupt() argument
372 dev_info(emu->card->dev, in snd_emu10k1x_pcm_interrupt()
398 epcm->emu = chip; in snd_emu10k1x_playback_open()
423 epcm->voice = &epcm->emu->voices[substream->pcm->device]; in snd_emu10k1x_pcm_hw_params()
455 struct emu10k1x *emu = snd_pcm_substream_chip(substream); in snd_emu10k1x_pcm_prepare() local
459 u32 *table_base = (u32 *)(emu->dma_buffer.area+1024*voice); in snd_emu10k1x_pcm_prepare()
468 snd_emu10k1x_ptr_write(emu, PLAYBACK_LIST_ADDR, voice, emu->dma_buffer.addr+1024*voice); in snd_emu10k1x_pcm_prepare()
469 snd_emu10k1x_ptr_write(emu, PLAYBACK_LIST_SIZE, voice, (runtime->periods - 1) << 19); in snd_emu10k1x_pcm_prepare()
470 snd_emu10k1x_ptr_write(emu, PLAYBACK_LIST_PTR, voice, 0); in snd_emu10k1x_pcm_prepare()
471 snd_emu10k1x_ptr_write(emu, PLAYBACK_POINTER, voice, 0); in snd_emu10k1x_pcm_prepare()
472 snd_emu10k1x_ptr_write(emu, PLAYBACK_UNKNOWN1, voice, 0); in snd_emu10k1x_pcm_prepare()
473 snd_emu10k1x_ptr_write(emu, PLAYBACK_UNKNOWN2, voice, 0); in snd_emu10k1x_pcm_prepare()
474 snd_emu10k1x_ptr_write(emu, PLAYBACK_DMA_ADDR, voice, runtime->dma_addr); in snd_emu10k1x_pcm_prepare()
476 …snd_emu10k1x_ptr_write(emu, PLAYBACK_PERIOD_SIZE, voice, frames_to_bytes(runtime, runtime->period_… in snd_emu10k1x_pcm_prepare()
485 struct emu10k1x *emu = snd_pcm_substream_chip(substream); in snd_emu10k1x_pcm_trigger() local
500 snd_emu10k1x_intr_enable(emu, (INTE_CH_0_LOOP | INTE_CH_0_HALF_LOOP) << channel); in snd_emu10k1x_pcm_trigger()
502 snd_emu10k1x_intr_enable(emu, INTE_CH_0_LOOP << channel); in snd_emu10k1x_pcm_trigger()
504 …snd_emu10k1x_ptr_write(emu, TRIGGER_CHANNEL, 0, snd_emu10k1x_ptr_read(emu, TRIGGER_CHANNEL, 0)|(TR… in snd_emu10k1x_pcm_trigger()
508 snd_emu10k1x_intr_disable(emu, (INTE_CH_0_LOOP | INTE_CH_0_HALF_LOOP) << channel); in snd_emu10k1x_pcm_trigger()
509 …snd_emu10k1x_ptr_write(emu, TRIGGER_CHANNEL, 0, snd_emu10k1x_ptr_read(emu, TRIGGER_CHANNEL, 0) & ~… in snd_emu10k1x_pcm_trigger()
522 struct emu10k1x *emu = snd_pcm_substream_chip(substream); in snd_emu10k1x_pcm_pointer() local
531 ptr3 = snd_emu10k1x_ptr_read(emu, PLAYBACK_LIST_PTR, channel); in snd_emu10k1x_pcm_pointer()
532 ptr1 = snd_emu10k1x_ptr_read(emu, PLAYBACK_POINTER, channel); in snd_emu10k1x_pcm_pointer()
533 ptr4 = snd_emu10k1x_ptr_read(emu, PLAYBACK_LIST_PTR, channel); in snd_emu10k1x_pcm_pointer()
539 ptr1 = snd_emu10k1x_ptr_read(emu, PLAYBACK_POINTER, channel); in snd_emu10k1x_pcm_pointer()
579 epcm->emu = chip; in snd_emu10k1x_pcm_open_capture()
604 if (epcm->emu->capture_voice.use) in snd_emu10k1x_pcm_hw_params_capture()
606 epcm->voice = &epcm->emu->capture_voice; in snd_emu10k1x_pcm_hw_params_capture()
638 struct emu10k1x *emu = snd_pcm_substream_chip(substream); in snd_emu10k1x_pcm_prepare_capture() local
641 snd_emu10k1x_ptr_write(emu, CAPTURE_DMA_ADDR, 0, runtime->dma_addr); in snd_emu10k1x_pcm_prepare_capture()
642 …snd_emu10k1x_ptr_write(emu, CAPTURE_BUFFER_SIZE, 0, frames_to_bytes(runtime, runtime->buffer_size)… in snd_emu10k1x_pcm_prepare_capture()
643 snd_emu10k1x_ptr_write(emu, CAPTURE_POINTER, 0, 0); in snd_emu10k1x_pcm_prepare_capture()
644 snd_emu10k1x_ptr_write(emu, CAPTURE_UNKNOWN, 0, 0); in snd_emu10k1x_pcm_prepare_capture()
653 struct emu10k1x *emu = snd_pcm_substream_chip(substream); in snd_emu10k1x_pcm_trigger_capture() local
660 snd_emu10k1x_intr_enable(emu, INTE_CAP_0_LOOP | in snd_emu10k1x_pcm_trigger_capture()
662 …snd_emu10k1x_ptr_write(emu, TRIGGER_CHANNEL, 0, snd_emu10k1x_ptr_read(emu, TRIGGER_CHANNEL, 0)|TRI… in snd_emu10k1x_pcm_trigger_capture()
667 snd_emu10k1x_intr_disable(emu, INTE_CAP_0_LOOP | in snd_emu10k1x_pcm_trigger_capture()
669 …snd_emu10k1x_ptr_write(emu, TRIGGER_CHANNEL, 0, snd_emu10k1x_ptr_read(emu, TRIGGER_CHANNEL, 0) & ~… in snd_emu10k1x_pcm_trigger_capture()
682 struct emu10k1x *emu = snd_pcm_substream_chip(substream); in snd_emu10k1x_pcm_pointer_capture() local
690 ptr = bytes_to_frames(runtime, snd_emu10k1x_ptr_read(emu, CAPTURE_POINTER, 0)); in snd_emu10k1x_pcm_pointer_capture()
711 struct emu10k1x *emu = ac97->private_data; in snd_emu10k1x_ac97_read() local
715 spin_lock_irqsave(&emu->emu_lock, flags); in snd_emu10k1x_ac97_read()
716 outb(reg, emu->port + AC97ADDRESS); in snd_emu10k1x_ac97_read()
717 val = inw(emu->port + AC97DATA); in snd_emu10k1x_ac97_read()
718 spin_unlock_irqrestore(&emu->emu_lock, flags); in snd_emu10k1x_ac97_read()
725 struct emu10k1x *emu = ac97->private_data; in snd_emu10k1x_ac97_write() local
728 spin_lock_irqsave(&emu->emu_lock, flags); in snd_emu10k1x_ac97_write()
729 outb(reg, emu->port + AC97ADDRESS); in snd_emu10k1x_ac97_write()
730 outw(val, emu->port + AC97DATA); in snd_emu10k1x_ac97_write()
731 spin_unlock_irqrestore(&emu->emu_lock, flags); in snd_emu10k1x_ac97_write()
850 static int snd_emu10k1x_pcm(struct emu10k1x *emu, int device) in snd_emu10k1x_pcm() argument
860 if ((err = snd_pcm_new(emu->card, "emu10k1x", device, 1, capture, &pcm)) < 0) in snd_emu10k1x_pcm()
863 pcm->private_data = emu; in snd_emu10k1x_pcm()
891 emu->pcm = pcm; in snd_emu10k1x_pcm()
894 snd_dma_pci_data(emu->pci), in snd_emu10k1x_pcm()
970 chip->voices[ch].emu = chip; in snd_emu10k1x_create()
1025 struct emu10k1x *emu = entry->private_data; in snd_emu10k1x_proc_reg_read() local
1032 spin_lock_irqsave(&emu->emu_lock, flags); in snd_emu10k1x_proc_reg_read()
1033 value = inl(emu->port + i); in snd_emu10k1x_proc_reg_read()
1034 spin_unlock_irqrestore(&emu->emu_lock, flags); in snd_emu10k1x_proc_reg_read()
1039 value = snd_emu10k1x_ptr_read(emu, i, 0); in snd_emu10k1x_proc_reg_read()
1041 value1 = snd_emu10k1x_ptr_read(emu, i, 1); in snd_emu10k1x_proc_reg_read()
1042 value2 = snd_emu10k1x_ptr_read(emu, i, 2); in snd_emu10k1x_proc_reg_read()
1053 struct emu10k1x *emu = entry->private_data; in snd_emu10k1x_proc_reg_write() local
1062 snd_emu10k1x_ptr_write(emu, reg, channel_id, val); in snd_emu10k1x_proc_reg_write()
1066 static int snd_emu10k1x_proc_init(struct emu10k1x *emu) in snd_emu10k1x_proc_init() argument
1070 if(! snd_card_proc_new(emu->card, "emu10k1x_regs", &entry)) { in snd_emu10k1x_proc_init()
1071 snd_info_set_text_ops(entry, emu, snd_emu10k1x_proc_reg_read); in snd_emu10k1x_proc_init()
1074 entry->private_data = emu; in snd_emu10k1x_proc_init()
1085 struct emu10k1x *emu = snd_kcontrol_chip(kcontrol); in snd_emu10k1x_shared_spdif_get() local
1087 ucontrol->value.integer.value[0] = (snd_emu10k1x_ptr_read(emu, SPDIF_SELECT, 0) == 0x700) ? 0 : 1; in snd_emu10k1x_shared_spdif_get()
1095 struct emu10k1x *emu = snd_kcontrol_chip(kcontrol); in snd_emu10k1x_shared_spdif_put() local
1103 snd_emu10k1x_ptr_write(emu, SPDIF_SELECT, 0, 0x000); in snd_emu10k1x_shared_spdif_put()
1104 snd_emu10k1x_ptr_write(emu, ROUTING, 0, 0x700); in snd_emu10k1x_shared_spdif_put()
1105 snd_emu10k1x_gpio_write(emu, 0x1000); in snd_emu10k1x_shared_spdif_put()
1108 snd_emu10k1x_ptr_write(emu, SPDIF_SELECT, 0, 0x700); in snd_emu10k1x_shared_spdif_put()
1109 snd_emu10k1x_ptr_write(emu, ROUTING, 0, 0x1003F); in snd_emu10k1x_shared_spdif_put()
1110 snd_emu10k1x_gpio_write(emu, 0x1080); in snd_emu10k1x_shared_spdif_put()
1134 struct emu10k1x *emu = snd_kcontrol_chip(kcontrol); in snd_emu10k1x_spdif_get() local
1137 ucontrol->value.iec958.status[0] = (emu->spdif_bits[idx] >> 0) & 0xff; in snd_emu10k1x_spdif_get()
1138 ucontrol->value.iec958.status[1] = (emu->spdif_bits[idx] >> 8) & 0xff; in snd_emu10k1x_spdif_get()
1139 ucontrol->value.iec958.status[2] = (emu->spdif_bits[idx] >> 16) & 0xff; in snd_emu10k1x_spdif_get()
1140 ucontrol->value.iec958.status[3] = (emu->spdif_bits[idx] >> 24) & 0xff; in snd_emu10k1x_spdif_get()
1157 struct emu10k1x *emu = snd_kcontrol_chip(kcontrol); in snd_emu10k1x_spdif_put() local
1166 change = val != emu->spdif_bits[idx]; in snd_emu10k1x_spdif_put()
1168 snd_emu10k1x_ptr_write(emu, SPCS0 + idx, 0, val); in snd_emu10k1x_spdif_put()
1169 emu->spdif_bits[idx] = val; in snd_emu10k1x_spdif_put()
1194 static int snd_emu10k1x_mixer(struct emu10k1x *emu) in snd_emu10k1x_mixer() argument
1198 struct snd_card *card = emu->card; in snd_emu10k1x_mixer()
1200 if ((kctl = snd_ctl_new1(&snd_emu10k1x_spdif_mask_control, emu)) == NULL) in snd_emu10k1x_mixer()
1204 if ((kctl = snd_ctl_new1(&snd_emu10k1x_shared_spdif, emu)) == NULL) in snd_emu10k1x_mixer()
1208 if ((kctl = snd_ctl_new1(&snd_emu10k1x_spdif_control, emu)) == NULL) in snd_emu10k1x_mixer()
1219 static inline unsigned char mpu401_read(struct emu10k1x *emu, struct emu10k1x_midi *mpu, int idx) in mpu401_read() argument
1221 return (unsigned char)snd_emu10k1x_ptr_read(emu, mpu->port + idx, 0); in mpu401_read()
1224 static inline void mpu401_write(struct emu10k1x *emu, struct emu10k1x_midi *mpu, int data, int idx) in mpu401_write() argument
1226 snd_emu10k1x_ptr_write(emu, mpu->port + idx, 0, data); in mpu401_write()
1229 #define mpu401_write_data(emu, mpu, data) mpu401_write(emu, mpu, data, 0) argument
1230 #define mpu401_write_cmd(emu, mpu, data) mpu401_write(emu, mpu, data, 1) argument
1231 #define mpu401_read_data(emu, mpu) mpu401_read(emu, mpu, 0) argument
1232 #define mpu401_read_stat(emu, mpu) mpu401_read(emu, mpu, 1) argument
1234 #define mpu401_input_avail(emu,mpu) (!(mpu401_read_stat(emu,mpu) & 0x80)) argument
1235 #define mpu401_output_ready(emu,mpu) (!(mpu401_read_stat(emu,mpu) & 0x40)) argument
1241 static void mpu401_clear_rx(struct emu10k1x *emu, struct emu10k1x_midi *mpu) in mpu401_clear_rx() argument
1244 for (; timeout > 0 && mpu401_input_avail(emu, mpu); timeout--) in mpu401_clear_rx()
1245 mpu401_read_data(emu, mpu); in mpu401_clear_rx()
1248 dev_err(emu->card->dev, in mpu401_clear_rx()
1250 mpu401_read_stat(emu, mpu)); in mpu401_clear_rx()
1258 static void do_emu10k1x_midi_interrupt(struct emu10k1x *emu, in do_emu10k1x_midi_interrupt() argument
1264 snd_emu10k1x_intr_disable(emu, midi->tx_enable | midi->rx_enable); in do_emu10k1x_midi_interrupt()
1269 if ((status & midi->ipr_rx) && mpu401_input_avail(emu, midi)) { in do_emu10k1x_midi_interrupt()
1271 mpu401_clear_rx(emu, midi); in do_emu10k1x_midi_interrupt()
1273 byte = mpu401_read_data(emu, midi); in do_emu10k1x_midi_interrupt()
1281 if ((status & midi->ipr_tx) && mpu401_output_ready(emu, midi)) { in do_emu10k1x_midi_interrupt()
1284 mpu401_write_data(emu, midi, byte); in do_emu10k1x_midi_interrupt()
1286 snd_emu10k1x_intr_disable(emu, midi->tx_enable); in do_emu10k1x_midi_interrupt()
1292 static void snd_emu10k1x_midi_interrupt(struct emu10k1x *emu, unsigned int status) in snd_emu10k1x_midi_interrupt() argument
1294 do_emu10k1x_midi_interrupt(emu, &emu->midi, status); in snd_emu10k1x_midi_interrupt()
1297 static int snd_emu10k1x_midi_cmd(struct emu10k1x * emu, in snd_emu10k1x_midi_cmd() argument
1304 mpu401_write_data(emu, midi, 0x00); in snd_emu10k1x_midi_cmd()
1307 mpu401_write_cmd(emu, midi, cmd); in snd_emu10k1x_midi_cmd()
1312 if (mpu401_input_avail(emu, midi)) { in snd_emu10k1x_midi_cmd()
1313 if (mpu401_read_data(emu, midi) == MPU401_ACK) in snd_emu10k1x_midi_cmd()
1317 if (!ok && mpu401_read_data(emu, midi) == MPU401_ACK) in snd_emu10k1x_midi_cmd()
1324 dev_err(emu->card->dev, in snd_emu10k1x_midi_cmd()
1326 cmd, emu->port, in snd_emu10k1x_midi_cmd()
1327 mpu401_read_stat(emu, midi), in snd_emu10k1x_midi_cmd()
1328 mpu401_read_data(emu, midi)); in snd_emu10k1x_midi_cmd()
1336 struct emu10k1x *emu; in snd_emu10k1x_midi_input_open() local
1340 emu = midi->emu; in snd_emu10k1x_midi_input_open()
1341 if (snd_BUG_ON(!emu)) in snd_emu10k1x_midi_input_open()
1348 if (snd_emu10k1x_midi_cmd(emu, midi, MPU401_RESET, 1)) in snd_emu10k1x_midi_input_open()
1350 if (snd_emu10k1x_midi_cmd(emu, midi, MPU401_ENTER_UART, 1)) in snd_emu10k1x_midi_input_open()
1363 struct emu10k1x *emu; in snd_emu10k1x_midi_output_open() local
1367 emu = midi->emu; in snd_emu10k1x_midi_output_open()
1368 if (snd_BUG_ON(!emu)) in snd_emu10k1x_midi_output_open()
1375 if (snd_emu10k1x_midi_cmd(emu, midi, MPU401_RESET, 1)) in snd_emu10k1x_midi_output_open()
1377 if (snd_emu10k1x_midi_cmd(emu, midi, MPU401_ENTER_UART, 1)) in snd_emu10k1x_midi_output_open()
1390 struct emu10k1x *emu; in snd_emu10k1x_midi_input_close() local
1395 emu = midi->emu; in snd_emu10k1x_midi_input_close()
1396 if (snd_BUG_ON(!emu)) in snd_emu10k1x_midi_input_close()
1399 snd_emu10k1x_intr_disable(emu, midi->rx_enable); in snd_emu10k1x_midi_input_close()
1404 err = snd_emu10k1x_midi_cmd(emu, midi, MPU401_RESET, 0); in snd_emu10k1x_midi_input_close()
1413 struct emu10k1x *emu; in snd_emu10k1x_midi_output_close() local
1418 emu = midi->emu; in snd_emu10k1x_midi_output_close()
1419 if (snd_BUG_ON(!emu)) in snd_emu10k1x_midi_output_close()
1422 snd_emu10k1x_intr_disable(emu, midi->tx_enable); in snd_emu10k1x_midi_output_close()
1427 err = snd_emu10k1x_midi_cmd(emu, midi, MPU401_RESET, 0); in snd_emu10k1x_midi_output_close()
1436 struct emu10k1x *emu; in snd_emu10k1x_midi_input_trigger() local
1438 emu = midi->emu; in snd_emu10k1x_midi_input_trigger()
1439 if (snd_BUG_ON(!emu)) in snd_emu10k1x_midi_input_trigger()
1443 snd_emu10k1x_intr_enable(emu, midi->rx_enable); in snd_emu10k1x_midi_input_trigger()
1445 snd_emu10k1x_intr_disable(emu, midi->rx_enable); in snd_emu10k1x_midi_input_trigger()
1450 struct emu10k1x *emu; in snd_emu10k1x_midi_output_trigger() local
1454 emu = midi->emu; in snd_emu10k1x_midi_output_trigger()
1455 if (snd_BUG_ON(!emu)) in snd_emu10k1x_midi_output_trigger()
1465 if (mpu401_output_ready(emu, midi)) { in snd_emu10k1x_midi_output_trigger()
1472 mpu401_write_data(emu, midi, byte); in snd_emu10k1x_midi_output_trigger()
1479 snd_emu10k1x_intr_enable(emu, midi->tx_enable); in snd_emu10k1x_midi_output_trigger()
1481 snd_emu10k1x_intr_disable(emu, midi->tx_enable); in snd_emu10k1x_midi_output_trigger()
1510 static int emu10k1x_midi_init(struct emu10k1x *emu, in emu10k1x_midi_init() argument
1517 if ((err = snd_rawmidi_new(emu->card, name, device, 1, 1, &rmidi)) < 0) in emu10k1x_midi_init()
1519 midi->emu = emu; in emu10k1x_midi_init()
1535 static int snd_emu10k1x_midi(struct emu10k1x *emu) in snd_emu10k1x_midi() argument
1537 struct emu10k1x_midi *midi = &emu->midi; in snd_emu10k1x_midi()
1540 if ((err = emu10k1x_midi_init(emu, midi, 0, "EMU10K1X MPU-401 (UART)")) < 0) in snd_emu10k1x_midi()