ITE: drivers/i2c: create pinmux phandle to the I2C driver node

Create the pinmux phandle to the I2C driver node in the
devicetree. When the pinmux_pin_set function in
i2c_it8xxx2_init can refer to the setting of this phandle.
It is more flexible to use.

Signed-off-by: Tim Lin <tim2.lin@ite.corp-partner.google.com>
diff --git a/drivers/i2c/i2c_ite_it8xxx2.c b/drivers/i2c/i2c_ite_it8xxx2.c
index dbf564e..3827a26 100644
--- a/drivers/i2c/i2c_ite_it8xxx2.c
+++ b/drivers/i2c/i2c_ite_it8xxx2.c
@@ -7,6 +7,7 @@
 #define DT_DRV_COMPAT ite_it8xxx2_i2c
 
 #include <drivers/i2c.h>
+#include <drivers/pinmux.h>
 #include <errno.h>
 #include <logging/log.h>
 		LOG_MODULE_REGISTER(i2c_ite_it8xxx2);
@@ -19,6 +20,19 @@
 #define DEV_DATA(dev) \
 		((struct i2c_it8xxx2_data * const)(dev)->data)
 
+#define DEV_CLK_PINMUX(idx)     DEVICE_DT_GET(DT_PHANDLE \
+	(DT_NODELABEL(pinctrl_i2c_clk##idx), pinctrls))
+#define DEV_DATA_PINMUX(idx)    DEVICE_DT_GET(DT_PHANDLE \
+	(DT_NODELABEL(pinctrl_i2c_data##idx), pinctrls))
+#define DEV_CLK_PIN(idx)        DT_PHA(DT_PHANDLE_BY_IDX \
+	(DT_DRV_INST(idx), pinctrl_0, 0), pinctrls, pin)
+#define DEV_DATA_PIN(idx)       DT_PHA(DT_PHANDLE_BY_IDX \
+	(DT_DRV_INST(idx), pinctrl_1, 0), pinctrls, pin)
+#define DEV_CLK_ALT_FUNC(idx)   DT_PHA(DT_PHANDLE_BY_IDX \
+	(DT_DRV_INST(idx), pinctrl_0, 0), pinctrls, alt_func)
+#define DEV_DATA_ALT_FUNC(idx)  DT_PHA(DT_PHANDLE_BY_IDX \
+	(DT_DRV_INST(idx), pinctrl_1, 0), pinctrls, alt_func)
+
 #define I2C_STANDARD_PORT_COUNT 3
 /* Default PLL frequency. */
 #define PLL_CLOCK 48000000
@@ -29,6 +43,15 @@
 	uint8_t *base;
 	uint8_t i2c_irq_base;
 	uint8_t port;
+	/* Pinmux control group */
+	const struct device *clk_pinctrls;
+	const struct device *data_pinctrls;
+	/* GPIO pin */
+	uint8_t clk_pin;
+	uint8_t data_pin;
+	/* Alternate function */
+	uint8_t clk_alt_fun;
+	uint8_t data_alt_fun;
 };
 
 enum i2c_ch_status {
@@ -905,6 +928,11 @@
 		return error;
 	}
 
+	/* The pin is set to I2C alternate function of clock */
+	pinmux_pin_set(config->clk_pinctrls, config->clk_pin, config->clk_alt_fun);
+	/* The pin is set to I2C alternate function of data */
+	pinmux_pin_set(config->data_pinctrls, config->data_pin, config->data_alt_fun);
+
 	return 0;
 }
 
@@ -922,6 +950,12 @@
 		.bitrate = DT_INST_PROP(idx, clock_frequency),                 \
 		.i2c_irq_base = DT_INST_IRQN(idx),                             \
 		.port = DT_INST_PROP(idx, port_num),                           \
+		.clk_pinctrls = DEV_CLK_PINMUX(idx),                           \
+		.data_pinctrls = DEV_DATA_PINMUX(idx),                         \
+		.clk_pin = DEV_CLK_PIN(idx),                                   \
+		.data_pin = DEV_DATA_PIN(idx),                                 \
+		.clk_alt_fun = DEV_CLK_ALT_FUNC(idx),                          \
+		.data_alt_fun = DEV_DATA_ALT_FUNC(idx)                         \
 	};                                                                     \
 	\
 	static struct i2c_it8xxx2_data i2c_it8xxx2_data_##idx;	               \
diff --git a/dts/bindings/i2c/ite,it8xxx2-i2c.yaml b/dts/bindings/i2c/ite,it8xxx2-i2c.yaml
index 17dc166..c8feec9 100644
--- a/dts/bindings/i2c/ite,it8xxx2-i2c.yaml
+++ b/dts/bindings/i2c/ite,it8xxx2-i2c.yaml
@@ -21,3 +21,13 @@
       type: int
       required: true
       description: Ordinal identifying the port
+
+    pinctrl-0:
+      type: phandle
+      required: true
+      description: Configuration of I2C clock pinmux controller
+
+    pinctrl-1:
+      type: phandle
+      required: true
+      description: Configuration of I2C data pinmux controller
diff --git a/dts/riscv/it8xxx2-alts-map.dtsi b/dts/riscv/it8xxx2-alts-map.dtsi
index bffcf1e..33ec95d 100644
--- a/dts/riscv/it8xxx2-alts-map.dtsi
+++ b/dts/riscv/it8xxx2-alts-map.dtsi
@@ -61,5 +61,43 @@
 		pinctrl_pwm7: pwm7 {
 			pinctrls = <&pinmuxa 7 IT8XXX2_PINMUX_FUNC_1>;
 		};
+
+		/* I2C alternate function */
+		pinctrl_i2c_clk0: i2c_clk0 {
+			pinctrls = <&pinmuxb 3 IT8XXX2_PINMUX_FUNC_1>;
+		};
+		pinctrl_i2c_data0: i2c_data0 {
+			pinctrls = <&pinmuxb 4 IT8XXX2_PINMUX_FUNC_1>;
+		};
+		pinctrl_i2c_clk1: i2c_clk1 {
+			pinctrls = <&pinmuxc 1 IT8XXX2_PINMUX_FUNC_1>;
+		};
+		pinctrl_i2c_data1: i2c_data1 {
+			pinctrls = <&pinmuxc 2 IT8XXX2_PINMUX_FUNC_1>;
+		};
+		pinctrl_i2c_clk2: i2c_clk2 {
+			pinctrls = <&pinmuxf 6 IT8XXX2_PINMUX_FUNC_1>;
+		};
+		pinctrl_i2c_data2: i2c_data2 {
+			pinctrls = <&pinmuxf 7 IT8XXX2_PINMUX_FUNC_1>;
+		};
+		pinctrl_i2c_clk3: i2c_clk3 {
+			pinctrls = <&pinmuxh 1 IT8XXX2_PINMUX_FUNC_3>;
+		};
+		pinctrl_i2c_data3: i2c_data3 {
+			pinctrls = <&pinmuxh 2 IT8XXX2_PINMUX_FUNC_3>;
+		};
+		pinctrl_i2c_clk4: i2c_clk4 {
+			pinctrls = <&pinmuxe 0 IT8XXX2_PINMUX_FUNC_3>;
+		};
+		pinctrl_i2c_data4: i2c_data4 {
+			pinctrls = <&pinmuxe 7 IT8XXX2_PINMUX_FUNC_3>;
+		};
+		pinctrl_i2c_clk5: i2c_clk5 {
+			pinctrls = <&pinmuxa 4 IT8XXX2_PINMUX_FUNC_3>;
+		};
+		pinctrl_i2c_data5: i2c_data5 {
+			pinctrls = <&pinmuxa 5 IT8XXX2_PINMUX_FUNC_3>;
+		};
 	};
 };
diff --git a/dts/riscv/it8xxx2.dtsi b/dts/riscv/it8xxx2.dtsi
index 9fc4abd..d39e803 100644
--- a/dts/riscv/it8xxx2.dtsi
+++ b/dts/riscv/it8xxx2.dtsi
@@ -603,6 +603,8 @@
 			status = "disabled";
 			label = "I2C_0";
 			port-num = <0>;
+			pinctrl-0 = <&pinctrl_i2c_clk0>;  /* GPB3 */
+			pinctrl-1 = <&pinctrl_i2c_data0>; /* GPB4 */
 		};
 		i2c1: i2c@f01c80 {
 			compatible = "ite,it8xxx2-i2c";
@@ -614,6 +616,8 @@
 			status = "disabled";
 			label = "I2C_1";
 			port-num = <1>;
+			pinctrl-0 = <&pinctrl_i2c_clk1>;  /* GPC1 */
+			pinctrl-1 = <&pinctrl_i2c_data1>; /* GPC2 */
 		};
 		i2c2: i2c@f01cc0 {
 			compatible = "ite,it8xxx2-i2c";
@@ -625,6 +629,8 @@
 			status = "disabled";
 			label = "I2C_2";
 			port-num = <2>;
+			pinctrl-0 = <&pinctrl_i2c_clk2>;  /* GPF6 */
+			pinctrl-1 = <&pinctrl_i2c_data2>; /* GPF7 */
 		};
 		i2c3: i2c@f03680 {
 			compatible = "ite,it8xxx2-i2c";
@@ -636,6 +642,8 @@
 			status = "disabled";
 			label = "I2C_3";
 			port-num = <3>;
+			pinctrl-0 = <&pinctrl_i2c_clk3>;  /* GPH1 */
+			pinctrl-1 = <&pinctrl_i2c_data3>; /* GPH2 */
 		};
 		i2c4: i2c@f03500 {
 			compatible = "ite,it8xxx2-i2c";
@@ -647,6 +655,8 @@
 			status = "disabled";
 			label = "I2C_4";
 			port-num = <4>;
+			pinctrl-0 = <&pinctrl_i2c_clk4>;  /* GPE0 */
+			pinctrl-1 = <&pinctrl_i2c_data4>; /* GPE7 */
 		};
 		i2c5: i2c@f03580 {
 			compatible = "ite,it8xxx2-i2c";
@@ -658,6 +668,8 @@
 			status = "disabled";
 			label = "I2C_5";
 			port-num = <5>;
+			pinctrl-0 = <&pinctrl_i2c_clk5>;  /* GPA4 */
+			pinctrl-1 = <&pinctrl_i2c_data5>; /* GPA5 */
 		};
 
 		ecpm: clock-controller@f01e00 {