Commit e102befe authored by Mark Brown's avatar Mark Brown Committed by Samuel Ortiz
Browse files

mfd: Initial support for the WM5110



The WM5110 is a highly-integrated low-power audio system for smartphones,
tablets and other portable audio devices. It combines an advanced DSP
feature set with a flexible, high-performance audio hub CODEC.

The support is based on the Arizona core driver.

Signed-off-by: default avatarMark Brown <broonie@opensource.wolfsonmicro.com>
Signed-off-by: default avatarSamuel Ortiz <sameo@linux.intel.com>
parent 9cd9e289
Loading
Loading
Loading
Loading
+6 −0
Original line number Diff line number Diff line
@@ -550,6 +550,12 @@ config MFD_WM5102
	help
	  Support for Wolfson Microelectronics WM5102 low power audio SoC

config MFD_WM5110
	bool "Support Wolfson Microelectronics WM5110"
	depends on MFD_ARIZONA
	help
	  Support for Wolfson Microelectronics WM5110 low power audio SoC

config MFD_WM8400
	bool "Support Wolfson Microelectronics WM8400"
	select MFD_CORE
+3 −0
Original line number Diff line number Diff line
@@ -33,6 +33,9 @@ obj-$(CONFIG_MFD_ARIZONA_SPI) += arizona-spi.o
ifneq ($(CONFIG_MFD_WM5102),n)
obj-$(CONFIG_MFD_ARIZONA)	+= wm5102-tables.o
endif
ifneq ($(CONFIG_MFD_WM5110),n)
obj-$(CONFIG_MFD_ARIZONA)	+= wm5110-tables.o
endif
obj-$(CONFIG_MFD_WM8400)	+= wm8400-core.o
wm831x-objs			:= wm831x-core.o wm831x-irq.o wm831x-otp.o
wm831x-objs			+= wm831x-auxadc.o
+24 −0
Original line number Diff line number Diff line
@@ -273,6 +273,14 @@ static struct mfd_cell wm5102_devs[] = {
	{ .name = "wm5102-codec" },
};

static struct mfd_cell wm5110_devs[] = {
	{ .name = "arizona-extcon" },
	{ .name = "arizona-gpio" },
	{ .name = "arizona-micsupp" },
	{ .name = "arizona-pwm" },
	{ .name = "wm5110-codec" },
};

int __devinit arizona_dev_init(struct arizona *arizona)
{
	struct device *dev = arizona->dev;
@@ -291,6 +299,7 @@ int __devinit arizona_dev_init(struct arizona *arizona)

	switch (arizona->type) {
	case WM5102:
	case WM5110:
		for (i = 0; i < ARRAY_SIZE(wm5102_core_supplies); i++)
			arizona->core_supplies[i].supply
				= wm5102_core_supplies[i];
@@ -378,6 +387,17 @@ int __devinit arizona_dev_init(struct arizona *arizona)
		}
		ret = wm5102_patch(arizona);
		break;
#endif
#ifdef CONFIG_MFD_WM5110
	case 0x5110:
		type_name = "WM5110";
		if (arizona->type != WM5110) {
			dev_err(arizona->dev, "WM5110 registered as %d\n",
				arizona->type);
			arizona->type = WM5110;
		}
		ret = wm5110_patch(arizona);
		break;
#endif
	default:
		dev_err(arizona->dev, "Unknown device ID %x\n", reg);
@@ -494,6 +514,10 @@ int __devinit arizona_dev_init(struct arizona *arizona)
		ret = mfd_add_devices(arizona->dev, -1, wm5102_devs,
				      ARRAY_SIZE(wm5102_devs), NULL, 0);
		break;
	case WM5110:
		ret = mfd_add_devices(arizona->dev, -1, wm5110_devs,
				      ARRAY_SIZE(wm5102_devs), NULL, 0);
		break;
	}

	if (ret != 0) {
+6 −0
Original line number Diff line number Diff line
@@ -34,6 +34,11 @@ static __devinit int arizona_i2c_probe(struct i2c_client *i2c,
	case WM5102:
		regmap_config = &wm5102_i2c_regmap;
		break;
#endif
#ifdef CONFIG_MFD_WM5110
	case WM5110:
		regmap_config = &wm5110_i2c_regmap;
		break;
#endif
	default:
		dev_err(&i2c->dev, "Unknown device type %ld\n",
@@ -69,6 +74,7 @@ static int __devexit arizona_i2c_remove(struct i2c_client *i2c)

static const struct i2c_device_id arizona_i2c_id[] = {
	{ "wm5102", WM5102 },
	{ "wm5110", WM5110 },
	{ }
};
MODULE_DEVICE_TABLE(i2c, arizona_i2c_id);
+6 −0
Original line number Diff line number Diff line
@@ -163,6 +163,12 @@ int arizona_irq_init(struct arizona *arizona)
		aod = &wm5102_aod;
		irq = &wm5102_irq;
		break;
#endif
#ifdef CONFIG_MFD_WM5110
	case WM5110:
		aod = &wm5110_aod;
		irq = &wm5110_irq;
		break;
#endif
	default:
		BUG_ON("Unknown Arizona class device" == NULL);
Loading