Lines Matching +full:i2s +full:- +full:regs

1 // SPDX-License-Identifier: GPL-2.0+
5 * Taken from dc i2s/rockchip.c
12 #include <i2s.h>
51 struct rk_i2s_regs *regs = (struct rk_i2s_regs *)priv->base_address; in rockchip_i2s_init() local
52 u32 bps = priv->bitspersample; in rockchip_i2s_init()
53 u32 lrf = priv->rfs; in rockchip_i2s_init()
54 u32 chn = priv->channels; in rockchip_i2s_init()
57 clrbits_le32(&regs->xfer, I2S_TX_TRAN_BIT); in rockchip_i2s_init()
58 mode = readl(&regs->txcr) & ~0x1f; in rockchip_i2s_init()
59 switch (priv->bitspersample) { in rockchip_i2s_init()
62 mode |= (priv->bitspersample - 1) << I2S_DATA_WIDTH_SHIFT; in rockchip_i2s_init()
65 log_err("Invalid sample size input %d\n", priv->bitspersample); in rockchip_i2s_init()
66 return -EINVAL; in rockchip_i2s_init()
68 writel(mode, &regs->txcr); in rockchip_i2s_init()
70 mode = readl(&regs->ckr) & ~I2S_MCLK_DIV_MASK; in rockchip_i2s_init()
71 mode |= (lrf / (bps * chn) - 1) << I2S_MCLK_DIV_SHIFT; in rockchip_i2s_init()
74 mode |= (priv->bitspersample * priv->channels - 1) << in rockchip_i2s_init()
76 writel(mode, &regs->ckr); in rockchip_i2s_init()
81 static int i2s_send_data(struct rk_i2s_regs *regs, u32 *data, uint length) in i2s_send_data() argument
84 writel(*data++, &regs->txdr); in i2s_send_data()
86 length -= min(32u, length); in i2s_send_data()
89 setbits_le32(&regs->xfer, I2S_TRAN_MASK); in i2s_send_data()
91 if ((readl(&regs->fifolr) & 0x3f) < 0x20) { in i2s_send_data()
92 writel(*data++, &regs->txdr); in i2s_send_data()
93 length--; in i2s_send_data()
96 while (readl(&regs->fifolr) & 0x3f) in i2s_send_data()
98 clrbits_le32(&regs->xfer, I2S_TRAN_MASK); in i2s_send_data()
99 writel(0, &regs->clr); in i2s_send_data()
107 struct rk_i2s_regs *regs = (struct rk_i2s_regs *)priv->base_address; in rockchip_i2s_tx_data() local
109 return i2s_send_data(regs, data, data_size / sizeof(u32)); in rockchip_i2s_tx_data()
119 log_debug("Missing i2s base\n"); in rockchip_i2s_probe()
120 return -EINVAL; in rockchip_i2s_probe()
122 priv->base_address = base; in rockchip_i2s_probe()
123 priv->id = 1; in rockchip_i2s_probe()
124 priv->audio_pll_clk = 4800000; in rockchip_i2s_probe()
125 priv->samplingrate = 48000; in rockchip_i2s_probe()
126 priv->bitspersample = 16; in rockchip_i2s_probe()
127 priv->channels = 2; in rockchip_i2s_probe()
128 priv->rfs = 256; in rockchip_i2s_probe()
129 priv->bfs = 32; in rockchip_i2s_probe()
139 { .compatible = "rockchip,rk3288-i2s" },