Lines Matching +full:tegra210 +full:- +full:adx

1 // SPDX-License-Identifier: GPL-2.0-only
3 // tegra210_adx.c - Tegra210 ADX driver
36 static void tegra210_adx_write_map_ram(struct tegra210_adx *adx) in tegra210_adx_write_map_ram() argument
40 regmap_write(adx->regmap, TEGRA210_ADX_CFG_RAM_CTRL, in tegra210_adx_write_map_ram()
46 regmap_write(adx->regmap, TEGRA210_ADX_CFG_RAM_DATA, in tegra210_adx_write_map_ram()
47 adx->map[i]); in tegra210_adx_write_map_ram()
49 regmap_write(adx->regmap, TEGRA210_ADX_IN_BYTE_EN0, adx->byte_mask[0]); in tegra210_adx_write_map_ram()
50 regmap_write(adx->regmap, TEGRA210_ADX_IN_BYTE_EN1, adx->byte_mask[1]); in tegra210_adx_write_map_ram()
56 struct tegra210_adx *adx = snd_soc_dai_get_drvdata(dai); in tegra210_adx_startup() local
60 /* Ensure if ADX status is disabled */ in tegra210_adx_startup()
61 err = regmap_read_poll_timeout_atomic(adx->regmap, TEGRA210_ADX_STATUS, in tegra210_adx_startup()
64 dev_err(dai->dev, "failed to stop ADX, err = %d\n", err); in tegra210_adx_startup()
74 regmap_update_bits(adx->regmap, TEGRA210_ADX_SOFT_RESET, in tegra210_adx_startup()
78 err = regmap_read_poll_timeout(adx->regmap, TEGRA210_ADX_SOFT_RESET, in tegra210_adx_startup()
81 dev_err(dai->dev, "failed to reset ADX, err = %d\n", err); in tegra210_adx_startup()
90 struct tegra210_adx *adx = dev_get_drvdata(dev); in tegra210_adx_runtime_suspend() local
92 regcache_cache_only(adx->regmap, true); in tegra210_adx_runtime_suspend()
93 regcache_mark_dirty(adx->regmap); in tegra210_adx_runtime_suspend()
100 struct tegra210_adx *adx = dev_get_drvdata(dev); in tegra210_adx_runtime_resume() local
102 regcache_cache_only(adx->regmap, false); in tegra210_adx_runtime_resume()
103 regcache_sync(adx->regmap); in tegra210_adx_runtime_resume()
105 tegra210_adx_write_map_ram(adx); in tegra210_adx_runtime_resume()
115 struct tegra210_adx *adx = snd_soc_dai_get_drvdata(dai); in tegra210_adx_set_audio_cif() local
122 return -EINVAL; in tegra210_adx_set_audio_cif()
135 return -EINVAL; in tegra210_adx_set_audio_cif()
143 tegra_set_cif(adx->regmap, reg, &cif_conf); in tegra210_adx_set_audio_cif()
154 TEGRA210_ADX_TX1_CIF_CTRL + ((dai->id - 1) * TEGRA210_ADX_AUDIOCIF_CH_STRIDE)); in tegra210_adx_out_hw_params()
170 struct tegra210_adx *adx = snd_soc_component_get_drvdata(cmpnt); in tegra210_adx_get_byte_map() local
172 unsigned char *bytes_map = (unsigned char *)&adx->map; in tegra210_adx_get_byte_map()
175 mc = (struct soc_mixer_control *)kcontrol->private_value; in tegra210_adx_get_byte_map()
176 enabled = adx->byte_mask[mc->reg / 32] & (1 << (mc->reg % 32)); in tegra210_adx_get_byte_map()
179 ucontrol->value.integer.value[0] = bytes_map[mc->reg]; in tegra210_adx_get_byte_map()
181 ucontrol->value.integer.value[0] = 0; in tegra210_adx_get_byte_map()
190 struct tegra210_adx *adx = snd_soc_component_get_drvdata(cmpnt); in tegra210_adx_put_byte_map() local
191 unsigned char *bytes_map = (unsigned char *)&adx->map; in tegra210_adx_put_byte_map()
192 int value = ucontrol->value.integer.value[0]; in tegra210_adx_put_byte_map()
194 (struct soc_mixer_control *)kcontrol->private_value; in tegra210_adx_put_byte_map()
196 if (value == bytes_map[mc->reg]) in tegra210_adx_put_byte_map()
201 bytes_map[mc->reg] = value; in tegra210_adx_put_byte_map()
202 adx->byte_mask[mc->reg / 32] |= (1 << (mc->reg % 32)); in tegra210_adx_put_byte_map()
205 bytes_map[mc->reg] = 0; in tegra210_adx_put_byte_map()
206 adx->byte_mask[mc->reg / 32] &= ~(1 << (mc->reg % 32)); in tegra210_adx_put_byte_map()
223 .name = "ADX-RX-CIF", \
225 .stream_name = "RX-CIF-Playback", \
234 .stream_name = "RX-CIF-Capture", \
247 .name = "ADX-TX" #id "-CIF", \
249 .stream_name = "TX" #id "-CIF-Playback",\
258 .stream_name = "TX" #id "-CIF-Capture", \
287 { "XBAR-" sname, NULL, "XBAR-TX" }, \
288 { "RX-CIF-" sname, NULL, "XBAR-" sname }, \
289 { "RX", NULL, "RX-CIF-" sname }, \
291 { "TX" #id "-CIF-" sname, NULL, "TX" #id }, \
292 { "TX" #id " XBAR-" sname, NULL, "TX" #id "-CIF-" sname }, \
293 { "TX" #id " XBAR-RX", NULL, "TX" #id " XBAR-" sname }
300 { "XBAR-" sname, NULL, "XBAR-TX" }, \
301 { "RX-CIF-" sname, NULL, "XBAR-" sname }, \
302 { "RX", NULL, "RX-CIF-" sname }, \
304 { "TX" #id "-CIF-" sname, NULL, "TX" #id }, \
305 { "TX" #id " XBAR-" sname, NULL, "TX" #id "-CIF-" sname }, \
306 { "TX" #id " XBAR-RX", NULL, "TX" #id " XBAR-" sname }
463 { .compatible = "nvidia,tegra210-adx" },
470 struct device *dev = &pdev->dev; in tegra210_adx_platform_probe()
471 struct tegra210_adx *adx; in tegra210_adx_platform_probe() local
475 adx = devm_kzalloc(dev, sizeof(*adx), GFP_KERNEL); in tegra210_adx_platform_probe()
476 if (!adx) in tegra210_adx_platform_probe()
477 return -ENOMEM; in tegra210_adx_platform_probe()
479 dev_set_drvdata(dev, adx); in tegra210_adx_platform_probe()
485 adx->regmap = devm_regmap_init_mmio(dev, regs, in tegra210_adx_platform_probe()
487 if (IS_ERR(adx->regmap)) { in tegra210_adx_platform_probe()
489 return PTR_ERR(adx->regmap); in tegra210_adx_platform_probe()
492 regcache_cache_only(adx->regmap, true); in tegra210_adx_platform_probe()
498 dev_err(dev, "can't register ADX component, err: %d\n", err); in tegra210_adx_platform_probe()
509 pm_runtime_disable(&pdev->dev); in tegra210_adx_platform_remove()
523 .name = "tegra210-adx",
533 MODULE_DESCRIPTION("Tegra210 ADX ASoC driver");