[alsa-devel] [RFC][PATCH 2/3] ASoC: da7210: make sure snd_soc_codec value for da7210
Kuninori Morimoto
kuninori.morimoto.gx at renesas.com
Wed Jul 14 02:59:45 CEST 2010
If snd_soc_card has some dai_link,
there is a possibility that the snd_coc_codec value
which came from function is not da7210's codec.
This patch make sure it for da7210
Signed-off-by: Kuninori Morimoto <kuninori.morimoto.gx at renesas.com>
---
sound/soc/codecs/da7210.c | 21 ++++++++++++++-------
1 files changed, 14 insertions(+), 7 deletions(-)
diff --git a/sound/soc/codecs/da7210.c b/sound/soc/codecs/da7210.c
index a83aa18..2b1c65e 100644
--- a/sound/soc/codecs/da7210.c
+++ b/sound/soc/codecs/da7210.c
@@ -172,7 +172,11 @@ static const u8 da7210_reg[] = {
*/
static inline u32 da7210_read_reg_cache(struct snd_soc_codec *codec, u32 reg)
{
- u8 *cache = codec->reg_cache;
+ u8 *cache;
+
+ codec = da7210_codec;
+ cache = codec->reg_cache;
+
BUG_ON(reg >= ARRAY_SIZE(da7210_reg));
return cache[reg];
}
@@ -182,9 +186,12 @@ static inline u32 da7210_read_reg_cache(struct snd_soc_codec *codec, u32 reg)
*/
static int da7210_write(struct snd_soc_codec *codec, u32 reg, u32 value)
{
- u8 *cache = codec->reg_cache;
+ u8 *cache;
u8 data[2];
+ codec = da7210_codec;
+ cache = codec->reg_cache;
+
BUG_ON(codec->volatile_register);
data[0] = reg & 0xff;
@@ -205,6 +212,8 @@ static int da7210_write(struct snd_soc_codec *codec, u32 reg, u32 value)
*/
static inline u32 da7210_read(struct snd_soc_codec *codec, u32 reg)
{
+ codec = da7210_codec;
+
if (DA7210_STATUS == reg)
return i2c_smbus_read_byte_data(codec->control_data, reg);
@@ -215,7 +224,7 @@ static int da7210_startup(struct snd_pcm_substream *substream,
struct snd_soc_dai *dai)
{
int is_play = substream->stream == SNDRV_PCM_STREAM_PLAYBACK;
- struct snd_soc_codec *codec = dai->codec;
+ struct snd_soc_codec *codec = da7210_codec;
if (is_play) {
/* PlayBack Volume 40 */
@@ -246,9 +255,7 @@ static int da7210_hw_params(struct snd_pcm_substream *substream,
struct snd_pcm_hw_params *params,
struct snd_soc_dai *dai)
{
- struct snd_soc_pcm_runtime *rtd = substream->private_data;
- struct snd_soc_device *socdev = rtd->socdev;
- struct snd_soc_codec *codec = socdev->card->codec;
+ struct snd_soc_codec *codec = da7210_codec;
u32 dai_cfg1;
u32 hpf_reg, hpf_mask, hpf_value;
u32 fs, bypass;
@@ -362,7 +369,7 @@ static int da7210_hw_params(struct snd_pcm_substream *substream,
*/
static int da7210_set_dai_fmt(struct snd_soc_dai *codec_dai, u32 fmt)
{
- struct snd_soc_codec *codec = codec_dai->codec;
+ struct snd_soc_codec *codec = da7210_codec;
u32 dai_cfg1;
u32 dai_cfg3;
--
1.7.0.4
More information about the Alsa-devel
mailing list