diff options
author | Simon Glass <sjg@chromium.org> | 2018-12-03 04:37:26 -0700 |
---|---|---|
committer | Simon Glass <sjg@chromium.org> | 2018-12-13 16:32:49 -0700 |
commit | 54e67e27394b997f72f6e2dbab98a11b6cd4c7d9 (patch) | |
tree | dee968f4f76b100a0fa5240677b09b43fe8b871a /drivers | |
parent | a832a3e36f5c76a23aa3f1cae477835859e9781f (diff) |
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')
-rw-r--r-- | drivers/sound/wm8994.c | 56 |
1 files changed, 33 insertions, 23 deletions
diff --git a/drivers/sound/wm8994.c b/drivers/sound/wm8994.c index 3f56af9db4..f83fcf9f43 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); +} |