[PATCH] ASoC: fsl_spdif: add ALSA event on dpll locked
Shengjiu Wang
shengjiu.wang at gmail.com
Fri Sep 9 10:17:45 CEST 2022
Hi
On Thu, Sep 8, 2022 at 9:33 PM <robert.rosengren at axis.com> wrote:
> From: Robert Rosengren <robert.rosengren at axis.com>
>
> Add an ALSA event on the RX Sample Rate controller upon the dpll locked
> interrupt, making it possible for audio applications to monitor changes
> in the hardware.
>
> Signed-off-by: Robert Rosengren <robert.rosengren at axis.com>
> ---
> sound/soc/fsl/fsl_spdif.c | 18 ++++++++++++++++--
> 1 file changed, 16 insertions(+), 2 deletions(-)
>
> diff --git a/sound/soc/fsl/fsl_spdif.c b/sound/soc/fsl/fsl_spdif.c
> index 7fc1c96929bb..1679a21ffdca 100644
> --- a/sound/soc/fsl/fsl_spdif.c
> +++ b/sound/soc/fsl/fsl_spdif.c
> @@ -44,6 +44,8 @@ static u8 srpc_dpll_locked[] = { 0x0, 0x1, 0x2, 0x3,
> 0x4, 0xa, 0xb };
>
> #define DEFAULT_RXCLK_SRC 1
>
> +#define RX_SAMPLE_RATE_KCONTROL "RX Sample Rate"
> +
> /**
> * struct fsl_spdif_soc_data: soc specific data
> *
> @@ -122,6 +124,7 @@ struct fsl_spdif_priv {
> const struct fsl_spdif_soc_data *soc;
> struct spdif_mixer_control fsl_spdif_control;
> struct snd_soc_dai_driver cpu_dai_drv;
> + struct snd_soc_dai *dai;
> struct platform_device *pdev;
> struct regmap *regmap;
> bool dpll_locked;
> @@ -223,9 +226,19 @@ static void spdif_irq_dpll_lock(struct fsl_spdif_priv
> *spdif_priv)
> locked &= SRPC_DPLL_LOCKED;
>
> dev_dbg(&pdev->dev, "isr: Rx dpll %s \n",
> - locked ? "locked" : "loss lock");
> + locked ? "locked" : "loss lock");
>
> spdif_priv->dpll_locked = locked ? true : false;
> +
> + if (spdif_priv->dai) {
> + struct snd_soc_component *component =
> spdif_priv->dai->component;
> + struct snd_kcontrol *kctl =
> snd_soc_card_get_kcontrol(component->card,
> + RX_SAMPLE_RATE_KCONTROL);
>
Alignment should match open parenthesis
> +
> + if (kctl)
> + snd_ctl_notify(component->card->snd_card,
> + SNDRV_CTL_EVENT_MASK_VALUE, &kctl->id);
>
Alignment should match open parenthesis
Best regards
Wang shengjiu
> + }
> }
>
> /* Receiver found illegal symbol interrupt handler */
> @@ -1197,7 +1210,7 @@ static struct snd_kcontrol_new fsl_spdif_ctrls[] = {
> /* DPLL lock info get controller */
> {
> .iface = SNDRV_CTL_ELEM_IFACE_PCM,
> - .name = "RX Sample Rate",
> + .name = RX_SAMPLE_RATE_KCONTROL,
> .access = SNDRV_CTL_ELEM_ACCESS_READ |
> SNDRV_CTL_ELEM_ACCESS_VOLATILE,
> .info = fsl_spdif_rxrate_info,
> @@ -1241,6 +1254,7 @@ static struct snd_kcontrol_new fsl_spdif_ctrls_rcm[]
> = {
> static int fsl_spdif_dai_probe(struct snd_soc_dai *dai)
> {
> struct fsl_spdif_priv *spdif_private =
> snd_soc_dai_get_drvdata(dai);
> + spdif_private->dai = dai;
>
> snd_soc_dai_init_dma_data(dai, &spdif_private->dma_params_tx,
> &spdif_private->dma_params_rx);
> --
> 2.30.2
>
>
More information about the Alsa-devel
mailing list