mirror of
				https://github.com/torvalds/linux.git
				synced 2025-11-04 02:30:34 +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_2CH 2
 | 
				
			||||||
#define MIC_ARRAY_4CH 4
 | 
					#define MIC_ARRAY_4CH 4
 | 
				
			||||||
 | 
					
 | 
				
			||||||
struct nhlt_tdm_config {
 | 
					struct nhlt_device_specific_config {
 | 
				
			||||||
	u8 virtual_slot;
 | 
						u8 virtual_slot;
 | 
				
			||||||
	u8 config_type;
 | 
						u8 config_type;
 | 
				
			||||||
} __packed;
 | 
					} __packed;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
struct nhlt_dmic_array_config {
 | 
					struct nhlt_dmic_array_config {
 | 
				
			||||||
	struct nhlt_tdm_config tdm_config;
 | 
						struct nhlt_device_specific_config device_config;
 | 
				
			||||||
	u8 array_type;
 | 
						u8 array_type;
 | 
				
			||||||
} __packed;
 | 
					} __packed;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					struct nhlt_vendor_dmic_array_config {
 | 
				
			||||||
 | 
						struct nhlt_dmic_array_config dmic_config;
 | 
				
			||||||
 | 
						u8 nb_mics;
 | 
				
			||||||
 | 
						/* TODO add vendor mic config */
 | 
				
			||||||
 | 
					} __packed;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
enum {
 | 
					enum {
 | 
				
			||||||
	NHLT_MIC_ARRAY_2CH_SMALL = 0xa,
 | 
						NHLT_MIC_ARRAY_2CH_SMALL = 0xa,
 | 
				
			||||||
	NHLT_MIC_ARRAY_2CH_BIG = 0xb,
 | 
						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_endpoint *epnt;
 | 
				
			||||||
	struct nhlt_dmic_array_config *cfg;
 | 
						struct nhlt_dmic_array_config *cfg;
 | 
				
			||||||
 | 
						struct nhlt_vendor_dmic_array_config *cfg_vendor;
 | 
				
			||||||
	unsigned int dmic_geo = 0;
 | 
						unsigned int dmic_geo = 0;
 | 
				
			||||||
	u8 j;
 | 
						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:
 | 
								case NHLT_MIC_ARRAY_4CH_2ND_GEOM:
 | 
				
			||||||
				dmic_geo = MIC_ARRAY_4CH;
 | 
									dmic_geo = MIC_ARRAY_4CH;
 | 
				
			||||||
				break;
 | 
									break;
 | 
				
			||||||
 | 
								case NHLT_MIC_ARRAY_VENDOR_DEFINED:
 | 
				
			||||||
 | 
									cfg_vendor = (struct nhlt_vendor_dmic_array_config *)cfg;
 | 
				
			||||||
 | 
									dmic_geo = cfg_vendor->nb_mics;
 | 
				
			||||||
 | 
									break;
 | 
				
			||||||
			default:
 | 
								default:
 | 
				
			||||||
				dev_warn(dev, "undefined DMIC array_type 0x%0x\n",
 | 
									dev_warn(dev, "undefined DMIC array_type 0x%0x\n",
 | 
				
			||||||
					 cfg->array_type);
 | 
										 cfg->array_type);
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in a new issue