Merge branch 'fix/rcar' of git://git.kernel.org/pub/scm/linux/kernel/git/broonie...
authorMark Brown <broonie@kernel.org>
Thu, 6 Apr 2017 10:50:04 +0000 (11:50 +0100)
committerMark Brown <broonie@kernel.org>
Thu, 6 Apr 2017 10:50:04 +0000 (11:50 +0100)
1  2 
sound/soc/sh/rcar/adg.c
sound/soc/sh/rcar/core.c

diff --combined sound/soc/sh/rcar/adg.c
index 54146f66538c18ba87cfe4a0e4e3c68fb3d880d9,9665c1fa7216427005b53bad03a21c79ac6e8625..214a9ce90bb41608100fbd1dd1da82792487151a
@@@ -537,16 -537,14 +537,14 @@@ static void rsnd_adg_get_clkout(struct 
                        clk = clk_register_fixed_rate(dev, clkout_name[i],
                                                      parent_clk_name, 0,
                                                      req_rate);
-                       if (!IS_ERR(clk)) {
-                               adg->onecell.clks       = adg->clkout;
-                               adg->onecell.clk_num    = CLKOUTMAX;
+                       adg->clkout[i] = ERR_PTR(-ENOENT);
+                       if (!IS_ERR(clk))
                                adg->clkout[i] = clk;
-                               of_clk_add_provider(np, of_clk_src_onecell_get,
-                                                   &adg->onecell);
-                       }
                }
+               adg->onecell.clks       = adg->clkout;
+               adg->onecell.clk_num    = CLKOUTMAX;
+               of_clk_add_provider(np, of_clk_src_onecell_get,
+                                   &adg->onecell);
        }
  
        adg->ckr = ckr;
@@@ -564,7 -562,6 +562,7 @@@ int rsnd_adg_probe(struct rsnd_priv *pr
        struct rsnd_adg *adg;
        struct device *dev = rsnd_priv_to_dev(priv);
        struct device_node *np = dev->of_node;
 +      int ret;
  
        adg = devm_kzalloc(dev, sizeof(*adg), GFP_KERNEL);
        if (!adg) {
                return -ENOMEM;
        }
  
 -      rsnd_mod_init(priv, &adg->mod, &adg_ops,
 +      ret = rsnd_mod_init(priv, &adg->mod, &adg_ops,
                      NULL, NULL, 0, 0);
 +      if (ret)
 +              return ret;
  
        rsnd_adg_get_clkin(priv, adg);
        rsnd_adg_get_clkout(priv, adg);
  
  void rsnd_adg_remove(struct rsnd_priv *priv)
  {
+       struct device *dev = rsnd_priv_to_dev(priv);
+       struct device_node *np = dev->of_node;
+       of_clk_del_provider(np);
        rsnd_adg_clk_disable(priv);
  }
diff --combined sound/soc/sh/rcar/core.c
index 134fe2ea4d9e16c5070d9b8013150f519dd30cdf,47b370cb2d3b3aeb53f59f6198793f891890c0f8..35c96e4bbd64311ec44435009d56739fc2495564
@@@ -96,7 -96,7 +96,7 @@@
  #include <linux/pm_runtime.h>
  #include "rsnd.h"
  
 -#define RSND_RATES SNDRV_PCM_RATE_8000_96000
 +#define RSND_RATES SNDRV_PCM_RATE_8000_192000
  #define RSND_FMTS (SNDRV_PCM_FMTBIT_S24_LE | SNDRV_PCM_FMTBIT_S16_LE)
  
  static const struct of_device_id rsnd_of_match[] = {
@@@ -674,10 -674,12 +674,10 @@@ static int rsnd_soc_dai_set_fmt(struct 
        /* set clock inversion */
        switch (fmt & SND_SOC_DAIFMT_INV_MASK) {
        case SND_SOC_DAIFMT_NB_IF:
 -              rdai->bit_clk_inv =  rdai->bit_clk_inv;
                rdai->frm_clk_inv = !rdai->frm_clk_inv;
                break;
        case SND_SOC_DAIFMT_IB_NF:
                rdai->bit_clk_inv = !rdai->bit_clk_inv;
 -              rdai->frm_clk_inv =  rdai->frm_clk_inv;
                break;
        case SND_SOC_DAIFMT_IB_IF:
                rdai->bit_clk_inv = !rdai->bit_clk_inv;
@@@ -1026,10 -1028,8 +1026,8 @@@ static int __rsnd_kctrl_new(struct rsnd
                return -ENOMEM;
  
        ret = snd_ctl_add(card, kctrl);
-       if (ret < 0) {
-               snd_ctl_free_one(kctrl);
+       if (ret < 0)
                return ret;
-       }
  
        cfg->update = update;
        cfg->card = card;
        return 0;
  }
  
 -void _rsnd_kctrl_remove(struct rsnd_kctrl_cfg *cfg)
 -{
 -      if (cfg->card && cfg->kctrl)
 -              snd_ctl_remove(cfg->card, cfg->kctrl);
 -
 -      cfg->card = NULL;
 -      cfg->kctrl = NULL;
 -}
 -
  int rsnd_kctrl_new_m(struct rsnd_mod *mod,
                     struct rsnd_dai_stream *io,
                     struct snd_soc_pcm_runtime *rtd,