brintos

brintos / linux-shallow public Read only

0
0
Text · 4.0 KiB · 24dbe16 Raw
200 lines · c
1/* SPDX-License-Identifier: GPL-2.0-only */2/*3 *  intel-nhlt.h - Intel HDA Platform NHLT header4 *5 *  Copyright (c) 2015-2019 Intel Corporation6 */7 8#ifndef __INTEL_NHLT_H__9#define __INTEL_NHLT_H__10 11#include <linux/acpi.h>12 13enum nhlt_link_type {14	NHLT_LINK_HDA = 0,15	NHLT_LINK_DSP = 1,16	NHLT_LINK_DMIC = 2,17	NHLT_LINK_SSP = 3,18	NHLT_LINK_INVALID19};20 21enum nhlt_device_type {22	NHLT_DEVICE_BT = 0,23	NHLT_DEVICE_DMIC = 1,24	NHLT_DEVICE_I2S = 4,25	NHLT_DEVICE_INVALID26};27 28struct wav_fmt {29	u16 fmt_tag;30	u16 channels;31	u32 samples_per_sec;32	u32 avg_bytes_per_sec;33	u16 block_align;34	u16 bits_per_sample;35	u16 cb_size;36} __packed;37 38struct wav_fmt_ext {39	struct wav_fmt fmt;40	union samples {41		u16 valid_bits_per_sample;42		u16 samples_per_block;43		u16 reserved;44	} sample;45	u32 channel_mask;46	u8 sub_fmt[16];47} __packed;48 49struct nhlt_specific_cfg {50	u32 size;51	u8 caps[];52} __packed;53 54struct nhlt_fmt_cfg {55	struct wav_fmt_ext fmt_ext;56	struct nhlt_specific_cfg config;57} __packed;58 59struct nhlt_fmt {60	u8 fmt_count;61	struct nhlt_fmt_cfg fmt_config[];62} __packed;63 64struct nhlt_endpoint {65	u32  length;66	u8   linktype;67	u8   instance_id;68	u16  vendor_id;69	u16  device_id;70	u16  revision_id;71	u32  subsystem_id;72	u8   device_type;73	u8   direction;74	u8   virtual_bus_id;75	struct nhlt_specific_cfg config;76} __packed;77 78struct nhlt_acpi_table {79	struct acpi_table_header header;80	u8 endpoint_count;81	struct nhlt_endpoint desc[];82} __packed;83 84struct nhlt_resource_desc  {85	u32 extra;86	u16 flags;87	u64 addr_spc_gra;88	u64 min_addr;89	u64 max_addr;90	u64 addr_trans_offset;91	u64 length;92} __packed;93 94#define MIC_ARRAY_2CH 295#define MIC_ARRAY_4CH 496 97struct nhlt_device_specific_config {98	u8 virtual_slot;99	u8 config_type;100} __packed;101 102struct nhlt_dmic_array_config {103	struct nhlt_device_specific_config device_config;104	u8 array_type;105} __packed;106 107struct nhlt_vendor_dmic_array_config {108	struct nhlt_dmic_array_config dmic_config;109	u8 nb_mics;110	/* TODO add vendor mic config */111} __packed;112 113enum {114	NHLT_CONFIG_TYPE_GENERIC = 0,115	NHLT_CONFIG_TYPE_MIC_ARRAY = 1116};117 118enum {119	NHLT_MIC_ARRAY_2CH_SMALL = 0xa,120	NHLT_MIC_ARRAY_2CH_BIG = 0xb,121	NHLT_MIC_ARRAY_4CH_1ST_GEOM = 0xc,122	NHLT_MIC_ARRAY_4CH_L_SHAPED = 0xd,123	NHLT_MIC_ARRAY_4CH_2ND_GEOM = 0xe,124	NHLT_MIC_ARRAY_VENDOR_DEFINED = 0xf,125};126 127#if IS_ENABLED(CONFIG_ACPI) && IS_ENABLED(CONFIG_SND_INTEL_NHLT)128 129struct nhlt_acpi_table *intel_nhlt_init(struct device *dev);130 131void intel_nhlt_free(struct nhlt_acpi_table *addr);132 133int intel_nhlt_get_dmic_geo(struct device *dev, struct nhlt_acpi_table *nhlt);134 135bool intel_nhlt_has_endpoint_type(struct nhlt_acpi_table *nhlt, u8 link_type);136 137int intel_nhlt_ssp_endpoint_mask(struct nhlt_acpi_table *nhlt, u8 device_type);138 139int intel_nhlt_ssp_mclk_mask(struct nhlt_acpi_table *nhlt, int ssp_num);140 141struct nhlt_specific_cfg *142intel_nhlt_get_endpoint_blob(struct device *dev, struct nhlt_acpi_table *nhlt,143			     u32 bus_id, u8 link_type, u8 vbps, u8 bps,144			     u8 num_ch, u32 rate, u8 dir, u8 dev_type);145 146int intel_nhlt_ssp_device_type(struct device *dev, struct nhlt_acpi_table *nhlt,147			       u8 virtual_bus_id);148 149#else150 151static inline struct nhlt_acpi_table *intel_nhlt_init(struct device *dev)152{153	return NULL;154}155 156static inline void intel_nhlt_free(struct nhlt_acpi_table *addr)157{158}159 160static inline int intel_nhlt_get_dmic_geo(struct device *dev,161					  struct nhlt_acpi_table *nhlt)162{163	return 0;164}165 166static inline bool intel_nhlt_has_endpoint_type(struct nhlt_acpi_table *nhlt,167						u8 link_type)168{169	return false;170}171 172static inline int intel_nhlt_ssp_endpoint_mask(struct nhlt_acpi_table *nhlt, u8 device_type)173{174	return 0;175}176 177static inline int intel_nhlt_ssp_mclk_mask(struct nhlt_acpi_table *nhlt, int ssp_num)178{179	return 0;180}181 182static inline struct nhlt_specific_cfg *183intel_nhlt_get_endpoint_blob(struct device *dev, struct nhlt_acpi_table *nhlt,184			     u32 bus_id, u8 link_type, u8 vbps, u8 bps,185			     u8 num_ch, u32 rate, u8 dir, u8 dev_type)186{187	return NULL;188}189 190static inline int intel_nhlt_ssp_device_type(struct device *dev,191					     struct nhlt_acpi_table *nhlt,192					     u8 virtual_bus_id)193{194	return -EINVAL;195}196 197#endif198 199#endif200