|
@@ -27,42 +27,38 @@ ASoC Codec driver breakdown
|
|
|
|
|
|
1 - Codec DAI and PCM configuration
|
|
|
-----------------------------------
|
|
|
-Each codec driver must have a struct snd_soc_codec_dai to define its DAI and
|
|
|
+Each codec driver must have a struct snd_soc_dai_driver to define its DAI and
|
|
|
PCM capabilities and operations. This struct is exported so that it can be
|
|
|
registered with the core by your machine driver.
|
|
|
|
|
|
e.g.
|
|
|
|
|
|
-struct snd_soc_codec_dai wm8731_dai = {
|
|
|
- .name = "WM8731",
|
|
|
- /* playback capabilities */
|
|
|
+static struct snd_soc_dai_ops wm8731_dai_ops = {
|
|
|
+ .prepare = wm8731_pcm_prepare,
|
|
|
+ .hw_params = wm8731_hw_params,
|
|
|
+ .shutdown = wm8731_shutdown,
|
|
|
+ .digital_mute = wm8731_mute,
|
|
|
+ .set_sysclk = wm8731_set_dai_sysclk,
|
|
|
+ .set_fmt = wm8731_set_dai_fmt,
|
|
|
+};
|
|
|
+
|
|
|
+struct snd_soc_dai_driver wm8731_dai = {
|
|
|
+ .name = "wm8731-hifi",
|
|
|
.playback = {
|
|
|
.stream_name = "Playback",
|
|
|
.channels_min = 1,
|
|
|
.channels_max = 2,
|
|
|
.rates = WM8731_RATES,
|
|
|
.formats = WM8731_FORMATS,},
|
|
|
- /* capture capabilities */
|
|
|
.capture = {
|
|
|
.stream_name = "Capture",
|
|
|
.channels_min = 1,
|
|
|
.channels_max = 2,
|
|
|
.rates = WM8731_RATES,
|
|
|
.formats = WM8731_FORMATS,},
|
|
|
- /* pcm operations - see section 4 below */
|
|
|
- .ops = {
|
|
|
- .prepare = wm8731_pcm_prepare,
|
|
|
- .hw_params = wm8731_hw_params,
|
|
|
- .shutdown = wm8731_shutdown,
|
|
|
- },
|
|
|
- /* DAI operations - see DAI.txt */
|
|
|
- .dai_ops = {
|
|
|
- .digital_mute = wm8731_mute,
|
|
|
- .set_sysclk = wm8731_set_dai_sysclk,
|
|
|
- .set_fmt = wm8731_set_dai_fmt,
|
|
|
- }
|
|
|
+ .ops = &wm8731_dai_ops,
|
|
|
+ .symmetric_rates = 1,
|
|
|
};
|
|
|
-EXPORT_SYMBOL_GPL(wm8731_dai);
|
|
|
|
|
|
|
|
|
2 - Codec control IO
|
|
@@ -186,13 +182,14 @@ when the mute is applied or freed.
|
|
|
|
|
|
i.e.
|
|
|
|
|
|
-static int wm8974_mute(struct snd_soc_codec *codec,
|
|
|
- struct snd_soc_codec_dai *dai, int mute)
|
|
|
+static int wm8974_mute(struct snd_soc_dai *dai, int mute)
|
|
|
{
|
|
|
- u16 mute_reg = wm8974_read_reg_cache(codec, WM8974_DAC) & 0xffbf;
|
|
|
- if(mute)
|
|
|
- wm8974_write(codec, WM8974_DAC, mute_reg | 0x40);
|
|
|
+ struct snd_soc_codec *codec = dai->codec;
|
|
|
+ u16 mute_reg = snd_soc_read(codec, WM8974_DAC) & 0xffbf;
|
|
|
+
|
|
|
+ if (mute)
|
|
|
+ snd_soc_write(codec, WM8974_DAC, mute_reg | 0x40);
|
|
|
else
|
|
|
- wm8974_write(codec, WM8974_DAC, mute_reg);
|
|
|
+ snd_soc_write(codec, WM8974_DAC, mute_reg);
|
|
|
return 0;
|
|
|
}
|