Lines Matching refs:emu
185 struct emu10k1x *emu; member
193 struct emu10k1x *emu; member
200 struct emu10k1x *emu; member
211 void (*interrupt)(struct emu10k1x *emu, unsigned int status);
281 static unsigned int snd_emu10k1x_ptr_read(struct emu10k1x * emu, in snd_emu10k1x_ptr_read() argument
290 spin_lock_irqsave(&emu->emu_lock, flags); in snd_emu10k1x_ptr_read()
291 outl(regptr, emu->port + PTR); in snd_emu10k1x_ptr_read()
292 val = inl(emu->port + DATA); in snd_emu10k1x_ptr_read()
293 spin_unlock_irqrestore(&emu->emu_lock, flags); in snd_emu10k1x_ptr_read()
297 static void snd_emu10k1x_ptr_write(struct emu10k1x *emu, in snd_emu10k1x_ptr_write() argument
307 spin_lock_irqsave(&emu->emu_lock, flags); in snd_emu10k1x_ptr_write()
308 outl(regptr, emu->port + PTR); in snd_emu10k1x_ptr_write()
309 outl(data, emu->port + DATA); in snd_emu10k1x_ptr_write()
310 spin_unlock_irqrestore(&emu->emu_lock, flags); in snd_emu10k1x_ptr_write()
313 static void snd_emu10k1x_intr_enable(struct emu10k1x *emu, unsigned int intrenb) in snd_emu10k1x_intr_enable() argument
318 spin_lock_irqsave(&emu->emu_lock, flags); in snd_emu10k1x_intr_enable()
319 intr_enable = inl(emu->port + INTE) | intrenb; in snd_emu10k1x_intr_enable()
320 outl(intr_enable, emu->port + INTE); in snd_emu10k1x_intr_enable()
321 spin_unlock_irqrestore(&emu->emu_lock, flags); in snd_emu10k1x_intr_enable()
324 static void snd_emu10k1x_intr_disable(struct emu10k1x *emu, unsigned int intrenb) in snd_emu10k1x_intr_disable() argument
329 spin_lock_irqsave(&emu->emu_lock, flags); in snd_emu10k1x_intr_disable()
330 intr_enable = inl(emu->port + INTE) & ~intrenb; in snd_emu10k1x_intr_disable()
331 outl(intr_enable, emu->port + INTE); in snd_emu10k1x_intr_disable()
332 spin_unlock_irqrestore(&emu->emu_lock, flags); in snd_emu10k1x_intr_disable()
335 static void snd_emu10k1x_gpio_write(struct emu10k1x *emu, unsigned int value) in snd_emu10k1x_gpio_write() argument
339 spin_lock_irqsave(&emu->emu_lock, flags); in snd_emu10k1x_gpio_write()
340 outl(value, emu->port + GPIO); in snd_emu10k1x_gpio_write()
341 spin_unlock_irqrestore(&emu->emu_lock, flags); in snd_emu10k1x_gpio_write()
349 static void snd_emu10k1x_pcm_interrupt(struct emu10k1x *emu, struct emu10k1x_voice *voice) in snd_emu10k1x_pcm_interrupt() argument
358 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()
563 epcm->emu = chip; in snd_emu10k1x_pcm_open_capture()
588 if (epcm->emu->capture_voice.use) in snd_emu10k1x_pcm_hw_params_capture()
590 epcm->voice = &epcm->emu->capture_voice; in snd_emu10k1x_pcm_hw_params_capture()
621 struct emu10k1x *emu = snd_pcm_substream_chip(substream); in snd_emu10k1x_pcm_prepare_capture() local
624 snd_emu10k1x_ptr_write(emu, CAPTURE_DMA_ADDR, 0, runtime->dma_addr); in snd_emu10k1x_pcm_prepare_capture()
625 …snd_emu10k1x_ptr_write(emu, CAPTURE_BUFFER_SIZE, 0, frames_to_bytes(runtime, runtime->buffer_size)… in snd_emu10k1x_pcm_prepare_capture()
626 snd_emu10k1x_ptr_write(emu, CAPTURE_POINTER, 0, 0); in snd_emu10k1x_pcm_prepare_capture()
627 snd_emu10k1x_ptr_write(emu, CAPTURE_UNKNOWN, 0, 0); in snd_emu10k1x_pcm_prepare_capture()
636 struct emu10k1x *emu = snd_pcm_substream_chip(substream); in snd_emu10k1x_pcm_trigger_capture() local
643 snd_emu10k1x_intr_enable(emu, INTE_CAP_0_LOOP | in snd_emu10k1x_pcm_trigger_capture()
645 …snd_emu10k1x_ptr_write(emu, TRIGGER_CHANNEL, 0, snd_emu10k1x_ptr_read(emu, TRIGGER_CHANNEL, 0)|TRI… in snd_emu10k1x_pcm_trigger_capture()
650 snd_emu10k1x_intr_disable(emu, INTE_CAP_0_LOOP | in snd_emu10k1x_pcm_trigger_capture()
652 …snd_emu10k1x_ptr_write(emu, TRIGGER_CHANNEL, 0, snd_emu10k1x_ptr_read(emu, TRIGGER_CHANNEL, 0) & ~… in snd_emu10k1x_pcm_trigger_capture()
665 struct emu10k1x *emu = snd_pcm_substream_chip(substream); in snd_emu10k1x_pcm_pointer_capture() local
673 ptr = bytes_to_frames(runtime, snd_emu10k1x_ptr_read(emu, CAPTURE_POINTER, 0)); in snd_emu10k1x_pcm_pointer_capture()
693 struct emu10k1x *emu = ac97->private_data; in snd_emu10k1x_ac97_read() local
697 spin_lock_irqsave(&emu->emu_lock, flags); in snd_emu10k1x_ac97_read()
698 outb(reg, emu->port + AC97ADDRESS); in snd_emu10k1x_ac97_read()
699 val = inw(emu->port + AC97DATA); in snd_emu10k1x_ac97_read()
700 spin_unlock_irqrestore(&emu->emu_lock, flags); in snd_emu10k1x_ac97_read()
707 struct emu10k1x *emu = ac97->private_data; in snd_emu10k1x_ac97_write() local
710 spin_lock_irqsave(&emu->emu_lock, flags); in snd_emu10k1x_ac97_write()
711 outb(reg, emu->port + AC97ADDRESS); in snd_emu10k1x_ac97_write()
712 outw(val, emu->port + AC97DATA); in snd_emu10k1x_ac97_write()
713 spin_unlock_irqrestore(&emu->emu_lock, flags); in snd_emu10k1x_ac97_write()
832 static int snd_emu10k1x_pcm(struct emu10k1x *emu, int device) in snd_emu10k1x_pcm() argument
842 if ((err = snd_pcm_new(emu->card, "emu10k1x", device, 1, capture, &pcm)) < 0) in snd_emu10k1x_pcm()
845 pcm->private_data = emu; in snd_emu10k1x_pcm()
873 emu->pcm = pcm; in snd_emu10k1x_pcm()
876 &emu->pci->dev, 32*1024, 32*1024); in snd_emu10k1x_pcm()
952 chip->voices[ch].emu = chip; in snd_emu10k1x_create()
1007 struct emu10k1x *emu = entry->private_data; in snd_emu10k1x_proc_reg_read() local
1014 spin_lock_irqsave(&emu->emu_lock, flags); in snd_emu10k1x_proc_reg_read()
1015 value = inl(emu->port + i); in snd_emu10k1x_proc_reg_read()
1016 spin_unlock_irqrestore(&emu->emu_lock, flags); in snd_emu10k1x_proc_reg_read()
1021 value = snd_emu10k1x_ptr_read(emu, i, 0); in snd_emu10k1x_proc_reg_read()
1023 value1 = snd_emu10k1x_ptr_read(emu, i, 1); in snd_emu10k1x_proc_reg_read()
1024 value2 = snd_emu10k1x_ptr_read(emu, i, 2); in snd_emu10k1x_proc_reg_read()
1035 struct emu10k1x *emu = entry->private_data; in snd_emu10k1x_proc_reg_write() local
1044 snd_emu10k1x_ptr_write(emu, reg, channel_id, val); in snd_emu10k1x_proc_reg_write()
1048 static int snd_emu10k1x_proc_init(struct emu10k1x *emu) in snd_emu10k1x_proc_init() argument
1050 snd_card_rw_proc_new(emu->card, "emu10k1x_regs", emu, in snd_emu10k1x_proc_init()
1061 struct emu10k1x *emu = snd_kcontrol_chip(kcontrol); in snd_emu10k1x_shared_spdif_get() local
1063 ucontrol->value.integer.value[0] = (snd_emu10k1x_ptr_read(emu, SPDIF_SELECT, 0) == 0x700) ? 0 : 1; in snd_emu10k1x_shared_spdif_get()
1071 struct emu10k1x *emu = snd_kcontrol_chip(kcontrol); in snd_emu10k1x_shared_spdif_put() local
1078 snd_emu10k1x_ptr_write(emu, SPDIF_SELECT, 0, 0x000); in snd_emu10k1x_shared_spdif_put()
1079 snd_emu10k1x_ptr_write(emu, ROUTING, 0, 0x700); in snd_emu10k1x_shared_spdif_put()
1080 snd_emu10k1x_gpio_write(emu, 0x1000); in snd_emu10k1x_shared_spdif_put()
1083 snd_emu10k1x_ptr_write(emu, SPDIF_SELECT, 0, 0x700); in snd_emu10k1x_shared_spdif_put()
1084 snd_emu10k1x_ptr_write(emu, ROUTING, 0, 0x1003F); in snd_emu10k1x_shared_spdif_put()
1085 snd_emu10k1x_gpio_write(emu, 0x1080); in snd_emu10k1x_shared_spdif_put()
1109 struct emu10k1x *emu = snd_kcontrol_chip(kcontrol); in snd_emu10k1x_spdif_get() local
1112 ucontrol->value.iec958.status[0] = (emu->spdif_bits[idx] >> 0) & 0xff; in snd_emu10k1x_spdif_get()
1113 ucontrol->value.iec958.status[1] = (emu->spdif_bits[idx] >> 8) & 0xff; in snd_emu10k1x_spdif_get()
1114 ucontrol->value.iec958.status[2] = (emu->spdif_bits[idx] >> 16) & 0xff; in snd_emu10k1x_spdif_get()
1115 ucontrol->value.iec958.status[3] = (emu->spdif_bits[idx] >> 24) & 0xff; in snd_emu10k1x_spdif_get()
1132 struct emu10k1x *emu = snd_kcontrol_chip(kcontrol); in snd_emu10k1x_spdif_put() local
1141 change = val != emu->spdif_bits[idx]; in snd_emu10k1x_spdif_put()
1143 snd_emu10k1x_ptr_write(emu, SPCS0 + idx, 0, val); in snd_emu10k1x_spdif_put()
1144 emu->spdif_bits[idx] = val; in snd_emu10k1x_spdif_put()
1169 static int snd_emu10k1x_mixer(struct emu10k1x *emu) in snd_emu10k1x_mixer() argument
1173 struct snd_card *card = emu->card; in snd_emu10k1x_mixer()
1175 if ((kctl = snd_ctl_new1(&snd_emu10k1x_spdif_mask_control, emu)) == NULL) in snd_emu10k1x_mixer()
1179 if ((kctl = snd_ctl_new1(&snd_emu10k1x_shared_spdif, emu)) == NULL) in snd_emu10k1x_mixer()
1183 if ((kctl = snd_ctl_new1(&snd_emu10k1x_spdif_control, emu)) == NULL) in snd_emu10k1x_mixer()
1194 static inline unsigned char mpu401_read(struct emu10k1x *emu, struct emu10k1x_midi *mpu, int idx) in mpu401_read() argument
1196 return (unsigned char)snd_emu10k1x_ptr_read(emu, mpu->port + idx, 0); in mpu401_read()
1199 static inline void mpu401_write(struct emu10k1x *emu, struct emu10k1x_midi *mpu, int data, int idx) in mpu401_write() argument
1201 snd_emu10k1x_ptr_write(emu, mpu->port + idx, 0, data); in mpu401_write()
1204 #define mpu401_write_data(emu, mpu, data) mpu401_write(emu, mpu, data, 0) argument
1205 #define mpu401_write_cmd(emu, mpu, data) mpu401_write(emu, mpu, data, 1) argument
1206 #define mpu401_read_data(emu, mpu) mpu401_read(emu, mpu, 0) argument
1207 #define mpu401_read_stat(emu, mpu) mpu401_read(emu, mpu, 1) argument
1209 #define mpu401_input_avail(emu,mpu) (!(mpu401_read_stat(emu,mpu) & 0x80)) argument
1210 #define mpu401_output_ready(emu,mpu) (!(mpu401_read_stat(emu,mpu) & 0x40)) argument
1216 static void mpu401_clear_rx(struct emu10k1x *emu, struct emu10k1x_midi *mpu) in mpu401_clear_rx() argument
1219 for (; timeout > 0 && mpu401_input_avail(emu, mpu); timeout--) in mpu401_clear_rx()
1220 mpu401_read_data(emu, mpu); in mpu401_clear_rx()
1223 dev_err(emu->card->dev, in mpu401_clear_rx()
1225 mpu401_read_stat(emu, mpu)); in mpu401_clear_rx()
1233 static void do_emu10k1x_midi_interrupt(struct emu10k1x *emu, in do_emu10k1x_midi_interrupt() argument
1239 snd_emu10k1x_intr_disable(emu, midi->tx_enable | midi->rx_enable); in do_emu10k1x_midi_interrupt()
1244 if ((status & midi->ipr_rx) && mpu401_input_avail(emu, midi)) { in do_emu10k1x_midi_interrupt()
1246 mpu401_clear_rx(emu, midi); in do_emu10k1x_midi_interrupt()
1248 byte = mpu401_read_data(emu, midi); in do_emu10k1x_midi_interrupt()
1256 if ((status & midi->ipr_tx) && mpu401_output_ready(emu, midi)) { in do_emu10k1x_midi_interrupt()
1259 mpu401_write_data(emu, midi, byte); in do_emu10k1x_midi_interrupt()
1261 snd_emu10k1x_intr_disable(emu, midi->tx_enable); in do_emu10k1x_midi_interrupt()
1267 static void snd_emu10k1x_midi_interrupt(struct emu10k1x *emu, unsigned int status) in snd_emu10k1x_midi_interrupt() argument
1269 do_emu10k1x_midi_interrupt(emu, &emu->midi, status); in snd_emu10k1x_midi_interrupt()
1272 static int snd_emu10k1x_midi_cmd(struct emu10k1x * emu, in snd_emu10k1x_midi_cmd() argument
1279 mpu401_write_data(emu, midi, 0x00); in snd_emu10k1x_midi_cmd()
1282 mpu401_write_cmd(emu, midi, cmd); in snd_emu10k1x_midi_cmd()
1287 if (mpu401_input_avail(emu, midi)) { in snd_emu10k1x_midi_cmd()
1288 if (mpu401_read_data(emu, midi) == MPU401_ACK) in snd_emu10k1x_midi_cmd()
1292 if (!ok && mpu401_read_data(emu, midi) == MPU401_ACK) in snd_emu10k1x_midi_cmd()
1299 dev_err(emu->card->dev, in snd_emu10k1x_midi_cmd()
1301 cmd, emu->port, in snd_emu10k1x_midi_cmd()
1302 mpu401_read_stat(emu, midi), in snd_emu10k1x_midi_cmd()
1303 mpu401_read_data(emu, midi)); in snd_emu10k1x_midi_cmd()
1311 struct emu10k1x *emu; in snd_emu10k1x_midi_input_open() local
1315 emu = midi->emu; in snd_emu10k1x_midi_input_open()
1316 if (snd_BUG_ON(!emu)) in snd_emu10k1x_midi_input_open()
1323 if (snd_emu10k1x_midi_cmd(emu, midi, MPU401_RESET, 1)) in snd_emu10k1x_midi_input_open()
1325 if (snd_emu10k1x_midi_cmd(emu, midi, MPU401_ENTER_UART, 1)) in snd_emu10k1x_midi_input_open()
1338 struct emu10k1x *emu; in snd_emu10k1x_midi_output_open() local
1342 emu = midi->emu; in snd_emu10k1x_midi_output_open()
1343 if (snd_BUG_ON(!emu)) in snd_emu10k1x_midi_output_open()
1350 if (snd_emu10k1x_midi_cmd(emu, midi, MPU401_RESET, 1)) in snd_emu10k1x_midi_output_open()
1352 if (snd_emu10k1x_midi_cmd(emu, midi, MPU401_ENTER_UART, 1)) in snd_emu10k1x_midi_output_open()
1365 struct emu10k1x *emu; in snd_emu10k1x_midi_input_close() local
1370 emu = midi->emu; in snd_emu10k1x_midi_input_close()
1371 if (snd_BUG_ON(!emu)) in snd_emu10k1x_midi_input_close()
1374 snd_emu10k1x_intr_disable(emu, midi->rx_enable); in snd_emu10k1x_midi_input_close()
1379 err = snd_emu10k1x_midi_cmd(emu, midi, MPU401_RESET, 0); in snd_emu10k1x_midi_input_close()
1388 struct emu10k1x *emu; in snd_emu10k1x_midi_output_close() local
1393 emu = midi->emu; in snd_emu10k1x_midi_output_close()
1394 if (snd_BUG_ON(!emu)) in snd_emu10k1x_midi_output_close()
1397 snd_emu10k1x_intr_disable(emu, midi->tx_enable); in snd_emu10k1x_midi_output_close()
1402 err = snd_emu10k1x_midi_cmd(emu, midi, MPU401_RESET, 0); in snd_emu10k1x_midi_output_close()
1411 struct emu10k1x *emu; in snd_emu10k1x_midi_input_trigger() local
1413 emu = midi->emu; in snd_emu10k1x_midi_input_trigger()
1414 if (snd_BUG_ON(!emu)) in snd_emu10k1x_midi_input_trigger()
1418 snd_emu10k1x_intr_enable(emu, midi->rx_enable); in snd_emu10k1x_midi_input_trigger()
1420 snd_emu10k1x_intr_disable(emu, midi->rx_enable); in snd_emu10k1x_midi_input_trigger()
1425 struct emu10k1x *emu; in snd_emu10k1x_midi_output_trigger() local
1429 emu = midi->emu; in snd_emu10k1x_midi_output_trigger()
1430 if (snd_BUG_ON(!emu)) in snd_emu10k1x_midi_output_trigger()
1440 if (mpu401_output_ready(emu, midi)) { in snd_emu10k1x_midi_output_trigger()
1447 mpu401_write_data(emu, midi, byte); in snd_emu10k1x_midi_output_trigger()
1454 snd_emu10k1x_intr_enable(emu, midi->tx_enable); in snd_emu10k1x_midi_output_trigger()
1456 snd_emu10k1x_intr_disable(emu, midi->tx_enable); in snd_emu10k1x_midi_output_trigger()
1485 static int emu10k1x_midi_init(struct emu10k1x *emu, in emu10k1x_midi_init() argument
1492 if ((err = snd_rawmidi_new(emu->card, name, device, 1, 1, &rmidi)) < 0) in emu10k1x_midi_init()
1494 midi->emu = emu; in emu10k1x_midi_init()
1510 static int snd_emu10k1x_midi(struct emu10k1x *emu) in snd_emu10k1x_midi() argument
1512 struct emu10k1x_midi *midi = &emu->midi; in snd_emu10k1x_midi()
1515 if ((err = emu10k1x_midi_init(emu, midi, 0, "EMU10K1X MPU-401 (UART)")) < 0) in snd_emu10k1x_midi()