diff options
author | Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com> | 2020-03-25 22:50:17 +0100 |
---|---|---|
committer | Mark Brown <broonie@kernel.org> | 2020-03-27 16:16:28 +0100 |
commit | 004bd4163104e4d8b6c1433b31ead10a69c69845 (patch) | |
tree | f162747340ea12827130c5ecaa54502f878923ae /include/sound/soc-acpi.h | |
parent | Merge series "ASoC: rt1308-sdw: configure amplifier with set_tdm_slot()" from... (diff) | |
download | linux-004bd4163104e4d8b6c1433b31ead10a69c69845.tar.xz linux-004bd4163104e4d8b6c1433b31ead10a69c69845.zip |
ASoC: soc-acpi: expand description of _ADR-based devices
For SoundWire, we need to know if endpoints needs to be 'aggregated'
(MIPI parlance, meaning logically grouped), e.g. when two speaker
amplifiers need to be handled as a single logical output.
We don't necessarily have the information at the firmware (BIOS)
level, so add a notion of endpoints and specify if a device/endpoint
is part of a group, with a position.
This may be expanded in future solutions, for now only provide a group
and position information.
Since we modify the header file, change all existing upstream tables
as well to avoid breaking compilation/bisect.
Signed-off-by: Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com>
Link: https://lore.kernel.org/r/20200325215027.28716-2-pierre-louis.bossart@linux.intel.com
Signed-off-by: Mark Brown <broonie@kernel.org>
Diffstat (limited to 'include/sound/soc-acpi.h')
-rw-r--r-- | include/sound/soc-acpi.h | 39 |
1 files changed, 33 insertions, 6 deletions
diff --git a/include/sound/soc-acpi.h b/include/sound/soc-acpi.h index a217a87cae86..392e953d561e 100644 --- a/include/sound/soc-acpi.h +++ b/include/sound/soc-acpi.h @@ -75,18 +75,45 @@ struct snd_soc_acpi_mach_params { }; /** - * snd_soc_acpi_link_adr: ACPI-based list of _ADR, with a variable - * number of devices per link - * + * snd_soc_acpi_endpoint - endpoint descriptor + * @num: endpoint number (mandatory, unique per device) + * @aggregated: 0 (independent) or 1 (logically grouped) + * @group_position: zero-based order (only when @aggregated is 1) + * @group_id: platform-unique group identifier (only when @aggregrated is 1) + */ +struct snd_soc_acpi_endpoint { + u8 num; + u8 aggregated; + u8 group_position; + u8 group_id; +}; + +/** + * snd_soc_acpi_adr_device - descriptor for _ADR-enumerated device + * @adr: 64 bit ACPI _ADR value + * @num_endpoints: number of endpoints for this device + * @endpoints: array of endpoints + */ +struct snd_soc_acpi_adr_device { + const u64 adr; + const u8 num_endpoints; + const struct snd_soc_acpi_endpoint *endpoints; +}; + +/** + * snd_soc_acpi_link_adr - ACPI-based list of _ADR enumerated devices * @mask: one bit set indicates the link this list applies to - * @num_adr: ARRAY_SIZE of adr - * @adr: array of _ADR (represented as u64). + * @num_adr: ARRAY_SIZE of devices + * @adr_d: array of devices + * + * The number of devices per link can be more than 1, e.g. in SoundWire + * multi-drop configurations. */ struct snd_soc_acpi_link_adr { const u32 mask; const u32 num_adr; - const u64 *adr; + const struct snd_soc_acpi_adr_device *adr_d; }; /** |