ASoC: max98390: Add support change dsm param name
authorSteve Lee <steves.lee@maximintegrated.com>
Mon, 9 Aug 2021 14:21:40 +0000 (23:21 +0900)
committerMark Brown <broonie@kernel.org>
Mon, 9 Aug 2021 15:06:48 +0000 (16:06 +0100)
  In case of using different type of speaker, support
 using different dsm parameter bin file for each amp connected.

Signed-off-by: Steve Lee <steves.lee@maximintegrated.com>
Link: https://lore.kernel.org/r/20210809142140.9293-1-steves.lee@maximintegrated.com
Signed-off-by: Mark Brown <broonie@kernel.org>
sound/soc/codecs/max98390.c
sound/soc/codecs/max98390.h

index 94773ccee9d5bcd3382e1f6c548bcc53615fa90b..b392567c2b3e6811fdbfd65f22742ba6d6ec5073 100644 (file)
@@ -765,17 +765,26 @@ static int max98390_dsm_init(struct snd_soc_component *component)
        vendor = dmi_get_system_info(DMI_SYS_VENDOR);
        product = dmi_get_system_info(DMI_PRODUCT_NAME);
 
-       if (vendor && product) {
-               snprintf(filename, sizeof(filename), "dsm_param_%s_%s.bin",
-                       vendor, product);
+       if (!strcmp(max98390->dsm_param_name, "default")) {
+               if (vendor && product) {
+                       snprintf(filename, sizeof(filename),
+                               "dsm_param_%s_%s.bin", vendor, product);
+               } else {
+                       sprintf(filename, "dsm_param.bin");
+               }
        } else {
-               sprintf(filename, "dsm_param.bin");
+               snprintf(filename, sizeof(filename), "%s",
+                       max98390->dsm_param_name);
        }
        ret = request_firmware(&fw, filename, component->dev);
        if (ret) {
                ret = request_firmware(&fw, "dsm_param.bin", component->dev);
-               if (ret)
-                       goto err;
+               if (ret) {
+                       ret = request_firmware(&fw, "dsmparam.bin",
+                               component->dev);
+                       if (ret)
+                               goto err;
+               }
        }
 
        dev_dbg(component->dev,
@@ -1047,6 +1056,11 @@ static int max98390_i2c_probe(struct i2c_client *i2c,
                __func__, max98390->ref_rdc_value,
                max98390->ambient_temp_value);
 
+       ret = device_property_read_string(&i2c->dev, "maxim,dsm_param_name",
+                                      &max98390->dsm_param_name);
+       if (ret)
+               max98390->dsm_param_name = "default";
+
        /* voltage/current slot configuration */
        max98390_slot_config(i2c, max98390);
 
index e31516717d3b7a812bd6202f6af59cea901af980..c250740f73a2712568024c9c97e1f73fad88ecb4 100644 (file)
@@ -662,5 +662,6 @@ struct max98390_priv {
        unsigned int i_l_slot;
        unsigned int ref_rdc_value;
        unsigned int ambient_temp_value;
+       const char *dsm_param_name;
 };
 #endif