diff options
author | Richard Fitzgerald <rf@opensource.wolfsonmicro.com> | 2015-01-17 10:21:22 -0500 |
---|---|---|
committer | Lee Jones <lee.jones@linaro.org> | 2015-02-26 05:04:07 -0500 |
commit | e5d4ef0d731664b3fe204f4e5e87f5756e848fb1 (patch) | |
tree | 135041e482374e93f9a93d531a3f248932cbbb31 | |
parent | c517d838eb7d07bbe9507871fab3931deccff539 (diff) |
mfd: arizona: Add support for WM8280/WM8281
This adds support for the Wolfson Microelectronics WM8280 and WM8281
codecs.
Signed-off-by: Richard Fitzgerald <rf@opensource.wolfsonmicro.com>
Signed-off-by: Charles Keepax <ckeepax@opensource.wolfsonmicro.com>
[Lee: Minor fixup to remove potentially uninitialised variable. ]
Signed-off-by: Lee Jones <lee.jones@linaro.org>
-rw-r--r-- | drivers/mfd/Kconfig | 5 | ||||
-rw-r--r-- | drivers/mfd/arizona-core.c | 15 | ||||
-rw-r--r-- | drivers/mfd/arizona-i2c.c | 2 | ||||
-rw-r--r-- | drivers/mfd/arizona-irq.c | 1 | ||||
-rw-r--r-- | drivers/mfd/arizona-spi.c | 2 | ||||
-rw-r--r-- | include/linux/mfd/arizona/core.h | 1 |
6 files changed, 22 insertions, 4 deletions
diff --git a/drivers/mfd/Kconfig b/drivers/mfd/Kconfig index 38356e39adba..9b5e60564d97 100644 --- a/drivers/mfd/Kconfig +++ b/drivers/mfd/Kconfig | |||
@@ -1289,10 +1289,11 @@ config MFD_WM5102 | |||
1289 | Support for Wolfson Microelectronics WM5102 low power audio SoC | 1289 | Support for Wolfson Microelectronics WM5102 low power audio SoC |
1290 | 1290 | ||
1291 | config MFD_WM5110 | 1291 | config MFD_WM5110 |
1292 | bool "Wolfson Microelectronics WM5110" | 1292 | bool "Wolfson Microelectronics WM5110 and WM8280/WM8281" |
1293 | depends on MFD_ARIZONA | 1293 | depends on MFD_ARIZONA |
1294 | help | 1294 | help |
1295 | Support for Wolfson Microelectronics WM5110 low power audio SoC | 1295 | Support for Wolfson Microelectronics WM5110 and WM8280/WM8281 |
1296 | low power audio SoC | ||
1296 | 1297 | ||
1297 | config MFD_WM8997 | 1298 | config MFD_WM8997 |
1298 | bool "Wolfson Microelectronics WM8997" | 1299 | bool "Wolfson Microelectronics WM8997" |
diff --git a/drivers/mfd/arizona-core.c b/drivers/mfd/arizona-core.c index 09ba8f186e6a..9f819989683b 100644 --- a/drivers/mfd/arizona-core.c +++ b/drivers/mfd/arizona-core.c | |||
@@ -567,6 +567,7 @@ static int arizona_of_get_core_pdata(struct arizona *arizona) | |||
567 | const struct of_device_id arizona_of_match[] = { | 567 | const struct of_device_id arizona_of_match[] = { |
568 | { .compatible = "wlf,wm5102", .data = (void *)WM5102 }, | 568 | { .compatible = "wlf,wm5102", .data = (void *)WM5102 }, |
569 | { .compatible = "wlf,wm5110", .data = (void *)WM5110 }, | 569 | { .compatible = "wlf,wm5110", .data = (void *)WM5110 }, |
570 | { .compatible = "wlf,wm8280", .data = (void *)WM8280 }, | ||
570 | { .compatible = "wlf,wm8997", .data = (void *)WM8997 }, | 571 | { .compatible = "wlf,wm8997", .data = (void *)WM8997 }, |
571 | {}, | 572 | {}, |
572 | }; | 573 | }; |
@@ -671,6 +672,7 @@ int arizona_dev_init(struct arizona *arizona) | |||
671 | switch (arizona->type) { | 672 | switch (arizona->type) { |
672 | case WM5102: | 673 | case WM5102: |
673 | case WM5110: | 674 | case WM5110: |
675 | case WM8280: | ||
674 | case WM8997: | 676 | case WM8997: |
675 | for (i = 0; i < ARRAY_SIZE(wm5102_core_supplies); i++) | 677 | for (i = 0; i < ARRAY_SIZE(wm5102_core_supplies); i++) |
676 | arizona->core_supplies[i].supply | 678 | arizona->core_supplies[i].supply |
@@ -834,11 +836,19 @@ int arizona_dev_init(struct arizona *arizona) | |||
834 | #endif | 836 | #endif |
835 | #ifdef CONFIG_MFD_WM5110 | 837 | #ifdef CONFIG_MFD_WM5110 |
836 | case 0x5110: | 838 | case 0x5110: |
837 | type_name = "WM5110"; | 839 | switch (arizona->type) { |
838 | if (arizona->type != WM5110) { | 840 | case WM5110: |
841 | type_name = "WM5110"; | ||
842 | break; | ||
843 | case WM8280: | ||
844 | type_name = "WM8280"; | ||
845 | break; | ||
846 | default: | ||
847 | type_name = "WM5110"; | ||
839 | dev_err(arizona->dev, "WM5110 registered as %d\n", | 848 | dev_err(arizona->dev, "WM5110 registered as %d\n", |
840 | arizona->type); | 849 | arizona->type); |
841 | arizona->type = WM5110; | 850 | arizona->type = WM5110; |
851 | break; | ||
842 | } | 852 | } |
843 | apply_patch = wm5110_patch; | 853 | apply_patch = wm5110_patch; |
844 | break; | 854 | break; |
@@ -1010,6 +1020,7 @@ int arizona_dev_init(struct arizona *arizona) | |||
1010 | ARRAY_SIZE(wm5102_devs), NULL, 0, NULL); | 1020 | ARRAY_SIZE(wm5102_devs), NULL, 0, NULL); |
1011 | break; | 1021 | break; |
1012 | case WM5110: | 1022 | case WM5110: |
1023 | case WM8280: | ||
1013 | ret = mfd_add_devices(arizona->dev, -1, wm5110_devs, | 1024 | ret = mfd_add_devices(arizona->dev, -1, wm5110_devs, |
1014 | ARRAY_SIZE(wm5110_devs), NULL, 0, NULL); | 1025 | ARRAY_SIZE(wm5110_devs), NULL, 0, NULL); |
1015 | break; | 1026 | break; |
diff --git a/drivers/mfd/arizona-i2c.c b/drivers/mfd/arizona-i2c.c index 9d4156fb082a..ff782a5de235 100644 --- a/drivers/mfd/arizona-i2c.c +++ b/drivers/mfd/arizona-i2c.c | |||
@@ -44,6 +44,7 @@ static int arizona_i2c_probe(struct i2c_client *i2c, | |||
44 | #endif | 44 | #endif |
45 | #ifdef CONFIG_MFD_WM5110 | 45 | #ifdef CONFIG_MFD_WM5110 |
46 | case WM5110: | 46 | case WM5110: |
47 | case WM8280: | ||
47 | regmap_config = &wm5110_i2c_regmap; | 48 | regmap_config = &wm5110_i2c_regmap; |
48 | break; | 49 | break; |
49 | #endif | 50 | #endif |
@@ -87,6 +88,7 @@ static int arizona_i2c_remove(struct i2c_client *i2c) | |||
87 | static const struct i2c_device_id arizona_i2c_id[] = { | 88 | static const struct i2c_device_id arizona_i2c_id[] = { |
88 | { "wm5102", WM5102 }, | 89 | { "wm5102", WM5102 }, |
89 | { "wm5110", WM5110 }, | 90 | { "wm5110", WM5110 }, |
91 | { "wm8280", WM8280 }, | ||
90 | { "wm8997", WM8997 }, | 92 | { "wm8997", WM8997 }, |
91 | { } | 93 | { } |
92 | }; | 94 | }; |
diff --git a/drivers/mfd/arizona-irq.c b/drivers/mfd/arizona-irq.c index 3a3fe7cc6d61..d063b94b94b5 100644 --- a/drivers/mfd/arizona-irq.c +++ b/drivers/mfd/arizona-irq.c | |||
@@ -211,6 +211,7 @@ int arizona_irq_init(struct arizona *arizona) | |||
211 | #endif | 211 | #endif |
212 | #ifdef CONFIG_MFD_WM5110 | 212 | #ifdef CONFIG_MFD_WM5110 |
213 | case WM5110: | 213 | case WM5110: |
214 | case WM8280: | ||
214 | aod = &wm5110_aod; | 215 | aod = &wm5110_aod; |
215 | 216 | ||
216 | switch (arizona->rev) { | 217 | switch (arizona->rev) { |
diff --git a/drivers/mfd/arizona-spi.c b/drivers/mfd/arizona-spi.c index 8ef58bcff193..1e845f6d407b 100644 --- a/drivers/mfd/arizona-spi.c +++ b/drivers/mfd/arizona-spi.c | |||
@@ -44,6 +44,7 @@ static int arizona_spi_probe(struct spi_device *spi) | |||
44 | #endif | 44 | #endif |
45 | #ifdef CONFIG_MFD_WM5110 | 45 | #ifdef CONFIG_MFD_WM5110 |
46 | case WM5110: | 46 | case WM5110: |
47 | case WM8280: | ||
47 | regmap_config = &wm5110_spi_regmap; | 48 | regmap_config = &wm5110_spi_regmap; |
48 | break; | 49 | break; |
49 | #endif | 50 | #endif |
@@ -84,6 +85,7 @@ static int arizona_spi_remove(struct spi_device *spi) | |||
84 | static const struct spi_device_id arizona_spi_ids[] = { | 85 | static const struct spi_device_id arizona_spi_ids[] = { |
85 | { "wm5102", WM5102 }, | 86 | { "wm5102", WM5102 }, |
86 | { "wm5110", WM5110 }, | 87 | { "wm5110", WM5110 }, |
88 | { "wm8280", WM8280 }, | ||
87 | { }, | 89 | { }, |
88 | }; | 90 | }; |
89 | MODULE_DEVICE_TABLE(spi, arizona_spi_ids); | 91 | MODULE_DEVICE_TABLE(spi, arizona_spi_ids); |
diff --git a/include/linux/mfd/arizona/core.h b/include/linux/mfd/arizona/core.h index 910e3aa1e965..f97010576f56 100644 --- a/include/linux/mfd/arizona/core.h +++ b/include/linux/mfd/arizona/core.h | |||
@@ -24,6 +24,7 @@ enum arizona_type { | |||
24 | WM5102 = 1, | 24 | WM5102 = 1, |
25 | WM5110 = 2, | 25 | WM5110 = 2, |
26 | WM8997 = 3, | 26 | WM8997 = 3, |
27 | WM8280 = 4, | ||
27 | }; | 28 | }; |
28 | 29 | ||
29 | #define ARIZONA_IRQ_GP1 0 | 30 | #define ARIZONA_IRQ_GP1 0 |