aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/mfd/wm5110-tables.c4
-rw-r--r--include/linux/mfd/arizona/registers.h37
-rw-r--r--sound/soc/codecs/arizona.c10
-rw-r--r--sound/soc/codecs/arizona.h1
-rw-r--r--sound/soc/codecs/wm5110.c19
5 files changed, 71 insertions, 0 deletions
diff --git a/drivers/mfd/wm5110-tables.c b/drivers/mfd/wm5110-tables.c
index 4430404471c0..3b079f6b021e 100644
--- a/drivers/mfd/wm5110-tables.c
+++ b/drivers/mfd/wm5110-tables.c
@@ -518,6 +518,7 @@ static const struct reg_default wm5110_reg_default[] = {
518 { 0x00000300, 0x0000 }, /* R768 - Input Enables */ 518 { 0x00000300, 0x0000 }, /* R768 - Input Enables */
519 { 0x00000308, 0x0000 }, /* R776 - Input Rate */ 519 { 0x00000308, 0x0000 }, /* R776 - Input Rate */
520 { 0x00000309, 0x0022 }, /* R777 - Input Volume Ramp */ 520 { 0x00000309, 0x0022 }, /* R777 - Input Volume Ramp */
521 { 0x0000030C, 0x0002 }, /* R780 - HPF Control */
521 { 0x00000310, 0x2080 }, /* R784 - IN1L Control */ 522 { 0x00000310, 0x2080 }, /* R784 - IN1L Control */
522 { 0x00000311, 0x0180 }, /* R785 - ADC Digital Volume 1L */ 523 { 0x00000311, 0x0180 }, /* R785 - ADC Digital Volume 1L */
523 { 0x00000312, 0x0000 }, /* R786 - DMIC1L Control */ 524 { 0x00000312, 0x0000 }, /* R786 - DMIC1L Control */
@@ -539,6 +540,7 @@ static const struct reg_default wm5110_reg_default[] = {
539 { 0x00000328, 0x2000 }, /* R808 - IN4L Control */ 540 { 0x00000328, 0x2000 }, /* R808 - IN4L Control */
540 { 0x00000329, 0x0180 }, /* R809 - ADC Digital Volume 4L */ 541 { 0x00000329, 0x0180 }, /* R809 - ADC Digital Volume 4L */
541 { 0x0000032A, 0x0000 }, /* R810 - DMIC4L Control */ 542 { 0x0000032A, 0x0000 }, /* R810 - DMIC4L Control */
543 { 0x0000032C, 0x0000 }, /* R812 - IN4R Control */
542 { 0x0000032D, 0x0180 }, /* R813 - ADC Digital Volume 4R */ 544 { 0x0000032D, 0x0180 }, /* R813 - ADC Digital Volume 4R */
543 { 0x0000032E, 0x0000 }, /* R814 - DMIC4R Control */ 545 { 0x0000032E, 0x0000 }, /* R814 - DMIC4R Control */
544 { 0x00000400, 0x0000 }, /* R1024 - Output Enables 1 */ 546 { 0x00000400, 0x0000 }, /* R1024 - Output Enables 1 */
@@ -1512,6 +1514,7 @@ static bool wm5110_readable_register(struct device *dev, unsigned int reg)
1512 case ARIZONA_INPUT_ENABLES_STATUS: 1514 case ARIZONA_INPUT_ENABLES_STATUS:
1513 case ARIZONA_INPUT_RATE: 1515 case ARIZONA_INPUT_RATE:
1514 case ARIZONA_INPUT_VOLUME_RAMP: 1516 case ARIZONA_INPUT_VOLUME_RAMP:
1517 case ARIZONA_HPF_CONTROL:
1515 case ARIZONA_IN1L_CONTROL: 1518 case ARIZONA_IN1L_CONTROL:
1516 case ARIZONA_ADC_DIGITAL_VOLUME_1L: 1519 case ARIZONA_ADC_DIGITAL_VOLUME_1L:
1517 case ARIZONA_DMIC1L_CONTROL: 1520 case ARIZONA_DMIC1L_CONTROL:
@@ -1533,6 +1536,7 @@ static bool wm5110_readable_register(struct device *dev, unsigned int reg)
1533 case ARIZONA_IN4L_CONTROL: 1536 case ARIZONA_IN4L_CONTROL:
1534 case ARIZONA_ADC_DIGITAL_VOLUME_4L: 1537 case ARIZONA_ADC_DIGITAL_VOLUME_4L:
1535 case ARIZONA_DMIC4L_CONTROL: 1538 case ARIZONA_DMIC4L_CONTROL:
1539 case ARIZONA_IN4R_CONTROL:
1536 case ARIZONA_ADC_DIGITAL_VOLUME_4R: 1540 case ARIZONA_ADC_DIGITAL_VOLUME_4R:
1537 case ARIZONA_DMIC4R_CONTROL: 1541 case ARIZONA_DMIC4R_CONTROL:
1538 case ARIZONA_OUTPUT_ENABLES_1: 1542 case ARIZONA_OUTPUT_ENABLES_1:
diff --git a/include/linux/mfd/arizona/registers.h b/include/linux/mfd/arizona/registers.h
index 4706d3d46e56..cdf1f5acbe53 100644
--- a/include/linux/mfd/arizona/registers.h
+++ b/include/linux/mfd/arizona/registers.h
@@ -139,6 +139,7 @@
139#define ARIZONA_INPUT_ENABLES_STATUS 0x301 139#define ARIZONA_INPUT_ENABLES_STATUS 0x301
140#define ARIZONA_INPUT_RATE 0x308 140#define ARIZONA_INPUT_RATE 0x308
141#define ARIZONA_INPUT_VOLUME_RAMP 0x309 141#define ARIZONA_INPUT_VOLUME_RAMP 0x309
142#define ARIZONA_HPF_CONTROL 0x30C
142#define ARIZONA_IN1L_CONTROL 0x310 143#define ARIZONA_IN1L_CONTROL 0x310
143#define ARIZONA_ADC_DIGITAL_VOLUME_1L 0x311 144#define ARIZONA_ADC_DIGITAL_VOLUME_1L 0x311
144#define ARIZONA_DMIC1L_CONTROL 0x312 145#define ARIZONA_DMIC1L_CONTROL 0x312
@@ -160,6 +161,7 @@
160#define ARIZONA_IN4L_CONTROL 0x328 161#define ARIZONA_IN4L_CONTROL 0x328
161#define ARIZONA_ADC_DIGITAL_VOLUME_4L 0x329 162#define ARIZONA_ADC_DIGITAL_VOLUME_4L 0x329
162#define ARIZONA_DMIC4L_CONTROL 0x32A 163#define ARIZONA_DMIC4L_CONTROL 0x32A
164#define ARIZONA_IN4R_CONTROL 0x32C
163#define ARIZONA_ADC_DIGITAL_VOLUME_4R 0x32D 165#define ARIZONA_ADC_DIGITAL_VOLUME_4R 0x32D
164#define ARIZONA_DMIC4R_CONTROL 0x32E 166#define ARIZONA_DMIC4R_CONTROL 0x32E
165#define ARIZONA_OUTPUT_ENABLES_1 0x400 167#define ARIZONA_OUTPUT_ENABLES_1 0x400
@@ -2293,8 +2295,18 @@
2293#define ARIZONA_IN_VI_RAMP_WIDTH 3 /* IN_VI_RAMP - [2:0] */ 2295#define ARIZONA_IN_VI_RAMP_WIDTH 3 /* IN_VI_RAMP - [2:0] */
2294 2296
2295/* 2297/*
2298 * R780 (0x30C) - HPF Control
2299 */
2300#define ARIZONA_IN_HPF_CUT_MASK 0x0007 /* IN_HPF_CUT [2:0] */
2301#define ARIZONA_IN_HPF_CUT_SHIFT 0 /* IN_HPF_CUT [2:0] */
2302#define ARIZONA_IN_HPF_CUT_WIDTH 3 /* IN_HPF_CUT [2:0] */
2303
2304/*
2296 * R784 (0x310) - IN1L Control 2305 * R784 (0x310) - IN1L Control
2297 */ 2306 */
2307#define ARIZONA_IN1L_HPF_MASK 0x8000 /* IN1L_HPF - [15] */
2308#define ARIZONA_IN1L_HPF_SHIFT 15 /* IN1L_HPF - [15] */
2309#define ARIZONA_IN1L_HPF_WIDTH 1 /* IN1L_HPF - [15] */
2298#define ARIZONA_IN1_OSR_MASK 0x6000 /* IN1_OSR - [14:13] */ 2310#define ARIZONA_IN1_OSR_MASK 0x6000 /* IN1_OSR - [14:13] */
2299#define ARIZONA_IN1_OSR_SHIFT 13 /* IN1_OSR - [14:13] */ 2311#define ARIZONA_IN1_OSR_SHIFT 13 /* IN1_OSR - [14:13] */
2300#define ARIZONA_IN1_OSR_WIDTH 2 /* IN1_OSR - [14:13] */ 2312#define ARIZONA_IN1_OSR_WIDTH 2 /* IN1_OSR - [14:13] */
@@ -2333,6 +2345,9 @@
2333/* 2345/*
2334 * R788 (0x314) - IN1R Control 2346 * R788 (0x314) - IN1R Control
2335 */ 2347 */
2348#define ARIZONA_IN1R_HPF_MASK 0x8000 /* IN1R_HPF - [15] */
2349#define ARIZONA_IN1R_HPF_SHIFT 15 /* IN1R_HPF - [15] */
2350#define ARIZONA_IN1R_HPF_WIDTH 1 /* IN1R_HPF - [15] */
2336#define ARIZONA_IN1R_PGA_VOL_MASK 0x00FE /* IN1R_PGA_VOL - [7:1] */ 2351#define ARIZONA_IN1R_PGA_VOL_MASK 0x00FE /* IN1R_PGA_VOL - [7:1] */
2337#define ARIZONA_IN1R_PGA_VOL_SHIFT 1 /* IN1R_PGA_VOL - [7:1] */ 2352#define ARIZONA_IN1R_PGA_VOL_SHIFT 1 /* IN1R_PGA_VOL - [7:1] */
2338#define ARIZONA_IN1R_PGA_VOL_WIDTH 7 /* IN1R_PGA_VOL - [7:1] */ 2353#define ARIZONA_IN1R_PGA_VOL_WIDTH 7 /* IN1R_PGA_VOL - [7:1] */
@@ -2362,6 +2377,9 @@
2362/* 2377/*
2363 * R792 (0x318) - IN2L Control 2378 * R792 (0x318) - IN2L Control
2364 */ 2379 */
2380#define ARIZONA_IN2L_HPF_MASK 0x8000 /* IN2L_HPF - [15] */
2381#define ARIZONA_IN2L_HPF_SHIFT 15 /* IN2L_HPF - [15] */
2382#define ARIZONA_IN2L_HPF_WIDTH 1 /* IN2L_HPF - [15] */
2365#define ARIZONA_IN2_OSR_MASK 0x6000 /* IN2_OSR - [14:13] */ 2383#define ARIZONA_IN2_OSR_MASK 0x6000 /* IN2_OSR - [14:13] */
2366#define ARIZONA_IN2_OSR_SHIFT 13 /* IN2_OSR - [14:13] */ 2384#define ARIZONA_IN2_OSR_SHIFT 13 /* IN2_OSR - [14:13] */
2367#define ARIZONA_IN2_OSR_WIDTH 2 /* IN2_OSR - [14:13] */ 2385#define ARIZONA_IN2_OSR_WIDTH 2 /* IN2_OSR - [14:13] */
@@ -2400,6 +2418,9 @@
2400/* 2418/*
2401 * R796 (0x31C) - IN2R Control 2419 * R796 (0x31C) - IN2R Control
2402 */ 2420 */
2421#define ARIZONA_IN2R_HPF_MASK 0x8000 /* IN2R_HPF - [15] */
2422#define ARIZONA_IN2R_HPF_SHIFT 15 /* IN2R_HPF - [15] */
2423#define ARIZONA_IN2R_HPF_WIDTH 1 /* IN2R_HPF - [15] */
2403#define ARIZONA_IN2R_PGA_VOL_MASK 0x00FE /* IN2R_PGA_VOL - [7:1] */ 2424#define ARIZONA_IN2R_PGA_VOL_MASK 0x00FE /* IN2R_PGA_VOL - [7:1] */
2404#define ARIZONA_IN2R_PGA_VOL_SHIFT 1 /* IN2R_PGA_VOL - [7:1] */ 2425#define ARIZONA_IN2R_PGA_VOL_SHIFT 1 /* IN2R_PGA_VOL - [7:1] */
2405#define ARIZONA_IN2R_PGA_VOL_WIDTH 7 /* IN2R_PGA_VOL - [7:1] */ 2426#define ARIZONA_IN2R_PGA_VOL_WIDTH 7 /* IN2R_PGA_VOL - [7:1] */
@@ -2429,6 +2450,9 @@
2429/* 2450/*
2430 * R800 (0x320) - IN3L Control 2451 * R800 (0x320) - IN3L Control
2431 */ 2452 */
2453#define ARIZONA_IN3L_HPF_MASK 0x8000 /* IN3L_HPF - [15] */
2454#define ARIZONA_IN3L_HPF_SHIFT 15 /* IN3L_HPF - [15] */
2455#define ARIZONA_IN3L_HPF_WIDTH 1 /* IN3L_HPF - [15] */
2432#define ARIZONA_IN3_OSR_MASK 0x6000 /* IN3_OSR - [14:13] */ 2456#define ARIZONA_IN3_OSR_MASK 0x6000 /* IN3_OSR - [14:13] */
2433#define ARIZONA_IN3_OSR_SHIFT 13 /* IN3_OSR - [14:13] */ 2457#define ARIZONA_IN3_OSR_SHIFT 13 /* IN3_OSR - [14:13] */
2434#define ARIZONA_IN3_OSR_WIDTH 2 /* IN3_OSR - [14:13] */ 2458#define ARIZONA_IN3_OSR_WIDTH 2 /* IN3_OSR - [14:13] */
@@ -2467,6 +2491,9 @@
2467/* 2491/*
2468 * R804 (0x324) - IN3R Control 2492 * R804 (0x324) - IN3R Control
2469 */ 2493 */
2494#define ARIZONA_IN3R_HPF_MASK 0x8000 /* IN3R_HPF - [15] */
2495#define ARIZONA_IN3R_HPF_SHIFT 15 /* IN3R_HPF - [15] */
2496#define ARIZONA_IN3R_HPF_WIDTH 1 /* IN3R_HPF - [15] */
2470#define ARIZONA_IN3R_PGA_VOL_MASK 0x00FE /* IN3R_PGA_VOL - [7:1] */ 2497#define ARIZONA_IN3R_PGA_VOL_MASK 0x00FE /* IN3R_PGA_VOL - [7:1] */
2471#define ARIZONA_IN3R_PGA_VOL_SHIFT 1 /* IN3R_PGA_VOL - [7:1] */ 2498#define ARIZONA_IN3R_PGA_VOL_SHIFT 1 /* IN3R_PGA_VOL - [7:1] */
2472#define ARIZONA_IN3R_PGA_VOL_WIDTH 7 /* IN3R_PGA_VOL - [7:1] */ 2499#define ARIZONA_IN3R_PGA_VOL_WIDTH 7 /* IN3R_PGA_VOL - [7:1] */
@@ -2496,6 +2523,9 @@
2496/* 2523/*
2497 * R808 (0x328) - IN4 Control 2524 * R808 (0x328) - IN4 Control
2498 */ 2525 */
2526#define ARIZONA_IN4L_HPF_MASK 0x8000 /* IN4L_HPF - [15] */
2527#define ARIZONA_IN4L_HPF_SHIFT 15 /* IN4L_HPF - [15] */
2528#define ARIZONA_IN4L_HPF_WIDTH 1 /* IN4L_HPF - [15] */
2499#define ARIZONA_IN4_OSR_MASK 0x6000 /* IN4_OSR - [14:13] */ 2529#define ARIZONA_IN4_OSR_MASK 0x6000 /* IN4_OSR - [14:13] */
2500#define ARIZONA_IN4_OSR_SHIFT 13 /* IN4_OSR - [14:13] */ 2530#define ARIZONA_IN4_OSR_SHIFT 13 /* IN4_OSR - [14:13] */
2501#define ARIZONA_IN4_OSR_WIDTH 2 /* IN4_OSR - [14:13] */ 2531#define ARIZONA_IN4_OSR_WIDTH 2 /* IN4_OSR - [14:13] */
@@ -2526,6 +2556,13 @@
2526#define ARIZONA_IN4L_DMIC_DLY_WIDTH 6 /* IN4L_DMIC_DLY - [5:0] */ 2556#define ARIZONA_IN4L_DMIC_DLY_WIDTH 6 /* IN4L_DMIC_DLY - [5:0] */
2527 2557
2528/* 2558/*
2559 * R812 (0x32C) - IN4R Control
2560 */
2561#define ARIZONA_IN4R_HPF_MASK 0x8000 /* IN4R_HPF - [15] */
2562#define ARIZONA_IN4R_HPF_SHIFT 15 /* IN4R_HPF - [15] */
2563#define ARIZONA_IN4R_HPF_WIDTH 1 /* IN4R_HPF - [15] */
2564
2565/*
2529 * R813 (0x32D) - ADC Digital Volume 4R 2566 * R813 (0x32D) - ADC Digital Volume 4R
2530 */ 2567 */
2531#define ARIZONA_IN_VU 0x0200 /* IN_VU */ 2568#define ARIZONA_IN_VU 0x0200 /* IN_VU */
diff --git a/sound/soc/codecs/arizona.c b/sound/soc/codecs/arizona.c
index 657808ba1418..708326265a37 100644
--- a/sound/soc/codecs/arizona.c
+++ b/sound/soc/codecs/arizona.c
@@ -560,6 +560,16 @@ const struct soc_enum arizona_ng_hold =
560 4, arizona_ng_hold_text); 560 4, arizona_ng_hold_text);
561EXPORT_SYMBOL_GPL(arizona_ng_hold); 561EXPORT_SYMBOL_GPL(arizona_ng_hold);
562 562
563static const char * const arizona_in_hpf_cut_text[] = {
564 "2.5Hz", "5Hz", "10Hz", "20Hz", "40Hz"
565};
566
567const struct soc_enum arizona_in_hpf_cut_enum =
568 SOC_ENUM_SINGLE(ARIZONA_HPF_CONTROL, ARIZONA_IN_HPF_CUT_SHIFT,
569 ARRAY_SIZE(arizona_in_hpf_cut_text),
570 arizona_in_hpf_cut_text);
571EXPORT_SYMBOL_GPL(arizona_in_hpf_cut_enum);
572
563static const char * const arizona_in_dmic_osr_text[] = { 573static const char * const arizona_in_dmic_osr_text[] = {
564 "1.536MHz", "3.072MHz", "6.144MHz", 574 "1.536MHz", "3.072MHz", "6.144MHz",
565}; 575};
diff --git a/sound/soc/codecs/arizona.h b/sound/soc/codecs/arizona.h
index 9e81b6392692..f8e63865a1c5 100644
--- a/sound/soc/codecs/arizona.h
+++ b/sound/soc/codecs/arizona.h
@@ -199,6 +199,7 @@ extern const struct soc_enum arizona_lhpf3_mode;
199extern const struct soc_enum arizona_lhpf4_mode; 199extern const struct soc_enum arizona_lhpf4_mode;
200 200
201extern const struct soc_enum arizona_ng_hold; 201extern const struct soc_enum arizona_ng_hold;
202extern const struct soc_enum arizona_in_hpf_cut_enum;
202extern const struct soc_enum arizona_in_dmic_osr[]; 203extern const struct soc_enum arizona_in_dmic_osr[];
203 204
204extern int arizona_in_ev(struct snd_soc_dapm_widget *w, 205extern int arizona_in_ev(struct snd_soc_dapm_widget *w,
diff --git a/sound/soc/codecs/wm5110.c b/sound/soc/codecs/wm5110.c
index bbd64384ca1c..ea18e88e0a07 100644
--- a/sound/soc/codecs/wm5110.c
+++ b/sound/soc/codecs/wm5110.c
@@ -76,6 +76,25 @@ SOC_SINGLE_RANGE_TLV("IN3L Volume", ARIZONA_IN3L_CONTROL,
76SOC_SINGLE_RANGE_TLV("IN3R Volume", ARIZONA_IN3R_CONTROL, 76SOC_SINGLE_RANGE_TLV("IN3R Volume", ARIZONA_IN3R_CONTROL,
77 ARIZONA_IN3R_PGA_VOL_SHIFT, 0x40, 0x5f, 0, ana_tlv), 77 ARIZONA_IN3R_PGA_VOL_SHIFT, 0x40, 0x5f, 0, ana_tlv),
78 78
79SOC_ENUM("IN HPF Cutoff Frequency", arizona_in_hpf_cut_enum),
80
81SOC_SINGLE("IN1L HPF Switch", ARIZONA_IN1L_CONTROL,
82 ARIZONA_IN1L_HPF_SHIFT, 1, 0),
83SOC_SINGLE("IN1R HPF Switch", ARIZONA_IN1R_CONTROL,
84 ARIZONA_IN1R_HPF_SHIFT, 1, 0),
85SOC_SINGLE("IN2L HPF Switch", ARIZONA_IN2L_CONTROL,
86 ARIZONA_IN2L_HPF_SHIFT, 1, 0),
87SOC_SINGLE("IN2R HPF Switch", ARIZONA_IN2R_CONTROL,
88 ARIZONA_IN2R_HPF_SHIFT, 1, 0),
89SOC_SINGLE("IN3L HPF Switch", ARIZONA_IN3L_CONTROL,
90 ARIZONA_IN3L_HPF_SHIFT, 1, 0),
91SOC_SINGLE("IN3R HPF Switch", ARIZONA_IN3R_CONTROL,
92 ARIZONA_IN3R_HPF_SHIFT, 1, 0),
93SOC_SINGLE("IN4L HPF Switch", ARIZONA_IN4L_CONTROL,
94 ARIZONA_IN4L_HPF_SHIFT, 1, 0),
95SOC_SINGLE("IN4R HPF Switch", ARIZONA_IN4R_CONTROL,
96 ARIZONA_IN4R_HPF_SHIFT, 1, 0),
97
79SOC_SINGLE_TLV("IN1L Digital Volume", ARIZONA_ADC_DIGITAL_VOLUME_1L, 98SOC_SINGLE_TLV("IN1L Digital Volume", ARIZONA_ADC_DIGITAL_VOLUME_1L,
80 ARIZONA_IN1L_DIG_VOL_SHIFT, 0xbf, 0, digital_tlv), 99 ARIZONA_IN1L_DIG_VOL_SHIFT, 0xbf, 0, digital_tlv),
81SOC_SINGLE_TLV("IN1R Digital Volume", ARIZONA_ADC_DIGITAL_VOLUME_1R, 100SOC_SINGLE_TLV("IN1R Digital Volume", ARIZONA_ADC_DIGITAL_VOLUME_1R,