drivers: i2c: add pinctrl driver support
Replace soc-specific pin functions with Zephyr pinctrl api functions for pin-mux configuration in i2c driver. Signed-off-by: Mulin Chao <mlchao@nuvoton.com>
This commit is contained in:
parent
8efc935288
commit
a4b07c396d
7 changed files with 45 additions and 23 deletions
12
boards/arm/npcx7m6fb_evb/npcx7m6fb_evb-pinctrl.dtsi
Normal file
12
boards/arm/npcx7m6fb_evb/npcx7m6fb_evb-pinctrl.dtsi
Normal file
|
@ -0,0 +1,12 @@
|
||||||
|
/*
|
||||||
|
* Copyright (c) 2022 Nuvoton Technology Corporation.
|
||||||
|
*
|
||||||
|
* SPDX-License-Identifier: Apache-2.0
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <nuvoton/npcx/npcx7/npcx7-pinctrl.dtsi>
|
||||||
|
|
||||||
|
&i2c0_0_sda_scl_gpb4_b5 {
|
||||||
|
bias-pull-up; /* Enable internal pull-up for i2c0_0 */
|
||||||
|
pinmux-locked; /* Lock pinmuxing */
|
||||||
|
};
|
|
@ -7,7 +7,7 @@
|
||||||
/dts-v1/;
|
/dts-v1/;
|
||||||
|
|
||||||
#include <nuvoton/npcx7m6fb.dtsi>
|
#include <nuvoton/npcx7m6fb.dtsi>
|
||||||
#include <nuvoton/npcx/npcx7/npcx7-pinctrl.dtsi>
|
#include "npcx7m6fb_evb-pinctrl.dtsi"
|
||||||
|
|
||||||
/ {
|
/ {
|
||||||
model = "Nuvoton NPCX7M6FB evaluation board";
|
model = "Nuvoton NPCX7M6FB evaluation board";
|
||||||
|
@ -91,6 +91,8 @@
|
||||||
|
|
||||||
&i2c0_0 {
|
&i2c0_0 {
|
||||||
status = "okay";
|
status = "okay";
|
||||||
|
pinctrl-0 = <&i2c0_0_sda_scl_gpb4_b5>;
|
||||||
|
pinctrl-names = "default";
|
||||||
clock-frequency = <I2C_BITRATE_FAST>;
|
clock-frequency = <I2C_BITRATE_FAST>;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
12
boards/arm/npcx9m6f_evb/npcx9m6f_evb-pinctrl.dtsi
Normal file
12
boards/arm/npcx9m6f_evb/npcx9m6f_evb-pinctrl.dtsi
Normal file
|
@ -0,0 +1,12 @@
|
||||||
|
/*
|
||||||
|
* Copyright (c) 2022 Nuvoton Technology Corporation.
|
||||||
|
*
|
||||||
|
* SPDX-License-Identifier: Apache-2.0
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <nuvoton/npcx/npcx9/npcx9-pinctrl.dtsi>
|
||||||
|
|
||||||
|
&i2c0_0_sda_scl_gpb4_b5 {
|
||||||
|
bias-pull-up; /* Enable internal pull-up for i2c0_0 */
|
||||||
|
pinmux-locked; /* Lock pinmuxing */
|
||||||
|
};
|
|
@ -7,7 +7,7 @@
|
||||||
/dts-v1/;
|
/dts-v1/;
|
||||||
|
|
||||||
#include <nuvoton/npcx9m6f.dtsi>
|
#include <nuvoton/npcx9m6f.dtsi>
|
||||||
#include <nuvoton/npcx/npcx9/npcx9-pinctrl.dtsi>
|
#include "npcx9m6f_evb-pinctrl.dtsi"
|
||||||
|
|
||||||
/ {
|
/ {
|
||||||
model = "Nuvoton NPCX9M6F evaluation board";
|
model = "Nuvoton NPCX9M6F evaluation board";
|
||||||
|
@ -104,6 +104,8 @@
|
||||||
|
|
||||||
&i2c0_0 {
|
&i2c0_0 {
|
||||||
status = "okay";
|
status = "okay";
|
||||||
|
pinctrl-0 = <&i2c0_0_sda_scl_gpb4_b5>;
|
||||||
|
pinctrl-names = "default";
|
||||||
clock-frequency = <I2C_BITRATE_FAST>;
|
clock-frequency = <I2C_BITRATE_FAST>;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -31,6 +31,7 @@
|
||||||
#include <assert.h>
|
#include <assert.h>
|
||||||
#include <zephyr/drivers/clock_control.h>
|
#include <zephyr/drivers/clock_control.h>
|
||||||
#include <zephyr/drivers/i2c.h>
|
#include <zephyr/drivers/i2c.h>
|
||||||
|
#include <zephyr/drivers/pinctrl.h>
|
||||||
#include <zephyr/dt-bindings/i2c/i2c.h>
|
#include <zephyr/dt-bindings/i2c/i2c.h>
|
||||||
#include <soc.h>
|
#include <soc.h>
|
||||||
|
|
||||||
|
@ -42,12 +43,11 @@ LOG_MODULE_REGISTER(i2c_npcx_port, LOG_LEVEL_ERR);
|
||||||
|
|
||||||
/* Device config */
|
/* Device config */
|
||||||
struct i2c_npcx_port_config {
|
struct i2c_npcx_port_config {
|
||||||
/* pinmux configuration */
|
|
||||||
const uint8_t alts_size;
|
|
||||||
const struct npcx_alt *alts_list;
|
|
||||||
uint32_t bitrate;
|
uint32_t bitrate;
|
||||||
uint8_t port;
|
uint8_t port;
|
||||||
const struct device *i2c_ctrl;
|
const struct device *i2c_ctrl;
|
||||||
|
/* pinmux configuration */
|
||||||
|
const struct pinctrl_dev_config *pcfg;
|
||||||
};
|
};
|
||||||
|
|
||||||
/* I2C api functions */
|
/* I2C api functions */
|
||||||
|
@ -131,7 +131,12 @@ static int i2c_npcx_port_init(const struct device *dev)
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
/* Configure pin-mux for I2C device */
|
/* Configure pin-mux for I2C device */
|
||||||
npcx_pinctrl_mux_configure(config->alts_list, config->alts_size, 1);
|
ret = pinctrl_apply_state(config->pcfg, PINCTRL_STATE_DEFAULT);
|
||||||
|
if (ret < 0) {
|
||||||
|
LOG_ERR("I2C pinctrl setup failed (%d)", ret);
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/* Setup initial i2c configuration */
|
/* Setup initial i2c configuration */
|
||||||
i2c_config = (I2C_MODE_MASTER | i2c_map_dt_bitrate(config->bitrate));
|
i2c_config = (I2C_MODE_MASTER | i2c_map_dt_bitrate(config->bitrate));
|
||||||
|
@ -151,15 +156,13 @@ static const struct i2c_driver_api i2c_port_npcx_driver_api = {
|
||||||
|
|
||||||
/* I2C port init macro functions */
|
/* I2C port init macro functions */
|
||||||
#define NPCX_I2C_PORT_INIT(inst) \
|
#define NPCX_I2C_PORT_INIT(inst) \
|
||||||
static const struct npcx_alt i2c_port_alts##inst[] = \
|
PINCTRL_DT_INST_DEFINE(inst); \
|
||||||
NPCX_DT_ALT_ITEMS_LIST(inst); \
|
|
||||||
\
|
\
|
||||||
static const struct i2c_npcx_port_config i2c_npcx_port_cfg_##inst = { \
|
static const struct i2c_npcx_port_config i2c_npcx_port_cfg_##inst = { \
|
||||||
.port = DT_INST_PROP(inst, port), \
|
.port = DT_INST_PROP(inst, port), \
|
||||||
.bitrate = DT_INST_PROP(inst, clock_frequency), \
|
.bitrate = DT_INST_PROP(inst, clock_frequency), \
|
||||||
.alts_size = ARRAY_SIZE(i2c_port_alts##inst), \
|
|
||||||
.alts_list = i2c_port_alts##inst, \
|
|
||||||
.i2c_ctrl = DEVICE_DT_GET(DT_INST_PHANDLE(inst, controller)), \
|
.i2c_ctrl = DEVICE_DT_GET(DT_INST_PHANDLE(inst, controller)), \
|
||||||
|
.pcfg = PINCTRL_DT_INST_DEV_CONFIG_GET(inst), \
|
||||||
}; \
|
}; \
|
||||||
\
|
\
|
||||||
DEVICE_DT_INST_DEFINE(inst, \
|
DEVICE_DT_INST_DEFINE(inst, \
|
||||||
|
|
|
@ -609,7 +609,6 @@
|
||||||
#size-cells = <0>;
|
#size-cells = <0>;
|
||||||
port = <0x00>;
|
port = <0x00>;
|
||||||
controller = <&i2c_ctrl0>;
|
controller = <&i2c_ctrl0>;
|
||||||
pinctrl-0 = <&alt2_i2c0_0_sl>; /* PINB5.B4 */
|
|
||||||
label = "I2C_0_PORT_0";
|
label = "I2C_0_PORT_0";
|
||||||
status = "disabled";
|
status = "disabled";
|
||||||
};
|
};
|
||||||
|
@ -620,7 +619,6 @@
|
||||||
#size-cells = <0>;
|
#size-cells = <0>;
|
||||||
port = <0x10>;
|
port = <0x10>;
|
||||||
controller = <&i2c_ctrl1>;
|
controller = <&i2c_ctrl1>;
|
||||||
pinctrl-0 = <&alt2_i2c1_0_sl>; /* PIN90.87 */
|
|
||||||
label = "I2C_1_PORT_0";
|
label = "I2C_1_PORT_0";
|
||||||
status = "disabled";
|
status = "disabled";
|
||||||
};
|
};
|
||||||
|
@ -631,7 +629,6 @@
|
||||||
#size-cells = <0>;
|
#size-cells = <0>;
|
||||||
port = <0x20>;
|
port = <0x20>;
|
||||||
controller = <&i2c_ctrl2>;
|
controller = <&i2c_ctrl2>;
|
||||||
pinctrl-0 = <&alt2_i2c2_0_sl>; /* PIN92.91 */
|
|
||||||
label = "I2C_2_PORT_0";
|
label = "I2C_2_PORT_0";
|
||||||
status = "disabled";
|
status = "disabled";
|
||||||
};
|
};
|
||||||
|
@ -642,7 +639,6 @@
|
||||||
#size-cells = <0>;
|
#size-cells = <0>;
|
||||||
port = <0x30>;
|
port = <0x30>;
|
||||||
controller = <&i2c_ctrl3>;
|
controller = <&i2c_ctrl3>;
|
||||||
pinctrl-0 = <&alt2_i2c3_0_sl>; /* PIND1.D0 */
|
|
||||||
label = "I2C_3_PORT_0";
|
label = "I2C_3_PORT_0";
|
||||||
status = "disabled";
|
status = "disabled";
|
||||||
};
|
};
|
||||||
|
@ -653,7 +649,6 @@
|
||||||
#size-cells = <0>;
|
#size-cells = <0>;
|
||||||
port = <0x41>;
|
port = <0x41>;
|
||||||
controller = <&i2c_ctrl4>;
|
controller = <&i2c_ctrl4>;
|
||||||
pinctrl-0 = <&alt6_i2c4_1_sl>; /* PINF3.F2 */
|
|
||||||
label = "I2C_4_PORT_1";
|
label = "I2C_4_PORT_1";
|
||||||
status = "disabled";
|
status = "disabled";
|
||||||
};
|
};
|
||||||
|
@ -664,7 +659,6 @@
|
||||||
#size-cells = <0>;
|
#size-cells = <0>;
|
||||||
port = <0x50>;
|
port = <0x50>;
|
||||||
controller = <&i2c_ctrl5>;
|
controller = <&i2c_ctrl5>;
|
||||||
pinctrl-0 = <&alt2_i2c5_0_sl>; /* PIN33.36 */
|
|
||||||
label = "I2C_5_PORT_0";
|
label = "I2C_5_PORT_0";
|
||||||
status = "disabled";
|
status = "disabled";
|
||||||
};
|
};
|
||||||
|
@ -675,7 +669,6 @@
|
||||||
#size-cells = <0>;
|
#size-cells = <0>;
|
||||||
port = <0x51>;
|
port = <0x51>;
|
||||||
controller = <&i2c_ctrl5>;
|
controller = <&i2c_ctrl5>;
|
||||||
pinctrl-0 = <&alt6_i2c5_1_sl>; /* PINF5.F4 */
|
|
||||||
label = "I2C_5_PORT_1";
|
label = "I2C_5_PORT_1";
|
||||||
status = "disabled";
|
status = "disabled";
|
||||||
};
|
};
|
||||||
|
@ -686,7 +679,6 @@
|
||||||
#size-cells = <0>;
|
#size-cells = <0>;
|
||||||
port = <0x60>;
|
port = <0x60>;
|
||||||
controller = <&i2c_ctrl6>;
|
controller = <&i2c_ctrl6>;
|
||||||
pinctrl-0 = <&alt2_i2c6_0_sl>; /* PINC2.C1 */
|
|
||||||
label = "I2C_6_PORT_0";
|
label = "I2C_6_PORT_0";
|
||||||
status = "disabled";
|
status = "disabled";
|
||||||
};
|
};
|
||||||
|
@ -697,7 +689,6 @@
|
||||||
#size-cells = <0>;
|
#size-cells = <0>;
|
||||||
port = <0x61>;
|
port = <0x61>;
|
||||||
controller = <&i2c_ctrl6>;
|
controller = <&i2c_ctrl6>;
|
||||||
pinctrl-0 = <&alt6_i2c6_1_sl>; /* PINE4.E3 */
|
|
||||||
label = "I2C_6_PORT_1";
|
label = "I2C_6_PORT_1";
|
||||||
status = "disabled";
|
status = "disabled";
|
||||||
};
|
};
|
||||||
|
@ -708,7 +699,6 @@
|
||||||
#size-cells = <0>;
|
#size-cells = <0>;
|
||||||
port = <0x70>;
|
port = <0x70>;
|
||||||
controller = <&i2c_ctrl7>;
|
controller = <&i2c_ctrl7>;
|
||||||
pinctrl-0 = <&alt2_i2c7_0_sl>; /* PINB3.B2 */
|
|
||||||
label = "I2C_7_PORT_0";
|
label = "I2C_7_PORT_0";
|
||||||
status = "disabled";
|
status = "disabled";
|
||||||
};
|
};
|
||||||
|
|
|
@ -5,7 +5,7 @@ description: Nuvoton, NPCX-I2C port pads node
|
||||||
|
|
||||||
compatible: "nuvoton,npcx-i2c-port"
|
compatible: "nuvoton,npcx-i2c-port"
|
||||||
|
|
||||||
include: i2c-controller.yaml
|
include: [i2c-controller.yaml, pinctrl-device.yaml]
|
||||||
|
|
||||||
properties:
|
properties:
|
||||||
port:
|
port:
|
||||||
|
@ -19,9 +19,10 @@ properties:
|
||||||
description: i2c controller to handle signals from port pads
|
description: i2c controller to handle signals from port pads
|
||||||
|
|
||||||
pinctrl-0:
|
pinctrl-0:
|
||||||
type: phandles
|
|
||||||
required: true
|
required: true
|
||||||
description: configurations of pinmux controllers
|
|
||||||
|
pinctrl-names:
|
||||||
|
required: true
|
||||||
|
|
||||||
clock-frequency:
|
clock-frequency:
|
||||||
required: true
|
required: true
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue