Commit e5870bd0 authored by Steve Lee's avatar Steve Lee Committed by Mark Brown

ASoC: max98390: Add support for tx slot configuration.

 Update voltage/current tx slot configuration support.
Signed-off-by: default avatarSteve Lee <steves.lee@maximintegrated.com>
Link: https://lore.kernel.org/r/20210405143801.29770-1-steves.lee@maximintegrated.comSigned-off-by: default avatarMark Brown <broonie@kernel.org>
parent a4350899
...@@ -856,6 +856,48 @@ static void max98390_init_regs(struct snd_soc_component *component) ...@@ -856,6 +856,48 @@ static void max98390_init_regs(struct snd_soc_component *component)
regmap_write(max98390->regmap, MAX98390_ENV_TRACK_VOUT_HEADROOM, 0x0e); regmap_write(max98390->regmap, MAX98390_ENV_TRACK_VOUT_HEADROOM, 0x0e);
regmap_write(max98390->regmap, MAX98390_BOOST_BYPASS1, 0x46); regmap_write(max98390->regmap, MAX98390_BOOST_BYPASS1, 0x46);
regmap_write(max98390->regmap, MAX98390_FET_SCALING3, 0x03); regmap_write(max98390->regmap, MAX98390_FET_SCALING3, 0x03);
/* voltage, current slot configuration */
regmap_write(max98390->regmap,
MAX98390_PCM_CH_SRC_2,
(max98390->i_l_slot << 4 |
max98390->v_l_slot)&0xFF);
if (max98390->v_l_slot < 8) {
regmap_update_bits(max98390->regmap,
MAX98390_PCM_TX_HIZ_CTRL_A,
1 << max98390->v_l_slot, 0);
regmap_update_bits(max98390->regmap,
MAX98390_PCM_TX_EN_A,
1 << max98390->v_l_slot,
1 << max98390->v_l_slot);
} else {
regmap_update_bits(max98390->regmap,
MAX98390_PCM_TX_HIZ_CTRL_B,
1 << (max98390->v_l_slot - 8), 0);
regmap_update_bits(max98390->regmap,
MAX98390_PCM_TX_EN_B,
1 << (max98390->v_l_slot - 8),
1 << (max98390->v_l_slot - 8));
}
if (max98390->i_l_slot < 8) {
regmap_update_bits(max98390->regmap,
MAX98390_PCM_TX_HIZ_CTRL_A,
1 << max98390->i_l_slot, 0);
regmap_update_bits(max98390->regmap,
MAX98390_PCM_TX_EN_A,
1 << max98390->i_l_slot,
1 << max98390->i_l_slot);
} else {
regmap_update_bits(max98390->regmap,
MAX98390_PCM_TX_HIZ_CTRL_B,
1 << (max98390->i_l_slot - 8), 0);
regmap_update_bits(max98390->regmap,
MAX98390_PCM_TX_EN_B,
1 << (max98390->i_l_slot - 8),
1 << (max98390->i_l_slot - 8));
}
} }
static int max98390_probe(struct snd_soc_component *component) static int max98390_probe(struct snd_soc_component *component)
...@@ -946,6 +988,23 @@ static const struct regmap_config max98390_regmap = { ...@@ -946,6 +988,23 @@ static const struct regmap_config max98390_regmap = {
.cache_type = REGCACHE_RBTREE, .cache_type = REGCACHE_RBTREE,
}; };
static void max98390_slot_config(struct i2c_client *i2c,
struct max98390_priv *max98390)
{
int value;
struct device *dev = &i2c->dev;
if (!device_property_read_u32(dev, "maxim,vmon-slot-no", &value))
max98390->v_l_slot = value & 0xF;
else
max98390->v_l_slot = 0;
if (!device_property_read_u32(dev, "maxim,imon-slot-no", &value))
max98390->i_l_slot = value & 0xF;
else
max98390->i_l_slot = 1;
}
static int max98390_i2c_probe(struct i2c_client *i2c, static int max98390_i2c_probe(struct i2c_client *i2c,
const struct i2c_device_id *id) const struct i2c_device_id *id)
{ {
...@@ -988,6 +1047,9 @@ static int max98390_i2c_probe(struct i2c_client *i2c, ...@@ -988,6 +1047,9 @@ static int max98390_i2c_probe(struct i2c_client *i2c,
__func__, max98390->ref_rdc_value, __func__, max98390->ref_rdc_value,
max98390->ambient_temp_value); max98390->ambient_temp_value);
/* voltage/current slot configuration */
max98390_slot_config(i2c, max98390);
/* regmap initialization */ /* regmap initialization */
max98390->regmap = devm_regmap_init_i2c(i2c, &max98390_regmap); max98390->regmap = devm_regmap_init_i2c(i2c, &max98390_regmap);
if (IS_ERR(max98390->regmap)) { if (IS_ERR(max98390->regmap)) {
......
...@@ -658,6 +658,8 @@ struct max98390_priv { ...@@ -658,6 +658,8 @@ struct max98390_priv {
unsigned int sysclk; unsigned int sysclk;
unsigned int master; unsigned int master;
unsigned int tdm_mode; unsigned int tdm_mode;
unsigned int v_l_slot;
unsigned int i_l_slot;
unsigned int ref_rdc_value; unsigned int ref_rdc_value;
unsigned int ambient_temp_value; unsigned int ambient_temp_value;
}; };
......
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