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

Commit e64c1eb4 authored by Linus Walleij's avatar Linus Walleij Committed by Lee Jones
Browse files

mfd: tc3589x: Detect the precise version



Instead of detecting the "tc3589x" and hard-coding the number of
GPIO pins to 24, encode all the possible subtypes and set the
number of GPIO pins from the type.

Signed-off-by: default avatarLinus Walleij <linus.walleij@linaro.org>
Signed-off-by: default avatarLee Jones <lee.jones@linaro.org>
parent b0e59926
Loading
Loading
Loading
Loading
+35 −2
Original line number Original line Diff line number Diff line
@@ -16,6 +16,19 @@
#include <linux/mfd/core.h>
#include <linux/mfd/core.h>
#include <linux/mfd/tc3589x.h>
#include <linux/mfd/tc3589x.h>


/**
 * enum tc3589x_version - indicates the TC3589x version
 */
enum tc3589x_version {
	TC3589X_TC35890,
	TC3589X_TC35892,
	TC3589X_TC35893,
	TC3589X_TC35894,
	TC3589X_TC35895,
	TC3589X_TC35896,
	TC3589X_UNKNOWN,
};

#define TC3589x_CLKMODE_MODCTL_SLEEP		0x0
#define TC3589x_CLKMODE_MODCTL_SLEEP		0x0
#define TC3589x_CLKMODE_MODCTL_OPERATION	(1 << 0)
#define TC3589x_CLKMODE_MODCTL_OPERATION	(1 << 0)


@@ -361,7 +374,21 @@ static int tc3589x_probe(struct i2c_client *i2c,
	tc3589x->i2c = i2c;
	tc3589x->i2c = i2c;
	tc3589x->pdata = pdata;
	tc3589x->pdata = pdata;
	tc3589x->irq_base = pdata->irq_base;
	tc3589x->irq_base = pdata->irq_base;
	tc3589x->num_gpio = id->driver_data;

	switch (id->driver_data) {
	case TC3589X_TC35893:
	case TC3589X_TC35895:
	case TC3589X_TC35896:
		tc3589x->num_gpio = 20;
		break;
	case TC3589X_TC35890:
	case TC3589X_TC35892:
	case TC3589X_TC35894:
	case TC3589X_UNKNOWN:
	default:
		tc3589x->num_gpio = 24;
		break;
	}


	i2c_set_clientdata(i2c, tc3589x);
	i2c_set_clientdata(i2c, tc3589x);


@@ -432,7 +459,13 @@ static int tc3589x_resume(struct device *dev)
static SIMPLE_DEV_PM_OPS(tc3589x_dev_pm_ops, tc3589x_suspend, tc3589x_resume);
static SIMPLE_DEV_PM_OPS(tc3589x_dev_pm_ops, tc3589x_suspend, tc3589x_resume);


static const struct i2c_device_id tc3589x_id[] = {
static const struct i2c_device_id tc3589x_id[] = {
	{ "tc3589x", 24 },
	{ "tc35890", TC3589X_TC35890 },
	{ "tc35892", TC3589X_TC35892 },
	{ "tc35893", TC3589X_TC35893 },
	{ "tc35894", TC3589X_TC35894 },
	{ "tc35895", TC3589X_TC35895 },
	{ "tc35896", TC3589X_TC35896 },
	{ "tc3589x", TC3589X_UNKNOWN },
	{ }
	{ }
};
};
MODULE_DEVICE_TABLE(i2c, tc3589x_id);
MODULE_DEVICE_TABLE(i2c, tc3589x_id);