Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

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

mfd: Add WM8352 support



The WM8352 is a variant of the WM8350. Aside from the register defaults
there are no software visible differences to the WM8350.

Signed-off-by: default avatarMark Brown <broonie@opensource.wolfsonmicro.com>
Signed-off-by: default avatarSamuel Ortiz <sameo@openedhand.com>
parent 94964f96
Loading
Loading
Loading
Loading
+16 −0
Original line number Diff line number Diff line
@@ -143,6 +143,22 @@ config MFD_WM8350_CONFIG_MODE_3
	bool
	depends on MFD_WM8350

config MFD_WM8352_CONFIG_MODE_0
	bool
	depends on MFD_WM8350

config MFD_WM8352_CONFIG_MODE_1
	bool
	depends on MFD_WM8350

config MFD_WM8352_CONFIG_MODE_2
	bool
	depends on MFD_WM8350

config MFD_WM8352_CONFIG_MODE_3
	bool
	depends on MFD_WM8350

config MFD_WM8350_I2C
	tristate "Support Wolfson Microelectronics WM8350 with I2C"
	select MFD_WM8350
+70 −16
Original line number Diff line number Diff line
@@ -1133,12 +1133,14 @@ EXPORT_SYMBOL_GPL(wm8350_read_auxadc);
/*
 * Cache is always host endian.
 */
static int wm8350_create_cache(struct wm8350 *wm8350, int mode)
static int wm8350_create_cache(struct wm8350 *wm8350, int type, int mode)
{
	int i, ret = 0;
	u16 value;
	const u16 *reg_map;

	switch (type) {
	case 0:
		switch (mode) {
#ifdef CONFIG_MFD_WM8350_CONFIG_MODE_0
		case 0:
@@ -1161,7 +1163,45 @@ static int wm8350_create_cache(struct wm8350 *wm8350, int mode)
			break;
#endif
		default:
		dev_err(wm8350->dev, "Configuration mode %d not supported\n",
			dev_err(wm8350->dev,
				"WM8350 configuration mode %d not supported\n",
				mode);
			return -EINVAL;
		}

	case 2:
		switch (mode) {
#ifdef CONFIG_MFD_WM8352_CONFIG_MODE_0
		case 0:
			reg_map = wm8352_mode0_defaults;
			break;
#endif
#ifdef CONFIG_MFD_WM8352_CONFIG_MODE_1
		case 1:
			reg_map = wm8352_mode1_defaults;
			break;
#endif
#ifdef CONFIG_MFD_WM8352_CONFIG_MODE_2
		case 2:
			reg_map = wm8352_mode2_defaults;
			break;
#endif
#ifdef CONFIG_MFD_WM8352_CONFIG_MODE_3
		case 3:
			reg_map = wm8352_mode3_defaults;
			break;
#endif
		default:
			dev_err(wm8350->dev,
				"WM8352 configuration mode %d not supported\n",
				mode);
			return -EINVAL;
		}
		break;

	default:
		dev_err(wm8350->dev,
			"WM835x configuration mode %d not supported\n",
			mode);
		return -EINVAL;
	}
@@ -1284,13 +1324,27 @@ int wm8350_device_init(struct wm8350 *wm8350, int irq,
		}
		break;

	case 2:
		switch (chip_rev) {
		case 0:
			dev_info(wm8350->dev, "WM8352 Rev A\n");
			wm8350->power.rev_g_coeff = 1;
			break;

		default:
			dev_err(wm8350->dev, "Unknown WM8352 CHIP_REV\n");
			ret = -ENODEV;
			goto err;
		}
		break;

	default:
		dev_err(wm8350->dev, "Unknown MASK_REV\n");
		ret = -ENODEV;
		goto err;
	}

	ret = wm8350_create_cache(wm8350, mode);
	ret = wm8350_create_cache(wm8350, mask_rev, mode);
	if (ret < 0) {
		dev_err(wm8350->dev, "Failed to create register cache\n");
		return ret;
+1 −0
Original line number Diff line number Diff line
@@ -97,6 +97,7 @@ static int wm8350_i2c_remove(struct i2c_client *i2c)

static const struct i2c_device_id wm8350_i2c_id[] = {
       { "wm8350", 0 },
       { "wm8352", 0 },
       { }
};
MODULE_DEVICE_TABLE(i2c, wm8350_i2c_id);
+1052 −0

File changed.

Preview size limit exceeded, changes collapsed.

+4 −0
Original line number Diff line number Diff line
@@ -589,6 +589,10 @@ extern const u16 wm8350_mode0_defaults[];
extern const u16 wm8350_mode1_defaults[];
extern const u16 wm8350_mode2_defaults[];
extern const u16 wm8350_mode3_defaults[];
extern const u16 wm8352_mode0_defaults[];
extern const u16 wm8352_mode1_defaults[];
extern const u16 wm8352_mode2_defaults[];
extern const u16 wm8352_mode3_defaults[];

struct wm8350;