Lines Matching +full:tegra210 +full:- +full:ahub

1 // SPDX-License-Identifier: GPL-2.0-only
2 // SPDX-FileCopyrightText: Copyright (c) 2021-2024 NVIDIA CORPORATION & AFFILIATES.
5 // tegra210_amx.c - Tegra210 AMX driver
24 * The counter is in terms of AHUB clock cycles. If a frame is not
27 * function of sample rate (8 kHz) and AHUB clock (49.152 MHz).
53 regmap_write(amx->regmap, TEGRA210_AMX_CFG_RAM_CTRL, in tegra210_amx_write_map_ram()
59 regmap_write(amx->regmap, TEGRA210_AMX_CFG_RAM_DATA, in tegra210_amx_write_map_ram()
60 amx->map[i]); in tegra210_amx_write_map_ram()
62 regmap_write(amx->regmap, TEGRA210_AMX_OUT_BYTE_EN0, amx->byte_mask[0]); in tegra210_amx_write_map_ram()
63 regmap_write(amx->regmap, TEGRA210_AMX_OUT_BYTE_EN1, amx->byte_mask[1]); in tegra210_amx_write_map_ram()
74 err = regmap_read_poll_timeout(amx->regmap, TEGRA210_AMX_STATUS, val, in tegra210_amx_startup()
77 dev_err(dai->dev, "failed to stop AMX, err = %d\n", err); in tegra210_amx_startup()
87 regmap_update_bits(amx->regmap, TEGRA210_AMX_SOFT_RESET, in tegra210_amx_startup()
91 err = regmap_read_poll_timeout(amx->regmap, TEGRA210_AMX_SOFT_RESET, in tegra210_amx_startup()
94 dev_err(dai->dev, "failed to reset AMX, err = %d\n", err); in tegra210_amx_startup()
105 regcache_cache_only(amx->regmap, true); in tegra210_amx_runtime_suspend()
106 regcache_mark_dirty(amx->regmap); in tegra210_amx_runtime_suspend()
115 regcache_cache_only(amx->regmap, false); in tegra210_amx_runtime_resume()
116 regcache_sync(amx->regmap); in tegra210_amx_runtime_resume()
118 regmap_update_bits(amx->regmap, in tegra210_amx_runtime_resume()
152 return -EINVAL; in tegra210_amx_set_audio_cif()
160 tegra_set_cif(amx->regmap, reg, &cif_conf); in tegra210_amx_set_audio_cif()
171 if (amx->soc_data->auto_disable) { in tegra210_amx_in_hw_params()
172 regmap_write(amx->regmap, in tegra210_amx_in_hw_params()
173 AMX_CH_REG(dai->id, TEGRA194_AMX_RX1_FRAME_PERIOD), in tegra210_amx_in_hw_params()
175 regmap_write(amx->regmap, TEGRA210_AMX_CYA, 1); in tegra210_amx_in_hw_params()
179 AMX_CH_REG(dai->id, TEGRA210_AMX_RX1_CIF_CTRL)); in tegra210_amx_in_hw_params()
195 (struct soc_mixer_control *)kcontrol->private_value; in tegra210_amx_get_byte_map()
197 unsigned char *bytes_map = (unsigned char *)&amx->map; in tegra210_amx_get_byte_map()
198 int reg = mc->reg; in tegra210_amx_get_byte_map()
202 enabled = amx->byte_mask[1] & (1 << (reg - 32)); in tegra210_amx_get_byte_map()
204 enabled = amx->byte_mask[0] & (1 << reg); in tegra210_amx_get_byte_map()
217 ucontrol->value.integer.value[0] = bytes_map[reg]; in tegra210_amx_get_byte_map()
219 ucontrol->value.integer.value[0] = 256; in tegra210_amx_get_byte_map()
228 (struct soc_mixer_control *)kcontrol->private_value; in tegra210_amx_put_byte_map()
231 unsigned char *bytes_map = (unsigned char *)&amx->map; in tegra210_amx_put_byte_map()
232 int reg = mc->reg; in tegra210_amx_put_byte_map()
233 int value = ucontrol->value.integer.value[0]; in tegra210_amx_put_byte_map()
234 unsigned int mask_val = amx->byte_mask[reg / 32]; in tegra210_amx_put_byte_map()
241 if (mask_val == amx->byte_mask[reg / 32]) in tegra210_amx_put_byte_map()
246 amx->byte_mask[reg / 32] = mask_val; in tegra210_amx_put_byte_map()
262 .name = "AMX-RX-CIF" #id, \
264 .stream_name = "RX" #id "-CIF-Playback",\
274 .stream_name = "RX" #id "-CIF-Capture", \
288 .name = "AMX-TX-CIF", \
290 .stream_name = "TX-CIF-Playback", \
300 .stream_name = "TX-CIF-Capture", \
330 { "RX" #id " XBAR-" sname, NULL, "RX" #id " XBAR-TX" }, \
331 { "RX" #id "-CIF-" sname, NULL, "RX" #id " XBAR-" sname },\
332 { "RX" #id, NULL, "RX" #id "-CIF-" sname }, \
334 { "TX-CIF-" sname, NULL, "TX" }, \
335 { "XBAR-" sname, NULL, "TX-CIF-" sname }, \
336 { "XBAR-RX", NULL, "XBAR-" sname }
531 { .compatible = "nvidia,tegra210-amx", .data = &soc_data_tegra210 },
532 { .compatible = "nvidia,tegra194-amx", .data = &soc_data_tegra194 },
539 struct device *dev = &pdev->dev; in tegra210_amx_platform_probe()
546 return -ENOMEM; in tegra210_amx_platform_probe()
548 amx->soc_data = device_get_match_data(dev); in tegra210_amx_platform_probe()
556 amx->regmap = devm_regmap_init_mmio(dev, regs, in tegra210_amx_platform_probe()
557 amx->soc_data->regmap_conf); in tegra210_amx_platform_probe()
558 if (IS_ERR(amx->regmap)) { in tegra210_amx_platform_probe()
560 return PTR_ERR(amx->regmap); in tegra210_amx_platform_probe()
563 regcache_cache_only(amx->regmap, true); in tegra210_amx_platform_probe()
580 pm_runtime_disable(&pdev->dev); in tegra210_amx_platform_remove()
592 .name = "tegra210-amx",
602 MODULE_DESCRIPTION("Tegra210 AMX ASoC driver");