[PATCH 03/20] ASoC: SOF: Intel: hda: retrieve DMIC number for I2S boards

Pierre-Louis Bossart pierre-louis.bossart at linux.intel.com
Wed Mar 9 18:10:16 CET 2022



On 3/9/22 10:49, Cezary Rojewski wrote:
> On 2022-03-08 8:25 PM, Pierre-Louis Bossart wrote:
>> We currently extract the DMIC number only for HDaudio or SoundWire
>> platforms. For I2S/TDM platforms, this wasn't necessary until now, but
>> with devices with ES8336 we need to find a solution to detect dmics
>> more reliably than with a DMI quirk.
> 
> ...
> 
>> @@ -644,24 +642,35 @@ static int hda_init(struct snd_sof_dev *sdev)
>>       return ret;
>>   }
>> -#if IS_ENABLED(CONFIG_SND_SOC_SOF_HDA) || 
>> IS_ENABLED(CONFIG_SND_SOC_SOF_INTEL_SOUNDWIRE)
>> -
>> -static int check_nhlt_dmic(struct snd_sof_dev *sdev)
>> +static int check_dmic_num(struct snd_sof_dev *sdev)
>>   {
>>       struct nhlt_acpi_table *nhlt;
>> -    int dmic_num;
>> +    int dmic_num = 0;
> 
> 
> s/int/u32? (paired with question below)
> 
>>       nhlt = intel_nhlt_init(sdev->dev);
>>       if (nhlt) {
>>           dmic_num = intel_nhlt_get_dmic_geo(sdev->dev, nhlt);
>>           intel_nhlt_free(nhlt);
>> -        if (dmic_num >= 1 && dmic_num <= 4)
>> -            return dmic_num;
>>       }
>> -    return 0;
>> +    /* allow for module parameter override */
>> +    if (dmic_num_override != -1) {
>> +        dev_dbg(sdev->dev,
>> +            "overriding DMICs detected in NHLT tables %d by kernel 
>> param %d\n",
>> +            dmic_num, dmic_num_override);
>> +        dmic_num = dmic_num_override;
>> +    }
>> +
>> +    if (dmic_num < 0 || dmic_num > 4) {
> 
> How come dmic_num be negative?

static int dmic_num_override = -1;
module_param_named(dmic_num, dmic_num_override, int, 0444);
MODULE_PARM_DESC(dmic_num, "SOF HDA DMIC number");

The value is already negative by default, and we want to apply sanity 
checks on what the user or distributions sets.

This code has been in the kernel for several years now, we're just 
moving it around.

> 
>> +        dev_dbg(sdev->dev, "invalid dmic_number %d\n", dmic_num);
>> +        dmic_num = 0;
>> +    }
>> +
>> +    return dmic_num;
>>   }


More information about the Alsa-devel mailing list