Commit 02545bc5 authored by Brent Lu's avatar Brent Lu Committed by Takashi Iwai
Browse files

ALSA: hda: intel-nhlt: add intel_nhlt_ssp_device_type() function



Add a helper function intel_nhlt_ssp_device_type() to detect the type
of specific SSP port. The result is nhlt_device_type enum type which
could be NHLT_DEVICE_BT or NHLT_DEVICE_I2S.

Signed-off-by: default avatarBrent Lu <brent.lu@intel.com>
Reviewed-by: default avatarPéter Ujfalusi <peter.ujfalusi@linux.intel.com>
Reviewed-by: default avatarPierre-Louis Bossart <pierre-louis.bossart@linux.intel.com>
Reviewed-by: default avatarBard Liao <yung-chuan.liao@linux.intel.com>
Signed-off-by: default avatarPeter Ujfalusi <peter.ujfalusi@linux.intel.com>
Signed-off-by: default avatarTakashi Iwai <tiwai@suse.de>
Message-ID: <20231127120657.19764-2-peter.ujfalusi@linux.intel.com>
parent 9f234784
Loading
Loading
Loading
Loading
+10 −0
Original line number Diff line number Diff line
@@ -143,6 +143,9 @@ intel_nhlt_get_endpoint_blob(struct device *dev, struct nhlt_acpi_table *nhlt,
			     u32 bus_id, u8 link_type, u8 vbps, u8 bps,
			     u8 num_ch, u32 rate, u8 dir, u8 dev_type);

int intel_nhlt_ssp_device_type(struct device *dev, struct nhlt_acpi_table *nhlt,
			       u8 virtual_bus_id);

#else

static inline struct nhlt_acpi_table *intel_nhlt_init(struct device *dev)
@@ -184,6 +187,13 @@ intel_nhlt_get_endpoint_blob(struct device *dev, struct nhlt_acpi_table *nhlt,
	return NULL;
}

static inline int intel_nhlt_ssp_device_type(struct device *dev,
					     struct nhlt_acpi_table *nhlt,
					     u8 virtual_bus_id)
{
	return -EINVAL;
}

#endif

#endif
+26 −0
Original line number Diff line number Diff line
@@ -343,3 +343,29 @@ intel_nhlt_get_endpoint_blob(struct device *dev, struct nhlt_acpi_table *nhlt,
	return NULL;
}
EXPORT_SYMBOL(intel_nhlt_get_endpoint_blob);

int intel_nhlt_ssp_device_type(struct device *dev, struct nhlt_acpi_table *nhlt,
			       u8 virtual_bus_id)
{
	struct nhlt_endpoint *epnt;
	int i;

	if (!nhlt)
		return -EINVAL;

	epnt = (struct nhlt_endpoint *)nhlt->desc;
	for (i = 0; i < nhlt->endpoint_count; i++) {
		/* for SSP link the virtual bus id is the SSP port number */
		if (epnt->linktype == NHLT_LINK_SSP &&
		    epnt->virtual_bus_id == virtual_bus_id) {
			dev_dbg(dev, "SSP%d: dev_type=%d\n", virtual_bus_id,
				epnt->device_type);
			return epnt->device_type;
		}

		epnt = (struct nhlt_endpoint *)((u8 *)epnt + epnt->length);
	}

	return -EINVAL;
}
EXPORT_SYMBOL(intel_nhlt_ssp_device_type);