/* SPDX-License-Identifier: GPL-2.0-only */

#include <stdint.h>
#include <commonlib/helpers.h>
#include <console/console.h>
#include <northbridge/intel/gm45/gm45.h>
#include <device/pci.h>
#include <drivers/intel/gma/opregion.h>

static const struct blc_pwm_t blc_entries[] = {
	/* corrected to 320MHz CDClk, vendor set 753; works fine at both: */
	{"LTD121EQ3B", 447},
	{"LTD121EWVB", 165},
	{"LTD133EQ1B", 264},  /* Found on an X301 */
	{"B121EW03 V6 ", 165},
	/* datasheets: between 100 and 20k, typical 200 */
	/* TESTED: works best at 400 */
	{"B121EW09 V3 ", 400},
	{"HV121WX4-120", 110}, /* Aftermarket AFFS lcd, works well at low pwm */
	{"LTN121AT03001", 110},
	{"LTN121AT07L02", 750}, /* Its part name is LTN121AT07-L02 */
	{"LTN121AP03001", 750},
	/* TODO: untested panels found on thinkwiki */
	/* Generally CCFL runs best at lower PWM */
	/* {"B121EW09 V2 ", 450}, */
	/* {"N121IB-L05", 450}, */
	{"LP121WX3-TLC1", 400}, /* TESTED to work best at this value */
	/* {"LP121WX3-TLA1" 450}, */
	/* {"B121EW03 V3 " 110}, */
	/* {"LTN121AP02001" 110}, */
};

int get_blc_values(const struct blc_pwm_t **entries)
{
	*entries = blc_entries;
	return ARRAY_SIZE(blc_entries);
}

const char *mainboard_vbt_filename(void)
{
	u16 pwm_freq = get_blc_pwm_freq_value();

	if (pwm_freq == 0) {
		printk(BIOS_DEBUG,
		       "GMA: Display backlight type not found, assuming LED\n");
		return "data_led.vbt";
	} else if (pwm_freq > 200) {
		printk(BIOS_DEBUG, "GMA: Using LED backlight VBT\n");
		return "data_led.vbt";
	} else {
		printk(BIOS_DEBUG, "GMA: Using CCFL backlight VBT\n");
		return "data_ccfl.vbt";
	}
}
