lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [<thread-prev] [day] [month] [year] [list]
Message-ID: <72bc47d6-3d70-0ddb-897f-bdc9b58684b8@linaro.org>
Date:   Thu, 20 Jul 2023 09:47:46 +0100
From:   Srinivas Kandagatla <srinivas.kandagatla@...aro.org>
To:     Krzysztof Kozlowski <krzysztof.kozlowski@...aro.org>,
        Liam Girdwood <lgirdwood@...il.com>,
        Mark Brown <broonie@...nel.org>,
        Jaroslav Kysela <perex@...ex.cz>,
        Takashi Iwai <tiwai@...e.com>,
        Banajit Goswami <bgoswami@...cinc.com>,
        alsa-devel@...a-project.org, linux-kernel@...r.kernel.org
Subject: Re: [PATCH 1/2] ASoC: codecs: tx-macro: split widgets per different
 LPASS versions



On 17/07/2023 15:01, Krzysztof Kozlowski wrote:
> TX macro codec differs slightly between different Qualcomm Low Power
> Audio SubSystem (LPASS) block versions.  In LPASS version 9.2 the
> register responsible for TX SMIC MUXn muxes is different, thus to
> properly support it, the driver needs to register different widgets per
> different LPASS version.
> 
> Prepare for supporting this register difference by refactoring existing
> code:
> 1. Move few widgets (TX SMIC MUXn, TX SWR_ADCn, TX SWR_DMICn) out of
>     common 'tx_macro_dapm_widgets[]' array to a new per-variant specific
>     array 'tx_macro_dapm_widgets_v9[]'.
> 2. Move also related audio routes into new array.
> 3. Store pointers to these variant-specific arrays in new variant-data
>     structure 'tx_macro_data'.
> 4. Add variant-specific widgets and routes in component probe, instead
>     of driver probe.
> 
> The change should have no real impact, except re-shuffling code and
> registering some widgets and audio routes in component probe, instead of
> driver probe.
> 
> Signed-off-by: Krzysztof Kozlowski <krzysztof.kozlowski@...aro.org>
> ---
This patch-series is breaking amic functionality on x13s.

We should defer this till we address that.


thanks,
Srini
>   sound/soc/codecs/lpass-macro-common.h |   5 +
>   sound/soc/codecs/lpass-tx-macro.c     | 219 +++++++++++++++++---------
>   2 files changed, 147 insertions(+), 77 deletions(-)
> 
> diff --git a/sound/soc/codecs/lpass-macro-common.h b/sound/soc/codecs/lpass-macro-common.h
> index 4eb886565ea3..6376a02b373a 100644
> --- a/sound/soc/codecs/lpass-macro-common.h
> +++ b/sound/soc/codecs/lpass-macro-common.h
> @@ -9,6 +9,11 @@
>   /* NPL clock is expected */
>   #define LPASS_MACRO_FLAG_HAS_NPL_CLOCK		BIT(0)
>   
> +enum lpass_version {
> +	LPASS_VER_9_0_0,
> +	LPASS_VER_11_0_0,
> +};
> +
>   struct lpass_macro {
>   	struct device *macro_pd;
>   	struct device *dcodec_pd;
> diff --git a/sound/soc/codecs/lpass-tx-macro.c b/sound/soc/codecs/lpass-tx-macro.c
> index de978c3d70b7..0da0bbf80eee 100644
> --- a/sound/soc/codecs/lpass-tx-macro.c
> +++ b/sound/soc/codecs/lpass-tx-macro.c
> @@ -253,8 +253,18 @@ struct hpf_work {
>   	struct delayed_work dwork;
>   };
>   
> +struct tx_macro_data {
> +	unsigned int flags;
> +	unsigned int ver;
> +	const struct snd_soc_dapm_widget *extra_widgets;
> +	size_t extra_widgets_num;
> +	const struct snd_soc_dapm_route *extra_routes;
> +	size_t extra_routes_num;
> +};
> +
>   struct tx_macro {
>   	struct device *dev;
> +	const struct tx_macro_data *data;
>   	struct snd_soc_component *component;
>   	struct hpf_work tx_hpf_work[NUM_DECIMATORS];
>   	struct tx_mute_work tx_mute_dwork[NUM_DECIMATORS];
> @@ -1235,53 +1245,6 @@ static const struct snd_kcontrol_new tx_dec5_mux = SOC_DAPM_ENUM("tx_dec5", tx_d
>   static const struct snd_kcontrol_new tx_dec6_mux = SOC_DAPM_ENUM("tx_dec6", tx_dec6_enum);
>   static const struct snd_kcontrol_new tx_dec7_mux = SOC_DAPM_ENUM("tx_dec7", tx_dec7_enum);
>   
> -static const char * const smic_mux_text[] = {
> -	"ZERO", "ADC0", "ADC1", "ADC2", "ADC3", "SWR_DMIC0",
> -	"SWR_DMIC1", "SWR_DMIC2", "SWR_DMIC3", "SWR_DMIC4",
> -	"SWR_DMIC5", "SWR_DMIC6", "SWR_DMIC7"
> -};
> -
> -static SOC_ENUM_SINGLE_DECL(tx_smic0_enum, CDC_TX_INP_MUX_ADC_MUX0_CFG0,
> -			0, smic_mux_text);
> -
> -static SOC_ENUM_SINGLE_DECL(tx_smic1_enum, CDC_TX_INP_MUX_ADC_MUX1_CFG0,
> -			0, smic_mux_text);
> -
> -static SOC_ENUM_SINGLE_DECL(tx_smic2_enum, CDC_TX_INP_MUX_ADC_MUX2_CFG0,
> -			0, smic_mux_text);
> -
> -static SOC_ENUM_SINGLE_DECL(tx_smic3_enum, CDC_TX_INP_MUX_ADC_MUX3_CFG0,
> -			0, smic_mux_text);
> -
> -static SOC_ENUM_SINGLE_DECL(tx_smic4_enum, CDC_TX_INP_MUX_ADC_MUX4_CFG0,
> -			0, smic_mux_text);
> -
> -static SOC_ENUM_SINGLE_DECL(tx_smic5_enum, CDC_TX_INP_MUX_ADC_MUX5_CFG0,
> -			0, smic_mux_text);
> -
> -static SOC_ENUM_SINGLE_DECL(tx_smic6_enum, CDC_TX_INP_MUX_ADC_MUX6_CFG0,
> -			0, smic_mux_text);
> -
> -static SOC_ENUM_SINGLE_DECL(tx_smic7_enum, CDC_TX_INP_MUX_ADC_MUX7_CFG0,
> -			0, smic_mux_text);
> -
> -static const struct snd_kcontrol_new tx_smic0_mux = SOC_DAPM_ENUM_EXT("tx_smic0", tx_smic0_enum,
> -			snd_soc_dapm_get_enum_double, tx_macro_put_dec_enum);
> -static const struct snd_kcontrol_new tx_smic1_mux = SOC_DAPM_ENUM_EXT("tx_smic1", tx_smic1_enum,
> -			snd_soc_dapm_get_enum_double, tx_macro_put_dec_enum);
> -static const struct snd_kcontrol_new tx_smic2_mux = SOC_DAPM_ENUM_EXT("tx_smic2", tx_smic2_enum,
> -			snd_soc_dapm_get_enum_double, tx_macro_put_dec_enum);
> -static const struct snd_kcontrol_new tx_smic3_mux = SOC_DAPM_ENUM_EXT("tx_smic3", tx_smic3_enum,
> -			snd_soc_dapm_get_enum_double, tx_macro_put_dec_enum);
> -static const struct snd_kcontrol_new tx_smic4_mux = SOC_DAPM_ENUM_EXT("tx_smic4", tx_smic4_enum,
> -			snd_soc_dapm_get_enum_double, tx_macro_put_dec_enum);
> -static const struct snd_kcontrol_new tx_smic5_mux = SOC_DAPM_ENUM_EXT("tx_smic5", tx_smic5_enum,
> -			snd_soc_dapm_get_enum_double, tx_macro_put_dec_enum);
> -static const struct snd_kcontrol_new tx_smic6_mux = SOC_DAPM_ENUM_EXT("tx_smic6", tx_smic6_enum,
> -			snd_soc_dapm_get_enum_double, tx_macro_put_dec_enum);
> -static const struct snd_kcontrol_new tx_smic7_mux = SOC_DAPM_ENUM_EXT("tx_smic7", tx_smic7_enum,
> -			snd_soc_dapm_get_enum_double, tx_macro_put_dec_enum);
> -
>   static const char * const dmic_mux_text[] = {
>   	"ZERO", "DMIC0", "DMIC1", "DMIC2", "DMIC3",
>   	"DMIC4", "DMIC5", "DMIC6", "DMIC7"
> @@ -1427,15 +1390,6 @@ static const struct snd_soc_dapm_widget tx_macro_dapm_widgets[] = {
>   	SND_SOC_DAPM_MIXER("TX_AIF3_CAP Mixer", SND_SOC_NOPM, TX_MACRO_AIF3_CAP, 0,
>   		tx_aif3_cap_mixer, ARRAY_SIZE(tx_aif3_cap_mixer)),
>   
> -	SND_SOC_DAPM_MUX("TX SMIC MUX0", SND_SOC_NOPM, 0, 0, &tx_smic0_mux),
> -	SND_SOC_DAPM_MUX("TX SMIC MUX1", SND_SOC_NOPM, 0, 0, &tx_smic1_mux),
> -	SND_SOC_DAPM_MUX("TX SMIC MUX2", SND_SOC_NOPM, 0, 0, &tx_smic2_mux),
> -	SND_SOC_DAPM_MUX("TX SMIC MUX3", SND_SOC_NOPM, 0, 0, &tx_smic3_mux),
> -	SND_SOC_DAPM_MUX("TX SMIC MUX4", SND_SOC_NOPM, 0, 0, &tx_smic4_mux),
> -	SND_SOC_DAPM_MUX("TX SMIC MUX5", SND_SOC_NOPM, 0, 0, &tx_smic5_mux),
> -	SND_SOC_DAPM_MUX("TX SMIC MUX6", SND_SOC_NOPM, 0, 0, &tx_smic6_mux),
> -	SND_SOC_DAPM_MUX("TX SMIC MUX7", SND_SOC_NOPM, 0, 0, &tx_smic7_mux),
> -
>   	SND_SOC_DAPM_MUX("TX DMIC MUX0", SND_SOC_NOPM, 4, 0, &tx_dmic0_mux),
>   	SND_SOC_DAPM_MUX("TX DMIC MUX1", SND_SOC_NOPM, 4, 0, &tx_dmic1_mux),
>   	SND_SOC_DAPM_MUX("TX DMIC MUX2", SND_SOC_NOPM, 4, 0, &tx_dmic2_mux),
> @@ -1445,18 +1399,6 @@ static const struct snd_soc_dapm_widget tx_macro_dapm_widgets[] = {
>   	SND_SOC_DAPM_MUX("TX DMIC MUX6", SND_SOC_NOPM, 4, 0, &tx_dmic6_mux),
>   	SND_SOC_DAPM_MUX("TX DMIC MUX7", SND_SOC_NOPM, 4, 0, &tx_dmic7_mux),
>   
> -	SND_SOC_DAPM_INPUT("TX SWR_ADC0"),
> -	SND_SOC_DAPM_INPUT("TX SWR_ADC1"),
> -	SND_SOC_DAPM_INPUT("TX SWR_ADC2"),
> -	SND_SOC_DAPM_INPUT("TX SWR_ADC3"),
> -	SND_SOC_DAPM_INPUT("TX SWR_DMIC0"),
> -	SND_SOC_DAPM_INPUT("TX SWR_DMIC1"),
> -	SND_SOC_DAPM_INPUT("TX SWR_DMIC2"),
> -	SND_SOC_DAPM_INPUT("TX SWR_DMIC3"),
> -	SND_SOC_DAPM_INPUT("TX SWR_DMIC4"),
> -	SND_SOC_DAPM_INPUT("TX SWR_DMIC5"),
> -	SND_SOC_DAPM_INPUT("TX SWR_DMIC6"),
> -	SND_SOC_DAPM_INPUT("TX SWR_DMIC7"),
>   	SND_SOC_DAPM_INPUT("TX DMIC0"),
>   	SND_SOC_DAPM_INPUT("TX DMIC1"),
>   	SND_SOC_DAPM_INPUT("TX DMIC2"),
> @@ -1577,7 +1519,81 @@ static const struct snd_soc_dapm_route tx_audio_map[] = {
>   	{"TX DMIC MUX0", "DMIC5", "TX DMIC5"},
>   	{"TX DMIC MUX0", "DMIC6", "TX DMIC6"},
>   	{"TX DMIC MUX0", "DMIC7", "TX DMIC7"},
> +};
>   
> +/* Controls and routes specific to LPASS <= v9.0.0 */
> +static const char * const smic_mux_text_v9[] = {
> +	"ZERO", "ADC0", "ADC1", "ADC2", "ADC3", "SWR_DMIC0",
> +	"SWR_DMIC1", "SWR_DMIC2", "SWR_DMIC3", "SWR_DMIC4",
> +	"SWR_DMIC5", "SWR_DMIC6", "SWR_DMIC7"
> +};
> +
> +static SOC_ENUM_SINGLE_DECL(tx_smic0_enum_v9, CDC_TX_INP_MUX_ADC_MUX0_CFG0,
> +			0, smic_mux_text_v9);
> +
> +static SOC_ENUM_SINGLE_DECL(tx_smic1_enum_v9, CDC_TX_INP_MUX_ADC_MUX1_CFG0,
> +			0, smic_mux_text_v9);
> +
> +static SOC_ENUM_SINGLE_DECL(tx_smic2_enum_v9, CDC_TX_INP_MUX_ADC_MUX2_CFG0,
> +			0, smic_mux_text_v9);
> +
> +static SOC_ENUM_SINGLE_DECL(tx_smic3_enum_v9, CDC_TX_INP_MUX_ADC_MUX3_CFG0,
> +			0, smic_mux_text_v9);
> +
> +static SOC_ENUM_SINGLE_DECL(tx_smic4_enum_v9, CDC_TX_INP_MUX_ADC_MUX4_CFG0,
> +			0, smic_mux_text_v9);
> +
> +static SOC_ENUM_SINGLE_DECL(tx_smic5_enum_v9, CDC_TX_INP_MUX_ADC_MUX5_CFG0,
> +			0, smic_mux_text_v9);
> +
> +static SOC_ENUM_SINGLE_DECL(tx_smic6_enum_v9, CDC_TX_INP_MUX_ADC_MUX6_CFG0,
> +			0, smic_mux_text_v9);
> +
> +static SOC_ENUM_SINGLE_DECL(tx_smic7_enum_v9, CDC_TX_INP_MUX_ADC_MUX7_CFG0,
> +			0, smic_mux_text_v9);
> +
> +static const struct snd_kcontrol_new tx_smic0_mux_v9 = SOC_DAPM_ENUM_EXT("tx_smic0", tx_smic0_enum_v9,
> +			snd_soc_dapm_get_enum_double, tx_macro_put_dec_enum);
> +static const struct snd_kcontrol_new tx_smic1_mux_v9 = SOC_DAPM_ENUM_EXT("tx_smic1", tx_smic1_enum_v9,
> +			snd_soc_dapm_get_enum_double, tx_macro_put_dec_enum);
> +static const struct snd_kcontrol_new tx_smic2_mux_v9 = SOC_DAPM_ENUM_EXT("tx_smic2", tx_smic2_enum_v9,
> +			snd_soc_dapm_get_enum_double, tx_macro_put_dec_enum);
> +static const struct snd_kcontrol_new tx_smic3_mux_v9 = SOC_DAPM_ENUM_EXT("tx_smic3", tx_smic3_enum_v9,
> +			snd_soc_dapm_get_enum_double, tx_macro_put_dec_enum);
> +static const struct snd_kcontrol_new tx_smic4_mux_v9 = SOC_DAPM_ENUM_EXT("tx_smic4", tx_smic4_enum_v9,
> +			snd_soc_dapm_get_enum_double, tx_macro_put_dec_enum);
> +static const struct snd_kcontrol_new tx_smic5_mux_v9 = SOC_DAPM_ENUM_EXT("tx_smic5", tx_smic5_enum_v9,
> +			snd_soc_dapm_get_enum_double, tx_macro_put_dec_enum);
> +static const struct snd_kcontrol_new tx_smic6_mux_v9 = SOC_DAPM_ENUM_EXT("tx_smic6", tx_smic6_enum_v9,
> +			snd_soc_dapm_get_enum_double, tx_macro_put_dec_enum);
> +static const struct snd_kcontrol_new tx_smic7_mux_v9 = SOC_DAPM_ENUM_EXT("tx_smic7", tx_smic7_enum_v9,
> +			snd_soc_dapm_get_enum_double, tx_macro_put_dec_enum);
> +
> +static const struct snd_soc_dapm_widget tx_macro_dapm_widgets_v9[] = {
> +	SND_SOC_DAPM_MUX("TX SMIC MUX0", SND_SOC_NOPM, 0, 0, &tx_smic0_mux_v9),
> +	SND_SOC_DAPM_MUX("TX SMIC MUX1", SND_SOC_NOPM, 0, 0, &tx_smic1_mux_v9),
> +	SND_SOC_DAPM_MUX("TX SMIC MUX2", SND_SOC_NOPM, 0, 0, &tx_smic2_mux_v9),
> +	SND_SOC_DAPM_MUX("TX SMIC MUX3", SND_SOC_NOPM, 0, 0, &tx_smic3_mux_v9),
> +	SND_SOC_DAPM_MUX("TX SMIC MUX4", SND_SOC_NOPM, 0, 0, &tx_smic4_mux_v9),
> +	SND_SOC_DAPM_MUX("TX SMIC MUX5", SND_SOC_NOPM, 0, 0, &tx_smic5_mux_v9),
> +	SND_SOC_DAPM_MUX("TX SMIC MUX6", SND_SOC_NOPM, 0, 0, &tx_smic6_mux_v9),
> +	SND_SOC_DAPM_MUX("TX SMIC MUX7", SND_SOC_NOPM, 0, 0, &tx_smic7_mux_v9),
> +
> +	SND_SOC_DAPM_INPUT("TX SWR_ADC0"),
> +	SND_SOC_DAPM_INPUT("TX SWR_ADC1"),
> +	SND_SOC_DAPM_INPUT("TX SWR_ADC2"),
> +	SND_SOC_DAPM_INPUT("TX SWR_ADC3"),
> +	SND_SOC_DAPM_INPUT("TX SWR_DMIC0"),
> +	SND_SOC_DAPM_INPUT("TX SWR_DMIC1"),
> +	SND_SOC_DAPM_INPUT("TX SWR_DMIC2"),
> +	SND_SOC_DAPM_INPUT("TX SWR_DMIC3"),
> +	SND_SOC_DAPM_INPUT("TX SWR_DMIC4"),
> +	SND_SOC_DAPM_INPUT("TX SWR_DMIC5"),
> +	SND_SOC_DAPM_INPUT("TX SWR_DMIC6"),
> +	SND_SOC_DAPM_INPUT("TX SWR_DMIC7"),
> +};
> +
> +static const struct snd_soc_dapm_route tx_audio_map_v9[] = {
>   	{"TX DEC0 MUX", "SWR_MIC", "TX SMIC MUX0"},
>   	{"TX SMIC MUX0", NULL, "TX_SWR_CLK"},
>   	{"TX SMIC MUX0", "ADC0", "TX SWR_ADC0"},
> @@ -1823,10 +1839,41 @@ static const struct snd_kcontrol_new tx_macro_snd_controls[] = {
>   		       tx_macro_get_bcs, tx_macro_set_bcs),
>   };
>   
> +static int tx_macro_component_extend(struct snd_soc_component *comp)
> +{
> +	struct snd_soc_dapm_context *dapm = snd_soc_component_get_dapm(comp);
> +	struct tx_macro *tx = snd_soc_component_get_drvdata(comp);
> +	int ret;
> +
> +	if (tx->data->extra_widgets_num) {
> +		ret = snd_soc_dapm_new_controls(dapm, tx->data->extra_widgets,
> +						tx->data->extra_widgets_num);
> +		if (ret) {
> +			dev_err(tx->dev, "failed to add extra widgets: %d\n", ret);
> +			return ret;
> +		}
> +	}
> +
> +	if (tx->data->extra_routes_num) {
> +		ret = snd_soc_dapm_add_routes(dapm, tx->data->extra_routes,
> +					      tx->data->extra_routes_num);
> +		if (ret) {
> +			dev_err(tx->dev, "failed to add extra routes: %d\n", ret);
> +			return ret;
> +		}
> +	}
> +
> +	return 0;
> +}
> +
>   static int tx_macro_component_probe(struct snd_soc_component *comp)
>   {
>   	struct tx_macro *tx = snd_soc_component_get_drvdata(comp);
> -	int i;
> +	int i, ret;
> +
> +	ret = tx_macro_component_extend(comp);
> +	if (ret)
> +		return ret;
>   
>   	snd_soc_component_init_regmap(comp, tx->regmap);
>   
> @@ -1954,17 +2001,16 @@ static int tx_macro_probe(struct platform_device *pdev)
>   {
>   	struct device *dev = &pdev->dev;
>   	struct device_node *np = dev->of_node;
> -	kernel_ulong_t flags;
>   	struct tx_macro *tx;
>   	void __iomem *base;
>   	int ret, reg;
>   
> -	flags = (kernel_ulong_t)device_get_match_data(dev);
> -
>   	tx = devm_kzalloc(dev, sizeof(*tx), GFP_KERNEL);
>   	if (!tx)
>   		return -ENOMEM;
>   
> +	tx->data = device_get_match_data(dev);
> +
>   	tx->macro = devm_clk_get_optional(dev, "macro");
>   	if (IS_ERR(tx->macro))
>   		return PTR_ERR(tx->macro);
> @@ -1977,7 +2023,7 @@ static int tx_macro_probe(struct platform_device *pdev)
>   	if (IS_ERR(tx->mclk))
>   		return PTR_ERR(tx->mclk);
>   
> -	if (flags & LPASS_MACRO_FLAG_HAS_NPL_CLOCK) {
> +	if (tx->data->flags & LPASS_MACRO_FLAG_HAS_NPL_CLOCK) {
>   		tx->npl = devm_clk_get(dev, "npl");
>   		if (IS_ERR(tx->npl))
>   			return PTR_ERR(tx->npl);
> @@ -2155,21 +2201,40 @@ static const struct dev_pm_ops tx_macro_pm_ops = {
>   	SET_RUNTIME_PM_OPS(tx_macro_runtime_suspend, tx_macro_runtime_resume, NULL)
>   };
>   
> +static const struct tx_macro_data lpass_ver_9 = {
> +	.flags			= LPASS_MACRO_FLAG_HAS_NPL_CLOCK,
> +	.ver			= LPASS_VER_9_0_0,
> +	.extra_widgets		= tx_macro_dapm_widgets_v9,
> +	.extra_widgets_num	= ARRAY_SIZE(tx_macro_dapm_widgets_v9),
> +	.extra_routes		= tx_audio_map_v9,
> +	.extra_routes_num	= ARRAY_SIZE(tx_audio_map_v9),
> +};
> +
> +static const struct tx_macro_data lpass_ver_11 = {
> +	.flags			= 0,
> +	.ver			= LPASS_VER_11_0_0,
> +	.extra_widgets		= tx_macro_dapm_widgets_v9,
> +	.extra_widgets_num	= ARRAY_SIZE(tx_macro_dapm_widgets_v9),
> +	.extra_routes		= tx_audio_map_v9,
> +	.extra_routes_num	= ARRAY_SIZE(tx_audio_map_v9),
> +};
> +
>   static const struct of_device_id tx_macro_dt_match[] = {
>   	{
>   		.compatible = "qcom,sc7280-lpass-tx-macro",
> -		.data = (void *)LPASS_MACRO_FLAG_HAS_NPL_CLOCK,
> +		.data = &lpass_ver_9,
>   	}, {
>   		.compatible = "qcom,sm8250-lpass-tx-macro",
> -		.data = (void *)LPASS_MACRO_FLAG_HAS_NPL_CLOCK,
> +		.data = &lpass_ver_9,
>   	}, {
>   		.compatible = "qcom,sm8450-lpass-tx-macro",
> -		.data = (void *)LPASS_MACRO_FLAG_HAS_NPL_CLOCK,
> +		.data = &lpass_ver_9,
>   	}, {
>   		.compatible = "qcom,sm8550-lpass-tx-macro",
> +		.data = &lpass_ver_11,
>   	}, {
>   		.compatible = "qcom,sc8280xp-lpass-tx-macro",
> -		.data = (void *)LPASS_MACRO_FLAG_HAS_NPL_CLOCK,
> +		.data = &lpass_ver_9,
>   	},
>   	{ }
>   };

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ