Lines Matching refs:rt5514_dsp

39 struct rt5514_dsp {
76 struct rt5514_dsp *rt5514_dsp =
77 container_of(work, struct rt5514_dsp, copy_work.work);
83 mutex_lock(&rt5514_dsp->dma_lock);
84 if (!rt5514_dsp->substream) {
85 dev_err(rt5514_dsp->dev, "No pcm substream\n");
89 runtime = rt5514_dsp->substream->runtime;
90 period_bytes = snd_pcm_lib_period_bytes(rt5514_dsp->substream);
92 schedule_delayed_work(&rt5514_dsp->copy_work, 5);
96 if (rt5514_dsp->buf_size % period_bytes)
97 rt5514_dsp->buf_size = (rt5514_dsp->buf_size / period_bytes) *
100 if (rt5514_dsp->get_size >= rt5514_dsp->buf_size) {
106 if (cur_wp >= rt5514_dsp->buf_rp)
107 remain_data = (cur_wp - rt5514_dsp->buf_rp);
110 (rt5514_dsp->buf_limit - rt5514_dsp->buf_rp) +
111 (cur_wp - rt5514_dsp->buf_base);
114 schedule_delayed_work(&rt5514_dsp->copy_work, 5);
119 if (rt5514_dsp->buf_rp + period_bytes <= rt5514_dsp->buf_limit) {
120 rt5514_spi_burst_read(rt5514_dsp->buf_rp,
121 runtime->dma_area + rt5514_dsp->dma_offset,
124 if (rt5514_dsp->buf_rp + period_bytes == rt5514_dsp->buf_limit)
125 rt5514_dsp->buf_rp = rt5514_dsp->buf_base;
127 rt5514_dsp->buf_rp += period_bytes;
129 truncated_bytes = rt5514_dsp->buf_limit - rt5514_dsp->buf_rp;
130 rt5514_spi_burst_read(rt5514_dsp->buf_rp,
131 runtime->dma_area + rt5514_dsp->dma_offset,
134 rt5514_spi_burst_read(rt5514_dsp->buf_base,
135 runtime->dma_area + rt5514_dsp->dma_offset +
138 rt5514_dsp->buf_rp = rt5514_dsp->buf_base + period_bytes -
142 rt5514_dsp->get_size += period_bytes;
143 rt5514_dsp->dma_offset += period_bytes;
144 if (rt5514_dsp->dma_offset >= runtime->dma_bytes)
145 rt5514_dsp->dma_offset = 0;
147 snd_pcm_period_elapsed(rt5514_dsp->substream);
149 schedule_delayed_work(&rt5514_dsp->copy_work, 5);
152 mutex_unlock(&rt5514_dsp->dma_lock);
155 static void rt5514_schedule_copy(struct rt5514_dsp *rt5514_dsp)
159 if (!rt5514_dsp->substream)
162 rt5514_dsp->get_size = 0;
171 rt5514_dsp->buf_base = buf[0] | buf[1] << 8 | buf[2] << 16 |
176 rt5514_dsp->buf_limit = buf[0] | buf[1] << 8 | buf[2] << 16 |
181 rt5514_dsp->buf_rp = buf[0] | buf[1] << 8 | buf[2] << 16 |
184 if (rt5514_dsp->buf_rp % 8)
185 rt5514_dsp->buf_rp = (rt5514_dsp->buf_rp / 8) * 8;
187 rt5514_dsp->buf_size = rt5514_dsp->buf_limit - rt5514_dsp->buf_base;
189 if (rt5514_dsp->buf_base && rt5514_dsp->buf_limit &&
190 rt5514_dsp->buf_rp && rt5514_dsp->buf_size)
191 schedule_delayed_work(&rt5514_dsp->copy_work, 0);
196 struct rt5514_dsp *rt5514_dsp = data;
198 rt5514_schedule_copy(rt5514_dsp);
216 struct rt5514_dsp *rt5514_dsp =
220 mutex_lock(&rt5514_dsp->dma_lock);
221 rt5514_dsp->substream = substream;
222 rt5514_dsp->dma_offset = 0;
227 rt5514_schedule_copy(rt5514_dsp);
229 mutex_unlock(&rt5514_dsp->dma_lock);
237 struct rt5514_dsp *rt5514_dsp =
240 mutex_lock(&rt5514_dsp->dma_lock);
241 rt5514_dsp->substream = NULL;
242 mutex_unlock(&rt5514_dsp->dma_lock);
244 cancel_delayed_work_sync(&rt5514_dsp->copy_work);
254 struct rt5514_dsp *rt5514_dsp =
257 return bytes_to_frames(runtime, rt5514_dsp->dma_offset);
263 struct rt5514_dsp *rt5514_dsp;
266 rt5514_dsp = devm_kzalloc(component->dev, sizeof(*rt5514_dsp),
268 if (!rt5514_dsp)
271 rt5514_dsp->dev = &rt5514_spi->dev;
272 mutex_init(&rt5514_dsp->dma_lock);
273 INIT_DELAYED_WORK(&rt5514_dsp->copy_work, rt5514_spi_copy_work);
274 snd_soc_component_set_drvdata(component, rt5514_dsp);
280 rt5514_dsp);
286 device_init_wakeup(rt5514_dsp->dev, true);
473 struct rt5514_dsp *rt5514_dsp = dev_get_drvdata(dev);
480 if (rt5514_dsp) {
481 if (rt5514_dsp->substream) {
485 rt5514_schedule_copy(rt5514_dsp);