diff options
author | Max Krummenacher <max.krummenacher@toradex.com> | 2020-10-21 12:34:54 +0200 |
---|---|---|
committer | Max Krummenacher <max.krummenacher@toradex.com> | 2020-10-21 15:15:32 +0200 |
commit | 575f8f871858ae72935f859f9c5992587151ec1d (patch) | |
tree | da8616474f964f9f2b22b95080720d45cbf5cb37 /drivers/mfd | |
parent | bd77e057d625bfde0bc95c8a48cc18f0edf6fb68 (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.c | 15 |
1 files changed, 15 insertions, 0 deletions
diff --git a/drivers/mfd/pca9450.c b/drivers/mfd/pca9450.c index 85ce6e3eef68..6dac29aabe10 100644 --- a/drivers/mfd/pca9450.c +++ b/drivers/mfd/pca9450.c @@ -176,6 +176,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: @@ -236,6 +240,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, |