[U-Boot] [PATCH 10/30] dm: sound: wm8994: Create a new common init function

Simon Glass sjg at chromium.org
Mon Dec 3 11:37:26 UTC 2018


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 at chromium.org>
---

 drivers/sound/wm8994.c | 56 +++++++++++++++++++++++++-----------------
 1 file changed, 33 insertions(+), 23 deletions(-)

diff --git a/drivers/sound/wm8994.c b/drivers/sound/wm8994.c
index 3f56af9db4b..f83fcf9f430 100644
--- a/drivers/sound/wm8994.c
+++ b/drivers/sound/wm8994.c
@@ -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);
+}
-- 
2.20.0.rc1.387.gf8505762e3-goog



More information about the U-Boot mailing list