Commit 4f534777 authored by Mark Brown's avatar Mark Brown

ASoC: ak4641: Convert to direct regmap API usage

We're trying to remove the ASoC level I/O functions.
Signed-off-by: default avatarMark Brown <broonie@linaro.org>
parent 6ce4eac1
...@@ -17,6 +17,7 @@ ...@@ -17,6 +17,7 @@
#include <linux/gpio.h> #include <linux/gpio.h>
#include <linux/pm.h> #include <linux/pm.h>
#include <linux/i2c.h> #include <linux/i2c.h>
#include <linux/regmap.h>
#include <linux/slab.h> #include <linux/slab.h>
#include <sound/core.h> #include <sound/core.h>
#include <sound/pcm.h> #include <sound/pcm.h>
...@@ -30,6 +31,7 @@ ...@@ -30,6 +31,7 @@
/* codec private data */ /* codec private data */
struct ak4641_priv { struct ak4641_priv {
struct regmap *regmap;
unsigned int sysclk; unsigned int sysclk;
int deemph; int deemph;
int playback_fs; int playback_fs;
...@@ -38,12 +40,12 @@ struct ak4641_priv { ...@@ -38,12 +40,12 @@ struct ak4641_priv {
/* /*
* ak4641 register cache * ak4641 register cache
*/ */
static const u8 ak4641_reg[AK4641_CACHEREGNUM] = { static const struct reg_default ak4641_reg_defaults[] = {
0x00, 0x80, 0x00, 0x80, { 0, 0x00 }, { 1, 0x80 }, { 2, 0x00 }, { 3, 0x80 },
0x02, 0x00, 0x11, 0x05, { 4, 0x02 }, { 5, 0x00 }, { 6, 0x11 }, { 7, 0x05 },
0x00, 0x00, 0x36, 0x10, { 8, 0x00 }, { 9, 0x00 }, { 10, 0x36 }, { 11, 0x10 },
0x00, 0x00, 0x57, 0x00, { 12, 0x00 }, { 13, 0x00 }, { 14, 0x57 }, { 15, 0x00 },
0x88, 0x88, 0x08, 0x08 { 16, 0x88 }, { 17, 0x88 }, { 18, 0x08 }, { 19, 0x08 }
}; };
static const int deemph_settings[] = {44100, 0, 48000, 32000}; static const int deemph_settings[] = {44100, 0, 48000, 32000};
...@@ -396,6 +398,7 @@ static int ak4641_mute(struct snd_soc_dai *dai, int mute) ...@@ -396,6 +398,7 @@ static int ak4641_mute(struct snd_soc_dai *dai, int mute)
static int ak4641_set_bias_level(struct snd_soc_codec *codec, static int ak4641_set_bias_level(struct snd_soc_codec *codec,
enum snd_soc_bias_level level) enum snd_soc_bias_level level)
{ {
struct ak4641_priv *ak4641 = snd_soc_codec_get_drvdata(codec);
struct ak4641_platform_data *pdata = codec->dev->platform_data; struct ak4641_platform_data *pdata = codec->dev->platform_data;
int ret; int ret;
...@@ -417,7 +420,7 @@ static int ak4641_set_bias_level(struct snd_soc_codec *codec, ...@@ -417,7 +420,7 @@ static int ak4641_set_bias_level(struct snd_soc_codec *codec,
gpio_set_value(pdata->gpio_npdn, 1); gpio_set_value(pdata->gpio_npdn, 1);
mdelay(1); mdelay(1);
ret = snd_soc_cache_sync(codec); ret = regcache_sync(ak4641->regmap);
if (ret) { if (ret) {
dev_err(codec->dev, dev_err(codec->dev,
"Failed to sync cache: %d\n", ret); "Failed to sync cache: %d\n", ret);
...@@ -433,7 +436,7 @@ static int ak4641_set_bias_level(struct snd_soc_codec *codec, ...@@ -433,7 +436,7 @@ static int ak4641_set_bias_level(struct snd_soc_codec *codec,
gpio_set_value(pdata->gpio_npdn, 0); gpio_set_value(pdata->gpio_npdn, 0);
if (pdata && gpio_is_valid(pdata->gpio_power)) if (pdata && gpio_is_valid(pdata->gpio_power))
gpio_set_value(pdata->gpio_power, 0); gpio_set_value(pdata->gpio_power, 0);
codec->cache_sync = 1; regcache_mark_dirty(ak4641->regmap);
break; break;
} }
codec->dapm.bias_level = level; codec->dapm.bias_level = level;
...@@ -518,7 +521,7 @@ static int ak4641_probe(struct snd_soc_codec *codec) ...@@ -518,7 +521,7 @@ static int ak4641_probe(struct snd_soc_codec *codec)
{ {
int ret; int ret;
ret = snd_soc_codec_set_cache_io(codec, 8, 8, SND_SOC_I2C); ret = snd_soc_codec_set_cache_io(codec, 8, 8, SND_SOC_REGMAP);
if (ret != 0) { if (ret != 0) {
dev_err(codec->dev, "Failed to set cache I/O: %d\n", ret); dev_err(codec->dev, "Failed to set cache I/O: %d\n", ret);
return ret; return ret;
...@@ -550,12 +553,17 @@ static struct snd_soc_codec_driver soc_codec_dev_ak4641 = { ...@@ -550,12 +553,17 @@ static struct snd_soc_codec_driver soc_codec_dev_ak4641 = {
.dapm_routes = ak4641_audio_map, .dapm_routes = ak4641_audio_map,
.num_dapm_routes = ARRAY_SIZE(ak4641_audio_map), .num_dapm_routes = ARRAY_SIZE(ak4641_audio_map),
.set_bias_level = ak4641_set_bias_level, .set_bias_level = ak4641_set_bias_level,
.reg_cache_size = ARRAY_SIZE(ak4641_reg),
.reg_word_size = sizeof(u8),
.reg_cache_default = ak4641_reg,
.reg_cache_step = 1,
}; };
static const struct regmap_config ak4641_regmap = {
.reg_bits = 8,
.val_bits = 8,
.max_register = AK4641_BTIF,
.reg_defaults = ak4641_reg_defaults,
.num_reg_defaults = ARRAY_SIZE(ak4641_reg_defaults),
.cache_type = REGCACHE_RBTREE,
};
static int ak4641_i2c_probe(struct i2c_client *i2c, static int ak4641_i2c_probe(struct i2c_client *i2c,
const struct i2c_device_id *id) const struct i2c_device_id *id)
...@@ -569,6 +577,10 @@ static int ak4641_i2c_probe(struct i2c_client *i2c, ...@@ -569,6 +577,10 @@ static int ak4641_i2c_probe(struct i2c_client *i2c,
if (!ak4641) if (!ak4641)
return -ENOMEM; return -ENOMEM;
ak4641->regmap = devm_regmap_init_i2c(i2c, &ak4641_regmap);
if (IS_ERR(ak4641->regmap))
return PTR_ERR(ak4641->regmap);
if (pdata) { if (pdata) {
if (gpio_is_valid(pdata->gpio_power)) { if (gpio_is_valid(pdata->gpio_power)) {
ret = gpio_request_one(pdata->gpio_power, ret = gpio_request_one(pdata->gpio_power,
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment