[PATCH 04/20] ALSA: intel-nhlt: add helper to detect SSP link mask
Cezary Rojewski
cezary.rojewski at intel.com
Wed Mar 9 18:01:23 CET 2022
On 2022-03-08 8:25 PM, Pierre-Louis Bossart wrote:
> The NHLT information can be used to figure out which SSPs are enabled
> in a platform.
>
> The 'SSP' link type is too broad for machine drivers, since it can
> cover the Bluetooth sideband and the analog audio codec connections,
> so this helper exposes a parameter to filter with the device
> type (DEVICE_I2S refers to analog audio codec in NHLT parlance).
>
> The helper returns a mask, since more than one SSP may be used for
> analog audio, e.g. the NHLT spec describes the use of SSP0 for
> amplifiers and SSP1 for headset codec. Note that if more than one bit
> is set, it's impossible to determine which SSP is connected to what
> external component. Additional platform-specific information based on
> e.g. DMI quirks would still be required in the machine driver to
> configure the relevant dailinks.
...
> diff --git a/sound/hda/intel-nhlt.c b/sound/hda/intel-nhlt.c
> index 128476aa7c61..4063da378283 100644
> --- a/sound/hda/intel-nhlt.c
> +++ b/sound/hda/intel-nhlt.c
> @@ -130,6 +130,28 @@ bool intel_nhlt_has_endpoint_type(struct nhlt_acpi_table *nhlt, u8 link_type)
> }
> EXPORT_SYMBOL(intel_nhlt_has_endpoint_type);
>
> +int intel_nhlt_ssp_endpoint_mask(struct nhlt_acpi_table *nhlt, u8 device_type)
> +{
> + struct nhlt_endpoint *epnt;
> + int ssp_mask = 0;
> + int i;
> +
> + if (!nhlt || (device_type != NHLT_DEVICE_BT && device_type != NHLT_DEVICE_I2S))
The '!nhlt' safety is superfluous in my opinion. Kernel core API e.g.:
device one assumes caller is sane in basically all cases.
> + return 0;
> +
> + epnt = (struct nhlt_endpoint *)nhlt->desc;
> + for (i = 0; i < nhlt->endpoint_count; i++) {
> + if (epnt->linktype == NHLT_LINK_SSP && epnt->device_type == device_type) {
> + /* for SSP the virtual bus id is the SSP port */
> + ssp_mask |= BIT(epnt->virtual_bus_id);
> + }
> + epnt = (struct nhlt_endpoint *)((u8 *)epnt + epnt->length);
> + }
> +
> + return ssp_mask;
> +}
> +EXPORT_SYMBOL(intel_nhlt_ssp_endpoint_mask);
Since this is a *public* API - not direct part of any driver, really -
providing kernel-doc is recommended.
Regards,
Czarek
More information about the Alsa-devel
mailing list