ASoC: fsl_spdif: Add kctl for configuring TX validity bit
Add one kctl for configuring TX validity bit from user space. The type of this kctl is boolean: on - Outgoing validity always set off - Outgoing validity always clear Signed-off-by: Shengjiu Wang <shengjiu.wang@nxp.com> Link: https://lore.kernel.org/r/1594112066-31297-3-git-send-email-shengjiu.wang@nxp.com Signed-off-by: Mark Brown <broonie@kernel.org>
This commit is contained in:
Родитель
055b082156
Коммит
aa3fce5cd4
|
@ -776,8 +776,8 @@ static int fsl_spdif_vbit_info(struct snd_kcontrol *kcontrol,
|
|||
}
|
||||
|
||||
/* Get valid good bit from interrupt status register */
|
||||
static int fsl_spdif_vbit_get(struct snd_kcontrol *kcontrol,
|
||||
struct snd_ctl_elem_value *ucontrol)
|
||||
static int fsl_spdif_rx_vbit_get(struct snd_kcontrol *kcontrol,
|
||||
struct snd_ctl_elem_value *ucontrol)
|
||||
{
|
||||
struct snd_soc_dai *cpu_dai = snd_kcontrol_chip(kcontrol);
|
||||
struct fsl_spdif_priv *spdif_priv = snd_soc_dai_get_drvdata(cpu_dai);
|
||||
|
@ -791,6 +791,35 @@ static int fsl_spdif_vbit_get(struct snd_kcontrol *kcontrol,
|
|||
return 0;
|
||||
}
|
||||
|
||||
static int fsl_spdif_tx_vbit_get(struct snd_kcontrol *kcontrol,
|
||||
struct snd_ctl_elem_value *ucontrol)
|
||||
{
|
||||
struct snd_soc_dai *cpu_dai = snd_kcontrol_chip(kcontrol);
|
||||
struct fsl_spdif_priv *spdif_priv = snd_soc_dai_get_drvdata(cpu_dai);
|
||||
struct regmap *regmap = spdif_priv->regmap;
|
||||
u32 val;
|
||||
|
||||
regmap_read(regmap, REG_SPDIF_SCR, &val);
|
||||
val = (val & SCR_VAL_MASK) >> SCR_VAL_OFFSET;
|
||||
val = 1 - val;
|
||||
ucontrol->value.integer.value[0] = val;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int fsl_spdif_tx_vbit_put(struct snd_kcontrol *kcontrol,
|
||||
struct snd_ctl_elem_value *ucontrol)
|
||||
{
|
||||
struct snd_soc_dai *cpu_dai = snd_kcontrol_chip(kcontrol);
|
||||
struct fsl_spdif_priv *spdif_priv = snd_soc_dai_get_drvdata(cpu_dai);
|
||||
struct regmap *regmap = spdif_priv->regmap;
|
||||
u32 val = (1 - ucontrol->value.integer.value[0]) << SCR_VAL_OFFSET;
|
||||
|
||||
regmap_update_bits(regmap, REG_SPDIF_SCR, SCR_VAL_MASK, val);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* DPLL lock information */
|
||||
static int fsl_spdif_rxrate_info(struct snd_kcontrol *kcontrol,
|
||||
struct snd_ctl_elem_info *uinfo)
|
||||
|
@ -948,11 +977,21 @@ static struct snd_kcontrol_new fsl_spdif_ctrls[] = {
|
|||
/* Valid bit error controller */
|
||||
{
|
||||
.iface = SNDRV_CTL_ELEM_IFACE_PCM,
|
||||
.name = "IEC958 V-Bit Errors",
|
||||
.name = "IEC958 RX V-Bit Errors",
|
||||
.access = SNDRV_CTL_ELEM_ACCESS_READ |
|
||||
SNDRV_CTL_ELEM_ACCESS_VOLATILE,
|
||||
.info = fsl_spdif_vbit_info,
|
||||
.get = fsl_spdif_vbit_get,
|
||||
.get = fsl_spdif_rx_vbit_get,
|
||||
},
|
||||
{
|
||||
.iface = SNDRV_CTL_ELEM_IFACE_PCM,
|
||||
.name = "IEC958 TX V-Bit",
|
||||
.access = SNDRV_CTL_ELEM_ACCESS_READ |
|
||||
SNDRV_CTL_ELEM_ACCESS_WRITE |
|
||||
SNDRV_CTL_ELEM_ACCESS_VOLATILE,
|
||||
.info = fsl_spdif_vbit_info,
|
||||
.get = fsl_spdif_tx_vbit_get,
|
||||
.put = fsl_spdif_tx_vbit_put,
|
||||
},
|
||||
/* DPLL lock info get controller */
|
||||
{
|
||||
|
|
Загрузка…
Ссылка в новой задаче