Lines Matching refs:vad

97 static inline int vframe_size(struct rockchip_vad *vad, int bytes)  in vframe_size()  argument
99 return bytes / vad->channels / vad->sample_bytes; in vframe_size()
120 static int vad_buffer_sort(struct rockchip_vad *vad) in vad_buffer_sort() argument
122 struct vad_buf *vbuf = &vad->vbuf; in vad_buffer_sort()
125 if (vad->version != VAD_RK1808ES) in vad_buffer_sort()
158 static int rockchip_vad_stop(struct rockchip_vad *vad) in rockchip_vad_stop() argument
161 struct vad_buf *vbuf = &vad->vbuf; in rockchip_vad_stop()
162 struct vad_params *params = &vad->params; in rockchip_vad_stop()
164 regmap_read(vad->regmap, VAD_CTRL, &val); in rockchip_vad_stop()
169 if (vad->version == VAD_RK1808ES) in rockchip_vad_stop()
170 regmap_read(vad->regmap, VAD_SAMPLE_CNT, &frames); in rockchip_vad_stop()
171 regmap_update_bits(vad->regmap, VAD_CTRL, VAD_EN_MASK, VAD_DISABLE); in rockchip_vad_stop()
172 regmap_read(vad->regmap, VAD_CTRL, &val); in rockchip_vad_stop()
173 vad->h_16bit = (val & AUDIO_24BIT_SAT_MASK) == AUDIO_H16B; in rockchip_vad_stop()
174 regmap_read(vad->regmap, VAD_RAM_END_ADDR, &val); in rockchip_vad_stop()
175 vbuf->end = vbuf->begin + (val - vad->memphy) + 0x8; in rockchip_vad_stop()
176 regmap_read(vad->regmap, VAD_INT, &val); in rockchip_vad_stop()
179 regmap_read(vad->regmap, VAD_RAM_CUR_ADDR, &val); in rockchip_vad_stop()
185 vbuf->cur = vbuf->begin + (val - vad->memphy); in rockchip_vad_stop()
196 if (vad->version == VAD_RK1808ES) { in rockchip_vad_stop()
197 vbuf->loop_cnt = (frames / vframe_size(vad, vbuf->size)) % 16; in rockchip_vad_stop()
203 frames = frames % vframe_size(vad, vbuf->size); in rockchip_vad_stop()
204 val = vframe_size(vad, vbuf->pos - vbuf->begin); in rockchip_vad_stop()
210 regmap_read(vad->regmap, VAD_DET_CON0, &val); in rockchip_vad_stop()
214 regmap_read(vad->regmap, VAD_DET_CON1, &val); in rockchip_vad_stop()
216 regmap_read(vad->regmap, VAD_DET_CON5, &val); in rockchip_vad_stop()
222 dev_info(vad->dev, "bufsize: %d, hw_abs: 0x%x\n", in rockchip_vad_stop()
228 static int rockchip_vad_setup(struct rockchip_vad *vad) in rockchip_vad_setup() argument
230 struct regmap *regmap = vad->regmap; in rockchip_vad_setup()
233 dev_info(vad->dev, "sw_abs: 0x%x\n", in rockchip_vad_setup()
234 vad->uparams.noise_abs); in rockchip_vad_setup()
236 NOISE_ABS_MASK, vad->uparams.noise_abs); in rockchip_vad_setup()
252 struct rockchip_vad *vad = NULL; in substream_get_drvdata() local
262 vad = snd_soc_component_get_drvdata(codec_dai->component); in substream_get_drvdata()
265 return vad; in substream_get_drvdata()
277 struct rockchip_vad *vad = NULL; in snd_pcm_vad_avail() local
281 vad = substream_get_drvdata(substream); in snd_pcm_vad_avail()
283 if (!vad) in snd_pcm_vad_avail()
286 vbuf = &vad->vbuf; in snd_pcm_vad_avail()
291 vframes = samples_to_bytes(runtime, vad->channels); in snd_pcm_vad_avail()
295 dev_err(vad->dev, "residue bytes: %d\n", vbuf->size); in snd_pcm_vad_avail()
305 struct rockchip_vad *vad = NULL; in snd_pcm_vad_read() local
312 vad = substream_get_drvdata(substream); in snd_pcm_vad_read()
314 if (!vad) in snd_pcm_vad_read()
317 vbuf = &vad->vbuf; in snd_pcm_vad_read()
325 if (vad_buffer_sort(vad) < 0) { in snd_pcm_vad_read()
326 dev_err(vad->dev, "buffer sort failed\n"); in snd_pcm_vad_read()
330 if (!vad->buf) { in snd_pcm_vad_read()
331 vad->buf = kzalloc(bytes, GFP_KERNEL); in snd_pcm_vad_read()
332 if (!vad->buf) in snd_pcm_vad_read()
337 vframe_sz = samples_to_bytes(runtime, vad->channels); in snd_pcm_vad_read()
340 sbuf = vad->buf; in snd_pcm_vad_read()
341 pbuf = vad->buf + bytes - vbytes; in snd_pcm_vad_read()
369 if (copy_to_user(buf, vad->buf, bytes)) in snd_pcm_vad_read()
374 kfree(vad->buf); in snd_pcm_vad_read()
375 vad->buf = NULL; in snd_pcm_vad_read()
386 struct rockchip_vad *vad = NULL; in snd_pcm_vad_preprocess() local
390 vad = substream_get_drvdata(substream); in snd_pcm_vad_preprocess()
392 if (!vad) in snd_pcm_vad_preprocess()
395 buf += samples_to_bytes(runtime, vad->audio_chnl); in snd_pcm_vad_preprocess()
397 if (runtime->sample_bits == 32 && vad->h_16bit) in snd_pcm_vad_preprocess()
408 vad_preprocess_update_params(&vad->uparams); in snd_pcm_vad_preprocess()
421 struct rockchip_vad *vad = NULL; in snd_pcm_vad_attached() local
424 vad = substream_get_drvdata(substream); in snd_pcm_vad_attached()
426 if (vad && vad->vswitch) in snd_pcm_vad_attached()
472 struct rockchip_vad *vad = NULL; in snd_pcm_vad_memcpy() local
477 vad = substream_get_drvdata(substream); in snd_pcm_vad_memcpy()
479 if (!vad) in snd_pcm_vad_memcpy()
482 vbuf = &vad->vbuf; in snd_pcm_vad_memcpy()
491 if (vad_buffer_sort(vad) < 0) { in snd_pcm_vad_memcpy()
492 dev_err(vad->dev, "buffer sort failed\n"); in snd_pcm_vad_memcpy()
497 vframe_sz = samples_to_bytes(runtime, vad->channels); in snd_pcm_vad_memcpy()
656 static int rockchip_vad_get_audio_src_address(struct rockchip_vad *vad, in rockchip_vad_get_audio_src_address() argument
659 const struct audio_src_addr_map *map = vad->soc_data->map; in rockchip_vad_get_audio_src_address()
663 vad->audio_src = map->id; in rockchip_vad_get_audio_src_address()
664 vad->audio_src_addr = map->addr; in rockchip_vad_get_audio_src_address()
674 struct rockchip_vad *vad = dev_id; in rockchip_vad_irq() local
677 regmap_read(vad->regmap, VAD_INT, &val); in rockchip_vad_irq()
678 regmap_write(vad->regmap, VAD_INT, val); in rockchip_vad_irq()
680 dev_dbg(vad->dev, "irq 0x%08x\n", val); in rockchip_vad_irq()
706 struct rockchip_vad *vad = snd_soc_component_get_drvdata(component); in rockchip_vad_config_acodec() local
709 if (!vad->acodec_cfg) in rockchip_vad_config_acodec()
713 regmap_write(vad->regmap, VAD_ID_ADDR, val); in rockchip_vad_config_acodec()
715 regmap_multi_reg_write(vad->regmap, rockchip_vad_acodec_adc_enable, in rockchip_vad_config_acodec()
718 regmap_update_bits(vad->regmap, VAD_CTRL, ACODE_CFG_REG_NUM_MASK, in rockchip_vad_config_acodec()
720 regmap_update_bits(vad->regmap, VAD_CTRL, CFG_ACODE_AFTER_DET_EN_MASK, in rockchip_vad_config_acodec()
749 struct rockchip_vad *vad = snd_soc_component_get_drvdata(dai->component); in rockchip_vad_params_fixup() local
758 vad->cpu_dai = cpu_dai; in rockchip_vad_params_fixup()
759 vad->substream = substream; in rockchip_vad_params_fixup()
762 audio_src_dai = rockchip_vad_find_dai(vad->audio_node); in rockchip_vad_params_fixup()
778 struct rockchip_vad *vad = snd_soc_component_get_drvdata(component); in rockchip_vad_hw_params() local
785 vad->channels = params_channels(params); in rockchip_vad_hw_params()
789 vad->sample_bytes = 2; in rockchip_vad_hw_params()
794 vad->sample_bytes = 4; in rockchip_vad_hw_params()
800 regmap_update_bits(vad->regmap, VAD_CTRL, AUDIO_CHNL_BW_MASK, val); in rockchip_vad_hw_params()
801 regmap_update_bits(vad->regmap, VAD_CTRL, AUDIO_CHNL_NUM_MASK, in rockchip_vad_hw_params()
820 if (vad->version == VAD_RK1808ES) { in rockchip_vad_hw_params()
826 regmap_update_bits(vad->regmap, VAD_CTRL, mask, val); in rockchip_vad_hw_params()
829 if (vad->buffer_time) { in rockchip_vad_hw_params()
833 buf_time = vad->memphy_end - vad->memphy + 0x8; in rockchip_vad_hw_params()
836 if (buf_time < vad->buffer_time) in rockchip_vad_hw_params()
837 dev_info(vad->dev, "max buffer time: %u ms.\n", buf_time); in rockchip_vad_hw_params()
838 buf_time = min(buf_time, vad->buffer_time); in rockchip_vad_hw_params()
841 if (vad->version == VAD_RK1808ES) in rockchip_vad_hw_params()
844 val += vad->memphy; in rockchip_vad_hw_params()
846 if (val < vad->memphy || val > vad->memphy_end) in rockchip_vad_hw_params()
848 regmap_write(vad->regmap, VAD_RAM_END_ADDR, val); in rockchip_vad_hw_params()
855 val = vad->audio_src >> AUDIO_SRC_SEL_SHIFT; in rockchip_vad_hw_params()
862 static int rockchip_vad_enable_cpudai(struct rockchip_vad *vad) in rockchip_vad_enable_cpudai() argument
868 cpu_dai = vad->cpu_dai; in rockchip_vad_enable_cpudai()
869 substream = vad->substream; in rockchip_vad_enable_cpudai()
893 static int rockchip_vad_disable_cpudai(struct rockchip_vad *vad) in rockchip_vad_disable_cpudai() argument
899 cpu_dai = vad->cpu_dai; in rockchip_vad_disable_cpudai()
900 substream = vad->substream; in rockchip_vad_disable_cpudai()
931 struct rockchip_vad *vad = snd_soc_component_get_drvdata(component); in rockchip_vad_pcm_shutdown() local
936 if (vad->vswitch) { in rockchip_vad_pcm_shutdown()
937 rockchip_vad_enable_cpudai(vad); in rockchip_vad_pcm_shutdown()
938 rockchip_vad_setup(vad); in rockchip_vad_pcm_shutdown()
948 struct rockchip_vad *vad = snd_soc_component_get_drvdata(component); in rockchip_vad_trigger() local
956 rockchip_vad_stop(vad); in rockchip_vad_trigger()
1010 struct rockchip_vad *vad = snd_soc_component_get_drvdata(component); in rockchip_vad_switch_get() local
1012 ucontrol->value.integer.value[0] = vad->vswitch; in rockchip_vad_switch_get()
1021 struct rockchip_vad *vad = snd_soc_component_get_drvdata(component); in rockchip_vad_switch_put() local
1025 if (val && !vad->vswitch) { in rockchip_vad_switch_put()
1026 vad->vswitch = true; in rockchip_vad_switch_put()
1027 } else if (!val && vad->vswitch) { in rockchip_vad_switch_put()
1028 vad->vswitch = false; in rockchip_vad_switch_put()
1030 regmap_read(vad->regmap, VAD_CTRL, &val); in rockchip_vad_switch_put()
1033 rockchip_vad_stop(vad); in rockchip_vad_switch_put()
1034 rockchip_vad_disable_cpudai(vad); in rockchip_vad_switch_put()
1036 vad->vbuf.size = 0; in rockchip_vad_switch_put()
1063 struct rockchip_vad *vad = s->private; in rockchip_vad_debugfs_reg_show() local
1068 if (vad->version == VAD_RK1808 || in rockchip_vad_debugfs_reg_show()
1069 vad->version == VAD_RK1808ES) in rockchip_vad_debugfs_reg_show()
1074 regmap_read(vad->regmap, i, &val); in rockchip_vad_debugfs_reg_show()
1087 struct rockchip_vad *vad = ((struct seq_file *)file->private_data)->private; in rockchip_vad_debugfs_reg_write() local
1100 regmap_write(vad->regmap, reg, val); in rockchip_vad_debugfs_reg_write()
1120 static void rockchip_vad_init(struct rockchip_vad *vad) in rockchip_vad_init() argument
1124 regmap_write(vad->regmap, VAD_RAM_BEGIN_ADDR, vad->memphy); in rockchip_vad_init()
1125 regmap_write(vad->regmap, VAD_RAM_END_ADDR, vad->memphy_end); in rockchip_vad_init()
1126 vad->vbuf.begin = vad->membase; in rockchip_vad_init()
1127 regmap_write(vad->regmap, VAD_IS_ADDR, vad->audio_src_addr); in rockchip_vad_init()
1129 val = VAD_DET_CHNL(vad->audio_chnl); in rockchip_vad_init()
1130 val |= vad->audio_src; in rockchip_vad_init()
1131 val |= vad->mode << VAD_MODE_SHIFT; in rockchip_vad_init()
1135 regmap_update_bits(vad->regmap, VAD_CTRL, mask, val); in rockchip_vad_init()
1136 if (vad->version == VAD_RK1808 || in rockchip_vad_init()
1137 vad->version == VAD_RK1808ES) { in rockchip_vad_init()
1138 regmap_update_bits(vad->regmap, VAD_AUX_CONTROL, in rockchip_vad_init()
1141 regmap_update_bits(vad->regmap, VAD_AUX_CONTROL, in rockchip_vad_init()
1162 struct rockchip_vad *vad; in rockchip_vad_probe() local
1170 vad = devm_kzalloc(&pdev->dev, sizeof(*vad), GFP_KERNEL); in rockchip_vad_probe()
1171 if (!vad) in rockchip_vad_probe()
1174 vad->dev = &pdev->dev; in rockchip_vad_probe()
1180 vad->soc_data = (struct vad_soc_data *)match->data; in rockchip_vad_probe()
1181 vad->version = vad->soc_data->version; in rockchip_vad_probe()
1183 switch (vad->version) { in rockchip_vad_probe()
1195 vad->acodec_cfg = of_property_read_bool(np, "rockchip,acodec-cfg"); in rockchip_vad_probe()
1196 of_property_read_u32(np, "rockchip,mode", &vad->mode); in rockchip_vad_probe()
1197 of_property_read_u32(np, "rockchip,det-channel", &vad->audio_chnl); in rockchip_vad_probe()
1198 of_property_read_u32(np, "rockchip,buffer-time-ms", &vad->buffer_time); in rockchip_vad_probe()
1220 ret = rockchip_vad_get_audio_src_address(vad, audio_res.start); in rockchip_vad_probe()
1223 vad->audio_node = asrc_np; in rockchip_vad_probe()
1224 vad->audio_src <<= AUDIO_SRC_SEL_SHIFT; in rockchip_vad_probe()
1229 vad->memphy = sram_res.start; in rockchip_vad_probe()
1230 vad->memphy_end = sram_res.start + resource_size(&sram_res) - 0x8; in rockchip_vad_probe()
1231 vad->membase = devm_ioremap(&pdev->dev, sram_res.start, in rockchip_vad_probe()
1233 if (!vad->membase) { in rockchip_vad_probe()
1238 if (IS_ERR(vad->membase)) { in rockchip_vad_probe()
1239 ret = PTR_ERR(vad->membase); in rockchip_vad_probe()
1243 vad->hclk = devm_clk_get(&pdev->dev, "hclk"); in rockchip_vad_probe()
1244 if (IS_ERR(vad->hclk)) { in rockchip_vad_probe()
1245 ret = PTR_ERR(vad->hclk); in rockchip_vad_probe()
1249 ret = clk_prepare_enable(vad->hclk); in rockchip_vad_probe()
1253 vad->regmap = devm_regmap_init_mmio(&pdev->dev, regbase, in rockchip_vad_probe()
1255 if (IS_ERR(vad->regmap)) { in rockchip_vad_probe()
1256 ret = PTR_ERR(vad->regmap); in rockchip_vad_probe()
1260 rockchip_vad_init(vad); in rockchip_vad_probe()
1269 0, dev_name(&pdev->dev), vad); in rockchip_vad_probe()
1274 vad->debugfs_dir = debugfs_create_dir("vad", NULL); in rockchip_vad_probe()
1275 if (IS_ERR(vad->debugfs_dir)) in rockchip_vad_probe()
1278 debugfs_create_file("reg", 0644, vad->debugfs_dir, vad, in rockchip_vad_probe()
1282 platform_set_drvdata(pdev, vad); in rockchip_vad_probe()
1292 clk_disable_unprepare(vad->hclk); in rockchip_vad_probe()
1301 struct rockchip_vad *vad = dev_get_drvdata(&pdev->dev); in rockchip_vad_remove() local
1303 if (!IS_ERR(vad->hclk)) in rockchip_vad_remove()
1304 clk_disable_unprepare(vad->hclk); in rockchip_vad_remove()
1305 of_node_put(vad->audio_node); in rockchip_vad_remove()