ASoC: rt5677: Fix the issue that the regmap_range "rt5677_ranges" cannot be accessed
Subsystems (3)
Oder Chiou
maintainerPATCH 1/1 ASoC: rt5677: Fix the issue that the regmap_range "rt5677_ranges" cannot be accessed
After the commit "19ba484d7b15c8650b30377aad6e65b34d3cf3d5", it will cause that the regmap_range "rt5677_ranges" cannot be accessed. The patch fixes this issue.
Signed-off-by Oder Chiou <[email protected]>
--- sound/soc/codecs/rt5677.c | 37 ++++++++++++++++++++++++++++++------- sound/soc/codecs/rt5677.h | 2 +- 2 files changed, 31 insertions(+), 8 deletions(-)
sound/soc/codecs/rt5677.c +30 -7
@@ -4287,6 +4287,7 @@ static int rt5677_probe(struct snd_soc_codec *codec) }mutex_init (&rt5677->dsp_cmd_lock); +mutex_init (&rt5677->dsp_pri_lock);return 0 ; }
@@ -4344,10 +4345,19 @@ static int rt5677_read(void *context, unsigned int reg, unsigned int *val)struct i2c_client *client = context;struct rt5677_priv *rt5677 =i2c_get_clientdata (client); -if (rt5677->is_dsp_mode) -rt5677_dsp_mode_i2c_read (rt5677, reg, val); -else +if (rt5677->is_dsp_mode) { +if (reg >0xff ) { +mutex_lock (&rt5677->dsp_pri_lock); +rt5677_dsp_mode_i2c_write (rt5677,RT5677_PRIV_INDEX , + reg &0xff ); +rt5677_dsp_mode_i2c_read (rt5677,RT5677_PRIV_DATA , val); +mutex_unlock (&rt5677->dsp_pri_lock); + }else { +rt5677_dsp_mode_i2c_read (rt5677, reg, val); + } + }else {regmap_read (rt5677->regmap_physical, reg, val); + }return 0 ; }
@@ -4357,10 +4367,20 @@ static int rt5677_write(void *context, unsigned int reg, unsigned int val)struct i2c_client *client = context;struct rt5677_priv *rt5677 =i2c_get_clientdata (client); -if (rt5677->is_dsp_mode) -rt5677_dsp_mode_i2c_write (rt5677, reg, val); -else +if (rt5677->is_dsp_mode) { +if (reg >0xff ) { +mutex_lock (&rt5677->dsp_pri_lock); +rt5677_dsp_mode_i2c_write (rt5677,RT5677_PRIV_INDEX , + reg &0xff ); +rt5677_dsp_mode_i2c_write (rt5677,RT5677_PRIV_DATA , + val); +mutex_unlock (&rt5677->dsp_pri_lock); + }else { +rt5677_dsp_mode_i2c_write (rt5677, reg, val); + } + }else {regmap_write (rt5677->regmap_physical, reg, val); + }return 0 ; }
@@ -4495,10 +4515,13 @@ static const struct regmap_config rt5677_regmap_physical = { .reg_bits = 8, .val_bits = 16, - .max_register = RT5677_VENDOR_ID2 + 1, + .max_register =RT5677_VENDOR_ID2 +1 + (ARRAY_SIZE (rt5677_ranges) * + RT5677_PR_SPACING), .readable_reg = rt5677_readable_register, .cache_type = REGCACHE_NONE, + .ranges = rt5677_ranges, + .num_ranges = ARRAY_SIZE(rt5677_ranges), };static const struct regmap_config rt5677_regmap = {
sound/soc/codecs/rt5677.h +1 -1
@@ -1670,7 +1670,7 @@ struct rt5677_priv {struct rt5677_platform_data pdata;struct regmap *regmap, *regmap_physical;const struct firmware *fw1, *fw2; -struct mutex dsp_cmd_lock; +struct mutex dsp_cmd_lock, dsp_pri_lock;int sysclk;int sysclk_src;
Signature · 1 line
1.8.1.1.439.g50a6b54
Mark Brown
maintainerQuoted 2 lines · Oder Chiou
After the commit "
19ba484d7b15c8650b30377aad6e65b34d3cf3d5", it will cause that theregmap_range"rt5677_ranges" cannot be accessed. The patch fixes this issue.
Please provide a clearer changelog. What is the issue caused by the previous patch and how does this patch fix it?
When referring to other commits always provide a human readable description of the commit (generally the patch title) as well as the commit ID.