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 <wisley.chen@quanta.corp-partner.google.com>
Reviewed-on: https://review.coreboot.org/c/coreboot/+/57119
Tested-by: build bot (Jenkins) <no-reply@coreboot.org>
Reviewed-by: Tim Wawrzynczak <twawrzynczak@chromium.org>
This commit is contained in:
Wisley Chen
2021-08-24 18:39:06 +06:00
committed by Tim Wawrzynczak
parent 8337e686a6
commit 889fa6093d
3 changed files with 30 additions and 2 deletions

View File

@@ -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;
};

View File

@@ -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 */