18c2ecf20Sopenharmony_ci// SPDX-License-Identifier: GPL-2.0 28c2ecf20Sopenharmony_ci// 38c2ecf20Sopenharmony_ci// Renesas R-Car 48c2ecf20Sopenharmony_ci// 58c2ecf20Sopenharmony_ci// Copyright (C) 2013 Renesas Solutions Corp. 68c2ecf20Sopenharmony_ci// Kuninori Morimoto <kuninori.morimoto.gx@renesas.com> 78c2ecf20Sopenharmony_ci 88c2ecf20Sopenharmony_ci#ifndef RSND_H 98c2ecf20Sopenharmony_ci#define RSND_H 108c2ecf20Sopenharmony_ci 118c2ecf20Sopenharmony_ci#include <linux/clk.h> 128c2ecf20Sopenharmony_ci#include <linux/device.h> 138c2ecf20Sopenharmony_ci#include <linux/dma-mapping.h> 148c2ecf20Sopenharmony_ci#include <linux/io.h> 158c2ecf20Sopenharmony_ci#include <linux/list.h> 168c2ecf20Sopenharmony_ci#include <linux/module.h> 178c2ecf20Sopenharmony_ci#include <linux/of_device.h> 188c2ecf20Sopenharmony_ci#include <linux/of_graph.h> 198c2ecf20Sopenharmony_ci#include <linux/of_irq.h> 208c2ecf20Sopenharmony_ci#include <linux/sh_dma.h> 218c2ecf20Sopenharmony_ci#include <linux/workqueue.h> 228c2ecf20Sopenharmony_ci#include <sound/soc.h> 238c2ecf20Sopenharmony_ci#include <sound/pcm_params.h> 248c2ecf20Sopenharmony_ci 258c2ecf20Sopenharmony_ci#define RSND_GEN1_SRU 0 268c2ecf20Sopenharmony_ci#define RSND_GEN1_ADG 1 278c2ecf20Sopenharmony_ci#define RSND_GEN1_SSI 2 288c2ecf20Sopenharmony_ci 298c2ecf20Sopenharmony_ci#define RSND_GEN2_SCU 0 308c2ecf20Sopenharmony_ci#define RSND_GEN2_ADG 1 318c2ecf20Sopenharmony_ci#define RSND_GEN2_SSIU 2 328c2ecf20Sopenharmony_ci#define RSND_GEN2_SSI 3 338c2ecf20Sopenharmony_ci 348c2ecf20Sopenharmony_ci#define RSND_BASE_MAX 4 358c2ecf20Sopenharmony_ci 368c2ecf20Sopenharmony_ci/* 378c2ecf20Sopenharmony_ci * pseudo register 388c2ecf20Sopenharmony_ci * 398c2ecf20Sopenharmony_ci * The register address offsets SRU/SCU/SSIU on Gen1/Gen2 are very different. 408c2ecf20Sopenharmony_ci * This driver uses pseudo register in order to hide it. 418c2ecf20Sopenharmony_ci * see gen1/gen2 for detail 428c2ecf20Sopenharmony_ci */ 438c2ecf20Sopenharmony_cienum rsnd_reg { 448c2ecf20Sopenharmony_ci /* SCU (MIX/CTU/DVC) */ 458c2ecf20Sopenharmony_ci SRC_I_BUSIF_MODE, 468c2ecf20Sopenharmony_ci SRC_O_BUSIF_MODE, 478c2ecf20Sopenharmony_ci SRC_ROUTE_MODE0, 488c2ecf20Sopenharmony_ci SRC_SWRSR, 498c2ecf20Sopenharmony_ci SRC_SRCIR, 508c2ecf20Sopenharmony_ci SRC_ADINR, 518c2ecf20Sopenharmony_ci SRC_IFSCR, 528c2ecf20Sopenharmony_ci SRC_IFSVR, 538c2ecf20Sopenharmony_ci SRC_SRCCR, 548c2ecf20Sopenharmony_ci SRC_CTRL, 558c2ecf20Sopenharmony_ci SRC_BSDSR, 568c2ecf20Sopenharmony_ci SRC_BSISR, 578c2ecf20Sopenharmony_ci SRC_INT_ENABLE0, 588c2ecf20Sopenharmony_ci SRC_BUSIF_DALIGN, 598c2ecf20Sopenharmony_ci SRCIN_TIMSEL0, 608c2ecf20Sopenharmony_ci SRCIN_TIMSEL1, 618c2ecf20Sopenharmony_ci SRCIN_TIMSEL2, 628c2ecf20Sopenharmony_ci SRCIN_TIMSEL3, 638c2ecf20Sopenharmony_ci SRCIN_TIMSEL4, 648c2ecf20Sopenharmony_ci SRCOUT_TIMSEL0, 658c2ecf20Sopenharmony_ci SRCOUT_TIMSEL1, 668c2ecf20Sopenharmony_ci SRCOUT_TIMSEL2, 678c2ecf20Sopenharmony_ci SRCOUT_TIMSEL3, 688c2ecf20Sopenharmony_ci SRCOUT_TIMSEL4, 698c2ecf20Sopenharmony_ci SCU_SYS_STATUS0, 708c2ecf20Sopenharmony_ci SCU_SYS_STATUS1, 718c2ecf20Sopenharmony_ci SCU_SYS_INT_EN0, 728c2ecf20Sopenharmony_ci SCU_SYS_INT_EN1, 738c2ecf20Sopenharmony_ci CMD_CTRL, 748c2ecf20Sopenharmony_ci CMD_BUSIF_MODE, 758c2ecf20Sopenharmony_ci CMD_BUSIF_DALIGN, 768c2ecf20Sopenharmony_ci CMD_ROUTE_SLCT, 778c2ecf20Sopenharmony_ci CMDOUT_TIMSEL, 788c2ecf20Sopenharmony_ci CTU_SWRSR, 798c2ecf20Sopenharmony_ci CTU_CTUIR, 808c2ecf20Sopenharmony_ci CTU_ADINR, 818c2ecf20Sopenharmony_ci CTU_CPMDR, 828c2ecf20Sopenharmony_ci CTU_SCMDR, 838c2ecf20Sopenharmony_ci CTU_SV00R, 848c2ecf20Sopenharmony_ci CTU_SV01R, 858c2ecf20Sopenharmony_ci CTU_SV02R, 868c2ecf20Sopenharmony_ci CTU_SV03R, 878c2ecf20Sopenharmony_ci CTU_SV04R, 888c2ecf20Sopenharmony_ci CTU_SV05R, 898c2ecf20Sopenharmony_ci CTU_SV06R, 908c2ecf20Sopenharmony_ci CTU_SV07R, 918c2ecf20Sopenharmony_ci CTU_SV10R, 928c2ecf20Sopenharmony_ci CTU_SV11R, 938c2ecf20Sopenharmony_ci CTU_SV12R, 948c2ecf20Sopenharmony_ci CTU_SV13R, 958c2ecf20Sopenharmony_ci CTU_SV14R, 968c2ecf20Sopenharmony_ci CTU_SV15R, 978c2ecf20Sopenharmony_ci CTU_SV16R, 988c2ecf20Sopenharmony_ci CTU_SV17R, 998c2ecf20Sopenharmony_ci CTU_SV20R, 1008c2ecf20Sopenharmony_ci CTU_SV21R, 1018c2ecf20Sopenharmony_ci CTU_SV22R, 1028c2ecf20Sopenharmony_ci CTU_SV23R, 1038c2ecf20Sopenharmony_ci CTU_SV24R, 1048c2ecf20Sopenharmony_ci CTU_SV25R, 1058c2ecf20Sopenharmony_ci CTU_SV26R, 1068c2ecf20Sopenharmony_ci CTU_SV27R, 1078c2ecf20Sopenharmony_ci CTU_SV30R, 1088c2ecf20Sopenharmony_ci CTU_SV31R, 1098c2ecf20Sopenharmony_ci CTU_SV32R, 1108c2ecf20Sopenharmony_ci CTU_SV33R, 1118c2ecf20Sopenharmony_ci CTU_SV34R, 1128c2ecf20Sopenharmony_ci CTU_SV35R, 1138c2ecf20Sopenharmony_ci CTU_SV36R, 1148c2ecf20Sopenharmony_ci CTU_SV37R, 1158c2ecf20Sopenharmony_ci MIX_SWRSR, 1168c2ecf20Sopenharmony_ci MIX_MIXIR, 1178c2ecf20Sopenharmony_ci MIX_ADINR, 1188c2ecf20Sopenharmony_ci MIX_MIXMR, 1198c2ecf20Sopenharmony_ci MIX_MVPDR, 1208c2ecf20Sopenharmony_ci MIX_MDBAR, 1218c2ecf20Sopenharmony_ci MIX_MDBBR, 1228c2ecf20Sopenharmony_ci MIX_MDBCR, 1238c2ecf20Sopenharmony_ci MIX_MDBDR, 1248c2ecf20Sopenharmony_ci MIX_MDBER, 1258c2ecf20Sopenharmony_ci DVC_SWRSR, 1268c2ecf20Sopenharmony_ci DVC_DVUIR, 1278c2ecf20Sopenharmony_ci DVC_ADINR, 1288c2ecf20Sopenharmony_ci DVC_DVUCR, 1298c2ecf20Sopenharmony_ci DVC_ZCMCR, 1308c2ecf20Sopenharmony_ci DVC_VOL0R, 1318c2ecf20Sopenharmony_ci DVC_VOL1R, 1328c2ecf20Sopenharmony_ci DVC_VOL2R, 1338c2ecf20Sopenharmony_ci DVC_VOL3R, 1348c2ecf20Sopenharmony_ci DVC_VOL4R, 1358c2ecf20Sopenharmony_ci DVC_VOL5R, 1368c2ecf20Sopenharmony_ci DVC_VOL6R, 1378c2ecf20Sopenharmony_ci DVC_VOL7R, 1388c2ecf20Sopenharmony_ci DVC_DVUER, 1398c2ecf20Sopenharmony_ci DVC_VRCTR, 1408c2ecf20Sopenharmony_ci DVC_VRPDR, 1418c2ecf20Sopenharmony_ci DVC_VRDBR, 1428c2ecf20Sopenharmony_ci 1438c2ecf20Sopenharmony_ci /* ADG */ 1448c2ecf20Sopenharmony_ci BRRA, 1458c2ecf20Sopenharmony_ci BRRB, 1468c2ecf20Sopenharmony_ci BRGCKR, 1478c2ecf20Sopenharmony_ci DIV_EN, 1488c2ecf20Sopenharmony_ci AUDIO_CLK_SEL0, 1498c2ecf20Sopenharmony_ci AUDIO_CLK_SEL1, 1508c2ecf20Sopenharmony_ci AUDIO_CLK_SEL2, 1518c2ecf20Sopenharmony_ci 1528c2ecf20Sopenharmony_ci /* SSIU */ 1538c2ecf20Sopenharmony_ci SSI_MODE, 1548c2ecf20Sopenharmony_ci SSI_MODE0, 1558c2ecf20Sopenharmony_ci SSI_MODE1, 1568c2ecf20Sopenharmony_ci SSI_MODE2, 1578c2ecf20Sopenharmony_ci SSI_CONTROL, 1588c2ecf20Sopenharmony_ci SSI_CTRL, 1598c2ecf20Sopenharmony_ci SSI_BUSIF0_MODE, 1608c2ecf20Sopenharmony_ci SSI_BUSIF1_MODE, 1618c2ecf20Sopenharmony_ci SSI_BUSIF2_MODE, 1628c2ecf20Sopenharmony_ci SSI_BUSIF3_MODE, 1638c2ecf20Sopenharmony_ci SSI_BUSIF4_MODE, 1648c2ecf20Sopenharmony_ci SSI_BUSIF5_MODE, 1658c2ecf20Sopenharmony_ci SSI_BUSIF6_MODE, 1668c2ecf20Sopenharmony_ci SSI_BUSIF7_MODE, 1678c2ecf20Sopenharmony_ci SSI_BUSIF0_ADINR, 1688c2ecf20Sopenharmony_ci SSI_BUSIF1_ADINR, 1698c2ecf20Sopenharmony_ci SSI_BUSIF2_ADINR, 1708c2ecf20Sopenharmony_ci SSI_BUSIF3_ADINR, 1718c2ecf20Sopenharmony_ci SSI_BUSIF4_ADINR, 1728c2ecf20Sopenharmony_ci SSI_BUSIF5_ADINR, 1738c2ecf20Sopenharmony_ci SSI_BUSIF6_ADINR, 1748c2ecf20Sopenharmony_ci SSI_BUSIF7_ADINR, 1758c2ecf20Sopenharmony_ci SSI_BUSIF0_DALIGN, 1768c2ecf20Sopenharmony_ci SSI_BUSIF1_DALIGN, 1778c2ecf20Sopenharmony_ci SSI_BUSIF2_DALIGN, 1788c2ecf20Sopenharmony_ci SSI_BUSIF3_DALIGN, 1798c2ecf20Sopenharmony_ci SSI_BUSIF4_DALIGN, 1808c2ecf20Sopenharmony_ci SSI_BUSIF5_DALIGN, 1818c2ecf20Sopenharmony_ci SSI_BUSIF6_DALIGN, 1828c2ecf20Sopenharmony_ci SSI_BUSIF7_DALIGN, 1838c2ecf20Sopenharmony_ci SSI_INT_ENABLE, 1848c2ecf20Sopenharmony_ci SSI_SYS_STATUS0, 1858c2ecf20Sopenharmony_ci SSI_SYS_STATUS1, 1868c2ecf20Sopenharmony_ci SSI_SYS_STATUS2, 1878c2ecf20Sopenharmony_ci SSI_SYS_STATUS3, 1888c2ecf20Sopenharmony_ci SSI_SYS_STATUS4, 1898c2ecf20Sopenharmony_ci SSI_SYS_STATUS5, 1908c2ecf20Sopenharmony_ci SSI_SYS_STATUS6, 1918c2ecf20Sopenharmony_ci SSI_SYS_STATUS7, 1928c2ecf20Sopenharmony_ci SSI_SYS_INT_ENABLE0, 1938c2ecf20Sopenharmony_ci SSI_SYS_INT_ENABLE1, 1948c2ecf20Sopenharmony_ci SSI_SYS_INT_ENABLE2, 1958c2ecf20Sopenharmony_ci SSI_SYS_INT_ENABLE3, 1968c2ecf20Sopenharmony_ci SSI_SYS_INT_ENABLE4, 1978c2ecf20Sopenharmony_ci SSI_SYS_INT_ENABLE5, 1988c2ecf20Sopenharmony_ci SSI_SYS_INT_ENABLE6, 1998c2ecf20Sopenharmony_ci SSI_SYS_INT_ENABLE7, 2008c2ecf20Sopenharmony_ci HDMI0_SEL, 2018c2ecf20Sopenharmony_ci HDMI1_SEL, 2028c2ecf20Sopenharmony_ci SSI9_BUSIF0_MODE, 2038c2ecf20Sopenharmony_ci SSI9_BUSIF1_MODE, 2048c2ecf20Sopenharmony_ci SSI9_BUSIF2_MODE, 2058c2ecf20Sopenharmony_ci SSI9_BUSIF3_MODE, 2068c2ecf20Sopenharmony_ci SSI9_BUSIF4_MODE, 2078c2ecf20Sopenharmony_ci SSI9_BUSIF5_MODE, 2088c2ecf20Sopenharmony_ci SSI9_BUSIF6_MODE, 2098c2ecf20Sopenharmony_ci SSI9_BUSIF7_MODE, 2108c2ecf20Sopenharmony_ci SSI9_BUSIF0_ADINR, 2118c2ecf20Sopenharmony_ci SSI9_BUSIF1_ADINR, 2128c2ecf20Sopenharmony_ci SSI9_BUSIF2_ADINR, 2138c2ecf20Sopenharmony_ci SSI9_BUSIF3_ADINR, 2148c2ecf20Sopenharmony_ci SSI9_BUSIF4_ADINR, 2158c2ecf20Sopenharmony_ci SSI9_BUSIF5_ADINR, 2168c2ecf20Sopenharmony_ci SSI9_BUSIF6_ADINR, 2178c2ecf20Sopenharmony_ci SSI9_BUSIF7_ADINR, 2188c2ecf20Sopenharmony_ci SSI9_BUSIF0_DALIGN, 2198c2ecf20Sopenharmony_ci SSI9_BUSIF1_DALIGN, 2208c2ecf20Sopenharmony_ci SSI9_BUSIF2_DALIGN, 2218c2ecf20Sopenharmony_ci SSI9_BUSIF3_DALIGN, 2228c2ecf20Sopenharmony_ci SSI9_BUSIF4_DALIGN, 2238c2ecf20Sopenharmony_ci SSI9_BUSIF5_DALIGN, 2248c2ecf20Sopenharmony_ci SSI9_BUSIF6_DALIGN, 2258c2ecf20Sopenharmony_ci SSI9_BUSIF7_DALIGN, 2268c2ecf20Sopenharmony_ci 2278c2ecf20Sopenharmony_ci /* SSI */ 2288c2ecf20Sopenharmony_ci SSICR, 2298c2ecf20Sopenharmony_ci SSISR, 2308c2ecf20Sopenharmony_ci SSITDR, 2318c2ecf20Sopenharmony_ci SSIRDR, 2328c2ecf20Sopenharmony_ci SSIWSR, 2338c2ecf20Sopenharmony_ci 2348c2ecf20Sopenharmony_ci REG_MAX, 2358c2ecf20Sopenharmony_ci}; 2368c2ecf20Sopenharmony_ci#define SRCIN_TIMSEL(i) (SRCIN_TIMSEL0 + (i)) 2378c2ecf20Sopenharmony_ci#define SRCOUT_TIMSEL(i) (SRCOUT_TIMSEL0 + (i)) 2388c2ecf20Sopenharmony_ci#define CTU_SVxxR(i, j) (CTU_SV00R + (i * 8) + (j)) 2398c2ecf20Sopenharmony_ci#define DVC_VOLxR(i) (DVC_VOL0R + (i)) 2408c2ecf20Sopenharmony_ci#define AUDIO_CLK_SEL(i) (AUDIO_CLK_SEL0 + (i)) 2418c2ecf20Sopenharmony_ci#define SSI_BUSIF_MODE(i) (SSI_BUSIF0_MODE + (i)) 2428c2ecf20Sopenharmony_ci#define SSI_BUSIF_ADINR(i) (SSI_BUSIF0_ADINR + (i)) 2438c2ecf20Sopenharmony_ci#define SSI_BUSIF_DALIGN(i) (SSI_BUSIF0_DALIGN + (i)) 2448c2ecf20Sopenharmony_ci#define SSI9_BUSIF_MODE(i) (SSI9_BUSIF0_MODE + (i)) 2458c2ecf20Sopenharmony_ci#define SSI9_BUSIF_ADINR(i) (SSI9_BUSIF0_ADINR + (i)) 2468c2ecf20Sopenharmony_ci#define SSI9_BUSIF_DALIGN(i) (SSI9_BUSIF0_DALIGN + (i)) 2478c2ecf20Sopenharmony_ci#define SSI_SYS_STATUS(i) (SSI_SYS_STATUS0 + (i)) 2488c2ecf20Sopenharmony_ci#define SSI_SYS_INT_ENABLE(i) (SSI_SYS_INT_ENABLE0 + (i)) 2498c2ecf20Sopenharmony_ci 2508c2ecf20Sopenharmony_ci 2518c2ecf20Sopenharmony_cistruct rsnd_priv; 2528c2ecf20Sopenharmony_cistruct rsnd_mod; 2538c2ecf20Sopenharmony_cistruct rsnd_dai; 2548c2ecf20Sopenharmony_cistruct rsnd_dai_stream; 2558c2ecf20Sopenharmony_ci 2568c2ecf20Sopenharmony_ci/* 2578c2ecf20Sopenharmony_ci * R-Car basic functions 2588c2ecf20Sopenharmony_ci */ 2598c2ecf20Sopenharmony_ciu32 rsnd_mod_read(struct rsnd_mod *mod, enum rsnd_reg reg); 2608c2ecf20Sopenharmony_civoid rsnd_mod_write(struct rsnd_mod *mod, enum rsnd_reg reg, u32 data); 2618c2ecf20Sopenharmony_civoid rsnd_mod_bset(struct rsnd_mod *mod, enum rsnd_reg reg, u32 mask, u32 data); 2628c2ecf20Sopenharmony_ciu32 rsnd_get_adinr_bit(struct rsnd_mod *mod, struct rsnd_dai_stream *io); 2638c2ecf20Sopenharmony_ciu32 rsnd_get_dalign(struct rsnd_mod *mod, struct rsnd_dai_stream *io); 2648c2ecf20Sopenharmony_ciu32 rsnd_get_busif_shift(struct rsnd_dai_stream *io, struct rsnd_mod *mod); 2658c2ecf20Sopenharmony_ci 2668c2ecf20Sopenharmony_ci/* 2678c2ecf20Sopenharmony_ci * R-Car DMA 2688c2ecf20Sopenharmony_ci */ 2698c2ecf20Sopenharmony_ciint rsnd_dma_attach(struct rsnd_dai_stream *io, 2708c2ecf20Sopenharmony_ci struct rsnd_mod *mod, struct rsnd_mod **dma_mod); 2718c2ecf20Sopenharmony_ciint rsnd_dma_probe(struct rsnd_priv *priv); 2728c2ecf20Sopenharmony_cistruct dma_chan *rsnd_dma_request_channel(struct device_node *of_node, 2738c2ecf20Sopenharmony_ci struct rsnd_mod *mod, char *name); 2748c2ecf20Sopenharmony_ci 2758c2ecf20Sopenharmony_ci/* 2768c2ecf20Sopenharmony_ci * R-Car sound mod 2778c2ecf20Sopenharmony_ci */ 2788c2ecf20Sopenharmony_cienum rsnd_mod_type { 2798c2ecf20Sopenharmony_ci RSND_MOD_AUDMAPP, 2808c2ecf20Sopenharmony_ci RSND_MOD_AUDMA, 2818c2ecf20Sopenharmony_ci RSND_MOD_DVC, 2828c2ecf20Sopenharmony_ci RSND_MOD_MIX, 2838c2ecf20Sopenharmony_ci RSND_MOD_CTU, 2848c2ecf20Sopenharmony_ci RSND_MOD_CMD, 2858c2ecf20Sopenharmony_ci RSND_MOD_SRC, 2868c2ecf20Sopenharmony_ci RSND_MOD_SSIM3, /* SSI multi 3 */ 2878c2ecf20Sopenharmony_ci RSND_MOD_SSIM2, /* SSI multi 2 */ 2888c2ecf20Sopenharmony_ci RSND_MOD_SSIM1, /* SSI multi 1 */ 2898c2ecf20Sopenharmony_ci RSND_MOD_SSIP, /* SSI parent */ 2908c2ecf20Sopenharmony_ci RSND_MOD_SSI, 2918c2ecf20Sopenharmony_ci RSND_MOD_SSIU, 2928c2ecf20Sopenharmony_ci RSND_MOD_MAX, 2938c2ecf20Sopenharmony_ci}; 2948c2ecf20Sopenharmony_ci 2958c2ecf20Sopenharmony_cistruct rsnd_mod_ops { 2968c2ecf20Sopenharmony_ci char *name; 2978c2ecf20Sopenharmony_ci struct dma_chan* (*dma_req)(struct rsnd_dai_stream *io, 2988c2ecf20Sopenharmony_ci struct rsnd_mod *mod); 2998c2ecf20Sopenharmony_ci int (*probe)(struct rsnd_mod *mod, 3008c2ecf20Sopenharmony_ci struct rsnd_dai_stream *io, 3018c2ecf20Sopenharmony_ci struct rsnd_priv *priv); 3028c2ecf20Sopenharmony_ci int (*remove)(struct rsnd_mod *mod, 3038c2ecf20Sopenharmony_ci struct rsnd_dai_stream *io, 3048c2ecf20Sopenharmony_ci struct rsnd_priv *priv); 3058c2ecf20Sopenharmony_ci int (*init)(struct rsnd_mod *mod, 3068c2ecf20Sopenharmony_ci struct rsnd_dai_stream *io, 3078c2ecf20Sopenharmony_ci struct rsnd_priv *priv); 3088c2ecf20Sopenharmony_ci int (*quit)(struct rsnd_mod *mod, 3098c2ecf20Sopenharmony_ci struct rsnd_dai_stream *io, 3108c2ecf20Sopenharmony_ci struct rsnd_priv *priv); 3118c2ecf20Sopenharmony_ci int (*start)(struct rsnd_mod *mod, 3128c2ecf20Sopenharmony_ci struct rsnd_dai_stream *io, 3138c2ecf20Sopenharmony_ci struct rsnd_priv *priv); 3148c2ecf20Sopenharmony_ci int (*stop)(struct rsnd_mod *mod, 3158c2ecf20Sopenharmony_ci struct rsnd_dai_stream *io, 3168c2ecf20Sopenharmony_ci struct rsnd_priv *priv); 3178c2ecf20Sopenharmony_ci int (*irq)(struct rsnd_mod *mod, 3188c2ecf20Sopenharmony_ci struct rsnd_dai_stream *io, 3198c2ecf20Sopenharmony_ci struct rsnd_priv *priv, int enable); 3208c2ecf20Sopenharmony_ci int (*pcm_new)(struct rsnd_mod *mod, 3218c2ecf20Sopenharmony_ci struct rsnd_dai_stream *io, 3228c2ecf20Sopenharmony_ci struct snd_soc_pcm_runtime *rtd); 3238c2ecf20Sopenharmony_ci int (*hw_params)(struct rsnd_mod *mod, 3248c2ecf20Sopenharmony_ci struct rsnd_dai_stream *io, 3258c2ecf20Sopenharmony_ci struct snd_pcm_substream *substream, 3268c2ecf20Sopenharmony_ci struct snd_pcm_hw_params *hw_params); 3278c2ecf20Sopenharmony_ci int (*pointer)(struct rsnd_mod *mod, 3288c2ecf20Sopenharmony_ci struct rsnd_dai_stream *io, 3298c2ecf20Sopenharmony_ci snd_pcm_uframes_t *pointer); 3308c2ecf20Sopenharmony_ci int (*fallback)(struct rsnd_mod *mod, 3318c2ecf20Sopenharmony_ci struct rsnd_dai_stream *io, 3328c2ecf20Sopenharmony_ci struct rsnd_priv *priv); 3338c2ecf20Sopenharmony_ci int (*prepare)(struct rsnd_mod *mod, 3348c2ecf20Sopenharmony_ci struct rsnd_dai_stream *io, 3358c2ecf20Sopenharmony_ci struct rsnd_priv *priv); 3368c2ecf20Sopenharmony_ci int (*cleanup)(struct rsnd_mod *mod, 3378c2ecf20Sopenharmony_ci struct rsnd_dai_stream *io, 3388c2ecf20Sopenharmony_ci struct rsnd_priv *priv); 3398c2ecf20Sopenharmony_ci int (*hw_free)(struct rsnd_mod *mod, 3408c2ecf20Sopenharmony_ci struct rsnd_dai_stream *io, 3418c2ecf20Sopenharmony_ci struct snd_pcm_substream *substream); 3428c2ecf20Sopenharmony_ci u32 *(*get_status)(struct rsnd_mod *mod, 3438c2ecf20Sopenharmony_ci struct rsnd_dai_stream *io, 3448c2ecf20Sopenharmony_ci enum rsnd_mod_type type); 3458c2ecf20Sopenharmony_ci int (*id)(struct rsnd_mod *mod); 3468c2ecf20Sopenharmony_ci int (*id_sub)(struct rsnd_mod *mod); 3478c2ecf20Sopenharmony_ci int (*id_cmd)(struct rsnd_mod *mod); 3488c2ecf20Sopenharmony_ci}; 3498c2ecf20Sopenharmony_ci 3508c2ecf20Sopenharmony_cistruct rsnd_dai_stream; 3518c2ecf20Sopenharmony_cistruct rsnd_mod { 3528c2ecf20Sopenharmony_ci int id; 3538c2ecf20Sopenharmony_ci enum rsnd_mod_type type; 3548c2ecf20Sopenharmony_ci struct rsnd_mod_ops *ops; 3558c2ecf20Sopenharmony_ci struct rsnd_priv *priv; 3568c2ecf20Sopenharmony_ci struct clk *clk; 3578c2ecf20Sopenharmony_ci u32 status; 3588c2ecf20Sopenharmony_ci}; 3598c2ecf20Sopenharmony_ci/* 3608c2ecf20Sopenharmony_ci * status 3618c2ecf20Sopenharmony_ci * 3628c2ecf20Sopenharmony_ci * 0xH0000CB0 3638c2ecf20Sopenharmony_ci * 3648c2ecf20Sopenharmony_ci * B 0: init 1: quit 3658c2ecf20Sopenharmony_ci * C 0: start 1: stop 3668c2ecf20Sopenharmony_ci * D 0: hw_params 1: hw_free 3678c2ecf20Sopenharmony_ci * 3688c2ecf20Sopenharmony_ci * H is always called (see __rsnd_mod_call) 3698c2ecf20Sopenharmony_ci * H 0: probe 1: remove 3708c2ecf20Sopenharmony_ci * H 0: pcm_new 3718c2ecf20Sopenharmony_ci * H 0: fallback 3728c2ecf20Sopenharmony_ci * H 0: pointer 3738c2ecf20Sopenharmony_ci * H 0: prepare 3748c2ecf20Sopenharmony_ci * H 0: cleanup 3758c2ecf20Sopenharmony_ci */ 3768c2ecf20Sopenharmony_ci#define __rsnd_mod_shift_init 4 3778c2ecf20Sopenharmony_ci#define __rsnd_mod_shift_quit 4 3788c2ecf20Sopenharmony_ci#define __rsnd_mod_shift_start 8 3798c2ecf20Sopenharmony_ci#define __rsnd_mod_shift_stop 8 3808c2ecf20Sopenharmony_ci#define __rsnd_mod_shift_hw_params 12 3818c2ecf20Sopenharmony_ci#define __rsnd_mod_shift_hw_free 12 3828c2ecf20Sopenharmony_ci#define __rsnd_mod_shift_probe 28 /* always called */ 3838c2ecf20Sopenharmony_ci#define __rsnd_mod_shift_remove 28 /* always called */ 3848c2ecf20Sopenharmony_ci#define __rsnd_mod_shift_irq 28 /* always called */ 3858c2ecf20Sopenharmony_ci#define __rsnd_mod_shift_pcm_new 28 /* always called */ 3868c2ecf20Sopenharmony_ci#define __rsnd_mod_shift_fallback 28 /* always called */ 3878c2ecf20Sopenharmony_ci#define __rsnd_mod_shift_pointer 28 /* always called */ 3888c2ecf20Sopenharmony_ci#define __rsnd_mod_shift_prepare 28 /* always called */ 3898c2ecf20Sopenharmony_ci#define __rsnd_mod_shift_cleanup 28 /* always called */ 3908c2ecf20Sopenharmony_ci 3918c2ecf20Sopenharmony_ci#define __rsnd_mod_add_probe 0 3928c2ecf20Sopenharmony_ci#define __rsnd_mod_add_remove 0 3938c2ecf20Sopenharmony_ci#define __rsnd_mod_add_prepare 0 3948c2ecf20Sopenharmony_ci#define __rsnd_mod_add_cleanup 0 3958c2ecf20Sopenharmony_ci#define __rsnd_mod_add_init 1 3968c2ecf20Sopenharmony_ci#define __rsnd_mod_add_quit -1 3978c2ecf20Sopenharmony_ci#define __rsnd_mod_add_start 1 3988c2ecf20Sopenharmony_ci#define __rsnd_mod_add_stop -1 3998c2ecf20Sopenharmony_ci#define __rsnd_mod_add_hw_params 1 4008c2ecf20Sopenharmony_ci#define __rsnd_mod_add_hw_free -1 4018c2ecf20Sopenharmony_ci#define __rsnd_mod_add_irq 0 4028c2ecf20Sopenharmony_ci#define __rsnd_mod_add_pcm_new 0 4038c2ecf20Sopenharmony_ci#define __rsnd_mod_add_fallback 0 4048c2ecf20Sopenharmony_ci#define __rsnd_mod_add_pointer 0 4058c2ecf20Sopenharmony_ci 4068c2ecf20Sopenharmony_ci#define __rsnd_mod_call_probe 0 4078c2ecf20Sopenharmony_ci#define __rsnd_mod_call_remove 0 4088c2ecf20Sopenharmony_ci#define __rsnd_mod_call_prepare 0 4098c2ecf20Sopenharmony_ci#define __rsnd_mod_call_cleanup 0 4108c2ecf20Sopenharmony_ci#define __rsnd_mod_call_init 0 4118c2ecf20Sopenharmony_ci#define __rsnd_mod_call_quit 1 4128c2ecf20Sopenharmony_ci#define __rsnd_mod_call_start 0 4138c2ecf20Sopenharmony_ci#define __rsnd_mod_call_stop 1 4148c2ecf20Sopenharmony_ci#define __rsnd_mod_call_irq 0 4158c2ecf20Sopenharmony_ci#define __rsnd_mod_call_pcm_new 0 4168c2ecf20Sopenharmony_ci#define __rsnd_mod_call_fallback 0 4178c2ecf20Sopenharmony_ci#define __rsnd_mod_call_hw_params 0 4188c2ecf20Sopenharmony_ci#define __rsnd_mod_call_pointer 0 4198c2ecf20Sopenharmony_ci#define __rsnd_mod_call_hw_free 1 4208c2ecf20Sopenharmony_ci 4218c2ecf20Sopenharmony_ci#define rsnd_mod_to_priv(mod) ((mod)->priv) 4228c2ecf20Sopenharmony_ci#define rsnd_mod_power_on(mod) clk_enable((mod)->clk) 4238c2ecf20Sopenharmony_ci#define rsnd_mod_power_off(mod) clk_disable((mod)->clk) 4248c2ecf20Sopenharmony_ci#define rsnd_mod_get(ip) (&(ip)->mod) 4258c2ecf20Sopenharmony_ci 4268c2ecf20Sopenharmony_ciint rsnd_mod_init(struct rsnd_priv *priv, 4278c2ecf20Sopenharmony_ci struct rsnd_mod *mod, 4288c2ecf20Sopenharmony_ci struct rsnd_mod_ops *ops, 4298c2ecf20Sopenharmony_ci struct clk *clk, 4308c2ecf20Sopenharmony_ci enum rsnd_mod_type type, 4318c2ecf20Sopenharmony_ci int id); 4328c2ecf20Sopenharmony_civoid rsnd_mod_quit(struct rsnd_mod *mod); 4338c2ecf20Sopenharmony_cistruct dma_chan *rsnd_mod_dma_req(struct rsnd_dai_stream *io, 4348c2ecf20Sopenharmony_ci struct rsnd_mod *mod); 4358c2ecf20Sopenharmony_civoid rsnd_mod_interrupt(struct rsnd_mod *mod, 4368c2ecf20Sopenharmony_ci void (*callback)(struct rsnd_mod *mod, 4378c2ecf20Sopenharmony_ci struct rsnd_dai_stream *io)); 4388c2ecf20Sopenharmony_ciu32 *rsnd_mod_get_status(struct rsnd_mod *mod, 4398c2ecf20Sopenharmony_ci struct rsnd_dai_stream *io, 4408c2ecf20Sopenharmony_ci enum rsnd_mod_type type); 4418c2ecf20Sopenharmony_ciint rsnd_mod_id(struct rsnd_mod *mod); 4428c2ecf20Sopenharmony_ciint rsnd_mod_id_raw(struct rsnd_mod *mod); 4438c2ecf20Sopenharmony_ciint rsnd_mod_id_sub(struct rsnd_mod *mod); 4448c2ecf20Sopenharmony_cichar *rsnd_mod_name(struct rsnd_mod *mod); 4458c2ecf20Sopenharmony_cistruct rsnd_mod *rsnd_mod_next(int *iterator, 4468c2ecf20Sopenharmony_ci struct rsnd_dai_stream *io, 4478c2ecf20Sopenharmony_ci enum rsnd_mod_type *array, 4488c2ecf20Sopenharmony_ci int array_size); 4498c2ecf20Sopenharmony_ci#define for_each_rsnd_mod(iterator, pos, io) \ 4508c2ecf20Sopenharmony_ci for (iterator = 0; \ 4518c2ecf20Sopenharmony_ci (pos = rsnd_mod_next(&iterator, io, NULL, 0)); iterator++) 4528c2ecf20Sopenharmony_ci#define for_each_rsnd_mod_arrays(iterator, pos, io, array, size) \ 4538c2ecf20Sopenharmony_ci for (iterator = 0; \ 4548c2ecf20Sopenharmony_ci (pos = rsnd_mod_next(&iterator, io, array, size)); iterator++) 4558c2ecf20Sopenharmony_ci#define for_each_rsnd_mod_array(iterator, pos, io, array) \ 4568c2ecf20Sopenharmony_ci for_each_rsnd_mod_arrays(iterator, pos, io, array, ARRAY_SIZE(array)) 4578c2ecf20Sopenharmony_ci 4588c2ecf20Sopenharmony_civoid rsnd_parse_connect_common(struct rsnd_dai *rdai, 4598c2ecf20Sopenharmony_ci struct rsnd_mod* (*mod_get)(struct rsnd_priv *priv, int id), 4608c2ecf20Sopenharmony_ci struct device_node *node, 4618c2ecf20Sopenharmony_ci struct device_node *playback, 4628c2ecf20Sopenharmony_ci struct device_node *capture); 4638c2ecf20Sopenharmony_ci 4648c2ecf20Sopenharmony_ciint rsnd_channel_normalization(int chan); 4658c2ecf20Sopenharmony_ci#define rsnd_runtime_channel_original(io) \ 4668c2ecf20Sopenharmony_ci rsnd_runtime_channel_original_with_params(io, NULL) 4678c2ecf20Sopenharmony_ciint rsnd_runtime_channel_original_with_params(struct rsnd_dai_stream *io, 4688c2ecf20Sopenharmony_ci struct snd_pcm_hw_params *params); 4698c2ecf20Sopenharmony_ci#define rsnd_runtime_channel_after_ctu(io) \ 4708c2ecf20Sopenharmony_ci rsnd_runtime_channel_after_ctu_with_params(io, NULL) 4718c2ecf20Sopenharmony_ciint rsnd_runtime_channel_after_ctu_with_params(struct rsnd_dai_stream *io, 4728c2ecf20Sopenharmony_ci struct snd_pcm_hw_params *params); 4738c2ecf20Sopenharmony_ci#define rsnd_runtime_channel_for_ssi(io) \ 4748c2ecf20Sopenharmony_ci rsnd_runtime_channel_for_ssi_with_params(io, NULL) 4758c2ecf20Sopenharmony_ciint rsnd_runtime_channel_for_ssi_with_params(struct rsnd_dai_stream *io, 4768c2ecf20Sopenharmony_ci struct snd_pcm_hw_params *params); 4778c2ecf20Sopenharmony_ciint rsnd_runtime_is_multi_ssi(struct rsnd_dai_stream *io); 4788c2ecf20Sopenharmony_ciint rsnd_runtime_is_tdm(struct rsnd_dai_stream *io); 4798c2ecf20Sopenharmony_ciint rsnd_runtime_is_tdm_split(struct rsnd_dai_stream *io); 4808c2ecf20Sopenharmony_ci 4818c2ecf20Sopenharmony_ci/* 4828c2ecf20Sopenharmony_ci * DT 4838c2ecf20Sopenharmony_ci */ 4848c2ecf20Sopenharmony_ci#define rsnd_parse_of_node(priv, node) \ 4858c2ecf20Sopenharmony_ci of_get_child_by_name(rsnd_priv_to_dev(priv)->of_node, node) 4868c2ecf20Sopenharmony_ci#define RSND_NODE_DAI "rcar_sound,dai" 4878c2ecf20Sopenharmony_ci#define RSND_NODE_SSI "rcar_sound,ssi" 4888c2ecf20Sopenharmony_ci#define RSND_NODE_SSIU "rcar_sound,ssiu" 4898c2ecf20Sopenharmony_ci#define RSND_NODE_SRC "rcar_sound,src" 4908c2ecf20Sopenharmony_ci#define RSND_NODE_CTU "rcar_sound,ctu" 4918c2ecf20Sopenharmony_ci#define RSND_NODE_MIX "rcar_sound,mix" 4928c2ecf20Sopenharmony_ci#define RSND_NODE_DVC "rcar_sound,dvc" 4938c2ecf20Sopenharmony_ci 4948c2ecf20Sopenharmony_ci/* 4958c2ecf20Sopenharmony_ci * R-Car sound DAI 4968c2ecf20Sopenharmony_ci */ 4978c2ecf20Sopenharmony_ci#define RSND_DAI_NAME_SIZE 16 4988c2ecf20Sopenharmony_cistruct rsnd_dai_stream { 4998c2ecf20Sopenharmony_ci char name[RSND_DAI_NAME_SIZE]; 5008c2ecf20Sopenharmony_ci struct snd_pcm_substream *substream; 5018c2ecf20Sopenharmony_ci struct rsnd_mod *mod[RSND_MOD_MAX]; 5028c2ecf20Sopenharmony_ci struct rsnd_mod *dma; 5038c2ecf20Sopenharmony_ci struct rsnd_dai *rdai; 5048c2ecf20Sopenharmony_ci struct device *dmac_dev; /* for IPMMU */ 5058c2ecf20Sopenharmony_ci u32 converted_rate; /* converted sampling rate */ 5068c2ecf20Sopenharmony_ci int converted_chan; /* converted channels */ 5078c2ecf20Sopenharmony_ci u32 parent_ssi_status; 5088c2ecf20Sopenharmony_ci u32 flags; 5098c2ecf20Sopenharmony_ci}; 5108c2ecf20Sopenharmony_ci 5118c2ecf20Sopenharmony_ci/* flags */ 5128c2ecf20Sopenharmony_ci#define RSND_STREAM_HDMI0 (1 << 0) /* for HDMI0 */ 5138c2ecf20Sopenharmony_ci#define RSND_STREAM_HDMI1 (1 << 1) /* for HDMI1 */ 5148c2ecf20Sopenharmony_ci#define RSND_STREAM_TDM_SPLIT (1 << 2) /* for TDM split mode */ 5158c2ecf20Sopenharmony_ci 5168c2ecf20Sopenharmony_ci#define rsnd_io_to_mod(io, i) ((i) < RSND_MOD_MAX ? (io)->mod[(i)] : NULL) 5178c2ecf20Sopenharmony_ci#define rsnd_io_to_mod_ssi(io) rsnd_io_to_mod((io), RSND_MOD_SSI) 5188c2ecf20Sopenharmony_ci#define rsnd_io_to_mod_ssiu(io) rsnd_io_to_mod((io), RSND_MOD_SSIU) 5198c2ecf20Sopenharmony_ci#define rsnd_io_to_mod_ssip(io) rsnd_io_to_mod((io), RSND_MOD_SSIP) 5208c2ecf20Sopenharmony_ci#define rsnd_io_to_mod_src(io) rsnd_io_to_mod((io), RSND_MOD_SRC) 5218c2ecf20Sopenharmony_ci#define rsnd_io_to_mod_ctu(io) rsnd_io_to_mod((io), RSND_MOD_CTU) 5228c2ecf20Sopenharmony_ci#define rsnd_io_to_mod_mix(io) rsnd_io_to_mod((io), RSND_MOD_MIX) 5238c2ecf20Sopenharmony_ci#define rsnd_io_to_mod_dvc(io) rsnd_io_to_mod((io), RSND_MOD_DVC) 5248c2ecf20Sopenharmony_ci#define rsnd_io_to_mod_cmd(io) rsnd_io_to_mod((io), RSND_MOD_CMD) 5258c2ecf20Sopenharmony_ci#define rsnd_io_to_rdai(io) ((io)->rdai) 5268c2ecf20Sopenharmony_ci#define rsnd_io_to_priv(io) (rsnd_rdai_to_priv(rsnd_io_to_rdai(io))) 5278c2ecf20Sopenharmony_ci#define rsnd_io_is_play(io) (&rsnd_io_to_rdai(io)->playback == io) 5288c2ecf20Sopenharmony_ci#define rsnd_io_to_runtime(io) ((io)->substream ? \ 5298c2ecf20Sopenharmony_ci (io)->substream->runtime : NULL) 5308c2ecf20Sopenharmony_ci#define rsnd_io_converted_rate(io) ((io)->converted_rate) 5318c2ecf20Sopenharmony_ci#define rsnd_io_converted_chan(io) ((io)->converted_chan) 5328c2ecf20Sopenharmony_ciint rsnd_io_is_working(struct rsnd_dai_stream *io); 5338c2ecf20Sopenharmony_ci 5348c2ecf20Sopenharmony_cistruct rsnd_dai { 5358c2ecf20Sopenharmony_ci char name[RSND_DAI_NAME_SIZE]; 5368c2ecf20Sopenharmony_ci struct rsnd_dai_stream playback; 5378c2ecf20Sopenharmony_ci struct rsnd_dai_stream capture; 5388c2ecf20Sopenharmony_ci struct rsnd_priv *priv; 5398c2ecf20Sopenharmony_ci struct snd_pcm_hw_constraint_list constraint; 5408c2ecf20Sopenharmony_ci 5418c2ecf20Sopenharmony_ci int max_channels; /* 2ch - 16ch */ 5428c2ecf20Sopenharmony_ci int ssi_lane; /* 1lane - 4lane */ 5438c2ecf20Sopenharmony_ci int chan_width; /* 16/24/32 bit width */ 5448c2ecf20Sopenharmony_ci 5458c2ecf20Sopenharmony_ci unsigned int clk_master:1; 5468c2ecf20Sopenharmony_ci unsigned int bit_clk_inv:1; 5478c2ecf20Sopenharmony_ci unsigned int frm_clk_inv:1; 5488c2ecf20Sopenharmony_ci unsigned int sys_delay:1; 5498c2ecf20Sopenharmony_ci unsigned int data_alignment:1; 5508c2ecf20Sopenharmony_ci}; 5518c2ecf20Sopenharmony_ci 5528c2ecf20Sopenharmony_ci#define rsnd_rdai_nr(priv) ((priv)->rdai_nr) 5538c2ecf20Sopenharmony_ci#define rsnd_rdai_is_clk_master(rdai) ((rdai)->clk_master) 5548c2ecf20Sopenharmony_ci#define rsnd_rdai_to_priv(rdai) ((rdai)->priv) 5558c2ecf20Sopenharmony_ci#define for_each_rsnd_dai(rdai, priv, i) \ 5568c2ecf20Sopenharmony_ci for (i = 0; \ 5578c2ecf20Sopenharmony_ci (i < rsnd_rdai_nr(priv)) && \ 5588c2ecf20Sopenharmony_ci ((rdai) = rsnd_rdai_get(priv, i)); \ 5598c2ecf20Sopenharmony_ci i++) 5608c2ecf20Sopenharmony_ci 5618c2ecf20Sopenharmony_cistruct rsnd_dai *rsnd_rdai_get(struct rsnd_priv *priv, int id); 5628c2ecf20Sopenharmony_ci 5638c2ecf20Sopenharmony_ci#define rsnd_rdai_channels_set(rdai, max_channels) \ 5648c2ecf20Sopenharmony_ci rsnd_rdai_channels_ctrl(rdai, max_channels) 5658c2ecf20Sopenharmony_ci#define rsnd_rdai_channels_get(rdai) \ 5668c2ecf20Sopenharmony_ci rsnd_rdai_channels_ctrl(rdai, 0) 5678c2ecf20Sopenharmony_ciint rsnd_rdai_channels_ctrl(struct rsnd_dai *rdai, 5688c2ecf20Sopenharmony_ci int max_channels); 5698c2ecf20Sopenharmony_ci 5708c2ecf20Sopenharmony_ci#define rsnd_rdai_ssi_lane_set(rdai, ssi_lane) \ 5718c2ecf20Sopenharmony_ci rsnd_rdai_ssi_lane_ctrl(rdai, ssi_lane) 5728c2ecf20Sopenharmony_ci#define rsnd_rdai_ssi_lane_get(rdai) \ 5738c2ecf20Sopenharmony_ci rsnd_rdai_ssi_lane_ctrl(rdai, 0) 5748c2ecf20Sopenharmony_ciint rsnd_rdai_ssi_lane_ctrl(struct rsnd_dai *rdai, 5758c2ecf20Sopenharmony_ci int ssi_lane); 5768c2ecf20Sopenharmony_ci 5778c2ecf20Sopenharmony_ci#define rsnd_rdai_width_set(rdai, width) \ 5788c2ecf20Sopenharmony_ci rsnd_rdai_width_ctrl(rdai, width) 5798c2ecf20Sopenharmony_ci#define rsnd_rdai_width_get(rdai) \ 5808c2ecf20Sopenharmony_ci rsnd_rdai_width_ctrl(rdai, 0) 5818c2ecf20Sopenharmony_ciint rsnd_rdai_width_ctrl(struct rsnd_dai *rdai, int width); 5828c2ecf20Sopenharmony_civoid rsnd_dai_period_elapsed(struct rsnd_dai_stream *io); 5838c2ecf20Sopenharmony_ciint rsnd_dai_connect(struct rsnd_mod *mod, 5848c2ecf20Sopenharmony_ci struct rsnd_dai_stream *io, 5858c2ecf20Sopenharmony_ci enum rsnd_mod_type type); 5868c2ecf20Sopenharmony_ci 5878c2ecf20Sopenharmony_ci/* 5888c2ecf20Sopenharmony_ci * R-Car Gen1/Gen2 5898c2ecf20Sopenharmony_ci */ 5908c2ecf20Sopenharmony_ciint rsnd_gen_probe(struct rsnd_priv *priv); 5918c2ecf20Sopenharmony_civoid __iomem *rsnd_gen_reg_get(struct rsnd_priv *priv, 5928c2ecf20Sopenharmony_ci struct rsnd_mod *mod, 5938c2ecf20Sopenharmony_ci enum rsnd_reg reg); 5948c2ecf20Sopenharmony_ciphys_addr_t rsnd_gen_get_phy_addr(struct rsnd_priv *priv, int reg_id); 5958c2ecf20Sopenharmony_ci 5968c2ecf20Sopenharmony_ci/* 5978c2ecf20Sopenharmony_ci * R-Car ADG 5988c2ecf20Sopenharmony_ci */ 5998c2ecf20Sopenharmony_ciint rsnd_adg_clk_query(struct rsnd_priv *priv, unsigned int rate); 6008c2ecf20Sopenharmony_ciint rsnd_adg_ssi_clk_stop(struct rsnd_mod *mod); 6018c2ecf20Sopenharmony_ciint rsnd_adg_ssi_clk_try_start(struct rsnd_mod *mod, unsigned int rate); 6028c2ecf20Sopenharmony_ciint rsnd_adg_probe(struct rsnd_priv *priv); 6038c2ecf20Sopenharmony_civoid rsnd_adg_remove(struct rsnd_priv *priv); 6048c2ecf20Sopenharmony_ciint rsnd_adg_set_src_timesel_gen2(struct rsnd_mod *src_mod, 6058c2ecf20Sopenharmony_ci struct rsnd_dai_stream *io, 6068c2ecf20Sopenharmony_ci unsigned int in_rate, 6078c2ecf20Sopenharmony_ci unsigned int out_rate); 6088c2ecf20Sopenharmony_ciint rsnd_adg_set_cmd_timsel_gen2(struct rsnd_mod *mod, 6098c2ecf20Sopenharmony_ci struct rsnd_dai_stream *io); 6108c2ecf20Sopenharmony_ci#define rsnd_adg_clk_enable(priv) rsnd_adg_clk_control(priv, 1) 6118c2ecf20Sopenharmony_ci#define rsnd_adg_clk_disable(priv) rsnd_adg_clk_control(priv, 0) 6128c2ecf20Sopenharmony_civoid rsnd_adg_clk_control(struct rsnd_priv *priv, int enable); 6138c2ecf20Sopenharmony_ci 6148c2ecf20Sopenharmony_ci/* 6158c2ecf20Sopenharmony_ci * R-Car sound priv 6168c2ecf20Sopenharmony_ci */ 6178c2ecf20Sopenharmony_cistruct rsnd_priv { 6188c2ecf20Sopenharmony_ci 6198c2ecf20Sopenharmony_ci struct platform_device *pdev; 6208c2ecf20Sopenharmony_ci spinlock_t lock; 6218c2ecf20Sopenharmony_ci unsigned long flags; 6228c2ecf20Sopenharmony_ci#define RSND_GEN_MASK (0xF << 0) 6238c2ecf20Sopenharmony_ci#define RSND_GEN1 (1 << 0) 6248c2ecf20Sopenharmony_ci#define RSND_GEN2 (2 << 0) 6258c2ecf20Sopenharmony_ci#define RSND_GEN3 (3 << 0) 6268c2ecf20Sopenharmony_ci#define RSND_SOC_MASK (0xFF << 4) 6278c2ecf20Sopenharmony_ci#define RSND_SOC_E (1 << 4) /* E1/E2/E3 */ 6288c2ecf20Sopenharmony_ci 6298c2ecf20Sopenharmony_ci /* 6308c2ecf20Sopenharmony_ci * below value will be filled on rsnd_gen_probe() 6318c2ecf20Sopenharmony_ci */ 6328c2ecf20Sopenharmony_ci void *gen; 6338c2ecf20Sopenharmony_ci 6348c2ecf20Sopenharmony_ci /* 6358c2ecf20Sopenharmony_ci * below value will be filled on rsnd_adg_probe() 6368c2ecf20Sopenharmony_ci */ 6378c2ecf20Sopenharmony_ci void *adg; 6388c2ecf20Sopenharmony_ci 6398c2ecf20Sopenharmony_ci /* 6408c2ecf20Sopenharmony_ci * below value will be filled on rsnd_dma_probe() 6418c2ecf20Sopenharmony_ci */ 6428c2ecf20Sopenharmony_ci void *dma; 6438c2ecf20Sopenharmony_ci 6448c2ecf20Sopenharmony_ci /* 6458c2ecf20Sopenharmony_ci * below value will be filled on rsnd_ssi_probe() 6468c2ecf20Sopenharmony_ci */ 6478c2ecf20Sopenharmony_ci void *ssi; 6488c2ecf20Sopenharmony_ci int ssi_nr; 6498c2ecf20Sopenharmony_ci 6508c2ecf20Sopenharmony_ci /* 6518c2ecf20Sopenharmony_ci * below value will be filled on rsnd_ssiu_probe() 6528c2ecf20Sopenharmony_ci */ 6538c2ecf20Sopenharmony_ci void *ssiu; 6548c2ecf20Sopenharmony_ci int ssiu_nr; 6558c2ecf20Sopenharmony_ci 6568c2ecf20Sopenharmony_ci /* 6578c2ecf20Sopenharmony_ci * below value will be filled on rsnd_src_probe() 6588c2ecf20Sopenharmony_ci */ 6598c2ecf20Sopenharmony_ci void *src; 6608c2ecf20Sopenharmony_ci int src_nr; 6618c2ecf20Sopenharmony_ci 6628c2ecf20Sopenharmony_ci /* 6638c2ecf20Sopenharmony_ci * below value will be filled on rsnd_ctu_probe() 6648c2ecf20Sopenharmony_ci */ 6658c2ecf20Sopenharmony_ci void *ctu; 6668c2ecf20Sopenharmony_ci int ctu_nr; 6678c2ecf20Sopenharmony_ci 6688c2ecf20Sopenharmony_ci /* 6698c2ecf20Sopenharmony_ci * below value will be filled on rsnd_mix_probe() 6708c2ecf20Sopenharmony_ci */ 6718c2ecf20Sopenharmony_ci void *mix; 6728c2ecf20Sopenharmony_ci int mix_nr; 6738c2ecf20Sopenharmony_ci 6748c2ecf20Sopenharmony_ci /* 6758c2ecf20Sopenharmony_ci * below value will be filled on rsnd_dvc_probe() 6768c2ecf20Sopenharmony_ci */ 6778c2ecf20Sopenharmony_ci void *dvc; 6788c2ecf20Sopenharmony_ci int dvc_nr; 6798c2ecf20Sopenharmony_ci 6808c2ecf20Sopenharmony_ci /* 6818c2ecf20Sopenharmony_ci * below value will be filled on rsnd_cmd_probe() 6828c2ecf20Sopenharmony_ci */ 6838c2ecf20Sopenharmony_ci void *cmd; 6848c2ecf20Sopenharmony_ci int cmd_nr; 6858c2ecf20Sopenharmony_ci 6868c2ecf20Sopenharmony_ci /* 6878c2ecf20Sopenharmony_ci * below value will be filled on rsnd_dai_probe() 6888c2ecf20Sopenharmony_ci */ 6898c2ecf20Sopenharmony_ci struct snd_soc_dai_driver *daidrv; 6908c2ecf20Sopenharmony_ci struct rsnd_dai *rdai; 6918c2ecf20Sopenharmony_ci int rdai_nr; 6928c2ecf20Sopenharmony_ci}; 6938c2ecf20Sopenharmony_ci 6948c2ecf20Sopenharmony_ci#define rsnd_priv_to_pdev(priv) ((priv)->pdev) 6958c2ecf20Sopenharmony_ci#define rsnd_priv_to_dev(priv) (&(rsnd_priv_to_pdev(priv)->dev)) 6968c2ecf20Sopenharmony_ci 6978c2ecf20Sopenharmony_ci#define rsnd_is_gen1(priv) (((priv)->flags & RSND_GEN_MASK) == RSND_GEN1) 6988c2ecf20Sopenharmony_ci#define rsnd_is_gen2(priv) (((priv)->flags & RSND_GEN_MASK) == RSND_GEN2) 6998c2ecf20Sopenharmony_ci#define rsnd_is_gen3(priv) (((priv)->flags & RSND_GEN_MASK) == RSND_GEN3) 7008c2ecf20Sopenharmony_ci#define rsnd_is_e3(priv) (((priv)->flags & \ 7018c2ecf20Sopenharmony_ci (RSND_GEN_MASK | RSND_SOC_MASK)) == \ 7028c2ecf20Sopenharmony_ci (RSND_GEN3 | RSND_SOC_E)) 7038c2ecf20Sopenharmony_ci 7048c2ecf20Sopenharmony_ci#define rsnd_flags_has(p, f) ((p)->flags & (f)) 7058c2ecf20Sopenharmony_ci#define rsnd_flags_set(p, f) ((p)->flags |= (f)) 7068c2ecf20Sopenharmony_ci#define rsnd_flags_del(p, f) ((p)->flags &= ~(f)) 7078c2ecf20Sopenharmony_ci 7088c2ecf20Sopenharmony_ci/* 7098c2ecf20Sopenharmony_ci * rsnd_kctrl 7108c2ecf20Sopenharmony_ci */ 7118c2ecf20Sopenharmony_cistruct rsnd_kctrl_cfg { 7128c2ecf20Sopenharmony_ci unsigned int max; 7138c2ecf20Sopenharmony_ci unsigned int size; 7148c2ecf20Sopenharmony_ci u32 *val; 7158c2ecf20Sopenharmony_ci const char * const *texts; 7168c2ecf20Sopenharmony_ci int (*accept)(struct rsnd_dai_stream *io); 7178c2ecf20Sopenharmony_ci void (*update)(struct rsnd_dai_stream *io, struct rsnd_mod *mod); 7188c2ecf20Sopenharmony_ci struct rsnd_dai_stream *io; 7198c2ecf20Sopenharmony_ci struct snd_card *card; 7208c2ecf20Sopenharmony_ci struct snd_kcontrol *kctrl; 7218c2ecf20Sopenharmony_ci struct rsnd_mod *mod; 7228c2ecf20Sopenharmony_ci}; 7238c2ecf20Sopenharmony_ci 7248c2ecf20Sopenharmony_ci#define RSND_MAX_CHANNELS 8 7258c2ecf20Sopenharmony_cistruct rsnd_kctrl_cfg_m { 7268c2ecf20Sopenharmony_ci struct rsnd_kctrl_cfg cfg; 7278c2ecf20Sopenharmony_ci u32 val[RSND_MAX_CHANNELS]; 7288c2ecf20Sopenharmony_ci}; 7298c2ecf20Sopenharmony_ci 7308c2ecf20Sopenharmony_cistruct rsnd_kctrl_cfg_s { 7318c2ecf20Sopenharmony_ci struct rsnd_kctrl_cfg cfg; 7328c2ecf20Sopenharmony_ci u32 val; 7338c2ecf20Sopenharmony_ci}; 7348c2ecf20Sopenharmony_ci#define rsnd_kctrl_size(x) ((x).cfg.size) 7358c2ecf20Sopenharmony_ci#define rsnd_kctrl_max(x) ((x).cfg.max) 7368c2ecf20Sopenharmony_ci#define rsnd_kctrl_valm(x, i) ((x).val[i]) /* = (x).cfg.val[i] */ 7378c2ecf20Sopenharmony_ci#define rsnd_kctrl_vals(x) ((x).val) /* = (x).cfg.val[0] */ 7388c2ecf20Sopenharmony_ci 7398c2ecf20Sopenharmony_ciint rsnd_kctrl_accept_anytime(struct rsnd_dai_stream *io); 7408c2ecf20Sopenharmony_ciint rsnd_kctrl_accept_runtime(struct rsnd_dai_stream *io); 7418c2ecf20Sopenharmony_cistruct rsnd_kctrl_cfg *rsnd_kctrl_init_m(struct rsnd_kctrl_cfg_m *cfg); 7428c2ecf20Sopenharmony_cistruct rsnd_kctrl_cfg *rsnd_kctrl_init_s(struct rsnd_kctrl_cfg_s *cfg); 7438c2ecf20Sopenharmony_ciint rsnd_kctrl_new(struct rsnd_mod *mod, 7448c2ecf20Sopenharmony_ci struct rsnd_dai_stream *io, 7458c2ecf20Sopenharmony_ci struct snd_soc_pcm_runtime *rtd, 7468c2ecf20Sopenharmony_ci const unsigned char *name, 7478c2ecf20Sopenharmony_ci int (*accept)(struct rsnd_dai_stream *io), 7488c2ecf20Sopenharmony_ci void (*update)(struct rsnd_dai_stream *io, 7498c2ecf20Sopenharmony_ci struct rsnd_mod *mod), 7508c2ecf20Sopenharmony_ci struct rsnd_kctrl_cfg *cfg, 7518c2ecf20Sopenharmony_ci const char * const *texts, 7528c2ecf20Sopenharmony_ci int size, 7538c2ecf20Sopenharmony_ci u32 max); 7548c2ecf20Sopenharmony_ci 7558c2ecf20Sopenharmony_ci#define rsnd_kctrl_new_m(mod, io, rtd, name, accept, update, cfg, size, max) \ 7568c2ecf20Sopenharmony_ci rsnd_kctrl_new(mod, io, rtd, name, accept, update, rsnd_kctrl_init_m(cfg), \ 7578c2ecf20Sopenharmony_ci NULL, size, max) 7588c2ecf20Sopenharmony_ci 7598c2ecf20Sopenharmony_ci#define rsnd_kctrl_new_s(mod, io, rtd, name, accept, update, cfg, max) \ 7608c2ecf20Sopenharmony_ci rsnd_kctrl_new(mod, io, rtd, name, accept, update, rsnd_kctrl_init_s(cfg), \ 7618c2ecf20Sopenharmony_ci NULL, 1, max) 7628c2ecf20Sopenharmony_ci 7638c2ecf20Sopenharmony_ci#define rsnd_kctrl_new_e(mod, io, rtd, name, accept, update, cfg, texts, size) \ 7648c2ecf20Sopenharmony_ci rsnd_kctrl_new(mod, io, rtd, name, accept, update, rsnd_kctrl_init_s(cfg), \ 7658c2ecf20Sopenharmony_ci texts, 1, size) 7668c2ecf20Sopenharmony_ci 7678c2ecf20Sopenharmony_ciextern const char * const volume_ramp_rate[]; 7688c2ecf20Sopenharmony_ci#define VOLUME_RAMP_MAX_DVC (0x17 + 1) 7698c2ecf20Sopenharmony_ci#define VOLUME_RAMP_MAX_MIX (0x0a + 1) 7708c2ecf20Sopenharmony_ci 7718c2ecf20Sopenharmony_ci/* 7728c2ecf20Sopenharmony_ci * R-Car SSI 7738c2ecf20Sopenharmony_ci */ 7748c2ecf20Sopenharmony_ciint rsnd_ssi_probe(struct rsnd_priv *priv); 7758c2ecf20Sopenharmony_civoid rsnd_ssi_remove(struct rsnd_priv *priv); 7768c2ecf20Sopenharmony_cistruct rsnd_mod *rsnd_ssi_mod_get(struct rsnd_priv *priv, int id); 7778c2ecf20Sopenharmony_ciint rsnd_ssi_use_busif(struct rsnd_dai_stream *io); 7788c2ecf20Sopenharmony_ciu32 rsnd_ssi_multi_secondaries_runtime(struct rsnd_dai_stream *io); 7798c2ecf20Sopenharmony_ci 7808c2ecf20Sopenharmony_ci#define rsnd_ssi_is_pin_sharing(io) \ 7818c2ecf20Sopenharmony_ci __rsnd_ssi_is_pin_sharing(rsnd_io_to_mod_ssi(io)) 7828c2ecf20Sopenharmony_ciint __rsnd_ssi_is_pin_sharing(struct rsnd_mod *mod); 7838c2ecf20Sopenharmony_ci 7848c2ecf20Sopenharmony_ci#define rsnd_ssi_of_node(priv) rsnd_parse_of_node(priv, RSND_NODE_SSI) 7858c2ecf20Sopenharmony_civoid rsnd_parse_connect_ssi(struct rsnd_dai *rdai, 7868c2ecf20Sopenharmony_ci struct device_node *playback, 7878c2ecf20Sopenharmony_ci struct device_node *capture); 7888c2ecf20Sopenharmony_ciunsigned int rsnd_ssi_clk_query(struct rsnd_dai *rdai, 7898c2ecf20Sopenharmony_ci int param1, int param2, int *idx); 7908c2ecf20Sopenharmony_ci 7918c2ecf20Sopenharmony_ci/* 7928c2ecf20Sopenharmony_ci * R-Car SSIU 7938c2ecf20Sopenharmony_ci */ 7948c2ecf20Sopenharmony_ciint rsnd_ssiu_attach(struct rsnd_dai_stream *io, 7958c2ecf20Sopenharmony_ci struct rsnd_mod *mod); 7968c2ecf20Sopenharmony_ciint rsnd_ssiu_probe(struct rsnd_priv *priv); 7978c2ecf20Sopenharmony_civoid rsnd_ssiu_remove(struct rsnd_priv *priv); 7988c2ecf20Sopenharmony_civoid rsnd_parse_connect_ssiu(struct rsnd_dai *rdai, 7998c2ecf20Sopenharmony_ci struct device_node *playback, 8008c2ecf20Sopenharmony_ci struct device_node *capture); 8018c2ecf20Sopenharmony_ci#define rsnd_ssiu_of_node(priv) rsnd_parse_of_node(priv, RSND_NODE_SSIU) 8028c2ecf20Sopenharmony_ci 8038c2ecf20Sopenharmony_ci/* 8048c2ecf20Sopenharmony_ci * R-Car SRC 8058c2ecf20Sopenharmony_ci */ 8068c2ecf20Sopenharmony_ciint rsnd_src_probe(struct rsnd_priv *priv); 8078c2ecf20Sopenharmony_civoid rsnd_src_remove(struct rsnd_priv *priv); 8088c2ecf20Sopenharmony_cistruct rsnd_mod *rsnd_src_mod_get(struct rsnd_priv *priv, int id); 8098c2ecf20Sopenharmony_ci 8108c2ecf20Sopenharmony_ci#define rsnd_src_get_in_rate(priv, io) rsnd_src_get_rate(priv, io, 1) 8118c2ecf20Sopenharmony_ci#define rsnd_src_get_out_rate(priv, io) rsnd_src_get_rate(priv, io, 0) 8128c2ecf20Sopenharmony_ciunsigned int rsnd_src_get_rate(struct rsnd_priv *priv, 8138c2ecf20Sopenharmony_ci struct rsnd_dai_stream *io, 8148c2ecf20Sopenharmony_ci int is_in); 8158c2ecf20Sopenharmony_ci 8168c2ecf20Sopenharmony_ci#define rsnd_src_of_node(priv) rsnd_parse_of_node(priv, RSND_NODE_SRC) 8178c2ecf20Sopenharmony_ci#define rsnd_parse_connect_src(rdai, playback, capture) \ 8188c2ecf20Sopenharmony_ci rsnd_parse_connect_common(rdai, rsnd_src_mod_get, \ 8198c2ecf20Sopenharmony_ci rsnd_src_of_node(rsnd_rdai_to_priv(rdai)), \ 8208c2ecf20Sopenharmony_ci playback, capture) 8218c2ecf20Sopenharmony_ci 8228c2ecf20Sopenharmony_ci/* 8238c2ecf20Sopenharmony_ci * R-Car CTU 8248c2ecf20Sopenharmony_ci */ 8258c2ecf20Sopenharmony_ciint rsnd_ctu_probe(struct rsnd_priv *priv); 8268c2ecf20Sopenharmony_civoid rsnd_ctu_remove(struct rsnd_priv *priv); 8278c2ecf20Sopenharmony_cistruct rsnd_mod *rsnd_ctu_mod_get(struct rsnd_priv *priv, int id); 8288c2ecf20Sopenharmony_ci#define rsnd_ctu_of_node(priv) rsnd_parse_of_node(priv, RSND_NODE_CTU) 8298c2ecf20Sopenharmony_ci#define rsnd_parse_connect_ctu(rdai, playback, capture) \ 8308c2ecf20Sopenharmony_ci rsnd_parse_connect_common(rdai, rsnd_ctu_mod_get, \ 8318c2ecf20Sopenharmony_ci rsnd_ctu_of_node(rsnd_rdai_to_priv(rdai)), \ 8328c2ecf20Sopenharmony_ci playback, capture) 8338c2ecf20Sopenharmony_ci 8348c2ecf20Sopenharmony_ci/* 8358c2ecf20Sopenharmony_ci * R-Car MIX 8368c2ecf20Sopenharmony_ci */ 8378c2ecf20Sopenharmony_ciint rsnd_mix_probe(struct rsnd_priv *priv); 8388c2ecf20Sopenharmony_civoid rsnd_mix_remove(struct rsnd_priv *priv); 8398c2ecf20Sopenharmony_cistruct rsnd_mod *rsnd_mix_mod_get(struct rsnd_priv *priv, int id); 8408c2ecf20Sopenharmony_ci#define rsnd_mix_of_node(priv) rsnd_parse_of_node(priv, RSND_NODE_MIX) 8418c2ecf20Sopenharmony_ci#define rsnd_parse_connect_mix(rdai, playback, capture) \ 8428c2ecf20Sopenharmony_ci rsnd_parse_connect_common(rdai, rsnd_mix_mod_get, \ 8438c2ecf20Sopenharmony_ci rsnd_mix_of_node(rsnd_rdai_to_priv(rdai)), \ 8448c2ecf20Sopenharmony_ci playback, capture) 8458c2ecf20Sopenharmony_ci 8468c2ecf20Sopenharmony_ci/* 8478c2ecf20Sopenharmony_ci * R-Car DVC 8488c2ecf20Sopenharmony_ci */ 8498c2ecf20Sopenharmony_ciint rsnd_dvc_probe(struct rsnd_priv *priv); 8508c2ecf20Sopenharmony_civoid rsnd_dvc_remove(struct rsnd_priv *priv); 8518c2ecf20Sopenharmony_cistruct rsnd_mod *rsnd_dvc_mod_get(struct rsnd_priv *priv, int id); 8528c2ecf20Sopenharmony_ci#define rsnd_dvc_of_node(priv) rsnd_parse_of_node(priv, RSND_NODE_DVC) 8538c2ecf20Sopenharmony_ci#define rsnd_parse_connect_dvc(rdai, playback, capture) \ 8548c2ecf20Sopenharmony_ci rsnd_parse_connect_common(rdai, rsnd_dvc_mod_get, \ 8558c2ecf20Sopenharmony_ci rsnd_dvc_of_node(rsnd_rdai_to_priv(rdai)), \ 8568c2ecf20Sopenharmony_ci playback, capture) 8578c2ecf20Sopenharmony_ci 8588c2ecf20Sopenharmony_ci/* 8598c2ecf20Sopenharmony_ci * R-Car CMD 8608c2ecf20Sopenharmony_ci */ 8618c2ecf20Sopenharmony_ciint rsnd_cmd_probe(struct rsnd_priv *priv); 8628c2ecf20Sopenharmony_civoid rsnd_cmd_remove(struct rsnd_priv *priv); 8638c2ecf20Sopenharmony_ciint rsnd_cmd_attach(struct rsnd_dai_stream *io, int id); 8648c2ecf20Sopenharmony_ci 8658c2ecf20Sopenharmony_civoid rsnd_mod_make_sure(struct rsnd_mod *mod, enum rsnd_mod_type type); 8668c2ecf20Sopenharmony_ci#ifdef DEBUG 8678c2ecf20Sopenharmony_ci#define rsnd_mod_confirm_ssi(mssi) rsnd_mod_make_sure(mssi, RSND_MOD_SSI) 8688c2ecf20Sopenharmony_ci#define rsnd_mod_confirm_src(msrc) rsnd_mod_make_sure(msrc, RSND_MOD_SRC) 8698c2ecf20Sopenharmony_ci#define rsnd_mod_confirm_dvc(mdvc) rsnd_mod_make_sure(mdvc, RSND_MOD_DVC) 8708c2ecf20Sopenharmony_ci#else 8718c2ecf20Sopenharmony_ci#define rsnd_mod_confirm_ssi(mssi) 8728c2ecf20Sopenharmony_ci#define rsnd_mod_confirm_src(msrc) 8738c2ecf20Sopenharmony_ci#define rsnd_mod_confirm_dvc(mdvc) 8748c2ecf20Sopenharmony_ci#endif 8758c2ecf20Sopenharmony_ci 8768c2ecf20Sopenharmony_ci/* 8778c2ecf20Sopenharmony_ci * If you don't need interrupt status debug message, 8788c2ecf20Sopenharmony_ci * define RSND_DEBUG_NO_IRQ_STATUS as 1 on top of src.c/ssi.c 8798c2ecf20Sopenharmony_ci * 8808c2ecf20Sopenharmony_ci * #define RSND_DEBUG_NO_IRQ_STATUS 1 8818c2ecf20Sopenharmony_ci */ 8828c2ecf20Sopenharmony_ci#define rsnd_dbg_irq_status(dev, param...) \ 8838c2ecf20Sopenharmony_ci if (!IS_BUILTIN(RSND_DEBUG_NO_IRQ_STATUS)) \ 8848c2ecf20Sopenharmony_ci dev_dbg(dev, param) 8858c2ecf20Sopenharmony_ci 8868c2ecf20Sopenharmony_ci/* 8878c2ecf20Sopenharmony_ci * If you don't need rsnd_dai_call debug message, 8888c2ecf20Sopenharmony_ci * define RSND_DEBUG_NO_DAI_CALL as 1 on top of core.c 8898c2ecf20Sopenharmony_ci * 8908c2ecf20Sopenharmony_ci * #define RSND_DEBUG_NO_DAI_CALL 1 8918c2ecf20Sopenharmony_ci */ 8928c2ecf20Sopenharmony_ci#define rsnd_dbg_dai_call(dev, param...) \ 8938c2ecf20Sopenharmony_ci if (!IS_BUILTIN(RSND_DEBUG_NO_DAI_CALL)) \ 8948c2ecf20Sopenharmony_ci dev_dbg(dev, param) 8958c2ecf20Sopenharmony_ci 8968c2ecf20Sopenharmony_ci#endif 897