mirror of
				https://github.com/torvalds/linux.git
				synced 2025-11-04 10:40:15 +02:00 
			
		
		
		
	ALSA: hda: intel-nhlt: handle NHLT VENDOR_DEFINED DMIC geometry
The NHLT spec defines a VENDOR_DEFINED geometry, which requires reading additional information to figure out the number of microphones. Signed-off-by: Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com> Signed-off-by: Takashi Iwai <tiwai@suse.de>
This commit is contained in:
		
							parent
							
								
									303681f435
								
							
						
					
					
						commit
						7a33ea70e1
					
				
					 2 changed files with 13 additions and 3 deletions
				
			
		| 
						 | 
				
			
			@ -96,16 +96,22 @@ struct nhlt_resource_desc  {
 | 
			
		|||
#define MIC_ARRAY_2CH 2
 | 
			
		||||
#define MIC_ARRAY_4CH 4
 | 
			
		||||
 | 
			
		||||
struct nhlt_tdm_config {
 | 
			
		||||
struct nhlt_device_specific_config {
 | 
			
		||||
	u8 virtual_slot;
 | 
			
		||||
	u8 config_type;
 | 
			
		||||
} __packed;
 | 
			
		||||
 | 
			
		||||
struct nhlt_dmic_array_config {
 | 
			
		||||
	struct nhlt_tdm_config tdm_config;
 | 
			
		||||
	struct nhlt_device_specific_config device_config;
 | 
			
		||||
	u8 array_type;
 | 
			
		||||
} __packed;
 | 
			
		||||
 | 
			
		||||
struct nhlt_vendor_dmic_array_config {
 | 
			
		||||
	struct nhlt_dmic_array_config dmic_config;
 | 
			
		||||
	u8 nb_mics;
 | 
			
		||||
	/* TODO add vendor mic config */
 | 
			
		||||
} __packed;
 | 
			
		||||
 | 
			
		||||
enum {
 | 
			
		||||
	NHLT_MIC_ARRAY_2CH_SMALL = 0xa,
 | 
			
		||||
	NHLT_MIC_ARRAY_2CH_BIG = 0xb,
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -63,6 +63,7 @@ int intel_nhlt_get_dmic_geo(struct device *dev, struct nhlt_acpi_table *nhlt)
 | 
			
		|||
{
 | 
			
		||||
	struct nhlt_endpoint *epnt;
 | 
			
		||||
	struct nhlt_dmic_array_config *cfg;
 | 
			
		||||
	struct nhlt_vendor_dmic_array_config *cfg_vendor;
 | 
			
		||||
	unsigned int dmic_geo = 0;
 | 
			
		||||
	u8 j;
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -86,7 +87,10 @@ int intel_nhlt_get_dmic_geo(struct device *dev, struct nhlt_acpi_table *nhlt)
 | 
			
		|||
			case NHLT_MIC_ARRAY_4CH_2ND_GEOM:
 | 
			
		||||
				dmic_geo = MIC_ARRAY_4CH;
 | 
			
		||||
				break;
 | 
			
		||||
 | 
			
		||||
			case NHLT_MIC_ARRAY_VENDOR_DEFINED:
 | 
			
		||||
				cfg_vendor = (struct nhlt_vendor_dmic_array_config *)cfg;
 | 
			
		||||
				dmic_geo = cfg_vendor->nb_mics;
 | 
			
		||||
				break;
 | 
			
		||||
			default:
 | 
			
		||||
				dev_warn(dev, "undefined DMIC array_type 0x%0x\n",
 | 
			
		||||
					 cfg->array_type);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in a new issue