nb/intel/gm45: Make fetching the blc_pwm freq its own function
Also check the EDID string using strcmp instead of strncmp. Change-Id: I9ad364f84f3658be98ce7ad3a6f0f0fe3247fc41 Signed-off-by: Arthur Heymans <arthur@aheymans.xyz> Reviewed-on: https://review.coreboot.org/c/29924 Tested-by: build bot (Jenkins) <no-reply@coreboot.org> Reviewed-by: Nico Huber <nico.h@gmx.de>
This commit is contained in:
		
				
					committed by
					
						 Patrick Georgi
						Patrick Georgi
					
				
			
			
				
	
			
			
			
						parent
						
							ab72fc24be
						
					
				
				
					commit
					c679b1f333
				
			| @@ -668,6 +668,39 @@ static u32 freq_to_blc_pwm_ctl(struct device *const dev, | ||||
| 		return (blc_mod << 16) | blc_mod; | ||||
| } | ||||
|  | ||||
| static u16 get_blc_pwm_freq_value(const char *edid_ascii_string) | ||||
| { | ||||
| 	static u16 blc_pwm_freq; | ||||
| 	const struct blc_pwm_t *blc_pwm; | ||||
| 	int i; | ||||
| 	int blc_array_len; | ||||
|  | ||||
| 	if (blc_pwm_freq > 0) | ||||
| 		return blc_pwm_freq; | ||||
|  | ||||
| 	blc_array_len = get_blc_values(&blc_pwm); | ||||
| 	/* Find EDID string and pwm freq in lookup table */ | ||||
| 	for (i = 0; i < blc_array_len; i++) { | ||||
| 		if (!strcmp(blc_pwm[i].ascii_string, edid_ascii_string)) { | ||||
| 			blc_pwm_freq = blc_pwm[i].pwm_freq; | ||||
| 			printk(BIOS_DEBUG, "Found EDID string: %s in lookup table, pwm: %dHz\n", | ||||
| 			       blc_pwm[i].ascii_string, blc_pwm_freq); | ||||
| 			break; | ||||
| 		} | ||||
| 	} | ||||
|  | ||||
| 	if (i == blc_array_len) | ||||
| 		printk(BIOS_NOTICE, "Your panels EDID `%s` wasn't found in the" | ||||
| 		       "lookup table.\n You may have issues with your panels" | ||||
| 		       "backlight.\n If you want to help improving coreboot" | ||||
| 		       "please report: this EDID string\n and the result" | ||||
| 		       "of `intel_read read BLC_PWM_CTL`" | ||||
| 		       "(from intel-gpu-tools)\n while running vendor BIOS\n", | ||||
| 		       edid_ascii_string); | ||||
|  | ||||
| 	return blc_pwm_freq; | ||||
| } | ||||
|  | ||||
| static void gma_pm_init_post_vbios(struct device *const dev, | ||||
| 				const char *edid_ascii_string) | ||||
| { | ||||
| @@ -675,9 +708,7 @@ static void gma_pm_init_post_vbios(struct device *const dev, | ||||
|  | ||||
| 	u32 reg32; | ||||
| 	u8 reg8; | ||||
| 	const struct blc_pwm_t *blc_pwm; | ||||
| 	int blc_array_len, i; | ||||
| 	u16 pwm_freq = 0; | ||||
| 	u16 pwm_freq; | ||||
|  | ||||
| 	/* Setup Panel Power On Delays */ | ||||
| 	reg32 = gtt_read(PP_ON_DELAYS); | ||||
| @@ -708,30 +739,10 @@ static void gma_pm_init_post_vbios(struct device *const dev, | ||||
| 	reg8 = 100; | ||||
| 	if (conf->duty_cycle != 0) | ||||
| 		reg8 = conf->duty_cycle; | ||||
| 	blc_array_len = get_blc_values(&blc_pwm); | ||||
| 	if (conf->default_pwm_freq != 0) | ||||
| 	pwm_freq = get_blc_pwm_freq_value(edid_ascii_string); | ||||
| 	if (pwm_freq == 0 && conf->default_pwm_freq != 0) | ||||
| 		pwm_freq = conf->default_pwm_freq; | ||||
|  | ||||
| 	/* Find EDID string and pwm freq in lookup table */ | ||||
| 	for (i = 0; i < blc_array_len; i++) { | ||||
| 		if (!strncmp(blc_pwm[i].ascii_string, edid_ascii_string, | ||||
| 				strlen(blc_pwm[i].ascii_string))) { | ||||
| 			pwm_freq = blc_pwm[i].pwm_freq; | ||||
| 			printk(BIOS_DEBUG, "Found EDID string: %s in lookup table, pwm: %dHz\n", | ||||
| 				blc_pwm[i].ascii_string, pwm_freq); | ||||
| 			break; | ||||
| 		} | ||||
| 	} | ||||
|  | ||||
| 	if (i == blc_array_len) | ||||
| 		printk(BIOS_NOTICE, "Your panels EDID `%s` wasn't found in the" | ||||
| 			"lookup table.\n You may have issues with your panels" | ||||
| 			"backlight.\n If you want to help improving coreboot" | ||||
| 			"please report: this EDID string\n and the result" | ||||
| 			"of `intel_read read BLC_PWM_CTL`" | ||||
| 			"(from intel-gpu-tools)\n while running vendor BIOS\n", | ||||
| 			edid_ascii_string); | ||||
|  | ||||
| 	if (pwm_freq == 0) | ||||
| 		gtt_write(BLC_PWM_CTL, 0x06100610); | ||||
| 	else | ||||
|   | ||||
		Reference in New Issue
	
	Block a user