From 889fa6093d765f873d238ca1f5e60ad6ff7d996a Mon Sep 17 00:00:00 2001 From: Wisley Chen Date: Tue, 24 Aug 2021 18:39:06 +0600 Subject: driver/i2c/max98390: add dsm_param_name Maxim driver look for "maxim,dsm_param_name" to load dsm parameter file. dsm param file name consist of {dsm_param_file_name} filled in devicetree, {MAINBOARD_VENDOR} and {MAINBOARD_PART_NUMBER}. => {dsm_param_file_name}_{MAINBOARD_VENDOR}_{MAINBOARD_PART_NUMBER}.bin BUG=b:197076844 TEST=build, and check ssdt Change-Id: I006572d6a6ea55298374c688dfd9d877835da82d Signed-off-by: Wisley Chen Reviewed-on: https://review.coreboot.org/c/coreboot/+/57119 Tested-by: build bot (Jenkins) Reviewed-by: Tim Wawrzynczak --- src/drivers/i2c/max98390/chip.h | 1 + src/drivers/i2c/max98390/max98390.c | 23 +++++++++++++++++++++-- 2 files changed, 22 insertions(+), 2 deletions(-) (limited to 'src/drivers/i2c') diff --git a/src/drivers/i2c/max98390/chip.h b/src/drivers/i2c/max98390/chip.h index 193a17412c..d01237b418 100644 --- a/src/drivers/i2c/max98390/chip.h +++ b/src/drivers/i2c/max98390/chip.h @@ -13,4 +13,5 @@ struct drivers_i2c_max98390_config { const char *r0_calib_key; /* The VPD key of temperature during speaker calibration. */ const char *temperature_calib_key; + const char *dsm_param_file_name; }; diff --git a/src/drivers/i2c/max98390/max98390.c b/src/drivers/i2c/max98390/max98390.c index c216391e04..4beb6c29b7 100644 --- a/src/drivers/i2c/max98390/max98390.c +++ b/src/drivers/i2c/max98390/max98390.c @@ -25,8 +25,9 @@ static void max98390_fill_ssdt(const struct device *dev) .speed = I2C_SPEED_FAST, .resource = scope, }; - struct acpi_dp *dp; + struct acpi_dp *dp = NULL; uint64_t r0_value, temp_value; + char dsm_name[80] = {}; if (!scope) return; @@ -58,11 +59,29 @@ static void max98390_fill_ssdt(const struct device *dev) dp = acpi_dp_new_table("_DSD"); MAX98390_DP_INT("r0_calib", r0_value); MAX98390_DP_INT("temperature_calib", temp_value); - acpi_dp_write(dp); printk(BIOS_INFO, "set dsm_calib properties\n"); } } + if (CONFIG(CHROMEOS_DSM_PARAM_FILE_NAME)) { + if (config->dsm_param_file_name) { + if (!dp) + dp = acpi_dp_new_table("_DSD"); + + size_t chars = snprintf(dsm_name, sizeof(dsm_name), "%s_%s_%s.bin", + config->dsm_param_file_name, CONFIG_MAINBOARD_VENDOR, + CONFIG_MAINBOARD_PART_NUMBER); + + if (chars >= sizeof(dsm_name)) + printk(BIOS_ERR, "ERROR: String too long in %s\n", __func__); + + acpi_dp_add_string(dp, "maxim,dsm_param_name", dsm_name); + } + } + + if (dp) + acpi_dp_write(dp); + acpigen_pop_len(); /* Device */ acpigen_pop_len(); /* Scope */ -- cgit v1.2.3