Lines Matching refs:chan

112 	struct sprd_mcdt_chan chan[MCDT_CHANNEL_NUM];
531 struct sprd_mcdt_chan *chan = &mcdt->chan[i];
534 if (chan->cb)
535 chan->cb->notify(chan->cb->data);
541 struct sprd_mcdt_chan *chan =
542 &mcdt->chan[i + MCDT_ADC_CHANNEL_NUM];
545 if (chan->cb)
546 chan->cb->notify(chan->cb->data);
557 * @chan: the MCDT channel
569 int sprd_mcdt_chan_write(struct sprd_mcdt_chan *chan, char *tx_buf, u32 size)
571 struct sprd_mcdt_dev *mcdt = chan->mcdt;
578 if (chan->dma_enable) {
585 if (sprd_mcdt_chan_fifo_sts(mcdt, chan->id, MCDT_DAC_FIFO_REAL_FULL)) {
591 avail = sprd_mcdt_dac_fifo_avail(mcdt, chan->id);
600 sprd_mcdt_dac_write_fifo(mcdt, chan->id, *buf++);
609 * @chan: the MCDT channel
620 int sprd_mcdt_chan_read(struct sprd_mcdt_chan *chan, char *rx_buf, u32 size)
622 struct sprd_mcdt_dev *mcdt = chan->mcdt;
629 if (chan->dma_enable) {
635 if (sprd_mcdt_chan_fifo_sts(mcdt, chan->id, MCDT_ADC_FIFO_REAL_EMPTY)) {
641 avail = sprd_mcdt_adc_fifo_avail(mcdt, chan->id);
646 sprd_mcdt_adc_read_fifo(mcdt, chan->id, buf++);
655 * @chan: the MCDT channel
671 int sprd_mcdt_chan_int_enable(struct sprd_mcdt_chan *chan, u32 water_mark,
674 struct sprd_mcdt_dev *mcdt = chan->mcdt;
680 if (chan->dma_enable || chan->int_enable) {
686 switch (chan->type) {
688 sprd_mcdt_adc_fifo_clear(mcdt, chan->id);
689 sprd_mcdt_adc_set_watermark(mcdt, chan->id, water_mark,
691 sprd_mcdt_chan_int_en(mcdt, chan->id,
693 sprd_mcdt_ap_int_enable(mcdt, chan->id, true);
697 sprd_mcdt_dac_fifo_clear(mcdt, chan->id);
698 sprd_mcdt_dac_set_watermark(mcdt, chan->id,
700 sprd_mcdt_chan_int_en(mcdt, chan->id,
702 sprd_mcdt_ap_int_enable(mcdt, chan->id, true);
711 chan->cb = cb;
712 chan->int_enable = true;
723 * @chan: the MCDT channel
725 void sprd_mcdt_chan_int_disable(struct sprd_mcdt_chan *chan)
727 struct sprd_mcdt_dev *mcdt = chan->mcdt;
732 if (!chan->int_enable) {
737 switch (chan->type) {
739 sprd_mcdt_chan_int_en(mcdt, chan->id,
741 sprd_mcdt_chan_int_clear(mcdt, chan->id, MCDT_ADC_FIFO_AF_INT);
742 sprd_mcdt_ap_int_enable(mcdt, chan->id, false);
746 sprd_mcdt_chan_int_en(mcdt, chan->id,
748 sprd_mcdt_chan_int_clear(mcdt, chan->id, MCDT_DAC_FIFO_AE_INT);
749 sprd_mcdt_ap_int_enable(mcdt, chan->id, false);
756 chan->int_enable = false;
763 * @chan: the MCDT channel
773 int sprd_mcdt_chan_dma_enable(struct sprd_mcdt_chan *chan,
777 struct sprd_mcdt_dev *mcdt = chan->mcdt;
783 if (chan->dma_enable || chan->int_enable ||
790 switch (chan->type) {
792 sprd_mcdt_adc_fifo_clear(mcdt, chan->id);
793 sprd_mcdt_adc_set_watermark(mcdt, chan->id,
795 sprd_mcdt_adc_dma_enable(mcdt, chan->id, true);
796 sprd_mcdt_adc_dma_chn_select(mcdt, chan->id, dma_chan);
797 sprd_mcdt_adc_dma_ack_select(mcdt, chan->id, dma_chan);
801 sprd_mcdt_dac_fifo_clear(mcdt, chan->id);
802 sprd_mcdt_dac_set_watermark(mcdt, chan->id,
804 sprd_mcdt_dac_dma_enable(mcdt, chan->id, true);
805 sprd_mcdt_dac_dma_chn_select(mcdt, chan->id, dma_chan);
806 sprd_mcdt_dac_dma_ack_select(mcdt, chan->id, dma_chan);
815 chan->dma_enable = true;
825 * @chan: the MCDT channel
827 void sprd_mcdt_chan_dma_disable(struct sprd_mcdt_chan *chan)
829 struct sprd_mcdt_dev *mcdt = chan->mcdt;
834 if (!chan->dma_enable) {
839 switch (chan->type) {
841 sprd_mcdt_adc_dma_enable(mcdt, chan->id, false);
842 sprd_mcdt_adc_fifo_clear(mcdt, chan->id);
846 sprd_mcdt_dac_dma_enable(mcdt, chan->id, false);
847 sprd_mcdt_dac_fifo_clear(mcdt, chan->id);
854 chan->dma_enable = false;
891 * @chan: the channel to be freed
893 void sprd_mcdt_free_chan(struct sprd_mcdt_chan *chan)
897 sprd_mcdt_chan_dma_disable(chan);
898 sprd_mcdt_chan_int_disable(chan);
903 if (temp == chan) {
909 list_add_tail(&chan->list, &sprd_mcdt_chan_list);
920 struct sprd_mcdt_chan *chan = &mcdt->chan[i];
923 chan->id = i;
924 chan->type = SPRD_MCDT_ADC_CHAN;
925 chan->fifo_phys = res->start + MCDT_CH0_RXD + i * 4;
927 chan->id = i - MCDT_ADC_CHANNEL_NUM;
928 chan->type = SPRD_MCDT_DAC_CHAN;
929 chan->fifo_phys = res->start + MCDT_CH0_TXD +
933 chan->mcdt = mcdt;
934 INIT_LIST_HEAD(&chan->list);
937 list_add_tail(&chan->list, &sprd_mcdt_chan_list);
978 struct sprd_mcdt_chan *chan, *temp;
982 list_for_each_entry_safe(chan, temp, &sprd_mcdt_chan_list, list)
983 list_del(&chan->list);