mbox series

[v7,0/4] ACPI: NHLT: Access and query helpers

Message ID 20240311101658.2343816-1-cezary.rojewski@intel.com
Headers show
Series ACPI: NHLT: Access and query helpers | expand

Message

Cezary Rojewski March 11, 2024, 10:16 a.m. UTC
The goal of this patchset is to refactor existing interface of
Non HDAudio Link Table (NHLT) table so it becomes useful for the Intel
AudioDSP sound-drivers. Right now the useful duplicate resides in
sound/hda/intel-nhlt.c.

The API takes form of query functions that help access device or
audio-format configuration space. This information can be then utilized
by a sound-driver to perform necessary programming and facilitate
streaming over I2S/PDM interfaces. Once the series is merged, existing
sound-drivers can move from utilizing sound/hda/intel-nhlt.c to this
very code and ultimately the former file can be removed.

Paired with equivalent change on ACPICA [1].

-

Non HDAudio Link Table (NHLT) is designed to separate hardware-related
description (registers) from AudioDSP firmware-related one i.e.:
pipelines and modules that together make up the audio stream on Intel
DSPs. This task is important as same set of hardware registers can be
used with different topologies and vice versa, same topology could be
utilized with different set of hardware. As the hardware registers
description is directly tied to specific platform, intention is to have
such description part of low-level firmware e.g.: BIOS.

The initial design has been provided in early Sky Lake (SKL) days. The
audio architecture goes by the name cAVS. SKL is a representative of
cAVS 1.5. The table helps describe endpoint capabilities ever since.
While Raptor Lake (RPL) is the last of cAVS architecture - cAVS 2.5 to
be precise - its successor, the ACE architecture which begun with
Meteor Lake (MTL) inherited the design for all I2S and PDM
configurations. These two configurations are the primary targets for
NHLT table.

Due to naming conflicts with existing code, several structs are named
'nhlt2' rather than 'nhlt'. Last patch cleans the situation up.


Changes in v7:
- added missing headers to nhlt.c/nhlt.h as suggested by Andy

Changes in v6:
- added comments explaining usage of LINKTYPE and DEVICETYPE constants

Changes in v5:
- split find_endpoint/fmtcfg() into tb-less and tb-aware variants.
  This is to make API scale with 2+ NHLTs and removes the need for
  acpi_gbl_nhlt to be accessible globally.
- acpi_nhlt_device_config now a union that encompasses all device_config
  types.

Changes in v4:
- relocated ACPI_NHLT kconfig in the drivers/acpi/Kconfig to a more
  relevant area within the file

Changes in v3:
- uncapitalized acpi_gbl_NHLT
- fixed compilation problems when CONFIG_ACPI_NHLT is disabled
- dropped Reviewed-by tags in the 2/4 patch due to above, those were not
  one-line changes

Changes in v2:
- minor wording improvements in kernel-doc for patch 3/4
- dropped parentheses around loop cursors in for_each_nhlt_*() macros
- readability improvements in compound if-statements within query
  functions
- dropped NULL-checks in query functions

[1]: https://github.com/acpica/acpica/pull/912


Cezary Rojewski (4):
  ACPI: NHLT: Reintroduce types the table consists of
  ACPI: NHLT: Introduce API for the table
  ACPI: NHLT: Drop redundant types
  ACPI: NHLT: Streamline struct naming

 drivers/acpi/Kconfig  |   3 +
 drivers/acpi/Makefile |   1 +
 drivers/acpi/nhlt.c   | 289 ++++++++++++++++++++++++++++++++++++++++
 include/acpi/actbl2.h | 299 +++++++++++++++++-------------------------
 include/acpi/nhlt.h   | 181 +++++++++++++++++++++++++
 5 files changed, 591 insertions(+), 182 deletions(-)
 create mode 100644 drivers/acpi/nhlt.c
 create mode 100644 include/acpi/nhlt.h

Comments

Andy Shevchenko March 11, 2024, 10:34 a.m. UTC | #1
On Mon, Mar 11, 2024 at 11:16:54AM +0100, Cezary Rojewski wrote:
> The goal of this patchset is to refactor existing interface of
> Non HDAudio Link Table (NHLT) table so it becomes useful for the Intel
> AudioDSP sound-drivers. Right now the useful duplicate resides in
> sound/hda/intel-nhlt.c.
> 
> The API takes form of query functions that help access device or
> audio-format configuration space. This information can be then utilized
> by a sound-driver to perform necessary programming and facilitate
> streaming over I2S/PDM interfaces. Once the series is merged, existing
> sound-drivers can move from utilizing sound/hda/intel-nhlt.c to this
> very code and ultimately the former file can be removed.
> 
> Paired with equivalent change on ACPICA [1].
> 
> -
> 
> Non HDAudio Link Table (NHLT) is designed to separate hardware-related
> description (registers) from AudioDSP firmware-related one i.e.:
> pipelines and modules that together make up the audio stream on Intel
> DSPs. This task is important as same set of hardware registers can be
> used with different topologies and vice versa, same topology could be
> utilized with different set of hardware. As the hardware registers
> description is directly tied to specific platform, intention is to have
> such description part of low-level firmware e.g.: BIOS.
> 
> The initial design has been provided in early Sky Lake (SKL) days. The
> audio architecture goes by the name cAVS. SKL is a representative of
> cAVS 1.5. The table helps describe endpoint capabilities ever since.
> While Raptor Lake (RPL) is the last of cAVS architecture - cAVS 2.5 to
> be precise - its successor, the ACE architecture which begun with
> Meteor Lake (MTL) inherited the design for all I2S and PDM
> configurations. These two configurations are the primary targets for
> NHLT table.
> 
> Due to naming conflicts with existing code, several structs are named
> 'nhlt2' rather than 'nhlt'. Last patch cleans the situation up.

FWIW, I am fine with this version esp. taking into account the specification
and ACPICA work,

Reviewed-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
Rafael J. Wysocki March 12, 2024, 8:14 p.m. UTC | #2
On Mon, Mar 11, 2024 at 11:15 AM Cezary Rojewski
<cezary.rojewski@intel.com> wrote:
>
> Non HDAudio Link Table (NHLT) is designed to separate hardware-related
> description (registers) from AudioDSP firmware-related one i.e.:
> pipelines and modules that together make up the audio stream on Intel
> DSPs. This task is important as same set of hardware registers can be
> used with different topologies and vice versa, same topology could be
> utilized with different set of hardware. As the hardware registers
> description is directly tied to specific platform, intention is to have
> such description part of low-level firmware e.g.: BIOS.
>
> The initial design has been provided in early Sky Lake (SKL) days. The
> audio architecture goes by the name cAVS. SKL is a representative of
> cAVS 1.5. The table helps describe endpoint capabilities ever since.
> While Raptor Lake (RPL) is the last of cAVS architecture - cAVS 2.5 to
> be precise - its successor, the ACE architecture which begun with
> Meteor Lake (MTL) inherited the design for all I2S and PDM
> configurations. These two configurations are the primary targets for
> NHLT table.
>
> Due to naming conflicts with existing code, several structs are named
> 'nhlt2' rather than 'nhlt'. Follow up changes clean this up once
> existing code has no users and is removed.
>
> Signed-off-by: Cezary Rojewski <cezary.rojewski@intel.com>

I suppose that this is based on an upstream ACPICA pull request that
has been merged?

If so, it should carry a Link: tag pointing to that pull request.  The
ID of the upstream ACPICA commit corresponding to this should be
included into the changelog too.

> ---
>  include/acpi/actbl2.h | 189 ++++++++++++++++++++++++++++++++++++++++++
>  1 file changed, 189 insertions(+)
>
> diff --git a/include/acpi/actbl2.h b/include/acpi/actbl2.h
> index 9775384d61c6..8030a1743100 100644
> --- a/include/acpi/actbl2.h
> +++ b/include/acpi/actbl2.h
> @@ -2141,6 +2141,195 @@ struct acpi_nhlt_device_info {
>         u8 device_port_id;
>  };
>
> +/*******************************************************************************
> + *
> + * NHLT - Non HDAudio Link Table
> + *        Version 1
> + *
> + ******************************************************************************/
> +
> +struct acpi_table_nhlt2 {
> +       struct acpi_table_header header;        /* Common ACPI table header */
> +       u8 endpoints_count;
> +       /*
> +        * struct acpi_nhlt_endpoint endpoints[];
> +        * struct acpi_nhlt_config oed_config;
> +        */
> +};
> +
> +struct acpi_nhlt2_endpoint {
> +       u32 length;
> +       u8 link_type;
> +       u8 instance_id;
> +       u16 vendor_id;
> +       u16 device_id;
> +       u16 revision_id;
> +       u32 subsystem_id;
> +       u8 device_type;
> +       u8 direction;
> +       u8 virtual_bus_id;
> +       /*
> +        * struct acpi_nhlt_config device_config;
> +        * struct acpi_nhlt_formats_config formats_config;
> +        * struct acpi_nhlt_devices_info devices_info;
> +        */
> +};
> +
> +/*
> + * Values for link_type field above
> + *
> + * Only types PDM and SSP are used
> + */
> +#define ACPI_NHLT_LINKTYPE_HDA                 0
> +#define ACPI_NHLT_LINKTYPE_DSP                 1
> +#define ACPI_NHLT_LINKTYPE_PDM                 2
> +#define ACPI_NHLT_LINKTYPE_SSP                 3
> +#define ACPI_NHLT_LINKTYPE_SLIMBUS             4
> +#define ACPI_NHLT_LINKTYPE_SDW                 5
> +#define ACPI_NHLT_LINKTYPE_UAOL                        6
> +
> +/* Values for device_id field above */
> +
> +#define ACPI_NHLT_DEVICEID_DMIC                        0xAE20
> +#define ACPI_NHLT_DEVICEID_BT                  0xAE30
> +#define ACPI_NHLT_DEVICEID_I2S                 0xAE34
> +
> +/* Values for device_type field above */
> +
> +/*
> + * Device types unique to endpoint of link_type=PDM
> + *
> + * Type PDM used for all SKL+ platforms
> + */
> +#define ACPI_NHLT_DEVICETYPE_PDM               0
> +#define ACPI_NHLT_DEVICETYPE_PDM_SKL           1
> +/* Device types unique to endpoint of link_type=SSP */
> +#define ACPI_NHLT_DEVICETYPE_BT                        0
> +#define ACPI_NHLT_DEVICETYPE_FM                        1
> +#define ACPI_NHLT_DEVICETYPE_MODEM             2
> +#define ACPI_NHLT_DEVICETYPE_CODEC             4
> +
> +/* Values for Direction field above */
> +
> +#define ACPI_NHLT_DIR_RENDER                   0
> +#define ACPI_NHLT_DIR_CAPTURE                  1
> +
> +struct acpi_nhlt_config {
> +       u32 capabilities_size;
> +       u8 capabilities[];
> +};
> +
> +struct acpi_nhlt_gendevice_config {
> +       u8 virtual_slot;
> +       u8 config_type;
> +};
> +
> +/* Values for config_type field above */
> +
> +#define ACPI_NHLT_CONFIGTYPE_GENERIC           0
> +#define ACPI_NHLT_CONFIGTYPE_MICARRAY          1
> +
> +struct acpi_nhlt_micdevice_config {
> +       u8 virtual_slot;
> +       u8 config_type;
> +       u8 array_type;
> +};
> +
> +/* Values for array_type field above */
> +
> +#define ACPI_NHLT_ARRAYTYPE_LINEAR2_SMALL      0xA
> +#define ACPI_NHLT_ARRAYTYPE_LINEAR2_BIG                0xB
> +#define ACPI_NHLT_ARRAYTYPE_LINEAR4_GEO1       0xC
> +#define ACPI_NHLT_ARRAYTYPE_PLANAR4_LSHAPED    0xD
> +#define ACPI_NHLT_ARRAYTYPE_LINEAR4_GEO2       0xE
> +#define ACPI_NHLT_ARRAYTYPE_VENDOR             0xF
> +
> +struct acpi_nhlt2_vendor_mic_config {
> +       u8 type;
> +       u8 panel;
> +       u16 speaker_position_distance;          /* mm */
> +       u16 horizontal_offset;                  /* mm */
> +       u16 vertical_offset;                    /* mm */
> +       u8 frequency_low_band;                  /* 5*Hz */
> +       u8 frequency_high_band;                 /* 500*Hz */
> +       u16 direction_angle;                    /* -180 - +180 */
> +       u16 elevation_angle;                    /* -180 - +180 */
> +       u16 work_vertical_angle_begin;          /* -180 - +180 with 2 deg step */
> +       u16 work_vertical_angle_end;            /* -180 - +180 with 2 deg step */
> +       u16 work_horizontal_angle_begin;        /* -180 - +180 with 2 deg step */
> +       u16 work_horizontal_angle_end;          /* -180 - +180 with 2 deg step */
> +};
> +
> +/* Values for Type field above */
> +
> +#define ACPI_NHLT_MICTYPE_OMNIDIRECTIONAL      0
> +#define ACPI_NHLT_MICTYPE_SUBCARDIOID          1
> +#define ACPI_NHLT_MICTYPE_CARDIOID             2
> +#define ACPI_NHLT_MICTYPE_SUPERCARDIOID                3
> +#define ACPI_NHLT_MICTYPE_HYPERCARDIOID                4
> +#define ACPI_NHLT_MICTYPE_8SHAPED              5
> +#define ACPI_NHLT_MICTYPE_RESERVED             6
> +#define ACPI_NHLT_MICTYPE_VENDORDEFINED                7
> +
> +/* Values for Panel field above */
> +
> +#define ACPI_NHLT_MICLOCATION_TOP              0
> +#define ACPI_NHLT_MICLOCATION_BOTTOM           1
> +#define ACPI_NHLT_MICLOCATION_LEFT             2
> +#define ACPI_NHLT_MICLOCATION_RIGHT            3
> +#define ACPI_NHLT_MICLOCATION_FRONT            4
> +#define ACPI_NHLT_MICLOCATION_REAR             5
> +
> +struct acpi_nhlt_vendor_micdevice_config {
> +       u8 virtual_slot;
> +       u8 config_type;
> +       u8 array_type;
> +       u8 mics_count;
> +       struct acpi_nhlt2_vendor_mic_config mics[];
> +};
> +
> +union acpi_nhlt_device_config {
> +       u8 virtual_slot;
> +       struct acpi_nhlt_gendevice_config gen;
> +       struct acpi_nhlt_micdevice_config mic;
> +       struct acpi_nhlt_vendor_micdevice_config vendor_mic;
> +};
> +
> +/* Inherited from Microsoft's WAVEFORMATEXTENSIBLE. */
> +struct acpi_nhlt2_wave_formatext {
> +       u16 format_tag;
> +       u16 channel_count;
> +       u32 samples_per_sec;
> +       u32 avg_bytes_per_sec;
> +       u16 block_align;
> +       u16 bits_per_sample;
> +       u16 extra_format_size;
> +       u16 valid_bits_per_sample;
> +       u32 channel_mask;
> +       u8 subformat[16];
> +};
> +
> +struct acpi_nhlt2_format_config {
> +       struct acpi_nhlt2_wave_formatext format;
> +       struct acpi_nhlt_config config;
> +};
> +
> +struct acpi_nhlt2_formats_config {
> +       u8 formats_count;
> +       struct acpi_nhlt2_format_config formats[];
> +};
> +
> +struct acpi_nhlt2_device_info {
> +       u8 id[16];
> +       u8 instance_id;
> +       u8 port_id;
> +};
> +
> +struct acpi_nhlt_devices_info {
> +       u8 devices_count;
> +       struct acpi_nhlt2_device_info devices[];
> +};
> +
>  /*******************************************************************************
>   *
>   * PCCT - Platform Communications Channel Table (ACPI 5.0)
> --
> 2.25.1
>
Rafael J. Wysocki March 12, 2024, 8:23 p.m. UTC | #3
On Mon, Mar 11, 2024 at 11:15 AM Cezary Rojewski
<cezary.rojewski@intel.com> wrote:
>
> There are no users for the duplicated NHLT table components.
>
> Signed-off-by: Cezary Rojewski <cezary.rojewski@intel.com>

This also needs to point to the upstream ACPICA pull request and
commit corresponding to it.

> ---
>  include/acpi/actbl2.h | 254 ------------------------------------------
>  1 file changed, 254 deletions(-)
>
> diff --git a/include/acpi/actbl2.h b/include/acpi/actbl2.h
> index 8030a1743100..31a716a74340 100644
> --- a/include/acpi/actbl2.h
> +++ b/include/acpi/actbl2.h
> @@ -1887,260 +1887,6 @@ struct nfit_device_handle {
>  #define ACPI_NFIT_GET_NODE_ID(handle) \
>         (((handle) & ACPI_NFIT_NODE_ID_MASK)        >> ACPI_NFIT_NODE_ID_OFFSET)
>
> -/*******************************************************************************
> - *
> - * NHLT - Non HD Audio Link Table
> - *
> - * Conforms to: Intel Smart Sound Technology NHLT Specification
> - * Version 0.8.1, January 2020.
> - *
> - ******************************************************************************/
> -
> -/* Main table */
> -
> -struct acpi_table_nhlt {
> -       struct acpi_table_header header;        /* Common ACPI table header */
> -       u8 endpoint_count;
> -};
> -
> -struct acpi_nhlt_endpoint {
> -       u32 descriptor_length;
> -       u8 link_type;
> -       u8 instance_id;
> -       u16 vendor_id;
> -       u16 device_id;
> -       u16 revision_id;
> -       u32 subsystem_id;
> -       u8 device_type;
> -       u8 direction;
> -       u8 virtual_bus_id;
> -};
> -
> -/* Types for link_type field above */
> -
> -#define ACPI_NHLT_RESERVED_HD_AUDIO         0
> -#define ACPI_NHLT_RESERVED_DSP              1
> -#define ACPI_NHLT_PDM                       2
> -#define ACPI_NHLT_SSP                       3
> -#define ACPI_NHLT_RESERVED_SLIMBUS          4
> -#define ACPI_NHLT_RESERVED_SOUNDWIRE        5
> -#define ACPI_NHLT_TYPE_RESERVED             6  /* 6 and above are reserved */
> -
> -/* All other values above are reserved */
> -
> -/* Values for device_id field above */
> -
> -#define ACPI_NHLT_PDM_DMIC                  0xAE20
> -#define ACPI_NHLT_BT_SIDEBAND               0xAE30
> -#define ACPI_NHLT_I2S_TDM_CODECS            0xAE23
> -
> -/* Values for device_type field above */
> -
> -/* SSP Link */
> -
> -#define ACPI_NHLT_LINK_BT_SIDEBAND          0
> -#define ACPI_NHLT_LINK_FM                   1
> -#define ACPI_NHLT_LINK_MODEM                2
> -/* 3 is reserved */
> -#define ACPI_NHLT_LINK_SSP_ANALOG_CODEC     4
> -
> -/* PDM Link */
> -
> -#define ACPI_NHLT_PDM_ON_CAVS_1P8           0
> -#define ACPI_NHLT_PDM_ON_CAVS_1P5           1
> -
> -/* Values for Direction field above */
> -
> -#define ACPI_NHLT_DIR_RENDER                0
> -#define ACPI_NHLT_DIR_CAPTURE               1
> -#define ACPI_NHLT_DIR_RENDER_LOOPBACK       2
> -#define ACPI_NHLT_DIR_RENDER_FEEDBACK       3
> -#define ACPI_NHLT_DIR_RESERVED              4  /* 4 and above are reserved */
> -
> -struct acpi_nhlt_device_specific_config {
> -       u32 capabilities_size;
> -       u8 virtual_slot;
> -       u8 config_type;
> -};
> -
> -struct acpi_nhlt_device_specific_config_a {
> -       u32 capabilities_size;
> -       u8 virtual_slot;
> -       u8 config_type;
> -       u8 array_type;
> -};
> -
> -/* Values for Config Type above */
> -
> -#define ACPI_NHLT_CONFIG_TYPE_GENERIC              0x00
> -#define ACPI_NHLT_CONFIG_TYPE_MIC_ARRAY            0x01
> -#define ACPI_NHLT_CONFIG_TYPE_RENDER_FEEDBACK      0x03
> -#define ACPI_NHLT_CONFIG_TYPE_RESERVED             0x04        /* 4 and above are reserved */
> -
> -struct acpi_nhlt_device_specific_config_b {
> -       u32 capabilities_size;
> -};
> -
> -struct acpi_nhlt_device_specific_config_c {
> -       u32 capabilities_size;
> -       u8 virtual_slot;
> -};
> -
> -struct acpi_nhlt_render_device_specific_config {
> -       u32 capabilities_size;
> -       u8 virtual_slot;
> -};
> -
> -struct acpi_nhlt_wave_extensible {
> -       u16 format_tag;
> -       u16 channel_count;
> -       u32 samples_per_sec;
> -       u32 avg_bytes_per_sec;
> -       u16 block_align;
> -       u16 bits_per_sample;
> -       u16 extra_format_size;
> -       u16 valid_bits_per_sample;
> -       u32 channel_mask;
> -       u8 sub_format_guid[16];
> -};
> -
> -/* Values for channel_mask above */
> -
> -#define ACPI_NHLT_SPKR_FRONT_LEFT             0x1
> -#define ACPI_NHLT_SPKR_FRONT_RIGHT            0x2
> -#define ACPI_NHLT_SPKR_FRONT_CENTER           0x4
> -#define ACPI_NHLT_SPKR_LOW_FREQ               0x8
> -#define ACPI_NHLT_SPKR_BACK_LEFT              0x10
> -#define ACPI_NHLT_SPKR_BACK_RIGHT             0x20
> -#define ACPI_NHLT_SPKR_FRONT_LEFT_OF_CENTER   0x40
> -#define ACPI_NHLT_SPKR_FRONT_RIGHT_OF_CENTER  0x80
> -#define ACPI_NHLT_SPKR_BACK_CENTER            0x100
> -#define ACPI_NHLT_SPKR_SIDE_LEFT              0x200
> -#define ACPI_NHLT_SPKR_SIDE_RIGHT             0x400
> -#define ACPI_NHLT_SPKR_TOP_CENTER             0x800
> -#define ACPI_NHLT_SPKR_TOP_FRONT_LEFT         0x1000
> -#define ACPI_NHLT_SPKR_TOP_FRONT_CENTER       0x2000
> -#define ACPI_NHLT_SPKR_TOP_FRONT_RIGHT        0x4000
> -#define ACPI_NHLT_SPKR_TOP_BACK_LEFT          0x8000
> -#define ACPI_NHLT_SPKR_TOP_BACK_CENTER        0x10000
> -#define ACPI_NHLT_SPKR_TOP_BACK_RIGHT         0x20000
> -
> -struct acpi_nhlt_format_config {
> -       struct acpi_nhlt_wave_extensible format;
> -       u32 capability_size;
> -       u8 capabilities[];
> -};
> -
> -struct acpi_nhlt_formats_config {
> -       u8 formats_count;
> -};
> -
> -struct acpi_nhlt_device_specific_hdr {
> -       u8 virtual_slot;
> -       u8 config_type;
> -};
> -
> -/* Types for config_type above */
> -
> -#define ACPI_NHLT_GENERIC                   0
> -#define ACPI_NHLT_MIC                       1
> -#define ACPI_NHLT_RENDER                    3
> -
> -struct acpi_nhlt_mic_device_specific_config {
> -       struct acpi_nhlt_device_specific_hdr device_config;
> -       u8 array_type_ext;
> -};
> -
> -/* Values for array_type_ext above */
> -
> -#define ACPI_NHLT_ARRAY_TYPE_RESERVED               0x09       /* 9 and below are reserved */
> -#define ACPI_NHLT_SMALL_LINEAR_2ELEMENT             0x0A
> -#define ACPI_NHLT_BIG_LINEAR_2ELEMENT               0x0B
> -#define ACPI_NHLT_FIRST_GEOMETRY_LINEAR_4ELEMENT    0x0C
> -#define ACPI_NHLT_PLANAR_LSHAPED_4ELEMENT           0x0D
> -#define ACPI_NHLT_SECOND_GEOMETRY_LINEAR_4ELEMENT   0x0E
> -#define ACPI_NHLT_VENDOR_DEFINED                    0x0F
> -#define ACPI_NHLT_ARRAY_TYPE_MASK                   0x0F
> -#define ACPI_NHLT_ARRAY_TYPE_EXT_MASK               0x10
> -
> -#define ACPI_NHLT_NO_EXTENSION                      0x0
> -#define ACPI_NHLT_MIC_SNR_SENSITIVITY_EXT           (1<<4)
> -
> -struct acpi_nhlt_vendor_mic_count {
> -       u8 microphone_count;
> -};
> -
> -struct acpi_nhlt_vendor_mic_config {
> -       u8 type;
> -       u8 panel;
> -       u16 speaker_position_distance;  /* mm */
> -       u16 horizontal_offset;  /* mm */
> -       u16 vertical_offset;    /* mm */
> -       u8 frequency_low_band;  /* 5*Hz */
> -       u8 frequency_high_band; /* 500*Hz */
> -       u16 direction_angle;    /* -180 - + 180 */
> -       u16 elevation_angle;    /* -180 - + 180 */
> -       u16 work_vertical_angle_begin;  /* -180 - + 180 with 2 deg step */
> -       u16 work_vertical_angle_end;    /* -180 - + 180 with 2 deg step */
> -       u16 work_horizontal_angle_begin;        /* -180 - + 180 with 2 deg step */
> -       u16 work_horizontal_angle_end;  /* -180 - + 180 with 2 deg step */
> -};
> -
> -/* Values for Type field above */
> -
> -#define ACPI_NHLT_MIC_OMNIDIRECTIONAL       0
> -#define ACPI_NHLT_MIC_SUBCARDIOID           1
> -#define ACPI_NHLT_MIC_CARDIOID              2
> -#define ACPI_NHLT_MIC_SUPER_CARDIOID        3
> -#define ACPI_NHLT_MIC_HYPER_CARDIOID        4
> -#define ACPI_NHLT_MIC_8_SHAPED              5
> -#define ACPI_NHLT_MIC_RESERVED6             6  /* 6 is reserved */
> -#define ACPI_NHLT_MIC_VENDOR_DEFINED        7
> -#define ACPI_NHLT_MIC_RESERVED              8  /* 8 and above are reserved */
> -
> -/* Values for Panel field above */
> -
> -#define ACPI_NHLT_MIC_POSITION_TOP          0
> -#define ACPI_NHLT_MIC_POSITION_BOTTOM       1
> -#define ACPI_NHLT_MIC_POSITION_LEFT         2
> -#define ACPI_NHLT_MIC_POSITION_RIGHT        3
> -#define ACPI_NHLT_MIC_POSITION_FRONT        4
> -#define ACPI_NHLT_MIC_POSITION_BACK         5
> -#define ACPI_NHLT_MIC_POSITION_RESERVED     6  /* 6 and above are reserved */
> -
> -struct acpi_nhlt_vendor_mic_device_specific_config {
> -       struct acpi_nhlt_mic_device_specific_config mic_array_device_config;
> -       u8 number_of_microphones;
> -       struct acpi_nhlt_vendor_mic_config mic_config[];        /* Indexed by number_of_microphones */
> -};
> -
> -/* Microphone SNR and Sensitivity extension */
> -
> -struct acpi_nhlt_mic_snr_sensitivity_extension {
> -       u32 SNR;
> -       u32 sensitivity;
> -};
> -
> -/* Render device with feedback */
> -
> -struct acpi_nhlt_render_feedback_device_specific_config {
> -       u8 feedback_virtual_slot;       /* Render slot in case of capture */
> -       u16 feedback_channels;  /* Informative only */
> -       u16 feedback_valid_bits_per_sample;
> -};
> -
> -/* Non documented structures */
> -
> -struct acpi_nhlt_device_info_count {
> -       u8 structure_count;
> -};
> -
> -struct acpi_nhlt_device_info {
> -       u8 device_id[16];
> -       u8 device_instance_id;
> -       u8 device_port_id;
> -};
> -
>  /*******************************************************************************
>   *
>   * NHLT - Non HDAudio Link Table
> --
> 2.25.1
>