From 06aaf9fc7bfb36bdee876ea8e927f1b267c5ec3a Mon Sep 17 00:00:00 2001 From: David Wu Date: Wed, 5 Feb 2020 20:08:29 +0800 Subject: [PATCH] i2c: rk3x: set special bit for rv1108 i2c2 If want to use i2c2, we must write i2c2 register bit with 1 at GRF. Change-Id: Ia7e59c105647304162bde283a3fb98d9e0db75c3 Signed-off-by: David Wu --- drivers/i2c/busses/i2c-rk3x.c | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/drivers/i2c/busses/i2c-rk3x.c b/drivers/i2c/busses/i2c-rk3x.c index 09283ca1b275..10c94f09d216 100644 --- a/drivers/i2c/busses/i2c-rk3x.c +++ b/drivers/i2c/busses/i2c-rk3x.c @@ -1257,7 +1257,7 @@ static const struct i2c_algorithm rk3x_i2c_algorithm = { }; static const struct rk3x_i2c_soc_data rv1108_soc_data = { - .grf_offset = -1, + .grf_offset = 0x408, .calc_timings = rk3x_i2c_v1_calc_timings, }; @@ -1383,8 +1383,12 @@ static int rk3x_i2c_probe(struct platform_device *pdev) return -EINVAL; } - /* 27+i: write mask, 11+i: value */ - value = BIT(27 + bus_nr) | BIT(11 + bus_nr); + if (i2c->soc_data == &rv1108_soc_data && bus_nr == 2) + /* rv1108 i2c2 need to set grf offset-0x408, bit-10 */ + value = BIT(26) | BIT(10); + else + /* 27+i: write mask, 11+i: value */ + value = BIT(27 + bus_nr) | BIT(11 + bus_nr); ret = regmap_write(grf, i2c->soc_data->grf_offset, value); if (ret != 0) {