Files
linux-nv-oot/sound/soc/tegra-virt-alt/tegra_asoc_xbar_virt_alt.h
pmedawala e6e4bbc853 nvidia: oot: add tegra-virt-alt as OOT module
Combined nvaudio-ivc with tegra-virt-alt.

Bug 3735757

Change-Id: I9642c5367e43bfc470c70641fa22e50a4ae0e992
Signed-off-by: pmedawala <pmedawala@nvidia.com>
Reviewed-on: https://git-master.nvidia.com/r/c/linux-nv-oot/+/2800354
GVS: Gerrit_Virtual_Submit <buildbot_gerritrpt@nvidia.com>
Reviewed-by: Uday Gupta <udayg@nvidia.com>
Reviewed-by: Niranjan Dighe <ndighe@nvidia.com>
Reviewed-by: Laxman Dewangan <ldewangan@nvidia.com>
2022-12-21 11:58:23 -08:00

82 lines
2.9 KiB
C

/* SPDX-License-Identifier: GPL-2.0-only */
/*
* Copyright (c) 2021-2022 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
*/
#ifndef __TEGRA_VIRT_ALT_XBAR_H__
#define __TEGRA_VIRT_ALT_XBAR_H__
#include <sound/soc.h>
#define TEGRA_XBAR_RX_STRIDE 0x4
#define TEGRA_T186_SRC_NUM_MUX 83
#define TEGRA_T210_SRC_NUM_MUX 55
#define MUX_REG(id) (TEGRA_XBAR_RX_STRIDE * (id))
#define SOC_ENUM_EXT_REG(xname, xcount, xenum, xhandler_get, xhandler_put) \
{ .iface = SNDRV_CTL_ELEM_IFACE_MIXER, .name = xname, \
.info = snd_soc_info_enum_double, \
.get = xhandler_get, .put = xhandler_put, \
.private_value = (unsigned long)xenum, \
.tlv.p = (unsigned int *) xcount, \
}
#define SOC_VALUE_ENUM_WIDE(xreg, shift, xmax, xtexts, xvalues) \
{ .reg = xreg, .shift_l = shift, .shift_r = shift, \
.items = xmax, .texts = xtexts, .values = xvalues, \
.mask = xmax ? roundup_pow_of_two(xmax) - 1 : 0}
#define SOC_VALUE_ENUM_WIDE_DECL(name, xreg, shift, \
xtexts, xvalues) \
static struct soc_enum name = SOC_VALUE_ENUM_WIDE(xreg, shift, \
ARRAY_SIZE(xtexts), xtexts, xvalues)
#define MUX_ENUM_CTRL_DECL_186(ename, id) \
SOC_VALUE_ENUM_WIDE_DECL(ename##_enum, MUX_REG(id), 0, \
tegra_virt_t186ref_source_text, \
tegra_virt_t186ref_source_value); \
static const struct snd_kcontrol_new ename##_control = \
SOC_DAPM_ENUM_EXT("Route", ename##_enum,\
tegra_virt_get_route,\
tegra_virt_put_route)
#define MUX_VALUE(npart, nbit) (1 + nbit + npart * 32)
#define WIDGETS(sname, ename) \
SND_SOC_DAPM_AIF_IN(sname " RX", NULL, 0, SND_SOC_NOPM, 0, 0), \
SND_SOC_DAPM_MUX(sname " Mux", SND_SOC_NOPM, 0, 0, &ename##_control)
#define TX_WIDGETS(sname) \
SND_SOC_DAPM_AIF_IN(sname " RX", NULL, 0, SND_SOC_NOPM, 0, 0)
#define MIXER_IN_WIDGETS(sname, ename) \
SND_SOC_DAPM_MUX(sname " Mux", SND_SOC_NOPM, 0, 0, &ename##_control)
#define MIXER_OUT_WIDGETS(sname) \
SND_SOC_DAPM_AIF_IN(sname " RX", NULL, 0, SND_SOC_NOPM, 0, 0)
#define SND_SOC_DAPM_OUT(wname) \
{.id = snd_soc_dapm_spk, .name = wname, .kcontrol_news = NULL, \
.num_kcontrols = 0, .reg = SND_SOC_NOPM, .event = NULL,}
#define SND_SOC_DAPM_IN(wname) \
{.id = snd_soc_dapm_mic, .name = wname, .kcontrol_news = NULL, \
.num_kcontrols = 0, .reg = SND_SOC_NOPM, .event = NULL,}
#define CODEC_WIDGET(sname) \
SND_SOC_DAPM_IN(sname " MIC"), \
SND_SOC_DAPM_OUT(sname " HEADPHONE")
extern const int tegra_virt_t210ref_source_value[];
extern const char * const tegra_virt_t210ref_source_text[];
extern const int tegra_virt_t186ref_source_value[];
extern const char * const tegra_virt_t186ref_source_text[];
int tegra_virt_get_route(struct snd_kcontrol *kcontrol,
struct snd_ctl_elem_value *ucontrol);
int tegra_virt_put_route(struct snd_kcontrol *kcontrol,
struct snd_ctl_elem_value *ucontrol);
void tegra_virt_set_enum_source(const struct soc_enum *enum_virt);
int tegra_virt_xbar_register_codec(struct platform_device *pdev);
#endif