ASoC: rt5640: Move checking of device-properties to component probe callback
authorHans de Goede <hdegoede@redhat.com>
Tue, 8 May 2018 15:35:49 +0000 (17:35 +0200)
committerMark Brown <broonie@kernel.org>
Fri, 11 May 2018 02:22:50 +0000 (11:22 +0900)
On some platforms the platform code may need to add device-properties,
rather then relying only on properties set by the firmware.

This commit moves the parsing of the device-properties from the i2c-driver
probe() function, which may be called at any time, to the component-driver
probe() function, which gets called after the platform code calls
snd_soc_register_card().

This allows the platform code to attach extra device-properties before
the device-properties are parsed.

Signed-off-by: Hans de Goede <hdegoede@redhat.com>
Signed-off-by: Mark Brown <broonie@kernel.org>
sound/soc/codecs/rt5640.c

index 616f0a6..265a078 100644 (file)
@@ -2138,6 +2138,25 @@ static int rt5640_probe(struct snd_soc_component *component)
                return -ENODEV;
        }
 
+       /*
+        * Note on some platforms the platform code may need to add device-props
+        * rather then relying only on properties set by the firmware.
+        * Therefor the property parsing MUST be done here, rather then from
+        * rt5640_i2c_probe(), so that the platform-code can attach extra
+        * properties before calling snd_soc_register_card().
+        */
+       if (device_property_read_bool(component->dev, "realtek,in1-differential"))
+               snd_soc_component_update_bits(component, RT5640_IN1_IN2,
+                                             RT5640_IN_DF1, RT5640_IN_DF1);
+
+       if (device_property_read_bool(component->dev, "realtek,in2-differential"))
+               snd_soc_component_update_bits(component, RT5640_IN3_IN4,
+                                             RT5640_IN_DF2, RT5640_IN_DF2);
+
+       if (device_property_read_bool(component->dev, "realtek,in3-differential"))
+               snd_soc_component_update_bits(component, RT5640_IN1_IN2,
+                                             RT5640_IN_DF2, RT5640_IN_DF2);
+
        return 0;
 }
 
@@ -2370,18 +2389,6 @@ static int rt5640_i2c_probe(struct i2c_client *i2c,
        regmap_update_bits(rt5640->regmap, RT5640_DUMMY1,
                                RT5640_MCLK_DET, RT5640_MCLK_DET);
 
-       if (device_property_read_bool(&i2c->dev, "realtek,in1-differential"))
-               regmap_update_bits(rt5640->regmap, RT5640_IN1_IN2,
-                                       RT5640_IN_DF1, RT5640_IN_DF1);
-
-       if (device_property_read_bool(&i2c->dev, "realtek,in2-differential"))
-               regmap_update_bits(rt5640->regmap, RT5640_IN3_IN4,
-                                       RT5640_IN_DF2, RT5640_IN_DF2);
-
-       if (device_property_read_bool(&i2c->dev, "realtek,in3-differential"))
-               regmap_update_bits(rt5640->regmap, RT5640_IN1_IN2,
-                                       RT5640_IN_DF2, RT5640_IN_DF2);
-
        rt5640->hp_mute = 1;
 
        return devm_snd_soc_register_component(&i2c->dev,