[alsa-devel] [PATCH v2] ASoC: madera: Read device tree configuration
Cezary Rojewski
cezary.rojewski at intel.com
Tue Jul 23 00:07:32 CEST 2019
On 2019-07-22 15:52, Charles Keepax wrote:
> +static void madera_prop_get_inmode(struct madera_priv *priv)
> +{
> + struct madera *madera = priv->madera;
> + struct madera_codec_pdata *pdata = &madera->pdata.codec;
> + u32 tmp[MADERA_MAX_INPUT * MADERA_MAX_MUXED_CHANNELS];
> + int n, i, in_idx, ch_idx;
> +
> + BUILD_BUG_ON(ARRAY_SIZE(pdata->inmode) != MADERA_MAX_INPUT);
> + BUILD_BUG_ON(ARRAY_SIZE(pdata->inmode[0]) != MADERA_MAX_MUXED_CHANNELS);
> +
> + n = madera_get_variable_u32_array(madera->dev, "cirrus,inmode",
> + tmp, ARRAY_SIZE(tmp),
> + MADERA_MAX_MUXED_CHANNELS);
> + if (n < 0)
> + return;
> +
> + in_idx = 0;
> + ch_idx = 0;
> + for (i = 0; i < n; ++i) {
> + pdata->inmode[in_idx][ch_idx] = tmp[i];
> +
> + if (++ch_idx == MADERA_MAX_MUXED_CHANNELS) {
> + ch_idx = 0;
> + ++in_idx;
> + }
> + }
> +}
> +
> +static void madera_prop_get_pdata(struct madera_priv *priv)
> +{
> + struct madera *madera = priv->madera;
> + struct madera_codec_pdata *pdata = &madera->pdata.codec;
> + u32 out_mono[ARRAY_SIZE(pdata->out_mono)];
> + int i, n;
> +
> + madera_prop_get_inmode(priv);
> +
> + n = madera_get_variable_u32_array(madera->dev, "cirrus,out-mono",
> + out_mono, ARRAY_SIZE(out_mono), 1);
> + if (n > 0)
> + for (i = 0; i < n; ++i)
> + pdata->out_mono[i] = !!out_mono[i];
> +
> + madera_get_variable_u32_array(madera->dev,
> + "cirrus,max-channels-clocked",
> + pdata->max_channels_clocked,
> + ARRAY_SIZE(pdata->max_channels_clocked),
> + 1);
> +
> + madera_get_variable_u32_array(madera->dev, "cirrus,pdm-fmt",
> + pdata->pdm_fmt,
> + ARRAY_SIZE(pdata->pdm_fmt), 1);
> +
> + madera_get_variable_u32_array(madera->dev, "cirrus,pdm-mute",
> + pdata->pdm_mute,
> + ARRAY_SIZE(pdata->pdm_mute), 1);
> +
> + madera_get_variable_u32_array(madera->dev, "cirrus,dmic-ref",
> + pdata->dmic_ref,
> + ARRAY_SIZE(pdata->dmic_ref), 1);
Hmm, madera_get_variable_u32_array calls are not permissive within
madera_prop_get_inmode yet here they are. Is this intentional?
> +}
> +
> int madera_core_init(struct madera_priv *priv)
> {
> int i;
> @@ -308,6 +402,9 @@ int madera_core_init(struct madera_priv *priv)
> BUILD_BUG_ON(!madera_mixer_texts[MADERA_NUM_MIXER_INPUTS - 1]);
> BUILD_BUG_ON(!madera_mixer_values[MADERA_NUM_MIXER_INPUTS - 1]);
>
> + if (!dev_get_platdata(priv->madera->dev))
> + madera_prop_get_pdata(priv);
> +
> mutex_init(&priv->rate_lock);
>
> for (i = 0; i < MADERA_MAX_HP_OUTPUT; i++)
>
More information about the Alsa-devel
mailing list