summaryrefslogtreecommitdiff
path: root/zephyr/shim/chip/it8xxx2/pinmux.c
diff options
context:
space:
mode:
Diffstat (limited to 'zephyr/shim/chip/it8xxx2/pinmux.c')
-rw-r--r--zephyr/shim/chip/it8xxx2/pinmux.c33
1 files changed, 23 insertions, 10 deletions
diff --git a/zephyr/shim/chip/it8xxx2/pinmux.c b/zephyr/shim/chip/it8xxx2/pinmux.c
index fd8dc7fc8e..3e00f7ce5a 100644
--- a/zephyr/shim/chip/it8xxx2/pinmux.c
+++ b/zephyr/shim/chip/it8xxx2/pinmux.c
@@ -8,6 +8,15 @@
#include <dt-bindings/pinctrl/it8xxx2-pinctrl.h>
#include <soc.h>
+#define SCL 0
+#define SDA 1
+#define IT8XXX2_I2C_DEV_PINMUX(node, signal) DEVICE_DT_GET(DT_PHANDLE( \
+ DT_PINCTRL_BY_IDX(DT_NODELABEL(node), 0, signal), pinctrls))
+#define IT8XXX2_I2C_DEV_PIN(node, signal) DT_PHA( \
+ DT_PINCTRL_BY_IDX(DT_NODELABEL(node), 0, signal), pinctrls, pin)
+#define IT8XXX2_I2C_DEV_ALT_FUNC(node, signal) DT_PHA( \
+ DT_PINCTRL_BY_IDX(DT_NODELABEL(node), 0, signal), pinctrls, alt_func)
+
static int it8xxx2_pinmux_init(const struct device *dev)
{
ARG_UNUSED(dev);
@@ -70,17 +79,21 @@ static int it8xxx2_pinmux_init_latr(const struct device *dev)
pinmux_pin_set(portf, 7, IT8XXX2_PINMUX_FUNC_1);
}
#endif
-#if DT_NODE_HAS_STATUS(DT_NODELABEL(i2c3), okay) && \
- DT_NODE_HAS_STATUS(DT_NODELABEL(pinmuxh), okay)
- {
- const struct device *porth =
- DEVICE_DT_GET(DT_NODELABEL(pinmuxh));
+#if DT_NODE_HAS_STATUS(DT_NODELABEL(i2c3), okay)
+ /* Pinmux control group */
+ const struct device *clk_pinctrls = IT8XXX2_I2C_DEV_PINMUX(i2c3, SCL);
+ const struct device *dat_pinctrls = IT8XXX2_I2C_DEV_PINMUX(i2c3, SDA);
+ /* GPIO pin */
+ uint8_t clk_pin = IT8XXX2_I2C_DEV_PIN(i2c3, SCL);
+ uint8_t dat_pin = IT8XXX2_I2C_DEV_PIN(i2c3, SDA);
+ /* Alternate function */
+ uint8_t clk_alt = IT8XXX2_I2C_DEV_ALT_FUNC(i2c3, SCL);
+ uint8_t dat_alt = IT8XXX2_I2C_DEV_ALT_FUNC(i2c3, SDA);
- /* I2C3 CLK */
- pinmux_pin_set(porth, 1, IT8XXX2_PINMUX_FUNC_3);
- /* I2C3 DAT */
- pinmux_pin_set(porth, 2, IT8XXX2_PINMUX_FUNC_3);
- }
+ /* I2C3 CLK */
+ pinmux_pin_set(clk_pinctrls, clk_pin, clk_alt);
+ /* I2C3 DAT */
+ pinmux_pin_set(dat_pinctrls, dat_pin, dat_alt);
#endif
#if DT_NODE_HAS_STATUS(DT_NODELABEL(i2c4), okay) && \
DT_NODE_HAS_STATUS(DT_NODELABEL(pinmuxe), okay)