mfd: arizona: Add support for WM8280/WM8281
authorRichard Fitzgerald <rf@opensource.wolfsonmicro.com>
Sat, 17 Jan 2015 15:21:22 +0000 (15:21 +0000)
committerLee Jones <lee.jones@linaro.org>
Thu, 26 Feb 2015 10:04:07 +0000 (10:04 +0000)
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>
drivers/mfd/Kconfig
drivers/mfd/arizona-core.c
drivers/mfd/arizona-i2c.c
drivers/mfd/arizona-irq.c
drivers/mfd/arizona-spi.c
include/linux/mfd/arizona/core.h

index 38356e39adba0b5c4515ef76eed35b3a55de9be3..9b5e60564d97658f3e637ba1580fbeb3871b2846 100644 (file)
@@ -1289,10 +1289,11 @@ config MFD_WM5102
          Support for Wolfson Microelectronics WM5102 low power audio SoC
 
 config MFD_WM5110
-       bool "Wolfson Microelectronics WM5110"
+       bool "Wolfson Microelectronics WM5110 and WM8280/WM8281"
        depends on MFD_ARIZONA
        help
-         Support for Wolfson Microelectronics WM5110 low power audio SoC
+         Support for Wolfson Microelectronics WM5110 and WM8280/WM8281
+         low power audio SoC
 
 config MFD_WM8997
        bool "Wolfson Microelectronics WM8997"
index 09ba8f186e6ad591dd748870153617fffa5a31f4..9f819989683b6747b0c4a0a3746046e51bc5ac3a 100644 (file)
@@ -567,6 +567,7 @@ static int arizona_of_get_core_pdata(struct arizona *arizona)
 const struct of_device_id arizona_of_match[] = {
        { .compatible = "wlf,wm5102", .data = (void *)WM5102 },
        { .compatible = "wlf,wm5110", .data = (void *)WM5110 },
+       { .compatible = "wlf,wm8280", .data = (void *)WM8280 },
        { .compatible = "wlf,wm8997", .data = (void *)WM8997 },
        {},
 };
@@ -671,6 +672,7 @@ int arizona_dev_init(struct arizona *arizona)
        switch (arizona->type) {
        case WM5102:
        case WM5110:
+       case WM8280:
        case WM8997:
                for (i = 0; i < ARRAY_SIZE(wm5102_core_supplies); i++)
                        arizona->core_supplies[i].supply
@@ -834,11 +836,19 @@ int arizona_dev_init(struct arizona *arizona)
 #endif
 #ifdef CONFIG_MFD_WM5110
        case 0x5110:
-               type_name = "WM5110";
-               if (arizona->type != WM5110) {
+               switch (arizona->type) {
+               case WM5110:
+                       type_name = "WM5110";
+                       break;
+               case WM8280:
+                       type_name = "WM8280";
+                       break;
+               default:
+                       type_name = "WM5110";
                        dev_err(arizona->dev, "WM5110 registered as %d\n",
                                arizona->type);
                        arizona->type = WM5110;
+                       break;
                }
                apply_patch = wm5110_patch;
                break;
@@ -1010,6 +1020,7 @@ int arizona_dev_init(struct arizona *arizona)
                                      ARRAY_SIZE(wm5102_devs), NULL, 0, NULL);
                break;
        case WM5110:
+       case WM8280:
                ret = mfd_add_devices(arizona->dev, -1, wm5110_devs,
                                      ARRAY_SIZE(wm5110_devs), NULL, 0, NULL);
                break;
index 9d4156fb082ae0b8d040e039ba17cd0aadf331d8..ff782a5de235f8fd62241b2e06d69c10527d9783 100644 (file)
@@ -44,6 +44,7 @@ static int arizona_i2c_probe(struct i2c_client *i2c,
 #endif
 #ifdef CONFIG_MFD_WM5110
        case WM5110:
+       case WM8280:
                regmap_config = &wm5110_i2c_regmap;
                break;
 #endif
@@ -87,6 +88,7 @@ static int arizona_i2c_remove(struct i2c_client *i2c)
 static const struct i2c_device_id arizona_i2c_id[] = {
        { "wm5102", WM5102 },
        { "wm5110", WM5110 },
+       { "wm8280", WM8280 },
        { "wm8997", WM8997 },
        { }
 };
index 3a3fe7cc6d61e43b7dfeb2a528cd53da52542653..d063b94b94b5c97236cc04bb6311d486bd3adac2 100644 (file)
@@ -211,6 +211,7 @@ int arizona_irq_init(struct arizona *arizona)
 #endif
 #ifdef CONFIG_MFD_WM5110
        case WM5110:
+       case WM8280:
                aod = &wm5110_aod;
 
                switch (arizona->rev) {
index 8ef58bcff193e8c6c1f7e61872326cb545afdff2..1e845f6d407b82aa6e26ec5ef19b5545b911ddac 100644 (file)
@@ -44,6 +44,7 @@ static int arizona_spi_probe(struct spi_device *spi)
 #endif
 #ifdef CONFIG_MFD_WM5110
        case WM5110:
+       case WM8280:
                regmap_config = &wm5110_spi_regmap;
                break;
 #endif
@@ -84,6 +85,7 @@ static int arizona_spi_remove(struct spi_device *spi)
 static const struct spi_device_id arizona_spi_ids[] = {
        { "wm5102", WM5102 },
        { "wm5110", WM5110 },
+       { "wm8280", WM8280 },
        { },
 };
 MODULE_DEVICE_TABLE(spi, arizona_spi_ids);
index 910e3aa1e9652861333a383ef65934b4e6822f69..f97010576f56181be46683434b27d1095c855409 100644 (file)
@@ -24,6 +24,7 @@ enum arizona_type {
        WM5102 = 1,
        WM5110 = 2,
        WM8997 = 3,
+       WM8280 = 4,
 };
 
 #define ARIZONA_IRQ_GP1                    0