summaryrefslogtreecommitdiff
path: root/drivers/mfd
diff options
context:
space:
mode:
authorMax Krummenacher <max.krummenacher@toradex.com>2020-10-21 12:34:54 +0200
committerOleksandr Suvorov <oleksandr.suvorov@toradex.com>2021-01-28 14:48:11 +0200
commit0ff75de66c30d5ca0e8ff158e1c57f3dd54f1789 (patch)
tree01d1eb24e871d05fb8132b7986226eaa513623d8 /drivers/mfd
parentbe64a11d7e5773a4742bb82b443ae8192eb8f283 (diff)
mfd: pca9450: configure the i2c level translator
The pca9450 provides an I2C level translator which can be enabled in the CONFIG2 register. Provide a way to configure that from platform data or device tree. Related-to: ELB-3132 Signed-off-by: Max Krummenacher <max.krummenacher@toradex.com>
Diffstat (limited to 'drivers/mfd')
-rw-r--r--drivers/mfd/pca9450.c15
1 files changed, 15 insertions, 0 deletions
diff --git a/drivers/mfd/pca9450.c b/drivers/mfd/pca9450.c
index 1586852ce52d..9322c30f3eea 100644
--- a/drivers/mfd/pca9450.c
+++ b/drivers/mfd/pca9450.c
@@ -177,6 +177,10 @@ static struct pca9450_board *pca9450_parse_dt(struct i2c_client *client,
else
board_info->irq_base = -1;
+ r = of_property_read_u32(np, "i2c-lt-en", &prop);
+ if (!r)
+ board_info->i2c_lt_en = 0x100 | prop;
+
return board_info;
err_intr:
@@ -237,6 +241,17 @@ static int pca9450_i2c_probe(struct i2c_client *i2c,
}
dev_info(pca9450->dev, "Device ID=0x%X\n", ret);
+ if ((pmic_plat_data->i2c_lt_en > 0xff) &&
+ (pmic_plat_data->i2c_lt_en < 0x104)) {
+ ret = pca9450_reg_write(pca9450, PCA9450_CONFIG2,
+ pmic_plat_data->i2c_lt_en & 0xff);
+ if (ret < 0) {
+ dev_err(pca9450->dev, "%s(): Read PCA9450_REG_DEVICE failed!\n",
+ __func__);
+ goto err;
+ }
+ }
+
pca9450_irq_init(pca9450, of_pmic_plat_data);
ret = mfd_add_devices(pca9450->dev, -1,