mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-09-22 02:20:40 +00:00
ASoC: SOF: ipc4-topology: support NHLT device type
The endpoint in NHLT table for a SSP port could have the device type NHLT_DEVICE_BT or NHLT_DEVICE_I2S. Use intel_nhlt_ssp_device_type() function to retrieve the device type before querying the endpoint blob to make sure we are always using correct device type parameter. Signed-off-by: Brent Lu <brent.lu@intel.com> Reviewed-by: Péter Ujfalusi <peter.ujfalusi@linux.intel.com> Reviewed-by: Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com> Reviewed-by: Bard Liao <yung-chuan.liao@linux.intel.com> Signed-off-by: Peter Ujfalusi <peter.ujfalusi@linux.intel.com> Acked-by: Mark Brown <broonie@kernel.org> Signed-off-by: Takashi Iwai <tiwai@suse.de> Message-ID: <20231127120657.19764-3-peter.ujfalusi@linux.intel.com>
This commit is contained in:
parent
02545bc575
commit
188ab4bfd2
1 changed files with 16 additions and 3 deletions
|
@ -1356,6 +1356,7 @@ static int snd_sof_get_nhlt_endpoint_data(struct snd_sof_dev *sdev, struct snd_s
|
|||
int sample_rate, channel_count;
|
||||
int bit_depth, ret;
|
||||
u32 nhlt_type;
|
||||
int dev_type = 0;
|
||||
|
||||
/* convert to NHLT type */
|
||||
switch (linktype) {
|
||||
|
@ -1371,18 +1372,30 @@ static int snd_sof_get_nhlt_endpoint_data(struct snd_sof_dev *sdev, struct snd_s
|
|||
&bit_depth);
|
||||
if (ret < 0)
|
||||
return ret;
|
||||
|
||||
/*
|
||||
* We need to know the type of the external device attached to a SSP
|
||||
* port to retrieve the blob from NHLT. However, device type is not
|
||||
* specified in topology.
|
||||
* Query the type for the port and then pass that information back
|
||||
* to the blob lookup function.
|
||||
*/
|
||||
dev_type = intel_nhlt_ssp_device_type(sdev->dev, ipc4_data->nhlt,
|
||||
dai_index);
|
||||
if (dev_type < 0)
|
||||
return dev_type;
|
||||
break;
|
||||
default:
|
||||
return 0;
|
||||
}
|
||||
|
||||
dev_dbg(sdev->dev, "dai index %d nhlt type %d direction %d\n",
|
||||
dai_index, nhlt_type, dir);
|
||||
dev_dbg(sdev->dev, "dai index %d nhlt type %d direction %d dev type %d\n",
|
||||
dai_index, nhlt_type, dir, dev_type);
|
||||
|
||||
/* find NHLT blob with matching params */
|
||||
cfg = intel_nhlt_get_endpoint_blob(sdev->dev, ipc4_data->nhlt, dai_index, nhlt_type,
|
||||
bit_depth, bit_depth, channel_count, sample_rate,
|
||||
dir, 0);
|
||||
dir, dev_type);
|
||||
|
||||
if (!cfg) {
|
||||
dev_err(sdev->dev,
|
||||
|
|
Loading…
Reference in a new issue