mirror of
https://github.com/AuxXxilium/linux_dsm_epyc7002.git
synced 2024-11-24 10:40:53 +07:00
mfd: arizona: Integrate wm8997 into Arizona mfd
The wm8997 is a compact, high-performance audio hub CODEC with SLIMbus interfacing, for smartphones, tablets and other portable audio devices based on the Arizona platform. This patch integrates the wm8997 into the Arizona mfd. Signed-off-by: Charles Keepax <ckeepax@opensource.wolfsonmicro.com> Signed-off-by: Samuel Ortiz <sameo@linux.intel.com>
This commit is contained in:
parent
f3799e9372
commit
dc7d48635d
@ -1047,6 +1047,12 @@ config MFD_WM5110
|
|||||||
help
|
help
|
||||||
Support for Wolfson Microelectronics WM5110 low power audio SoC
|
Support for Wolfson Microelectronics WM5110 low power audio SoC
|
||||||
|
|
||||||
|
config MFD_WM8997
|
||||||
|
bool "Support Wolfson Microelectronics WM8997"
|
||||||
|
depends on MFD_ARIZONA
|
||||||
|
help
|
||||||
|
Support for Wolfson Microelectronics WM8997 low power audio SoC
|
||||||
|
|
||||||
config MFD_WM8400
|
config MFD_WM8400
|
||||||
bool "Wolfson Microelectronics WM8400"
|
bool "Wolfson Microelectronics WM8400"
|
||||||
select MFD_CORE
|
select MFD_CORE
|
||||||
|
@ -43,6 +43,9 @@ endif
|
|||||||
ifneq ($(CONFIG_MFD_WM5110),n)
|
ifneq ($(CONFIG_MFD_WM5110),n)
|
||||||
obj-$(CONFIG_MFD_ARIZONA) += wm5110-tables.o
|
obj-$(CONFIG_MFD_ARIZONA) += wm5110-tables.o
|
||||||
endif
|
endif
|
||||||
|
ifneq ($(CONFIG_MFD_WM8997),n)
|
||||||
|
obj-$(CONFIG_MFD_ARIZONA) += wm8997-tables.o
|
||||||
|
endif
|
||||||
obj-$(CONFIG_MFD_WM8400) += wm8400-core.o
|
obj-$(CONFIG_MFD_WM8400) += wm8400-core.o
|
||||||
wm831x-objs := wm831x-core.o wm831x-irq.o wm831x-otp.o
|
wm831x-objs := wm831x-core.o wm831x-irq.o wm831x-otp.o
|
||||||
wm831x-objs += wm831x-auxadc.o
|
wm831x-objs += wm831x-auxadc.o
|
||||||
|
@ -554,6 +554,7 @@ static int arizona_of_get_core_pdata(struct arizona *arizona)
|
|||||||
const struct of_device_id arizona_of_match[] = {
|
const struct of_device_id arizona_of_match[] = {
|
||||||
{ .compatible = "wlf,wm5102", .data = (void *)WM5102 },
|
{ .compatible = "wlf,wm5102", .data = (void *)WM5102 },
|
||||||
{ .compatible = "wlf,wm5110", .data = (void *)WM5110 },
|
{ .compatible = "wlf,wm5110", .data = (void *)WM5110 },
|
||||||
|
{ .compatible = "wlf,wm8997", .data = (void *)WM8997 },
|
||||||
{},
|
{},
|
||||||
};
|
};
|
||||||
EXPORT_SYMBOL_GPL(arizona_of_match);
|
EXPORT_SYMBOL_GPL(arizona_of_match);
|
||||||
@ -586,6 +587,15 @@ static struct mfd_cell wm5110_devs[] = {
|
|||||||
{ .name = "wm5110-codec" },
|
{ .name = "wm5110-codec" },
|
||||||
};
|
};
|
||||||
|
|
||||||
|
static struct mfd_cell wm8997_devs[] = {
|
||||||
|
{ .name = "arizona-micsupp" },
|
||||||
|
{ .name = "arizona-extcon" },
|
||||||
|
{ .name = "arizona-gpio" },
|
||||||
|
{ .name = "arizona-haptics" },
|
||||||
|
{ .name = "arizona-pwm" },
|
||||||
|
{ .name = "wm8997-codec" },
|
||||||
|
};
|
||||||
|
|
||||||
int arizona_dev_init(struct arizona *arizona)
|
int arizona_dev_init(struct arizona *arizona)
|
||||||
{
|
{
|
||||||
struct device *dev = arizona->dev;
|
struct device *dev = arizona->dev;
|
||||||
@ -608,6 +618,7 @@ int arizona_dev_init(struct arizona *arizona)
|
|||||||
switch (arizona->type) {
|
switch (arizona->type) {
|
||||||
case WM5102:
|
case WM5102:
|
||||||
case WM5110:
|
case WM5110:
|
||||||
|
case WM8997:
|
||||||
for (i = 0; i < ARRAY_SIZE(wm5102_core_supplies); i++)
|
for (i = 0; i < ARRAY_SIZE(wm5102_core_supplies); i++)
|
||||||
arizona->core_supplies[i].supply
|
arizona->core_supplies[i].supply
|
||||||
= wm5102_core_supplies[i];
|
= wm5102_core_supplies[i];
|
||||||
@ -683,6 +694,7 @@ int arizona_dev_init(struct arizona *arizona)
|
|||||||
switch (reg) {
|
switch (reg) {
|
||||||
case 0x5102:
|
case 0x5102:
|
||||||
case 0x5110:
|
case 0x5110:
|
||||||
|
case 0x8997:
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
dev_err(arizona->dev, "Unknown device ID: %x\n", reg);
|
dev_err(arizona->dev, "Unknown device ID: %x\n", reg);
|
||||||
@ -767,6 +779,17 @@ int arizona_dev_init(struct arizona *arizona)
|
|||||||
}
|
}
|
||||||
apply_patch = wm5110_patch;
|
apply_patch = wm5110_patch;
|
||||||
break;
|
break;
|
||||||
|
#endif
|
||||||
|
#ifdef CONFIG_MFD_WM8997
|
||||||
|
case 0x8997:
|
||||||
|
type_name = "WM8997";
|
||||||
|
if (arizona->type != WM8997) {
|
||||||
|
dev_err(arizona->dev, "WM8997 registered as %d\n",
|
||||||
|
arizona->type);
|
||||||
|
arizona->type = WM8997;
|
||||||
|
}
|
||||||
|
apply_patch = wm8997_patch;
|
||||||
|
break;
|
||||||
#endif
|
#endif
|
||||||
default:
|
default:
|
||||||
dev_err(arizona->dev, "Unknown device ID %x\n", reg);
|
dev_err(arizona->dev, "Unknown device ID %x\n", reg);
|
||||||
@ -934,6 +957,10 @@ int arizona_dev_init(struct arizona *arizona)
|
|||||||
ret = mfd_add_devices(arizona->dev, -1, wm5110_devs,
|
ret = mfd_add_devices(arizona->dev, -1, wm5110_devs,
|
||||||
ARRAY_SIZE(wm5110_devs), NULL, 0, NULL);
|
ARRAY_SIZE(wm5110_devs), NULL, 0, NULL);
|
||||||
break;
|
break;
|
||||||
|
case WM8997:
|
||||||
|
ret = mfd_add_devices(arizona->dev, -1, wm8997_devs,
|
||||||
|
ARRAY_SIZE(wm8997_devs), NULL, 0, NULL);
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (ret != 0) {
|
if (ret != 0) {
|
||||||
|
@ -44,6 +44,11 @@ static int arizona_i2c_probe(struct i2c_client *i2c,
|
|||||||
case WM5110:
|
case WM5110:
|
||||||
regmap_config = &wm5110_i2c_regmap;
|
regmap_config = &wm5110_i2c_regmap;
|
||||||
break;
|
break;
|
||||||
|
#endif
|
||||||
|
#ifdef CONFIG_MFD_WM8997
|
||||||
|
case WM8997:
|
||||||
|
regmap_config = &wm8997_i2c_regmap;
|
||||||
|
break;
|
||||||
#endif
|
#endif
|
||||||
default:
|
default:
|
||||||
dev_err(&i2c->dev, "Unknown device type %ld\n",
|
dev_err(&i2c->dev, "Unknown device type %ld\n",
|
||||||
@ -80,6 +85,7 @@ static int arizona_i2c_remove(struct i2c_client *i2c)
|
|||||||
static const struct i2c_device_id arizona_i2c_id[] = {
|
static const struct i2c_device_id arizona_i2c_id[] = {
|
||||||
{ "wm5102", WM5102 },
|
{ "wm5102", WM5102 },
|
||||||
{ "wm5110", WM5110 },
|
{ "wm5110", WM5110 },
|
||||||
|
{ "wm8997", WM8997 },
|
||||||
{ }
|
{ }
|
||||||
};
|
};
|
||||||
MODULE_DEVICE_TABLE(i2c, arizona_i2c_id);
|
MODULE_DEVICE_TABLE(i2c, arizona_i2c_id);
|
||||||
|
@ -208,6 +208,14 @@ int arizona_irq_init(struct arizona *arizona)
|
|||||||
ctrlif_error = false;
|
ctrlif_error = false;
|
||||||
break;
|
break;
|
||||||
#endif
|
#endif
|
||||||
|
#ifdef CONFIG_MFD_WM8997
|
||||||
|
case WM8997:
|
||||||
|
aod = &wm8997_aod;
|
||||||
|
irq = &wm8997_irq;
|
||||||
|
|
||||||
|
ctrlif_error = false;
|
||||||
|
break;
|
||||||
|
#endif
|
||||||
default:
|
default:
|
||||||
BUG_ON("Unknown Arizona class device" == NULL);
|
BUG_ON("Unknown Arizona class device" == NULL);
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
|
@ -25,6 +25,8 @@ extern const struct regmap_config wm5102_spi_regmap;
|
|||||||
extern const struct regmap_config wm5110_i2c_regmap;
|
extern const struct regmap_config wm5110_i2c_regmap;
|
||||||
extern const struct regmap_config wm5110_spi_regmap;
|
extern const struct regmap_config wm5110_spi_regmap;
|
||||||
|
|
||||||
|
extern const struct regmap_config wm8997_i2c_regmap;
|
||||||
|
|
||||||
extern const struct dev_pm_ops arizona_pm_ops;
|
extern const struct dev_pm_ops arizona_pm_ops;
|
||||||
|
|
||||||
extern const struct of_device_id arizona_of_match[];
|
extern const struct of_device_id arizona_of_match[];
|
||||||
@ -35,6 +37,9 @@ extern const struct regmap_irq_chip wm5102_irq;
|
|||||||
extern const struct regmap_irq_chip wm5110_aod;
|
extern const struct regmap_irq_chip wm5110_aod;
|
||||||
extern const struct regmap_irq_chip wm5110_irq;
|
extern const struct regmap_irq_chip wm5110_irq;
|
||||||
|
|
||||||
|
extern const struct regmap_irq_chip wm8997_aod;
|
||||||
|
extern const struct regmap_irq_chip wm8997_irq;
|
||||||
|
|
||||||
int arizona_dev_init(struct arizona *arizona);
|
int arizona_dev_init(struct arizona *arizona);
|
||||||
int arizona_dev_exit(struct arizona *arizona);
|
int arizona_dev_exit(struct arizona *arizona);
|
||||||
int arizona_irq_init(struct arizona *arizona);
|
int arizona_irq_init(struct arizona *arizona);
|
||||||
|
1525
drivers/mfd/wm8997-tables.c
Normal file
1525
drivers/mfd/wm8997-tables.c
Normal file
File diff suppressed because it is too large
Load Diff
@ -23,6 +23,7 @@
|
|||||||
enum arizona_type {
|
enum arizona_type {
|
||||||
WM5102 = 1,
|
WM5102 = 1,
|
||||||
WM5110 = 2,
|
WM5110 = 2,
|
||||||
|
WM8997 = 3,
|
||||||
};
|
};
|
||||||
|
|
||||||
#define ARIZONA_IRQ_GP1 0
|
#define ARIZONA_IRQ_GP1 0
|
||||||
@ -121,5 +122,6 @@ int arizona_set_irq_wake(struct arizona *arizona, int irq, int on);
|
|||||||
|
|
||||||
int wm5102_patch(struct arizona *arizona);
|
int wm5102_patch(struct arizona *arizona);
|
||||||
int wm5110_patch(struct arizona *arizona);
|
int wm5110_patch(struct arizona *arizona);
|
||||||
|
int wm8997_patch(struct arizona *arizona);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
Loading…
Reference in New Issue
Block a user