Commit 8c2bb589e29d5cb89e10c3ddd23b28d949fa9693

Authored by Philipp Tomsich
1 parent a8ee98df18

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
... ... @@ -24,6 +24,9 @@
24 24 PERIPH_ID_I2C3,
25 25 PERIPH_ID_I2C4,
26 26 PERIPH_ID_I2C5,
  27 + PERIPH_ID_I2C6,
  28 + PERIPH_ID_I2C7,
  29 + PERIPH_ID_I2C8,
27 30 PERIPH_ID_SPI0,
28 31 PERIPH_ID_SPI1,
29 32 PERIPH_ID_SPI2,
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)