Skip to content

Commit

Permalink
ASoC: SOF: Intel: hda: list SoundWire peripherals on mismatch
Browse files Browse the repository at this point in the history
Most of the SoundWire support issues come from bad ACPI information,
or configuration reported by ACPI that are not supported by the SOF
driver/topology. The users see a "No SoundWire machine driver found"
message without any details, and the fallback to HDaudio w/ HDMI is
used.

We can reduce our support load with a clear dev_info() log that will
give us a clear hint on the mismatch and why a machine driver/topology
were not found.

Example log on a MTL device:
[   13.158599] sof-audio-pci-intel-mtl 0000:00:1f.3: No SoundWire machine driver found for the ACPI-reported configuration:
[   13.158603] sof-audio-pci-intel-mtl 0000:00:1f.3: link 0 mfg_id 0x025d part_id 0x0713 version 0x3
[   13.158606] sof-audio-pci-intel-mtl 0000:00:1f.3: link 1 mfg_id 0x025d part_id 0x1316 version 0x3
[   13.158608] sof-audio-pci-intel-mtl 0000:00:1f.3: link 2 mfg_id 0x025d part_id 0x1316 version 0x3

In parallel, we will also provide an update to `alsa-info` to log all
SoundWire peripherals found in ACPI tables.

Signed-off-by: Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com>
  • Loading branch information
plbossart committed Apr 18, 2024
1 parent 8b2af0b commit 4dc3201
Showing 1 changed file with 16 additions and 1 deletion.
17 changes: 16 additions & 1 deletion sound/soc/sof/intel/hda.c
Original file line number Diff line number Diff line change
Expand Up @@ -1141,6 +1141,7 @@ static struct snd_soc_acpi_mach *hda_sdw_machine_select(struct snd_sof_dev *sdev
{
struct snd_sof_pdata *pdata = sdev->pdata;
const struct snd_soc_acpi_link_adr *link;
struct sdw_extended_slave_id *ids;
struct snd_soc_acpi_mach *mach;
struct sof_intel_hda_dev *hdev;
u32 link_mask;
Expand All @@ -1154,6 +1155,16 @@ static struct snd_soc_acpi_mach *hda_sdw_machine_select(struct snd_sof_dev *sdev
return NULL;
}

if (!hdev->sdw) {
dev_dbg(sdev->dev, "SoundWire context not allocated\n");
return NULL;
}

if (!hdev->sdw->num_slaves) {
dev_warn(sdev->dev, "No SoundWire peripheral detected in ACPI tables\n");
return NULL;
}

/*
* Select SoundWire machine driver if needed using the
* alternate tables. This case deals with SoundWire-only
Expand Down Expand Up @@ -1236,7 +1247,11 @@ static struct snd_soc_acpi_mach *hda_sdw_machine_select(struct snd_sof_dev *sdev
return mach;
}

dev_info(sdev->dev, "No SoundWire machine driver found\n");
dev_info(sdev->dev, "No SoundWire machine driver found for the ACPI-reported configuration:\n");
ids = hdev->sdw->ids;
for (i = 0; i < hdev->sdw->num_slaves; i++)
dev_info(sdev->dev, "link %d mfg_id 0x%04x part_id 0x%04x version %#x\n",
ids[i].link_id, ids[i].id.mfg_id, ids[i].id.part_id, ids[i].id.sdw_version);

return NULL;
}
Expand Down

0 comments on commit 4dc3201

Please sign in to comment.