|
@@ -16,6 +16,19 @@
|
|
|
#include <linux/mfd/core.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_OPERATION (1 << 0)
|
|
|
|
|
@@ -361,7 +374,21 @@ static int tc3589x_probe(struct i2c_client *i2c,
|
|
|
tc3589x->i2c = i2c;
|
|
|
tc3589x->pdata = pdata;
|
|
|
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);
|
|
|
|
|
@@ -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 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);
|