dm: sound: wm8994: Create a new common init function
authorSimon Glass <sjg@chromium.org>
Mon, 3 Dec 2018 11:37:26 +0000 (04:37 -0700)
committerSimon Glass <sjg@chromium.org>
Thu, 13 Dec 2018 23:32:49 +0000 (16:32 -0700)
With driver model we cannot pass in the global struct, but instead want
to pass in the driver-private data. Split some of the code out of
wm8994_init() to handle this.

Signed-off-by: Simon Glass <sjg@chromium.org>
drivers/sound/wm8994.c

index 3f56af9..f83fcf9 100644 (file)
@@ -867,44 +867,54 @@ static int get_codec_values(struct sound_codec_info *pcodec_info,
        return 0;
 }
 
-/* WM8994 Device Initialisation */
-int wm8994_init(const void *blob, enum en_audio_interface aif_id,
-               int sampling_rate, int mclk_freq, int bits_per_sample,
-               unsigned int channels)
+static int _wm8994_init(struct wm8994_priv *priv,
+                       enum en_audio_interface aif_id, int sampling_rate,
+                       int mclk_freq, int bits_per_sample,
+                       unsigned int channels)
 {
-       int ret = 0;
-       struct sound_codec_info *pcodec_info = &g_codec_info;
-
-       /* Get the codec Values */
-       if (get_codec_values(pcodec_info, blob) < 0) {
-               debug("FDT Codec values failed\n");
-               return -1;
-       }
-
-       /* shift the device address by 1 for 7 bit addressing */
-       g_wm8994_i2c_dev_addr = pcodec_info->i2c_dev_addr;
-       wm8994_i2c_init(pcodec_info->i2c_bus);
+       int ret;
 
-       ret = wm8994_device_init(&g_wm8994_info, aif_id);
+       ret = wm8994_device_init(priv, aif_id);
        if (ret < 0) {
                debug("%s: wm8994 codec chip init failed\n", __func__);
                return ret;
        }
 
-       ret =  wm8994_set_sysclk(&g_wm8994_info, aif_id, WM8994_SYSCLK_MCLK1,
-                                                       mclk_freq);
+       ret =  wm8994_set_sysclk(priv, aif_id, WM8994_SYSCLK_MCLK1, mclk_freq);
        if (ret < 0) {
                debug("%s: wm8994 codec set sys clock failed\n", __func__);
                return ret;
        }
 
-       ret = wm8994_hw_params(&g_wm8994_info, aif_id, sampling_rate,
-                              bits_per_sample, channels);
+       ret = wm8994_hw_params(priv, aif_id, sampling_rate, bits_per_sample,
+                              channels);
 
        if (ret == 0) {
-               ret = wm8994_set_fmt(&g_wm8994_info, aif_id,
-                                    SND_SOC_DAIFMT_I2S | SND_SOC_DAIFMT_NB_NF |
+               ret = wm8994_set_fmt(priv, aif_id, SND_SOC_DAIFMT_I2S |
+                                    SND_SOC_DAIFMT_NB_NF |
                                     SND_SOC_DAIFMT_CBS_CFS);
        }
+
        return ret;
 }
+
+/* WM8994 Device Initialisation */
+int wm8994_init(const void *blob, enum en_audio_interface aif_id,
+               int sampling_rate, int mclk_freq, int bits_per_sample,
+               unsigned int channels)
+{
+       struct sound_codec_info *pcodec_info = &g_codec_info;
+
+       /* Get the codec Values */
+       if (get_codec_values(pcodec_info, blob) < 0) {
+               debug("FDT Codec values failed\n");
+               return -1;
+       }
+
+       /* shift the device address by 1 for 7 bit addressing */
+       g_wm8994_i2c_dev_addr = pcodec_info->i2c_dev_addr;
+       wm8994_i2c_init(pcodec_info->i2c_bus);
+
+       return _wm8994_init(&g_wm8994_info, aif_id, sampling_rate, mclk_freq,
+                           bits_per_sample, channels);
+}