Lines Matching +full:ssiu +full:-

1 // SPDX-License-Identifier: GPL-2.0
3 // Renesas R-Car Audio DMAC support
52 #define rsnd_priv_to_dmac(p) ((struct rsnd_dma_ctrl *)(p)->dma)
54 #define rsnd_dma_to_dmaen(dma) (&(dma)->dma.en)
55 #define rsnd_dma_to_dmapp(dma) (&(dma)->dma.pp)
86 return snd_dmaengine_pcm_trigger(io->substream, SNDRV_PCM_TRIGGER_STOP); in rsnd_dmaen_stop()
101 if (dmaen->chan) in rsnd_dmaen_cleanup()
102 snd_dmaengine_pcm_close_release_chan(io->substream); in rsnd_dmaen_cleanup()
104 dmaen->chan = NULL; in rsnd_dmaen_cleanup()
118 if (dmaen->chan) in rsnd_dmaen_prepare()
126 dmaen->chan = rsnd_dmaen_request_channel(io, in rsnd_dmaen_prepare()
127 dma->mod_from, in rsnd_dmaen_prepare()
128 dma->mod_to); in rsnd_dmaen_prepare()
129 if (IS_ERR_OR_NULL(dmaen->chan)) { in rsnd_dmaen_prepare()
130 dmaen->chan = NULL; in rsnd_dmaen_prepare()
132 return -EIO; in rsnd_dmaen_prepare()
135 return snd_dmaengine_pcm_open(io->substream, dmaen->chan); in rsnd_dmaen_prepare()
150 * in case of monaural data writing or reading through Audio-DMAC in rsnd_dmaen_start()
156 int bits = snd_pcm_format_physical_width(runtime->format); in rsnd_dmaen_start()
170 return -EINVAL; in rsnd_dmaen_start()
174 cfg.direction = snd_pcm_substream_to_dma_direction(io->substream); in rsnd_dmaen_start()
175 cfg.src_addr = dma->src_addr; in rsnd_dmaen_start()
176 cfg.dst_addr = dma->dst_addr; in rsnd_dmaen_start()
180 dev_dbg(dev, "%s %pad -> %pad\n", in rsnd_dmaen_start()
184 ret = dmaengine_slave_config(dmaen->chan, &cfg); in rsnd_dmaen_start()
188 return snd_dmaengine_pcm_trigger(io->substream, SNDRV_PCM_TRIGGER_START); in rsnd_dmaen_start()
230 /* Let's follow when -EPROBE_DEFER case */ in rsnd_dmaen_attach()
231 if (PTR_ERR(chan) == -EPROBE_DEFER) in rsnd_dmaen_attach()
240 return -EAGAIN; in rsnd_dmaen_attach()
248 io->dmac_dev = chan->device->dev; in rsnd_dmaen_attach()
252 dmac->dmaen_num++; in rsnd_dmaen_attach()
261 *pointer = snd_dmaengine_pcm_pointer(io->substream); in rsnd_dmaen_pointer()
322 struct rsnd_mod *ssiu = rsnd_io_to_mod_ssiu(io); in rsnd_dmapp_get_id() local
330 (mod == ssiu)) { in rsnd_dmapp_get_id()
331 int busif = rsnd_mod_id_sub(ssiu); in rsnd_dmapp_get_id()
351 /* use non-prohibited SRS number as error */ in rsnd_dmapp_get_id()
367 (dmac->ppbase + 0x20 + reg + \
368 (0x10 * rsnd_dma_to_dmapp(dma)->dmapp_id))
419 return -EIO; in rsnd_dmapp_stop()
429 rsnd_dmapp_write(dma, dma->src_addr, PDMASAR); in rsnd_dmapp_start()
430 rsnd_dmapp_write(dma, dma->dst_addr, PDMADAR); in rsnd_dmapp_start()
431 rsnd_dmapp_write(dma, dmapp->chcr, PDMACHCR); in rsnd_dmapp_start()
445 dmapp->dmapp_id = dmac->dmapp_num; in rsnd_dmapp_attach()
446 dmapp->chcr = rsnd_dmapp_get_chcr(io, mod_from, mod_to) | PDMACHCR_DE; in rsnd_dmapp_attach()
448 dmac->dmapp_num++; in rsnd_dmapp_attach()
451 dmapp->dmapp_id, &dma->src_addr, &dma->dst_addr, dmapp->chcr); in rsnd_dmapp_attach()
466 rsnd_debugfs_reg_show(m, dmac->ppres, dmac->ppbase, in rsnd_dmapp_debug_info()
467 0x20 + 0x10 * dmapp->dmapp_id, 0x10); in rsnd_dmapp_debug_info()
475 .name = "audmac-pp",
495 * ex) R-Car H2 case
498 * SSIU: 0xec541000 / 0xec100000 / 0xec100000 / 0xec400000 / 0xec400000
502 #define RDMA_SSI_I_N(addr, i) (addr ##_reg - 0x00300000 + (0x40 * i) + 0x8)
503 #define RDMA_SSI_O_N(addr, i) (addr ##_reg - 0x00300000 + (0x40 * i) + 0xc)
505 …DMA_SSIU_I_N(addr, i, j) (addr ##_reg - 0x00441000 + (0x1000 * (i)) + (((j) / 4) * 0xA000) + (((j)…
508 …DMA_SSIU_I_P(addr, i, j) (addr ##_reg - 0x00141000 + (0x1000 * (i)) + (((j) / 4) * 0xA000) + (((j)…
511 #define RDMA_SRC_I_N(addr, i) (addr ##_reg - 0x00500000 + (0x400 * i))
512 #define RDMA_SRC_O_N(addr, i) (addr ##_reg - 0x004fc000 + (0x400 * i))
514 #define RDMA_SRC_I_P(addr, i) (addr ##_reg - 0x00200000 + (0x400 * i))
515 #define RDMA_SRC_O_P(addr, i) (addr ##_reg - 0x001fc000 + (0x400 * i))
517 #define RDMA_CMD_O_N(addr, i) (addr ##_reg - 0x004f8000 + (0x400 * i))
518 #define RDMA_CMD_O_P(addr, i) (addr ##_reg - 0x001f8000 + (0x400 * i))
561 /* SSIU */ in rsnd_gen2_dma_addr()
575 * We can't support SSI9-4/5/6/7, because its address is in rsnd_gen2_dma_addr()
579 dev_err(dev, "This driver doesn't support SSI%d-%d, so far", in rsnd_gen2_dma_addr()
586 /* use SSIU or SSI ? */ in rsnd_gen2_dma_addr()
598 * ex) R-Car V4H case
599 * mod / SYS-DMAC in / SYS-DMAC out
619 return -EINVAL; in rsnd_gen4_dma_addr()
664 * It should use "rcar_sound,ssiu" on DT. in rsnd_dma_of_path()
667 * If it has "rcar_sound.ssiu", it will be used. in rsnd_dma_of_path()
674 struct rsnd_mod *ssiu = rsnd_io_to_mod_ssiu(io); in rsnd_dma_of_path() local
676 /* use SSIU */ in rsnd_dma_of_path()
677 ssi = ssiu; in rsnd_dma_of_path()
679 this = ssiu; in rsnd_dma_of_path()
695 * [S] -*-> [E] in rsnd_dma_of_path()
696 * [S] -*-> SRC -o-> [E] in rsnd_dma_of_path()
697 * [S] -*-> SRC -> DVC -o-> [E] in rsnd_dma_of_path()
698 * [S] -*-> SRC -> CTU -> MIX -> DVC -o-> [E] in rsnd_dma_of_path()
706 * -*-> Audio DMAC in rsnd_dma_of_path()
707 * -o-> Audio DMAC peri peri in rsnd_dma_of_path()
733 * -------------+-----+-----+ in rsnd_dma_of_path()
738 *mod_from = mod[idx - 1]; in rsnd_dma_of_path()
777 return -EAGAIN; in rsnd_dma_alloc()
785 dma_id = dmac->dmapp_num; in rsnd_dma_alloc()
790 dma_id = dmac->dmaen_num; in rsnd_dma_alloc()
798 dma_id = dmac->dmaen_num; in rsnd_dma_alloc()
804 return -ENOMEM; in rsnd_dma_alloc()
813 dev_dbg(dev, "%s %s -> %s\n", in rsnd_dma_alloc()
822 dma->src_addr = rsnd_dma_addr(io, mod_from, is_play, 1); in rsnd_dma_alloc()
823 dma->dst_addr = rsnd_dma_addr(io, mod_to, is_play, 0); in rsnd_dma_alloc()
824 dma->mod_from = mod_from; in rsnd_dma_alloc()
825 dma->mod_to = mod_to; in rsnd_dma_alloc()
840 return rsnd_dai_connect(*dma_mod, io, (*dma_mod)->type); in rsnd_dma_attach()
865 /* for Gen4 doesn't have DMA-pp */ in rsnd_dma_probe()
875 dmac->dmapp_num = 0; in rsnd_dma_probe()
876 dmac->ppres = res->start; in rsnd_dma_probe()
877 dmac->ppbase = devm_ioremap_resource(dev, res); in rsnd_dma_probe()
878 if (IS_ERR(dmac->ppbase)) in rsnd_dma_probe()
879 return PTR_ERR(dmac->ppbase); in rsnd_dma_probe()
881 priv->dma = dmac; in rsnd_dma_probe()