Lines Matching refs:emu
184 struct emu10k1x *emu; member
192 struct emu10k1x *emu; member
199 struct emu10k1x *emu; member
210 void (*interrupt)(struct emu10k1x *emu, unsigned int status);
279 static unsigned int snd_emu10k1x_ptr_read(struct emu10k1x * emu, in snd_emu10k1x_ptr_read() argument
288 spin_lock_irqsave(&emu->emu_lock, flags); in snd_emu10k1x_ptr_read()
289 outl(regptr, emu->port + PTR); in snd_emu10k1x_ptr_read()
290 val = inl(emu->port + DATA); in snd_emu10k1x_ptr_read()
291 spin_unlock_irqrestore(&emu->emu_lock, flags); in snd_emu10k1x_ptr_read()
295 static void snd_emu10k1x_ptr_write(struct emu10k1x *emu, in snd_emu10k1x_ptr_write() argument
305 spin_lock_irqsave(&emu->emu_lock, flags); in snd_emu10k1x_ptr_write()
306 outl(regptr, emu->port + PTR); in snd_emu10k1x_ptr_write()
307 outl(data, emu->port + DATA); in snd_emu10k1x_ptr_write()
308 spin_unlock_irqrestore(&emu->emu_lock, flags); in snd_emu10k1x_ptr_write()
311 static void snd_emu10k1x_intr_enable(struct emu10k1x *emu, unsigned int intrenb) in snd_emu10k1x_intr_enable() argument
316 spin_lock_irqsave(&emu->emu_lock, flags); in snd_emu10k1x_intr_enable()
317 intr_enable = inl(emu->port + INTE) | intrenb; in snd_emu10k1x_intr_enable()
318 outl(intr_enable, emu->port + INTE); in snd_emu10k1x_intr_enable()
319 spin_unlock_irqrestore(&emu->emu_lock, flags); in snd_emu10k1x_intr_enable()
322 static void snd_emu10k1x_intr_disable(struct emu10k1x *emu, unsigned int intrenb) in snd_emu10k1x_intr_disable() argument
327 spin_lock_irqsave(&emu->emu_lock, flags); in snd_emu10k1x_intr_disable()
328 intr_enable = inl(emu->port + INTE) & ~intrenb; in snd_emu10k1x_intr_disable()
329 outl(intr_enable, emu->port + INTE); in snd_emu10k1x_intr_disable()
330 spin_unlock_irqrestore(&emu->emu_lock, flags); in snd_emu10k1x_intr_disable()
333 static void snd_emu10k1x_gpio_write(struct emu10k1x *emu, unsigned int value) in snd_emu10k1x_gpio_write() argument
337 spin_lock_irqsave(&emu->emu_lock, flags); in snd_emu10k1x_gpio_write()
338 outl(value, emu->port + GPIO); in snd_emu10k1x_gpio_write()
339 spin_unlock_irqrestore(&emu->emu_lock, flags); in snd_emu10k1x_gpio_write()
347 static void snd_emu10k1x_pcm_interrupt(struct emu10k1x *emu, struct emu10k1x_voice *voice) in snd_emu10k1x_pcm_interrupt() argument
357 dev_info(emu->card->dev, in snd_emu10k1x_pcm_interrupt()
384 epcm->emu = chip; in snd_emu10k1x_playback_open()
409 epcm->voice = &epcm->emu->voices[substream->pcm->device]; in snd_emu10k1x_pcm_hw_params()
440 struct emu10k1x *emu = snd_pcm_substream_chip(substream); in snd_emu10k1x_pcm_prepare() local
444 u32 *table_base = (u32 *)(emu->dma_buffer->area+1024*voice); in snd_emu10k1x_pcm_prepare()
453 snd_emu10k1x_ptr_write(emu, PLAYBACK_LIST_ADDR, voice, emu->dma_buffer->addr+1024*voice); in snd_emu10k1x_pcm_prepare()
454 snd_emu10k1x_ptr_write(emu, PLAYBACK_LIST_SIZE, voice, (runtime->periods - 1) << 19); in snd_emu10k1x_pcm_prepare()
455 snd_emu10k1x_ptr_write(emu, PLAYBACK_LIST_PTR, voice, 0); in snd_emu10k1x_pcm_prepare()
456 snd_emu10k1x_ptr_write(emu, PLAYBACK_POINTER, voice, 0); in snd_emu10k1x_pcm_prepare()
457 snd_emu10k1x_ptr_write(emu, PLAYBACK_UNKNOWN1, voice, 0); in snd_emu10k1x_pcm_prepare()
458 snd_emu10k1x_ptr_write(emu, PLAYBACK_UNKNOWN2, voice, 0); in snd_emu10k1x_pcm_prepare()
459 snd_emu10k1x_ptr_write(emu, PLAYBACK_DMA_ADDR, voice, runtime->dma_addr); in snd_emu10k1x_pcm_prepare()
461 …snd_emu10k1x_ptr_write(emu, PLAYBACK_PERIOD_SIZE, voice, frames_to_bytes(runtime, runtime->period_… in snd_emu10k1x_pcm_prepare()
470 struct emu10k1x *emu = snd_pcm_substream_chip(substream); in snd_emu10k1x_pcm_trigger() local
485 snd_emu10k1x_intr_enable(emu, (INTE_CH_0_LOOP | INTE_CH_0_HALF_LOOP) << channel); in snd_emu10k1x_pcm_trigger()
487 snd_emu10k1x_intr_enable(emu, INTE_CH_0_LOOP << channel); in snd_emu10k1x_pcm_trigger()
489 …snd_emu10k1x_ptr_write(emu, TRIGGER_CHANNEL, 0, snd_emu10k1x_ptr_read(emu, TRIGGER_CHANNEL, 0)|(TR… in snd_emu10k1x_pcm_trigger()
493 snd_emu10k1x_intr_disable(emu, (INTE_CH_0_LOOP | INTE_CH_0_HALF_LOOP) << channel); in snd_emu10k1x_pcm_trigger()
494 …snd_emu10k1x_ptr_write(emu, TRIGGER_CHANNEL, 0, snd_emu10k1x_ptr_read(emu, TRIGGER_CHANNEL, 0) & ~… in snd_emu10k1x_pcm_trigger()
507 struct emu10k1x *emu = snd_pcm_substream_chip(substream); in snd_emu10k1x_pcm_pointer() local
516 ptr3 = snd_emu10k1x_ptr_read(emu, PLAYBACK_LIST_PTR, channel); in snd_emu10k1x_pcm_pointer()
517 ptr1 = snd_emu10k1x_ptr_read(emu, PLAYBACK_POINTER, channel); in snd_emu10k1x_pcm_pointer()
518 ptr4 = snd_emu10k1x_ptr_read(emu, PLAYBACK_LIST_PTR, channel); in snd_emu10k1x_pcm_pointer()
524 ptr1 = snd_emu10k1x_ptr_read(emu, PLAYBACK_POINTER, channel); in snd_emu10k1x_pcm_pointer()
565 epcm->emu = chip; in snd_emu10k1x_pcm_open_capture()
590 if (epcm->emu->capture_voice.use) in snd_emu10k1x_pcm_hw_params_capture()
592 epcm->voice = &epcm->emu->capture_voice; in snd_emu10k1x_pcm_hw_params_capture()
623 struct emu10k1x *emu = snd_pcm_substream_chip(substream); in snd_emu10k1x_pcm_prepare_capture() local
626 snd_emu10k1x_ptr_write(emu, CAPTURE_DMA_ADDR, 0, runtime->dma_addr); in snd_emu10k1x_pcm_prepare_capture()
627 …snd_emu10k1x_ptr_write(emu, CAPTURE_BUFFER_SIZE, 0, frames_to_bytes(runtime, runtime->buffer_size)… in snd_emu10k1x_pcm_prepare_capture()
628 snd_emu10k1x_ptr_write(emu, CAPTURE_POINTER, 0, 0); in snd_emu10k1x_pcm_prepare_capture()
629 snd_emu10k1x_ptr_write(emu, CAPTURE_UNKNOWN, 0, 0); in snd_emu10k1x_pcm_prepare_capture()
638 struct emu10k1x *emu = snd_pcm_substream_chip(substream); in snd_emu10k1x_pcm_trigger_capture() local
645 snd_emu10k1x_intr_enable(emu, INTE_CAP_0_LOOP | in snd_emu10k1x_pcm_trigger_capture()
647 …snd_emu10k1x_ptr_write(emu, TRIGGER_CHANNEL, 0, snd_emu10k1x_ptr_read(emu, TRIGGER_CHANNEL, 0)|TRI… in snd_emu10k1x_pcm_trigger_capture()
652 snd_emu10k1x_intr_disable(emu, INTE_CAP_0_LOOP | in snd_emu10k1x_pcm_trigger_capture()
654 …snd_emu10k1x_ptr_write(emu, TRIGGER_CHANNEL, 0, snd_emu10k1x_ptr_read(emu, TRIGGER_CHANNEL, 0) & ~… in snd_emu10k1x_pcm_trigger_capture()
667 struct emu10k1x *emu = snd_pcm_substream_chip(substream); in snd_emu10k1x_pcm_pointer_capture() local
675 ptr = bytes_to_frames(runtime, snd_emu10k1x_ptr_read(emu, CAPTURE_POINTER, 0)); in snd_emu10k1x_pcm_pointer_capture()
695 struct emu10k1x *emu = ac97->private_data; in snd_emu10k1x_ac97_read() local
699 spin_lock_irqsave(&emu->emu_lock, flags); in snd_emu10k1x_ac97_read()
700 outb(reg, emu->port + AC97ADDRESS); in snd_emu10k1x_ac97_read()
701 val = inw(emu->port + AC97DATA); in snd_emu10k1x_ac97_read()
702 spin_unlock_irqrestore(&emu->emu_lock, flags); in snd_emu10k1x_ac97_read()
709 struct emu10k1x *emu = ac97->private_data; in snd_emu10k1x_ac97_write() local
712 spin_lock_irqsave(&emu->emu_lock, flags); in snd_emu10k1x_ac97_write()
713 outb(reg, emu->port + AC97ADDRESS); in snd_emu10k1x_ac97_write()
714 outw(val, emu->port + AC97DATA); in snd_emu10k1x_ac97_write()
715 spin_unlock_irqrestore(&emu->emu_lock, flags); in snd_emu10k1x_ac97_write()
813 static int snd_emu10k1x_pcm(struct emu10k1x *emu, int device) in snd_emu10k1x_pcm() argument
823 err = snd_pcm_new(emu->card, "emu10k1x", device, 1, capture, &pcm); in snd_emu10k1x_pcm()
827 pcm->private_data = emu; in snd_emu10k1x_pcm()
855 emu->pcm = pcm; in snd_emu10k1x_pcm()
858 &emu->pci->dev, 32*1024, 32*1024); in snd_emu10k1x_pcm()
917 chip->voices[ch].emu = chip; in snd_emu10k1x_create()
966 struct emu10k1x *emu = entry->private_data; in snd_emu10k1x_proc_reg_read() local
973 spin_lock_irqsave(&emu->emu_lock, flags); in snd_emu10k1x_proc_reg_read()
974 value = inl(emu->port + i); in snd_emu10k1x_proc_reg_read()
975 spin_unlock_irqrestore(&emu->emu_lock, flags); in snd_emu10k1x_proc_reg_read()
980 value = snd_emu10k1x_ptr_read(emu, i, 0); in snd_emu10k1x_proc_reg_read()
982 value1 = snd_emu10k1x_ptr_read(emu, i, 1); in snd_emu10k1x_proc_reg_read()
983 value2 = snd_emu10k1x_ptr_read(emu, i, 2); in snd_emu10k1x_proc_reg_read()
994 struct emu10k1x *emu = entry->private_data; in snd_emu10k1x_proc_reg_write() local
1003 snd_emu10k1x_ptr_write(emu, reg, channel_id, val); in snd_emu10k1x_proc_reg_write()
1007 static int snd_emu10k1x_proc_init(struct emu10k1x *emu) in snd_emu10k1x_proc_init() argument
1009 snd_card_rw_proc_new(emu->card, "emu10k1x_regs", emu, in snd_emu10k1x_proc_init()
1020 struct emu10k1x *emu = snd_kcontrol_chip(kcontrol); in snd_emu10k1x_shared_spdif_get() local
1022 ucontrol->value.integer.value[0] = (snd_emu10k1x_ptr_read(emu, SPDIF_SELECT, 0) == 0x700) ? 0 : 1; in snd_emu10k1x_shared_spdif_get()
1030 struct emu10k1x *emu = snd_kcontrol_chip(kcontrol); in snd_emu10k1x_shared_spdif_put() local
1037 snd_emu10k1x_ptr_write(emu, SPDIF_SELECT, 0, 0x000); in snd_emu10k1x_shared_spdif_put()
1038 snd_emu10k1x_ptr_write(emu, ROUTING, 0, 0x700); in snd_emu10k1x_shared_spdif_put()
1039 snd_emu10k1x_gpio_write(emu, 0x1000); in snd_emu10k1x_shared_spdif_put()
1042 snd_emu10k1x_ptr_write(emu, SPDIF_SELECT, 0, 0x700); in snd_emu10k1x_shared_spdif_put()
1043 snd_emu10k1x_ptr_write(emu, ROUTING, 0, 0x1003F); in snd_emu10k1x_shared_spdif_put()
1044 snd_emu10k1x_gpio_write(emu, 0x1080); in snd_emu10k1x_shared_spdif_put()
1068 struct emu10k1x *emu = snd_kcontrol_chip(kcontrol); in snd_emu10k1x_spdif_get() local
1071 ucontrol->value.iec958.status[0] = (emu->spdif_bits[idx] >> 0) & 0xff; in snd_emu10k1x_spdif_get()
1072 ucontrol->value.iec958.status[1] = (emu->spdif_bits[idx] >> 8) & 0xff; in snd_emu10k1x_spdif_get()
1073 ucontrol->value.iec958.status[2] = (emu->spdif_bits[idx] >> 16) & 0xff; in snd_emu10k1x_spdif_get()
1074 ucontrol->value.iec958.status[3] = (emu->spdif_bits[idx] >> 24) & 0xff; in snd_emu10k1x_spdif_get()
1091 struct emu10k1x *emu = snd_kcontrol_chip(kcontrol); in snd_emu10k1x_spdif_put() local
1100 change = val != emu->spdif_bits[idx]; in snd_emu10k1x_spdif_put()
1102 snd_emu10k1x_ptr_write(emu, SPCS0 + idx, 0, val); in snd_emu10k1x_spdif_put()
1103 emu->spdif_bits[idx] = val; in snd_emu10k1x_spdif_put()
1128 static int snd_emu10k1x_mixer(struct emu10k1x *emu) in snd_emu10k1x_mixer() argument
1132 struct snd_card *card = emu->card; in snd_emu10k1x_mixer()
1134 kctl = snd_ctl_new1(&snd_emu10k1x_spdif_mask_control, emu); in snd_emu10k1x_mixer()
1140 kctl = snd_ctl_new1(&snd_emu10k1x_shared_spdif, emu); in snd_emu10k1x_mixer()
1146 kctl = snd_ctl_new1(&snd_emu10k1x_spdif_control, emu); in snd_emu10k1x_mixer()
1159 static inline unsigned char mpu401_read(struct emu10k1x *emu, struct emu10k1x_midi *mpu, int idx) in mpu401_read() argument
1161 return (unsigned char)snd_emu10k1x_ptr_read(emu, mpu->port + idx, 0); in mpu401_read()
1164 static inline void mpu401_write(struct emu10k1x *emu, struct emu10k1x_midi *mpu, int data, int idx) in mpu401_write() argument
1166 snd_emu10k1x_ptr_write(emu, mpu->port + idx, 0, data); in mpu401_write()
1169 #define mpu401_write_data(emu, mpu, data) mpu401_write(emu, mpu, data, 0) argument
1170 #define mpu401_write_cmd(emu, mpu, data) mpu401_write(emu, mpu, data, 1) argument
1171 #define mpu401_read_data(emu, mpu) mpu401_read(emu, mpu, 0) argument
1172 #define mpu401_read_stat(emu, mpu) mpu401_read(emu, mpu, 1) argument
1174 #define mpu401_input_avail(emu,mpu) (!(mpu401_read_stat(emu,mpu) & 0x80)) argument
1175 #define mpu401_output_ready(emu,mpu) (!(mpu401_read_stat(emu,mpu) & 0x40)) argument
1181 static void mpu401_clear_rx(struct emu10k1x *emu, struct emu10k1x_midi *mpu) in mpu401_clear_rx() argument
1184 for (; timeout > 0 && mpu401_input_avail(emu, mpu); timeout--) in mpu401_clear_rx()
1185 mpu401_read_data(emu, mpu); in mpu401_clear_rx()
1188 dev_err(emu->card->dev, in mpu401_clear_rx()
1190 mpu401_read_stat(emu, mpu)); in mpu401_clear_rx()
1198 static void do_emu10k1x_midi_interrupt(struct emu10k1x *emu, in do_emu10k1x_midi_interrupt() argument
1204 snd_emu10k1x_intr_disable(emu, midi->tx_enable | midi->rx_enable); in do_emu10k1x_midi_interrupt()
1209 if ((status & midi->ipr_rx) && mpu401_input_avail(emu, midi)) { in do_emu10k1x_midi_interrupt()
1211 mpu401_clear_rx(emu, midi); in do_emu10k1x_midi_interrupt()
1213 byte = mpu401_read_data(emu, midi); in do_emu10k1x_midi_interrupt()
1221 if ((status & midi->ipr_tx) && mpu401_output_ready(emu, midi)) { in do_emu10k1x_midi_interrupt()
1224 mpu401_write_data(emu, midi, byte); in do_emu10k1x_midi_interrupt()
1226 snd_emu10k1x_intr_disable(emu, midi->tx_enable); in do_emu10k1x_midi_interrupt()
1232 static void snd_emu10k1x_midi_interrupt(struct emu10k1x *emu, unsigned int status) in snd_emu10k1x_midi_interrupt() argument
1234 do_emu10k1x_midi_interrupt(emu, &emu->midi, status); in snd_emu10k1x_midi_interrupt()
1237 static int snd_emu10k1x_midi_cmd(struct emu10k1x * emu, in snd_emu10k1x_midi_cmd() argument
1244 mpu401_write_data(emu, midi, 0x00); in snd_emu10k1x_midi_cmd()
1247 mpu401_write_cmd(emu, midi, cmd); in snd_emu10k1x_midi_cmd()
1252 if (mpu401_input_avail(emu, midi)) { in snd_emu10k1x_midi_cmd()
1253 if (mpu401_read_data(emu, midi) == MPU401_ACK) in snd_emu10k1x_midi_cmd()
1257 if (!ok && mpu401_read_data(emu, midi) == MPU401_ACK) in snd_emu10k1x_midi_cmd()
1264 dev_err(emu->card->dev, in snd_emu10k1x_midi_cmd()
1266 cmd, emu->port, in snd_emu10k1x_midi_cmd()
1267 mpu401_read_stat(emu, midi), in snd_emu10k1x_midi_cmd()
1268 mpu401_read_data(emu, midi)); in snd_emu10k1x_midi_cmd()
1276 struct emu10k1x *emu; in snd_emu10k1x_midi_input_open() local
1280 emu = midi->emu; in snd_emu10k1x_midi_input_open()
1281 if (snd_BUG_ON(!emu)) in snd_emu10k1x_midi_input_open()
1288 if (snd_emu10k1x_midi_cmd(emu, midi, MPU401_RESET, 1)) in snd_emu10k1x_midi_input_open()
1290 if (snd_emu10k1x_midi_cmd(emu, midi, MPU401_ENTER_UART, 1)) in snd_emu10k1x_midi_input_open()
1303 struct emu10k1x *emu; in snd_emu10k1x_midi_output_open() local
1307 emu = midi->emu; in snd_emu10k1x_midi_output_open()
1308 if (snd_BUG_ON(!emu)) in snd_emu10k1x_midi_output_open()
1315 if (snd_emu10k1x_midi_cmd(emu, midi, MPU401_RESET, 1)) in snd_emu10k1x_midi_output_open()
1317 if (snd_emu10k1x_midi_cmd(emu, midi, MPU401_ENTER_UART, 1)) in snd_emu10k1x_midi_output_open()
1330 struct emu10k1x *emu; in snd_emu10k1x_midi_input_close() local
1335 emu = midi->emu; in snd_emu10k1x_midi_input_close()
1336 if (snd_BUG_ON(!emu)) in snd_emu10k1x_midi_input_close()
1339 snd_emu10k1x_intr_disable(emu, midi->rx_enable); in snd_emu10k1x_midi_input_close()
1344 err = snd_emu10k1x_midi_cmd(emu, midi, MPU401_RESET, 0); in snd_emu10k1x_midi_input_close()
1353 struct emu10k1x *emu; in snd_emu10k1x_midi_output_close() local
1358 emu = midi->emu; in snd_emu10k1x_midi_output_close()
1359 if (snd_BUG_ON(!emu)) in snd_emu10k1x_midi_output_close()
1362 snd_emu10k1x_intr_disable(emu, midi->tx_enable); in snd_emu10k1x_midi_output_close()
1367 err = snd_emu10k1x_midi_cmd(emu, midi, MPU401_RESET, 0); in snd_emu10k1x_midi_output_close()
1376 struct emu10k1x *emu; in snd_emu10k1x_midi_input_trigger() local
1378 emu = midi->emu; in snd_emu10k1x_midi_input_trigger()
1379 if (snd_BUG_ON(!emu)) in snd_emu10k1x_midi_input_trigger()
1383 snd_emu10k1x_intr_enable(emu, midi->rx_enable); in snd_emu10k1x_midi_input_trigger()
1385 snd_emu10k1x_intr_disable(emu, midi->rx_enable); in snd_emu10k1x_midi_input_trigger()
1390 struct emu10k1x *emu; in snd_emu10k1x_midi_output_trigger() local
1394 emu = midi->emu; in snd_emu10k1x_midi_output_trigger()
1395 if (snd_BUG_ON(!emu)) in snd_emu10k1x_midi_output_trigger()
1405 if (mpu401_output_ready(emu, midi)) { in snd_emu10k1x_midi_output_trigger()
1412 mpu401_write_data(emu, midi, byte); in snd_emu10k1x_midi_output_trigger()
1419 snd_emu10k1x_intr_enable(emu, midi->tx_enable); in snd_emu10k1x_midi_output_trigger()
1421 snd_emu10k1x_intr_disable(emu, midi->tx_enable); in snd_emu10k1x_midi_output_trigger()
1450 static int emu10k1x_midi_init(struct emu10k1x *emu, in emu10k1x_midi_init() argument
1457 err = snd_rawmidi_new(emu->card, name, device, 1, 1, &rmidi); in emu10k1x_midi_init()
1460 midi->emu = emu; in emu10k1x_midi_init()
1476 static int snd_emu10k1x_midi(struct emu10k1x *emu) in snd_emu10k1x_midi() argument
1478 struct emu10k1x_midi *midi = &emu->midi; in snd_emu10k1x_midi()
1481 err = emu10k1x_midi_init(emu, midi, 0, "EMU10K1X MPU-401 (UART)"); in snd_emu10k1x_midi()