|
@@ -22,6 +22,11 @@
|
|
|
#include <linux/mfd/da9052/da9052.h>
|
|
|
#include <linux/mfd/da9052/reg.h>
|
|
|
|
|
|
+#ifdef CONFIG_OF
|
|
|
+#include <linux/of.h>
|
|
|
+#include <linux/of_device.h>
|
|
|
+#endif
|
|
|
+
|
|
|
static int da9052_i2c_enable_multiwrite(struct da9052 *da9052)
|
|
|
{
|
|
|
int reg_val, ret;
|
|
@@ -41,6 +46,24 @@ static int da9052_i2c_enable_multiwrite(struct da9052 *da9052)
|
|
|
return 0;
|
|
|
}
|
|
|
|
|
|
+static struct i2c_device_id da9052_i2c_id[] = {
|
|
|
+ {"da9052", DA9052},
|
|
|
+ {"da9053-aa", DA9053_AA},
|
|
|
+ {"da9053-ba", DA9053_BA},
|
|
|
+ {"da9053-bb", DA9053_BB},
|
|
|
+ {}
|
|
|
+};
|
|
|
+
|
|
|
+#ifdef CONFIG_OF
|
|
|
+static const struct of_device_id dialog_dt_ids[] = {
|
|
|
+ { .compatible = "dlg,da9052", .data = &da9052_i2c_id[0] },
|
|
|
+ { .compatible = "dlg,da9053-aa", .data = &da9052_i2c_id[1] },
|
|
|
+ { .compatible = "dlg,da9053-ab", .data = &da9052_i2c_id[2] },
|
|
|
+ { .compatible = "dlg,da9053-bb", .data = &da9052_i2c_id[3] },
|
|
|
+ { /* sentinel */ }
|
|
|
+};
|
|
|
+#endif
|
|
|
+
|
|
|
static int __devinit da9052_i2c_probe(struct i2c_client *client,
|
|
|
const struct i2c_device_id *id)
|
|
|
{
|
|
@@ -76,6 +99,22 @@ static int __devinit da9052_i2c_probe(struct i2c_client *client,
|
|
|
if (ret < 0)
|
|
|
goto err_regmap;
|
|
|
|
|
|
+#ifdef CONFIG_OF
|
|
|
+ if (!id) {
|
|
|
+ struct device_node *np = client->dev.of_node;
|
|
|
+ const struct of_device_id *deviceid;
|
|
|
+
|
|
|
+ deviceid = of_match_node(np, dialog_dt_ids);
|
|
|
+ id = (const struct i2c_device_id *)deviceid->data;
|
|
|
+ }
|
|
|
+#endif
|
|
|
+
|
|
|
+ if (!id) {
|
|
|
+ ret = -ENODEV;
|
|
|
+ dev_err(&client->dev, "id is null.\n");
|
|
|
+ goto err_regmap;
|
|
|
+ }
|
|
|
+
|
|
|
ret = da9052_device_init(da9052, id->driver_data);
|
|
|
if (ret != 0)
|
|
|
goto err_regmap;
|
|
@@ -100,14 +139,6 @@ static int __devexit da9052_i2c_remove(struct i2c_client *client)
|
|
|
return 0;
|
|
|
}
|
|
|
|
|
|
-static struct i2c_device_id da9052_i2c_id[] = {
|
|
|
- {"da9052", DA9052},
|
|
|
- {"da9053-aa", DA9053_AA},
|
|
|
- {"da9053-ba", DA9053_BA},
|
|
|
- {"da9053-bb", DA9053_BB},
|
|
|
- {}
|
|
|
-};
|
|
|
-
|
|
|
static struct i2c_driver da9052_i2c_driver = {
|
|
|
.probe = da9052_i2c_probe,
|
|
|
.remove = __devexit_p(da9052_i2c_remove),
|
|
@@ -115,6 +146,9 @@ static struct i2c_driver da9052_i2c_driver = {
|
|
|
.driver = {
|
|
|
.name = "da9052",
|
|
|
.owner = THIS_MODULE,
|
|
|
+#ifdef CONFIG_OF
|
|
|
+ .of_match_table = dialog_dt_ids,
|
|
|
+#endif
|
|
|
},
|
|
|
};
|
|
|
|