diff options
author | Petr Kulhavy <brain@jikos.cz> | 2016-06-01 03:30:00 -0400 |
---|---|---|
committer | Mark Brown <broonie@kernel.org> | 2016-06-01 11:22:10 -0400 |
commit | f7d3d2d8e8891433dc76f2427441b2584729e200 (patch) | |
tree | 56d5730043d9403db63e2178cd306cb8bd065c89 | |
parent | 4b9e385b9dac5c84640b13e70dbbd8e2bb669c8d (diff) |
ASoC: tas571x: add input channel mixer for TAS5717/19
Add channel 1 and 2 input mixer registers and the related ALSA mixer
controls for TAS5717/19 chips.
The mixer control coefficients on the chip are linear in the range
-3.99999 to +3.99999, encoded in 3.23 number format.
In this patch the mixer controls are limited to 128 values
from 0.0 to 1.0 in 1/64 steps.
Signed-off-by: Petr Kulhavy <brain@jikos.cz>
Signed-off-by: Mark Brown <broonie@kernel.org>
-rw-r--r-- | sound/soc/codecs/tas571x.c | 18 | ||||
-rw-r--r-- | sound/soc/codecs/tas571x.h | 5 |
2 files changed, 23 insertions, 0 deletions
diff --git a/sound/soc/codecs/tas571x.c b/sound/soc/codecs/tas571x.c index bc1fbafb8ea4..d8baca3f8413 100644 --- a/sound/soc/codecs/tas571x.c +++ b/sound/soc/codecs/tas571x.c | |||
@@ -64,6 +64,10 @@ static int tas571x_register_size(struct tas571x_private *priv, unsigned int reg) | |||
64 | case TAS571X_INPUT_MUX_REG: | 64 | case TAS571X_INPUT_MUX_REG: |
65 | case TAS571X_CH4_SRC_SELECT_REG: | 65 | case TAS571X_CH4_SRC_SELECT_REG: |
66 | case TAS571X_PWM_MUX_REG: | 66 | case TAS571X_PWM_MUX_REG: |
67 | case TAS5717_CH1_RIGHT_CH_MIX_REG: | ||
68 | case TAS5717_CH1_LEFT_CH_MIX_REG: | ||
69 | case TAS5717_CH2_LEFT_CH_MIX_REG: | ||
70 | case TAS5717_CH2_RIGHT_CH_MIX_REG: | ||
67 | return 4; | 71 | return 4; |
68 | default: | 72 | default: |
69 | return 1; | 73 | return 1; |
@@ -397,6 +401,16 @@ static const struct snd_kcontrol_new tas5711_controls[] = { | |||
397 | TAS571X_SOFT_MUTE_REG, | 401 | TAS571X_SOFT_MUTE_REG, |
398 | TAS571X_SOFT_MUTE_CH1_SHIFT, TAS571X_SOFT_MUTE_CH2_SHIFT, | 402 | TAS571X_SOFT_MUTE_CH1_SHIFT, TAS571X_SOFT_MUTE_CH2_SHIFT, |
399 | 1, 1), | 403 | 1, 1), |
404 | |||
405 | SOC_DOUBLE_R_RANGE("CH1 Mixer Volume", | ||
406 | TAS5717_CH1_LEFT_CH_MIX_REG, | ||
407 | TAS5717_CH1_RIGHT_CH_MIX_REG, | ||
408 | 16, 0, 0x80, 0), | ||
409 | |||
410 | SOC_DOUBLE_R_RANGE("CH2 Mixer Volume", | ||
411 | TAS5717_CH2_LEFT_CH_MIX_REG, | ||
412 | TAS5717_CH2_RIGHT_CH_MIX_REG, | ||
413 | 16, 0, 0x80, 0), | ||
400 | }; | 414 | }; |
401 | 415 | ||
402 | static const struct regmap_range tas571x_readonly_regs_range[] = { | 416 | static const struct regmap_range tas571x_readonly_regs_range[] = { |
@@ -520,6 +534,10 @@ static const struct reg_default tas5717_reg_defaults[] = { | |||
520 | { 0x08, 0x00c0 }, | 534 | { 0x08, 0x00c0 }, |
521 | { 0x09, 0x00c0 }, | 535 | { 0x09, 0x00c0 }, |
522 | { 0x1b, 0x82 }, | 536 | { 0x1b, 0x82 }, |
537 | { TAS5717_CH1_RIGHT_CH_MIX_REG, 0x0 }, | ||
538 | { TAS5717_CH1_LEFT_CH_MIX_REG, 0x800000}, | ||
539 | { TAS5717_CH2_LEFT_CH_MIX_REG, 0x0 }, | ||
540 | { TAS5717_CH2_RIGHT_CH_MIX_REG, 0x800000}, | ||
523 | }; | 541 | }; |
524 | 542 | ||
525 | static const struct regmap_config tas5717_regmap_config = { | 543 | static const struct regmap_config tas5717_regmap_config = { |
diff --git a/sound/soc/codecs/tas571x.h b/sound/soc/codecs/tas571x.h index bf4d4362c784..c45677bc26ad 100644 --- a/sound/soc/codecs/tas571x.h +++ b/sound/soc/codecs/tas571x.h | |||
@@ -87,4 +87,9 @@ | |||
87 | #define TAS5717_CH3_BQ0_REG 0x5e | 87 | #define TAS5717_CH3_BQ0_REG 0x5e |
88 | #define TAS5717_CH3_BQ1_REG 0x5f | 88 | #define TAS5717_CH3_BQ1_REG 0x5f |
89 | 89 | ||
90 | #define TAS5717_CH1_RIGHT_CH_MIX_REG 0x72 | ||
91 | #define TAS5717_CH1_LEFT_CH_MIX_REG 0x73 | ||
92 | #define TAS5717_CH2_LEFT_CH_MIX_REG 0x76 | ||
93 | #define TAS5717_CH2_RIGHT_CH_MIX_REG 0x77 | ||
94 | |||
90 | #endif /* _TAS571X_H */ | 95 | #endif /* _TAS571X_H */ |