Message ID | 20200825235040.1586478-4-ranjani.sridharan@linux.intel.com (mailing list archive) |
---|---|
State | Accepted |
Commit | 3dca35e35b42b3405ddad7ee95c02a2d8cf28592 |
Headers | show |
Series | SOF fixes and updates | expand |
On 8/25/20 6:50 PM, Ranjani Sridharan wrote: > From: Jaska Uimonen <jaska.uimonen@linux.intel.com> > > Currently the dmic check code supports only devices with 2 or 4 dmics. > With other dmic counts the function will return 0. Lately we've seen > devices with only 1 dmic thus enable also configurations with 1, and > possibly 3, dmics. Add also topology postfix -1ch and -3ch for new dmic > configuration. > > Signed-off-by: Jaska Uimonen <jaska.uimonen@linux.intel.com> > Reviewed-by: Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com> > Signed-off-by: Ranjani Sridharan <ranjani.sridharan@linux.intel.com> we now have multiple reports of devices with a single microphone where audio is broken without this patch, e.g. https://github.com/thesofproject/linux/issues/2451 This patch should be applied to -stable versions all the way to 5.6. It would be desirable for 5.5 and 5.4 as well but it will not apply cleanly. It's be trivial to provide a modified patch for these earlier kernel versions but I don't know what the process might be here?
On Fri, Sep 18, 2020 at 10:10:24AM -0500, Pierre-Louis Bossart wrote: > This patch should be applied to -stable versions all the way to 5.6. It > would be desirable for 5.5 and 5.4 as well but it will not apply cleanly. > It's be trivial to provide a modified patch for these earlier kernel > versions but I don't know what the process might be here? Send a backport to Greg & stable with a note explaining what's going on.
diff --git a/sound/soc/sof/intel/hda.c b/sound/soc/sof/intel/hda.c index b8157c1f37f3..0e8285b34a7d 100644 --- a/sound/soc/sof/intel/hda.c +++ b/sound/soc/sof/intel/hda.c @@ -544,7 +544,7 @@ static int check_nhlt_dmic(struct snd_sof_dev *sdev) if (nhlt) { dmic_num = intel_nhlt_get_dmic_geo(sdev->dev, nhlt); intel_nhlt_free(nhlt); - if (dmic_num == 2 || dmic_num == 4) + if (dmic_num >= 1 && dmic_num <= 4) return dmic_num; } @@ -992,9 +992,15 @@ static int hda_generic_machine_select(struct snd_sof_dev *sdev) dmic_num = hda_dmic_num; switch (dmic_num) { + case 1: + dmic_str = "-1ch"; + break; case 2: dmic_str = "-2ch"; break; + case 3: + dmic_str = "-3ch"; + break; case 4: dmic_str = "-4ch"; break;