mb/google/zork: Use dev_nested_path for dmic gpio update
Create function update_dmic_gpio to update DMIC GPIO for ACP machine and use find_dev_nested_path function for consistency. BUG=None BRANCH=None TEST=None Change-Id: I96cf207f24c6117d98ff2bf7e6e5cd282489e805 Signed-off-by: Josie Nordrum <josienordrum@google.com> Reviewed-on: https://review.coreboot.org/c/coreboot/+/44158 Reviewed-by: Furquan Shaikh <furquan@google.com> Tested-by: build bot (Jenkins) <no-reply@coreboot.org>
This commit is contained in:
		
				
					committed by
					
						 Furquan Shaikh
						Furquan Shaikh
					
				
			
			
				
	
			
			
			
						parent
						
							cc72e15c26
						
					
				
				
					commit
					55fefbe39d
				
			| @@ -65,44 +65,56 @@ static void update_hp_int_odl(void) | ||||
|  | ||||
| } | ||||
|  | ||||
| void variant_audio_update(void) | ||||
| static void update_dmic_gpio(void) | ||||
| { | ||||
| 	const struct device *gpp_a_dev; | ||||
| 	const struct device *acp_dev; | ||||
| 	struct device *machine_dev = NULL; | ||||
| 	static const struct device_path acp_machine_path[] = { | ||||
| 		{ | ||||
| 			.type = DEVICE_PATH_PCI, | ||||
| 			.pci.devfn = PCIE_GPP_A_DEVFN | ||||
| 		}, | ||||
| 		{ | ||||
| 			.type = DEVICE_PATH_PCI, | ||||
| 			.pci.devfn = AUDIO_DEVFN | ||||
| 		}, | ||||
| 		{ | ||||
| 			.type = DEVICE_PATH_GENERIC, | ||||
| 			.generic.id = 0, | ||||
| 			.generic.subid = 0 | ||||
| 		} | ||||
| 	}; | ||||
|  | ||||
| 	const struct device *machine_dev; | ||||
| 	struct drivers_amd_i2s_machine_dev_config *cfg; | ||||
| 	struct acpi_gpio *gpio; | ||||
|  | ||||
| 	if (variant_uses_v3_schematics()) | ||||
| 		return; | ||||
|  | ||||
| 	gpp_a_dev = pcidev_path_on_root(PCIE_GPP_A_DEVFN); | ||||
| 	if (gpp_a_dev == NULL) | ||||
| 	machine_dev = find_dev_nested_path( | ||||
| 		pci_root_bus(), acp_machine_path, ARRAY_SIZE(acp_machine_path)); | ||||
| 	if (!machine_dev) { | ||||
| 		printk(BIOS_ERR, "%s: Failed to find ACP machine device\n", __func__); | ||||
| 		return; | ||||
|  | ||||
| 	acp_dev = pcidev_path_behind(gpp_a_dev->link_list, AUDIO_DEVFN); | ||||
| 	if (acp_dev == NULL) | ||||
| 		return; | ||||
|  | ||||
| 	while ((machine_dev = dev_bus_each_child(acp_dev->link_list, machine_dev)) != NULL) { | ||||
| 		struct drivers_amd_i2s_machine_dev_config *cfg; | ||||
| 		struct acpi_gpio *gpio; | ||||
|  | ||||
| 		if (machine_dev->chip_info == NULL) | ||||
| 			continue; | ||||
|  | ||||
| 		if (machine_dev->chip_ops != &drivers_amd_i2s_machine_dev_ops) | ||||
| 			continue; | ||||
|  | ||||
| 		cfg = machine_dev->chip_info; | ||||
| 		gpio = &cfg->dmic_select_gpio; | ||||
|  | ||||
| 		if (CONFIG(BOARD_GOOGLE_BASEBOARD_TREMBYLE)) | ||||
| 			gpio->pins[0] = GPIO_13; | ||||
| 		else | ||||
| 			gpio->pins[0] = GPIO_6; | ||||
|  | ||||
| 		break; | ||||
| 	} | ||||
|  | ||||
| 	if (machine_dev->chip_ops != &drivers_amd_i2s_machine_dev_ops) { | ||||
| 		printk(BIOS_ERR, "%s: Incorrect device found\n", __func__); | ||||
| 		return; | ||||
| 	} | ||||
|  | ||||
| 	cfg = config_of(machine_dev); | ||||
| 	gpio = &cfg->dmic_select_gpio; | ||||
|  | ||||
| 	if (CONFIG(BOARD_GOOGLE_BASEBOARD_TREMBYLE)) | ||||
| 		gpio->pins[0] = GPIO_13; | ||||
| 	else | ||||
| 		gpio->pins[0] = GPIO_6; | ||||
|  | ||||
| } | ||||
|  | ||||
| void variant_audio_update(void) | ||||
| { | ||||
| 	update_dmic_gpio(); | ||||
| 	update_hp_int_odl(); | ||||
| } | ||||
|  | ||||
|   | ||||
		Reference in New Issue
	
	Block a user