From 7299a2994a6c1ad428d2f4dd391332ab98300364 Mon Sep 17 00:00:00 2001 From: Daniel DeGrasse Date: Mon, 25 Apr 2022 17:09:31 -0500 Subject: [PATCH] drivers: i2c_imx: add pin control support Add pin control support to i2c_imx driver. Signed-off-by: Daniel DeGrasse --- drivers/i2c/i2c_imx.c | 10 ++++++++++ dts/bindings/i2c/fsl,imx21-i2c.yaml | 2 +- 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/drivers/i2c/i2c_imx.c b/drivers/i2c/i2c_imx.c index 8640a33c957..457bd250d1b 100644 --- a/drivers/i2c/i2c_imx.c +++ b/drivers/i2c/i2c_imx.c @@ -1,5 +1,6 @@ /* * Copyright (c) 2018 Diego Sueiro, + * Copyright 2022 NXP * * SPDX-License-Identifier: Apache-2.0 */ @@ -11,6 +12,7 @@ #include #include #include +#include #include LOG_MODULE_REGISTER(i2c_imx); @@ -24,6 +26,7 @@ struct i2c_imx_config { I2C_Type *base; void (*irq_config_func)(const struct device *dev); uint32_t bitrate; + const struct pinctrl_dev_config *pincfg; }; struct i2c_master_transfer { @@ -339,6 +342,11 @@ static int i2c_imx_init(const struct device *dev) k_sem_init(&data->device_sync_sem, 0, K_SEM_MAX_LIMIT); + error = pinctrl_apply_state(config->pincfg, PINCTRL_STATE_DEFAULT); + if (error) { + return error; + } + bitrate_cfg = i2c_map_dt_bitrate(config->bitrate); error = i2c_imx_configure(dev, I2C_MODE_MASTER | bitrate_cfg); @@ -357,12 +365,14 @@ static const struct i2c_driver_api i2c_imx_driver_api = { }; #define I2C_IMX_INIT(n) \ + PINCTRL_DT_INST_DEFINE(n); \ static void i2c_imx_config_func_##n(const struct device *dev); \ \ static const struct i2c_imx_config i2c_imx_config_##n = { \ .base = (I2C_Type *)DT_INST_REG_ADDR(n), \ .irq_config_func = i2c_imx_config_func_##n, \ .bitrate = DT_INST_PROP(n, clock_frequency), \ + .pincfg = PINCTRL_DT_INST_DEV_CONFIG_GET(n), \ }; \ \ static struct i2c_imx_data i2c_imx_data_##n; \ diff --git a/dts/bindings/i2c/fsl,imx21-i2c.yaml b/dts/bindings/i2c/fsl,imx21-i2c.yaml index e16480604de..09f92b5270c 100644 --- a/dts/bindings/i2c/fsl,imx21-i2c.yaml +++ b/dts/bindings/i2c/fsl,imx21-i2c.yaml @@ -5,7 +5,7 @@ description: i.MX I2C node compatible: "fsl,imx21-i2c" -include: i2c-controller.yaml +include: [i2c-controller.yaml, pinctrl-device.yaml] properties: reg: