Commit 8c2bb589e29d5cb89e10c3ddd23b28d949fa9693
1 parent
a8ee98df18
Exists in
smarc_8mq_lf_v2020.04
and in
17 other branches
rockchip: pinctrl: rk3399: add support for I2C8
The RK3399 has a total of 9 I2C controllers. To support these, the enum in periph.h is extended and the mapping from the IRQ numbers to the peripheral-ids is extended to ensure that pinctrl requests are passed through to the function configuring the I2C pins. For I2C8, the pinctrl is implemented and tested (on a RK3399-Q7) using communication with the FAN53555 connected on I2C8. Signed-off-by: Philipp Tomsich <philipp.tomsich@theobroma-systems.com> Tested-by: Klaus Goger <klaus.goger@theobroma-systems.com>
Showing 3 changed files with 28 additions and 1 deletions Side-by-side Diff
arch/arm/include/asm/arch-rockchip/grf_rk3399.h
... | ... | @@ -589,7 +589,12 @@ |
589 | 589 | PMUGRF_GPIO1C3_SEL_SHIFT = 6, |
590 | 590 | PMUGRF_GPIO1C3_SEL_MASK = 3 << PMUGRF_GPIO1C3_SEL_SHIFT, |
591 | 591 | PMUGRF_PWM_2 = 1, |
592 | - | |
592 | + PMUGRF_GPIO1C4_SEL_SHIFT = 8, | |
593 | + PMUGRF_GPIO1C4_SEL_MASK = 3 << PMUGRF_GPIO1C4_SEL_SHIFT, | |
594 | + PMUGRF_I2C8PMU_SDA = 1, | |
595 | + PMUGRF_GPIO1C5_SEL_SHIFT = 10, | |
596 | + PMUGRF_GPIO1C5_SEL_MASK = 3 << PMUGRF_GPIO1C5_SEL_SHIFT, | |
597 | + PMUGRF_I2C8PMU_SCL = 1, | |
593 | 598 | }; |
594 | 599 | |
595 | 600 | /* GRF_SOC_CON5 */ |
arch/arm/include/asm/arch-rockchip/periph.h
drivers/pinctrl/rockchip/pinctrl_rk3399.c
... | ... | @@ -70,11 +70,21 @@ |
70 | 70 | PMUGRF_GPIO1C0_SEL_MASK, |
71 | 71 | PMUGRF_I2C0PMU_SCL << PMUGRF_GPIO1C0_SEL_SHIFT); |
72 | 72 | break; |
73 | + case PERIPH_ID_I2C8: | |
74 | + rk_clrsetreg(&pmugrf->gpio1c_iomux, | |
75 | + PMUGRF_GPIO1C4_SEL_MASK, | |
76 | + PMUGRF_I2C8PMU_SDA << PMUGRF_GPIO1C4_SEL_SHIFT); | |
77 | + rk_clrsetreg(&pmugrf->gpio1c_iomux, | |
78 | + PMUGRF_GPIO1C5_SEL_MASK, | |
79 | + PMUGRF_I2C8PMU_SCL << PMUGRF_GPIO1C5_SEL_SHIFT); | |
80 | + break; | |
73 | 81 | case PERIPH_ID_I2C1: |
74 | 82 | case PERIPH_ID_I2C2: |
75 | 83 | case PERIPH_ID_I2C3: |
76 | 84 | case PERIPH_ID_I2C4: |
77 | 85 | case PERIPH_ID_I2C5: |
86 | + case PERIPH_ID_I2C6: | |
87 | + case PERIPH_ID_I2C7: | |
78 | 88 | default: |
79 | 89 | debug("i2c id = %d iomux error!\n", i2c_id); |
80 | 90 | break; |
... | ... | @@ -301,6 +311,9 @@ |
301 | 311 | case PERIPH_ID_I2C3: |
302 | 312 | case PERIPH_ID_I2C4: |
303 | 313 | case PERIPH_ID_I2C5: |
314 | + case PERIPH_ID_I2C6: | |
315 | + case PERIPH_ID_I2C7: | |
316 | + case PERIPH_ID_I2C8: | |
304 | 317 | pinctrl_rk3399_i2c_config(priv->grf, priv->pmugrf, func); |
305 | 318 | break; |
306 | 319 | case PERIPH_ID_SPI0: |
... | ... | @@ -375,6 +388,12 @@ |
375 | 388 | return PERIPH_ID_I2C4; |
376 | 389 | case 38: |
377 | 390 | return PERIPH_ID_I2C5; |
391 | + case 37: | |
392 | + return PERIPH_ID_I2C6; | |
393 | + case 36: | |
394 | + return PERIPH_ID_I2C7; | |
395 | + case 58: | |
396 | + return PERIPH_ID_I2C8; | |
378 | 397 | case 65: |
379 | 398 | return PERIPH_ID_SDMMC1; |
380 | 399 | #if CONFIG_IS_ENABLED(GMAC_ROCKCHIP) |