88
99#include <zephyr/kernel.h>
1010#include <zephyr/drivers/i2c.h>
11- #include <zephyr/drivers/pinmux.h>
1211#include <zephyr/drivers/clock_control.h>
13- #include <zephyr/dt-bindings/pinctrl/lpc11u6x-pinctrl.h>
1412#include "i2c_lpc11u6x.h"
1513
1614#define DEV_BASE (dev ) (((struct lpc11u6x_i2c_config *)(dev->config))->base)
@@ -34,8 +32,10 @@ static int lpc11u6x_i2c_configure(const struct device *dev,
3432{
3533 const struct lpc11u6x_i2c_config * cfg = dev -> config ;
3634 struct lpc11u6x_i2c_data * data = dev -> data ;
37- const struct device * clk_dev , * pinmux_dev ;
38- uint32_t speed , flags = 0 ;
35+ const struct device * clk_dev ;
36+ uint32_t speed ;
37+ int ret ;
38+ uint8_t mux_selection = PINCTRL_STATE_DEFAULT ;
3939
4040 switch (I2C_SPEED_GET (dev_config )) {
4141 case I2C_SPEED_STANDARD :
@@ -45,7 +45,7 @@ static int lpc11u6x_i2c_configure(const struct device *dev,
4545 speed = 400000 ;
4646 break ;
4747 case I2C_SPEED_FAST_PLUS :
48- flags |= IOCON_FASTI2C_EN ;
48+ mux_selection = PINCTRL_STATE_FAST_PLUS ;
4949 speed = 1000000 ;
5050 break ;
5151 case I2C_SPEED_HIGH :
@@ -67,28 +67,13 @@ static int lpc11u6x_i2c_configure(const struct device *dev,
6767 k_mutex_lock (& data -> mutex , K_FOREVER );
6868 lpc11u6x_i2c_set_bus_speed (cfg , clk_dev , speed );
6969
70- if (!flags ) {
71- goto exit ;
72- }
73-
74- pinmux_dev = device_get_binding (cfg -> scl_pinmux_drv );
75- if (!pinmux_dev ) {
76- goto err ;
70+ ret = pinctrl_apply_state (cfg -> pincfg , mux_selection );
71+ if (ret ) {
72+ k_mutex_unlock (& data -> mutex );
73+ return ret ;
7774 }
78- pinmux_pin_set (pinmux_dev , cfg -> scl_pin , cfg -> scl_flags | flags );
79-
80- pinmux_dev = device_get_binding (cfg -> sda_pinmux_drv );
81- if (!pinmux_dev ) {
82- goto err ;
83- }
84- pinmux_pin_set (pinmux_dev , cfg -> sda_pin , cfg -> sda_flags | flags );
85-
86- exit :
8775 k_mutex_unlock (& data -> mutex );
8876 return 0 ;
89- err :
90- k_mutex_unlock (& data -> mutex );
91- return - EINVAL ;
9277}
9378
9479static int lpc11u6x_i2c_transfer (const struct device * dev ,
@@ -328,20 +313,13 @@ static int lpc11u6x_i2c_init(const struct device *dev)
328313{
329314 const struct lpc11u6x_i2c_config * cfg = dev -> config ;
330315 struct lpc11u6x_i2c_data * data = dev -> data ;
331- const struct device * pinmux_dev , * clk_dev ;
332-
333- /* Configure SCL and SDA pins */
334- pinmux_dev = device_get_binding (cfg -> scl_pinmux_drv );
335- if (!pinmux_dev ) {
336- return - EINVAL ;
337- }
338- pinmux_pin_set (pinmux_dev , cfg -> scl_pin , cfg -> scl_flags );
316+ const struct device * clk_dev ;
317+ int err ;
339318
340- pinmux_dev = device_get_binding (cfg -> sda_pinmux_drv );
341- if (! pinmux_dev ) {
342- return - EINVAL ;
319+ err = pinctrl_apply_state (cfg -> pincfg , PINCTRL_STATE_DEFAULT );
320+ if (err ) {
321+ return err ;
343322 }
344- pinmux_pin_set (pinmux_dev , cfg -> sda_pin , cfg -> sda_flags );
345323
346324 /* Configure clock and de-assert reset for I2Cx */
347325 clk_dev = device_get_binding (cfg -> clock_drv );
@@ -377,23 +355,16 @@ static const struct i2c_driver_api i2c_api = {
377355
378356#define LPC11U6X_I2C_INIT (idx ) \
379357 \
380- static void lpc11u6x_i2c_isr_config_##idx(const struct device *dev); \
358+ static void lpc11u6x_i2c_isr_config_##idx(const struct device *dev); \
359+ \
360+ PINCTRL_DT_INST_DEFINE(idx); \
381361 \
382362static const struct lpc11u6x_i2c_config i2c_cfg_##idx = { \
383363 .base = \
384364 (struct lpc11u6x_i2c_regs *) DT_INST_REG_ADDR(idx), \
385365 .clock_drv = DT_LABEL(DT_INST_PHANDLE(idx, clocks)), \
386- .scl_pinmux_drv = \
387- DT_LABEL(DT_INST_PHANDLE_BY_NAME(idx, pinmuxs, scl)), \
388- .sda_pinmux_drv = \
389- DT_LABEL(DT_INST_PHANDLE_BY_NAME(idx, pinmuxs, sda)), \
390366 .irq_config_func = lpc11u6x_i2c_isr_config_##idx, \
391- .scl_flags = \
392- DT_INST_PHA_BY_NAME(idx, pinmuxs, scl, function), \
393- .sda_flags = \
394- DT_INST_PHA_BY_NAME(idx, pinmuxs, sda, function), \
395- .scl_pin = DT_INST_PHA_BY_NAME(idx, pinmuxs, scl, pin), \
396- .sda_pin = DT_INST_PHA_BY_NAME(idx, pinmuxs, sda, pin), \
367+ .pincfg = PINCTRL_DT_INST_DEV_CONFIG_GET(idx), \
397368 .clkid = DT_INST_PHA_BY_IDX(idx, clocks, 0, clkid), \
398369}; \
399370 \
0 commit comments