ASoC: core: Allow snd_soc_update_bits use 32 bits register
[firefly-linux-kernel-4.4.55.git] / sound / soc / soc-core.c
index 051c006281f5c2c003583f7104c9ec02dc886dfc..7f0a9297e42087b3507da184f93ca1f36798a8f9 100644 (file)
@@ -1127,13 +1127,28 @@ static int soc_probe_codec(struct snd_soc_card *card,
 
        soc_init_codec_debugfs(codec);
 
-       if (driver->dapm_widgets)
-               snd_soc_dapm_new_controls(&codec->dapm, driver->dapm_widgets,
-                                         driver->num_dapm_widgets);
+       if (driver->dapm_widgets) {
+               ret = snd_soc_dapm_new_controls(&codec->dapm,
+                                               driver->dapm_widgets,
+                                               driver->num_dapm_widgets);
+
+               if (ret != 0) {
+                       dev_err(codec->dev,
+                               "Failed to create new controls %d\n", ret);
+                       goto err_probe;
+               }
+       }
 
        /* Create DAPM widgets for each DAI stream */
-       list_for_each_entry(dai, &codec->component.dai_list, list)
-               snd_soc_dapm_new_dai_widgets(&codec->dapm, dai);
+       list_for_each_entry(dai, &codec->component.dai_list, list) {
+               ret = snd_soc_dapm_new_dai_widgets(&codec->dapm, dai);
+
+               if (ret != 0) {
+                       dev_err(codec->dev,
+                               "Failed to create DAI widgets %d\n", ret);
+                       goto err_probe;
+               }
+       }
 
        codec->dapm.idle_bias_off = driver->idle_bias_off;
 
@@ -2315,7 +2330,7 @@ EXPORT_SYMBOL_GPL(snd_soc_write);
  *
  * Returns 1 for change, 0 for no change, or negative error code.
  */
-int snd_soc_update_bits(struct snd_soc_codec *codec, unsigned short reg,
+int snd_soc_update_bits(struct snd_soc_codec *codec, unsigned int reg,
                                unsigned int mask, unsigned int value)
 {
        bool change;
@@ -2356,7 +2371,7 @@ EXPORT_SYMBOL_GPL(snd_soc_update_bits);
  * Returns 1 for change else 0.
  */
 int snd_soc_update_bits_locked(struct snd_soc_codec *codec,
-                              unsigned short reg, unsigned int mask,
+                              unsigned int reg, unsigned int mask,
                               unsigned int value)
 {
        int change;
@@ -2381,7 +2396,7 @@ EXPORT_SYMBOL_GPL(snd_soc_update_bits_locked);
  *
  * Returns 1 for change else 0.
  */
-int snd_soc_test_bits(struct snd_soc_codec *codec, unsigned short reg,
+int snd_soc_test_bits(struct snd_soc_codec *codec, unsigned int reg,
                                unsigned int mask, unsigned int value)
 {
        int change;
@@ -2896,7 +2911,7 @@ int snd_soc_put_volsw_sx(struct snd_kcontrol *kcontrol,
        int min = mc->min;
        int mask = (1 << (fls(min + max) - 1)) - 1;
        int err = 0;
-       unsigned short val, val_mask, val2 = 0;
+       unsigned int val, val_mask, val2 = 0;
 
        val_mask = mask << shift;
        val = (ucontrol->value.integer.value[0] + min) & mask;