aboutsummaryrefslogtreecommitdiff
path: root/drivers/sound
diff options
context:
space:
mode:
authorSimon Glass <sjg@chromium.org>2018-12-03 04:37:26 -0700
committerSimon Glass <sjg@chromium.org>2018-12-13 16:32:49 -0700
commit54e67e27394b997f72f6e2dbab98a11b6cd4c7d9 (patch)
treedee968f4f76b100a0fa5240677b09b43fe8b871a /drivers/sound
parenta832a3e36f5c76a23aa3f1cae477835859e9781f (diff)
downloadu-boot-54e67e27394b997f72f6e2dbab98a11b6cd4c7d9.zip
u-boot-54e67e27394b997f72f6e2dbab98a11b6cd4c7d9.tar.gz
u-boot-54e67e27394b997f72f6e2dbab98a11b6cd4c7d9.tar.bz2
dm: sound: wm8994: Create a new common init function
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>
Diffstat (limited to 'drivers/sound')
-rw-r--r--drivers/sound/wm8994.c56
1 files changed, 33 insertions, 23 deletions
diff --git a/drivers/sound/wm8994.c b/drivers/sound/wm8994.c
index 3f56af9..f83fcf9 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);
+}