Lines Matching full:chip
55 static void __iomem *lx_dsp_register(struct lx6464es *chip, int port)
57 void __iomem *base_address = chip->port_dsp_bar;
61 unsigned long lx_dsp_reg_read(struct lx6464es *chip, int port)
63 void __iomem *address = lx_dsp_register(chip, port);
67 static void lx_dsp_reg_readbuf(struct lx6464es *chip, int port, u32 *data,
70 u32 __iomem *address = lx_dsp_register(chip, port);
79 void lx_dsp_reg_write(struct lx6464es *chip, int port, unsigned data)
81 void __iomem *address = lx_dsp_register(chip, port);
85 static void lx_dsp_reg_writebuf(struct lx6464es *chip, int port,
88 u32 __iomem *address = lx_dsp_register(chip, port);
112 static void __iomem *lx_plx_register(struct lx6464es *chip, int port)
114 void __iomem *base_address = chip->port_plx_remapped;
118 unsigned long lx_plx_reg_read(struct lx6464es *chip, int port)
120 void __iomem *address = lx_plx_register(chip, port);
124 void lx_plx_reg_write(struct lx6464es *chip, int port, u32 data)
126 void __iomem *address = lx_plx_register(chip, port);
256 static int lx_message_send_atomic(struct lx6464es *chip, struct lx_rmh *rmh)
261 if (lx_dsp_reg_read(chip, eReg_CSM) & (Reg_CSM_MC | Reg_CSM_MR)) {
262 dev_err(chip->card->dev, "PIOSendMessage eReg_CSM %x\n", reg);
267 lx_dsp_reg_writebuf(chip, eReg_CRM1, rmh->cmd, rmh->cmd_len);
270 lx_dsp_reg_write(chip, eReg_CSM, Reg_CSM_MC);
274 if (lx_dsp_reg_read(chip, eReg_CSM) & Reg_CSM_MR) {
276 reg = lx_dsp_reg_read(chip, eReg_CRM1);
283 dev_warn(chip->card->dev, "TIMEOUT lx_message_send_atomic! "
291 lx_dsp_reg_readbuf(chip, eReg_CRM2, rmh->stat,
295 dev_err(chip->card->dev, "rmh error: %08x\n", reg);
298 lx_dsp_reg_write(chip, eReg_CSM, 0);
302 dev_warn(chip->card->dev, "lx_message_send: dsp timeout\n");
306 dev_warn(chip->card->dev, "lx_message_send: dsp crashed\n");
317 int lx_dsp_get_version(struct lx6464es *chip, u32 *rdsp_version)
321 guard(mutex)(&chip->msg_lock);
323 lx_message_init(&chip->rmh, CMD_01_GET_SYS_CFG);
324 ret = lx_message_send_atomic(chip, &chip->rmh);
326 *rdsp_version = chip->rmh.stat[1];
330 int lx_dsp_get_clock_frequency(struct lx6464es *chip, u32 *rfreq)
337 guard(mutex)(&chip->msg_lock);
339 lx_message_init(&chip->rmh, CMD_01_GET_SYS_CFG);
340 ret = lx_message_send_atomic(chip, &chip->rmh);
343 freq_raw = chip->rmh.stat[0] >> FREQ_FIELD_OFFSET;
355 *rfreq = frequency * chip->freq_ratio;
360 int lx_dsp_get_mac(struct lx6464es *chip)
364 macmsb = lx_dsp_reg_read(chip, eReg_ADMACESMSB) & 0x00FFFFFF;
365 maclsb = lx_dsp_reg_read(chip, eReg_ADMACESLSB) & 0x00FFFFFF;
368 chip->mac_address[5] = ((u8 *)(&maclsb))[0];
369 chip->mac_address[4] = ((u8 *)(&maclsb))[1];
370 chip->mac_address[3] = ((u8 *)(&maclsb))[2];
371 chip->mac_address[2] = ((u8 *)(&macmsb))[0];
372 chip->mac_address[1] = ((u8 *)(&macmsb))[1];
373 chip->mac_address[0] = ((u8 *)(&macmsb))[2];
379 int lx_dsp_set_granularity(struct lx6464es *chip, u32 gran)
381 guard(mutex)(&chip->msg_lock);
383 lx_message_init(&chip->rmh, CMD_02_SET_GRANULARITY);
384 chip->rmh.cmd[0] |= gran;
386 return lx_message_send_atomic(chip, &chip->rmh);
389 int lx_dsp_read_async_events(struct lx6464es *chip, u32 *data)
393 guard(mutex)(&chip->msg_lock);
395 lx_message_init(&chip->rmh, CMD_04_GET_EVENT);
396 chip->rmh.stat_len = 9; /* we don't necessarily need the full length */
398 ret = lx_message_send_atomic(chip, &chip->rmh);
401 memcpy(data, chip->rmh.stat, chip->rmh.stat_len * sizeof(u32));
412 int lx_pipe_allocate(struct lx6464es *chip, u32 pipe, int is_capture,
418 guard(mutex)(&chip->msg_lock);
419 lx_message_init(&chip->rmh, CMD_06_ALLOCATE_PIPE);
421 chip->rmh.cmd[0] |= pipe_cmd;
422 chip->rmh.cmd[0] |= channels;
424 err = lx_message_send_atomic(chip, &chip->rmh);
427 dev_err(chip->card->dev, "could not allocate pipe\n");
432 int lx_pipe_release(struct lx6464es *chip, u32 pipe, int is_capture)
436 guard(mutex)(&chip->msg_lock);
437 lx_message_init(&chip->rmh, CMD_07_RELEASE_PIPE);
439 chip->rmh.cmd[0] |= pipe_cmd;
441 return lx_message_send_atomic(chip, &chip->rmh);
444 int lx_buffer_ask(struct lx6464es *chip, u32 pipe, int is_capture,
458 guard(mutex)(&chip->msg_lock);
459 lx_message_init(&chip->rmh, CMD_08_ASK_BUFFERS);
461 chip->rmh.cmd[0] |= pipe_cmd;
463 err = lx_message_send_atomic(chip, &chip->rmh);
468 u32 stat = chip->rmh.stat[i];
480 dev_dbg(chip->card->dev,
483 for (i = 0; i < MAX_STREAM_BUFFER && i < chip->rmh.stat_len;
485 dev_dbg(chip->card->dev, " stat[%d]: %x, %x\n", i,
486 chip->rmh.stat[i],
487 chip->rmh.stat[i] & MASK_DATA_SIZE);
495 int lx_pipe_stop(struct lx6464es *chip, u32 pipe, int is_capture)
499 guard(mutex)(&chip->msg_lock);
500 lx_message_init(&chip->rmh, CMD_09_STOP_PIPE);
502 chip->rmh.cmd[0] |= pipe_cmd;
504 return lx_message_send_atomic(chip, &chip->rmh);
507 static int lx_pipe_toggle_state(struct lx6464es *chip, u32 pipe, int is_capture)
511 guard(mutex)(&chip->msg_lock);
512 lx_message_init(&chip->rmh, CMD_0B_TOGGLE_PIPE_STATE);
514 chip->rmh.cmd[0] |= pipe_cmd;
516 return lx_message_send_atomic(chip, &chip->rmh);
520 int lx_pipe_start(struct lx6464es *chip, u32 pipe, int is_capture)
524 err = lx_pipe_wait_for_idle(chip, pipe, is_capture);
528 err = lx_pipe_toggle_state(chip, pipe, is_capture);
533 int lx_pipe_pause(struct lx6464es *chip, u32 pipe, int is_capture)
537 err = lx_pipe_wait_for_start(chip, pipe, is_capture);
541 err = lx_pipe_toggle_state(chip, pipe, is_capture);
547 int lx_pipe_sample_count(struct lx6464es *chip, u32 pipe, int is_capture,
553 guard(mutex)(&chip->msg_lock);
554 lx_message_init(&chip->rmh, CMD_0A_GET_PIPE_SPL_COUNT);
556 chip->rmh.cmd[0] |= pipe_cmd;
557 chip->rmh.stat_len = 2; /* need all words here! */
559 err = lx_message_send_atomic(chip, &chip->rmh); /* don't sleep! */
562 dev_err(chip->card->dev,
565 *rsample_count = ((u64)(chip->rmh.stat[0] & MASK_SPL_COUNT_HI)
567 + chip->rmh.stat[1]; /* lo part */
573 int lx_pipe_state(struct lx6464es *chip, u32 pipe, int is_capture, u16 *rstate)
578 guard(mutex)(&chip->msg_lock);
579 lx_message_init(&chip->rmh, CMD_0A_GET_PIPE_SPL_COUNT);
581 chip->rmh.cmd[0] |= pipe_cmd;
583 err = lx_message_send_atomic(chip, &chip->rmh);
586 dev_err(chip->card->dev, "could not query pipe's state\n");
588 *rstate = (chip->rmh.stat[0] >> PSTATE_OFFSET) & 0x0F;
593 static int lx_pipe_wait_for_state(struct lx6464es *chip, u32 pipe,
602 int err = lx_pipe_state(chip, pipe, is_capture, ¤t_state);
616 int lx_pipe_wait_for_start(struct lx6464es *chip, u32 pipe, int is_capture)
618 return lx_pipe_wait_for_state(chip, pipe, is_capture, PSTATE_RUN);
621 int lx_pipe_wait_for_idle(struct lx6464es *chip, u32 pipe, int is_capture)
623 return lx_pipe_wait_for_state(chip, pipe, is_capture, PSTATE_IDLE);
627 int lx_stream_set_state(struct lx6464es *chip, u32 pipe,
632 guard(mutex)(&chip->msg_lock);
633 lx_message_init(&chip->rmh, CMD_13_SET_STREAM_STATE);
635 chip->rmh.cmd[0] |= pipe_cmd;
636 chip->rmh.cmd[0] |= state;
638 return lx_message_send_atomic(chip, &chip->rmh);
641 int lx_stream_set_format(struct lx6464es *chip, struct snd_pcm_runtime *runtime,
647 guard(mutex)(&chip->msg_lock);
648 lx_message_init(&chip->rmh, CMD_0C_DEF_STREAM);
650 chip->rmh.cmd[0] |= pipe_cmd;
654 chip->rmh.cmd[0] |= (STREAM_FMT_16b << STREAM_FMT_OFFSET);
658 chip->rmh.cmd[0] |= (STREAM_FMT_intel << STREAM_FMT_OFFSET);
660 chip->rmh.cmd[0] |= channels-1;
662 return lx_message_send_atomic(chip, &chip->rmh);
665 int lx_stream_state(struct lx6464es *chip, u32 pipe, int is_capture,
671 guard(mutex)(&chip->msg_lock);
672 lx_message_init(&chip->rmh, CMD_0E_GET_STREAM_SPL_COUNT);
674 chip->rmh.cmd[0] |= pipe_cmd;
676 err = lx_message_send_atomic(chip, &chip->rmh);
678 *rstate = (chip->rmh.stat[0] & SF_START) ? START_STATE : PAUSE_STATE;
683 int lx_stream_sample_position(struct lx6464es *chip, u32 pipe, int is_capture,
689 guard(mutex)(&chip->msg_lock);
690 lx_message_init(&chip->rmh, CMD_0E_GET_STREAM_SPL_COUNT);
692 chip->rmh.cmd[0] |= pipe_cmd;
694 err = lx_message_send_atomic(chip, &chip->rmh);
696 *r_bytepos = ((u64) (chip->rmh.stat[0] & MASK_SPL_COUNT_HI)
698 + chip->rmh.stat[1]; /* lo part */
704 int lx_buffer_give(struct lx6464es *chip, u32 pipe, int is_capture,
711 guard(mutex)(&chip->msg_lock);
712 lx_message_init(&chip->rmh, CMD_0F_UPDATE_BUFFER);
714 chip->rmh.cmd[0] |= pipe_cmd;
715 chip->rmh.cmd[0] |= BF_NOTIFY_EOB; /* request interrupt notification */
719 chip->rmh.cmd[1] = buffer_size & MASK_DATA_SIZE;
720 chip->rmh.cmd[2] = buf_address_lo;
723 chip->rmh.cmd_len = 4;
724 chip->rmh.cmd[3] = buf_address_hi;
725 chip->rmh.cmd[0] |= BF_64BITS_ADR;
728 err = lx_message_send_atomic(chip, &chip->rmh);
731 *r_buffer_index = chip->rmh.stat[0];
736 dev_err(chip->card->dev,
740 dev_err(chip->card->dev,
744 dev_err(chip->card->dev,
750 int lx_buffer_free(struct lx6464es *chip, u32 pipe, int is_capture,
756 guard(mutex)(&chip->msg_lock);
757 lx_message_init(&chip->rmh, CMD_11_CANCEL_BUFFER);
759 chip->rmh.cmd[0] |= pipe_cmd;
760 chip->rmh.cmd[0] |= MASK_BUFFER_ID; /* ask for the current buffer: the
763 err = lx_message_send_atomic(chip, &chip->rmh);
766 *r_buffer_size = chip->rmh.stat[0] & MASK_DATA_SIZE;
771 int lx_buffer_cancel(struct lx6464es *chip, u32 pipe, int is_capture,
776 guard(mutex)(&chip->msg_lock);
777 lx_message_init(&chip->rmh, CMD_11_CANCEL_BUFFER);
779 chip->rmh.cmd[0] |= pipe_cmd;
780 chip->rmh.cmd[0] |= buffer_index;
782 return lx_message_send_atomic(chip, &chip->rmh);
791 int lx_level_unmute(struct lx6464es *chip, int is_capture, int unmute)
796 guard(mutex)(&chip->msg_lock);
797 lx_message_init(&chip->rmh, CMD_0D_SET_MUTE);
799 chip->rmh.cmd[0] |= PIPE_INFO_TO_CMD(is_capture, 0);
801 chip->rmh.cmd[1] = (u32)(mute_mask >> (u64)32); /* hi part */
802 chip->rmh.cmd[2] = (u32)(mute_mask & (u64)0xFFFFFFFF); /* lo part */
804 dev_dbg(chip->card->dev,
805 "mute %x %x %x\n", chip->rmh.cmd[0], chip->rmh.cmd[1],
806 chip->rmh.cmd[2]);
808 return lx_message_send_atomic(chip, &chip->rmh);
830 int lx_level_peaks(struct lx6464es *chip, int is_capture, int channels,
836 guard(mutex)(&chip->msg_lock);
840 lx_message_init(&chip->rmh, CMD_12_GET_PEAK);
841 chip->rmh.cmd[0] |= PIPE_INFO_TO_CMD(is_capture, i);
843 err = lx_message_send_atomic(chip, &chip->rmh);
846 s0 = peak_map[chip->rmh.stat[0] & 0x0F];
847 s1 = peak_map[(chip->rmh.stat[0] >> 4) & 0xf];
848 s2 = peak_map[(chip->rmh.stat[0] >> 8) & 0xf];
849 s3 = peak_map[(chip->rmh.stat[0] >> 12) & 0xf];
870 static u32 lx_interrupt_test_ack(struct lx6464es *chip)
872 u32 irqcs = lx_plx_reg_read(chip, ePLX_IRQCS);
879 while ((temp = lx_plx_reg_read(chip, ePLX_L2PCIDB))) {
882 lx_plx_reg_write(chip, ePLX_L2PCIDB, temp);
890 static int lx_interrupt_ack(struct lx6464es *chip, u32 *r_irqsrc,
894 u32 irqsrc = lx_interrupt_test_ack(chip);
910 /* dev_dbg(chip->card->dev, "interrupt: async event pending\n"); */
917 static int lx_interrupt_handle_async_events(struct lx6464es *chip, u32 irqsrc,
943 err = lx_dsp_read_async_events(chip, stat);
950 dev_dbg(chip->card->dev, "interrupt: EOBI pending %llx\n",
956 dev_dbg(chip->card->dev, "interrupt: EOBO pending %llx\n",
965 static int lx_interrupt_request_new_buffer(struct lx6464es *chip,
988 dev_dbg(chip->card->dev, "->lx_interrupt_request_new_buffer\n");
990 guard(mutex)(&chip->lock);
992 err = lx_buffer_ask(chip, 0, is_capture, &needed, &freed, size_array);
993 dev_dbg(chip->card->dev,
997 err = lx_buffer_give(chip, 0, is_capture, period_bytes, buf_lo, buf_hi,
999 dev_dbg(chip->card->dev,
1010 struct lx6464es *chip = dev_id;
1015 dev_dbg(chip->card->dev,
1018 if (!lx_interrupt_ack(chip, &irqsrc, &async_pending, &async_escmd)) {
1019 dev_dbg(chip->card->dev, "IRQ_NONE\n");
1027 dev_dbg(chip->card->dev, "interrupt: EOBI\n");
1030 dev_dbg(chip->card->dev, "interrupt: EOBO\n");
1033 dev_dbg(chip->card->dev, "interrupt: URUN\n");
1036 dev_dbg(chip->card->dev, "interrupt: ORUN\n");
1040 chip->irqsrc = irqsrc;
1050 dev_dbg(chip->card->dev, "interrupt requests escmd handling\n");
1058 struct lx6464es *chip = dev_id;
1065 err = lx_interrupt_handle_async_events(chip, chip->irqsrc,
1070 dev_err(chip->card->dev, "error handling async events\n");
1073 struct lx_stream *lx_stream = &chip->capture_stream;
1075 dev_dbg(chip->card->dev,
1077 err = lx_interrupt_request_new_buffer(chip, lx_stream);
1079 dev_err(chip->card->dev,
1085 struct lx_stream *lx_stream = &chip->playback_stream;
1087 dev_dbg(chip->card->dev,
1089 err = lx_interrupt_request_new_buffer(chip, lx_stream);
1091 dev_err(chip->card->dev,
1100 static void lx_irq_set(struct lx6464es *chip, int enable)
1102 u32 reg = lx_plx_reg_read(chip, ePLX_IRQCS);
1113 lx_plx_reg_write(chip, ePLX_IRQCS, reg);
1116 void lx_irq_enable(struct lx6464es *chip)
1118 dev_dbg(chip->card->dev, "->lx_irq_enable\n");
1119 lx_irq_set(chip, 1);
1122 void lx_irq_disable(struct lx6464es *chip)
1124 dev_dbg(chip->card->dev, "->lx_irq_disable\n");
1125 lx_irq_set(chip, 0);