diff --git a/boards/arm/arduino_due/arduino_due-pinctrl.dtsi b/boards/arm/arduino_due/arduino_due-pinctrl.dtsi index 1944577b99f..23156e23cac 100644 --- a/boards/arm/arduino_due/arduino_due-pinctrl.dtsi +++ b/boards/arm/arduino_due/arduino_due-pinctrl.dtsi @@ -6,6 +6,19 @@ #include &pinctrl { + twi0_default: twi0_default { + group1 { + pinmux = , + ; + }; + }; + twi1_default: twi1_default { + group1 { + pinmux = , + ; + }; + }; + uart_default: uart_default { group1 { pinmux = ; diff --git a/boards/arm/arduino_due/arduino_due.dts b/boards/arm/arduino_due/arduino_due.dts index e1d431c67e0..520f5265c33 100644 --- a/boards/arm/arduino_due/arduino_due.dts +++ b/boards/arm/arduino_due/arduino_due.dts @@ -43,10 +43,16 @@ &twi0 { status = "okay"; + + pinctrl-0 = <&twi0_default>; + pinctrl-names = "default"; }; &twi1 { status = "okay"; + + pinctrl-0 = <&twi1_default>; + pinctrl-names = "default"; }; &uart { diff --git a/boards/arm/sam4e_xpro/sam4e_xpro-pinctrl.dtsi b/boards/arm/sam4e_xpro/sam4e_xpro-pinctrl.dtsi index 91818c164f5..880c02af5ec 100644 --- a/boards/arm/sam4e_xpro/sam4e_xpro-pinctrl.dtsi +++ b/boards/arm/sam4e_xpro/sam4e_xpro-pinctrl.dtsi @@ -17,6 +17,13 @@ }; }; + twi0_default: twi0_default { + group1 { + pinmux = , + ; + }; + }; + uart0_default: uart0_default { group1 { pinmux = , diff --git a/boards/arm/sam4e_xpro/sam4e_xpro.dts b/boards/arm/sam4e_xpro/sam4e_xpro.dts index f1a73ecfedb..d2bed1bca81 100644 --- a/boards/arm/sam4e_xpro/sam4e_xpro.dts +++ b/boards/arm/sam4e_xpro/sam4e_xpro.dts @@ -124,6 +124,13 @@ clock-frequency = <120000000>; }; +&twi0 { + status = "okay"; + + pinctrl-0 = <&twi0_default>; + pinctrl-names = "default"; +}; + &spi0 { status = "okay"; diff --git a/boards/arm/sam4l_ek/sam4l_ek-pinctrl.dtsi b/boards/arm/sam4l_ek/sam4l_ek-pinctrl.dtsi index 07f096613ee..ddc23c48fcc 100644 --- a/boards/arm/sam4l_ek/sam4l_ek-pinctrl.dtsi +++ b/boards/arm/sam4l_ek/sam4l_ek-pinctrl.dtsi @@ -16,6 +16,13 @@ }; }; + twi0_default: twi0_default { + group1 { + pinmux = , + ; + }; + }; + usart0_default: usart0_default { group1 { pinmux = , diff --git a/boards/arm/sam4l_ek/sam4l_ek.dts b/boards/arm/sam4l_ek/sam4l_ek.dts index 2fa72142367..30b7fd8e241 100644 --- a/boards/arm/sam4l_ek/sam4l_ek.dts +++ b/boards/arm/sam4l_ek/sam4l_ek.dts @@ -13,6 +13,7 @@ compatible = "atmel,sam4l_ek"; aliases { + i2c-0 = &twim0; led0 = &user_led; sw0 = &sw0_dfu; }; @@ -72,6 +73,9 @@ &twim0 { status = "okay"; + pinctrl-0 = <&twi0_default>; + pinctrl-names = "default"; + std-clk-slew-lim = <0>; std-clk-strength-low = "0.5"; std-data-slew-lim = <0>; diff --git a/boards/arm/sam4s_xplained/sam4s_xplained-pinctrl.dtsi b/boards/arm/sam4s_xplained/sam4s_xplained-pinctrl.dtsi index fa61f76613b..0d60047731e 100644 --- a/boards/arm/sam4s_xplained/sam4s_xplained-pinctrl.dtsi +++ b/boards/arm/sam4s_xplained/sam4s_xplained-pinctrl.dtsi @@ -16,6 +16,13 @@ }; }; + twi0_default: twi0_default { + group1 { + pinmux = , + ; + }; + }; + uart0_default: uart0_default { group1 { pinmux = , diff --git a/boards/arm/sam4s_xplained/sam4s_xplained.dts b/boards/arm/sam4s_xplained/sam4s_xplained.dts index 060379a8f10..0b7f510829a 100644 --- a/boards/arm/sam4s_xplained/sam4s_xplained.dts +++ b/boards/arm/sam4s_xplained/sam4s_xplained.dts @@ -122,6 +122,9 @@ &twi0 { status = "okay"; + + pinctrl-0 = <&twi0_default>; + pinctrl-names = "default"; }; &spi0 { diff --git a/boards/arm/sam_e70_xplained/sam_e70_xplained-common.dtsi b/boards/arm/sam_e70_xplained/sam_e70_xplained-common.dtsi index 0585bcc349a..915837f860c 100644 --- a/boards/arm/sam_e70_xplained/sam_e70_xplained-common.dtsi +++ b/boards/arm/sam_e70_xplained/sam_e70_xplained-common.dtsi @@ -12,8 +12,7 @@ / { aliases { i2c-0 = &twihs0; - i2c-1 = &twihs1; - i2c-2 = &twihs2; + i2c-1 = &twihs2; led0 = &green_led; sw0 = &sw0_user_button; }; @@ -66,10 +65,16 @@ &twihs0 { status = "okay"; + + pinctrl-0 = <&twihs0_default>; + pinctrl-names = "default"; }; &twihs2 { status = "okay"; + + pinctrl-0 = <&twihs2_default>; + pinctrl-names = "default"; }; &spi0 { diff --git a/boards/arm/sam_e70_xplained/sam_e70_xplained-pinctrl.dtsi b/boards/arm/sam_e70_xplained/sam_e70_xplained-pinctrl.dtsi index ca60f127a61..f75f377a12c 100644 --- a/boards/arm/sam_e70_xplained/sam_e70_xplained-pinctrl.dtsi +++ b/boards/arm/sam_e70_xplained/sam_e70_xplained-pinctrl.dtsi @@ -16,6 +16,19 @@ }; }; + twihs0_default: twihs0_default { + group1 { + pinmux = , + ; + }; + }; + twihs2_default: twihs2_default { + group1 { + pinmux = , + ; + }; + }; + uart3_default: uart3_default { group1 { pinmux = , diff --git a/boards/arm/sam_v71_xult/sam_v71_xult-common.dtsi b/boards/arm/sam_v71_xult/sam_v71_xult-common.dtsi index f86bb001746..c63a68355d4 100644 --- a/boards/arm/sam_v71_xult/sam_v71_xult-common.dtsi +++ b/boards/arm/sam_v71_xult/sam_v71_xult-common.dtsi @@ -12,8 +12,7 @@ / { aliases { i2c-0 = &twihs0; - i2c-1 = &twihs1; - i2c-2 = &twihs2; + i2c-1 = &twihs2; led0 = &yellow_led1; pwm-led0 = &pwm_led0; pwm-0 = &pwm0; @@ -165,10 +164,16 @@ &twihs0 { status = "okay"; + + pinctrl-0 = <&twihs0_default>; + pinctrl-names = "default"; }; &twihs2 { status = "okay"; + + pinctrl-0 = <&twihs2_default>; + pinctrl-names = "default"; }; &spi0 { diff --git a/boards/arm/sam_v71_xult/sam_v71_xult-pinctrl.dtsi b/boards/arm/sam_v71_xult/sam_v71_xult-pinctrl.dtsi index 05c3c5a5775..e0cf73ecd4a 100644 --- a/boards/arm/sam_v71_xult/sam_v71_xult-pinctrl.dtsi +++ b/boards/arm/sam_v71_xult/sam_v71_xult-pinctrl.dtsi @@ -16,6 +16,19 @@ }; }; + twihs0_default: twihs0_default { + group1 { + pinmux = , + ; + }; + }; + twihs2_default: twihs2_default { + group1 { + pinmux = , + ; + }; + }; + uart3_default: uart3_default { group1 { pinmux = , diff --git a/drivers/i2c/i2c_sam4l_twim.c b/drivers/i2c/i2c_sam4l_twim.c index 41c7faf0d20..1e9a0200465 100644 --- a/drivers/i2c/i2c_sam4l_twim.c +++ b/drivers/i2c/i2c_sam4l_twim.c @@ -22,6 +22,7 @@ #include #include #include +#include #define LOG_LEVEL CONFIG_I2C_LOG_LEVEL #include @@ -64,8 +65,7 @@ struct i2c_sam_twim_dev_cfg { Twim *regs; void (*irq_config)(void); uint32_t bitrate; - const struct soc_gpio_pin *pin_list; - uint8_t pin_list_size; + const struct pinctrl_dev_config *pcfg; uint8_t periph_id; uint8_t irq_id; @@ -552,7 +552,10 @@ static int i2c_sam_twim_initialize(const struct device *dev) k_sem_init(&data->sem, 0, 1); /* Connect pins to the peripheral */ - soc_gpio_list_configure(cfg->pin_list, cfg->pin_list_size); + ret = pinctrl_apply_state(cfg->pcfg, PINCTRL_STATE_DEFAULT); + if (ret < 0) { + return ret; + } /* Enable module's clock */ soc_pmc_peripheral_enable(cfg->periph_id); @@ -599,6 +602,7 @@ static const struct i2c_driver_api i2c_sam_twim_driver_api = { .hs_data_strength_low = DT_INST_ENUM_IDX(n, hs_data_strength_low) #define I2C_TWIM_SAM_INIT(n) \ + PINCTRL_DT_INST_DEFINE(n); \ static void i2c##n##_sam_irq_config(void) \ { \ IRQ_CONNECT(DT_INST_IRQN(n), DT_INST_IRQ(n, priority), \ @@ -606,15 +610,12 @@ static const struct i2c_driver_api i2c_sam_twim_driver_api = { DEVICE_DT_INST_GET(n), 0); \ } \ \ - static const struct soc_gpio_pin pins_twim##n[] = ATMEL_SAM_DT_INST_PINS(n); \ - \ static const struct i2c_sam_twim_dev_cfg i2c##n##_sam_config = {\ .regs = (Twim *)DT_INST_REG_ADDR(n), \ .irq_config = i2c##n##_sam_irq_config, \ .periph_id = DT_INST_PROP(n, peripheral_id), \ .irq_id = DT_INST_IRQN(n), \ - .pin_list = pins_twim##n, \ - .pin_list_size = ARRAY_SIZE(pins_twim##n), \ + .pcfg = PINCTRL_DT_INST_DEV_CONFIG_GET(n), \ .bitrate = DT_INST_PROP(n, clock_frequency), \ .hs_master_code = DT_INST_ENUM_IDX(n, hs_master_code), \ I2C_TWIM_SAM_SLEW_REGS(n), \ diff --git a/drivers/i2c/i2c_sam_twi.c b/drivers/i2c/i2c_sam_twi.c index d37f55022b2..959cff06c21 100644 --- a/drivers/i2c/i2c_sam_twi.c +++ b/drivers/i2c/i2c_sam_twi.c @@ -22,6 +22,7 @@ #include #include #include +#include #define LOG_LEVEL CONFIG_I2C_LOG_LEVEL #include @@ -41,8 +42,7 @@ struct i2c_sam_twi_dev_cfg { Twi *regs; void (*irq_config)(void); uint32_t bitrate; - const struct soc_gpio_pin *pin_list; - uint8_t pin_list_size; + const struct pinctrl_dev_config *pcfg; uint8_t periph_id; uint8_t irq_id; }; @@ -303,7 +303,10 @@ static int i2c_sam_twi_initialize(const struct device *dev) k_sem_init(&dev_data->sem, 0, 1); /* Connect pins to the peripheral */ - soc_gpio_list_configure(dev_cfg->pin_list, dev_cfg->pin_list_size); + ret = pinctrl_apply_state(dev_cfg->pcfg, PINCTRL_STATE_DEFAULT); + if (ret < 0) { + return ret; + } /* Enable module's clock */ soc_pmc_peripheral_enable(dev_cfg->periph_id); @@ -333,6 +336,7 @@ static const struct i2c_driver_api i2c_sam_twi_driver_api = { }; #define I2C_TWI_SAM_INIT(n) \ + PINCTRL_DT_INST_DEFINE(n); \ static void i2c##n##_sam_irq_config(void) \ { \ IRQ_CONNECT(DT_INST_IRQN(n), DT_INST_IRQ(n, priority), \ @@ -340,15 +344,12 @@ static const struct i2c_driver_api i2c_sam_twi_driver_api = { DEVICE_DT_INST_GET(n), 0); \ } \ \ - static const struct soc_gpio_pin pins_twi##n[] = ATMEL_SAM_DT_INST_PINS(n); \ - \ static const struct i2c_sam_twi_dev_cfg i2c##n##_sam_config = { \ .regs = (Twi *)DT_INST_REG_ADDR(n), \ .irq_config = i2c##n##_sam_irq_config, \ .periph_id = DT_INST_PROP(n, peripheral_id), \ .irq_id = DT_INST_IRQN(n), \ - .pin_list = pins_twi##n, \ - .pin_list_size = ARRAY_SIZE(pins_twi##n), \ + .pcfg = PINCTRL_DT_INST_DEV_CONFIG_GET(n), \ .bitrate = DT_INST_PROP(n, clock_frequency), \ }; \ \ diff --git a/drivers/i2c/i2c_sam_twihs.c b/drivers/i2c/i2c_sam_twihs.c index dcbbdfb656f..3597403dca9 100644 --- a/drivers/i2c/i2c_sam_twihs.c +++ b/drivers/i2c/i2c_sam_twihs.c @@ -20,6 +20,7 @@ #include #include #include +#include #define LOG_LEVEL CONFIG_I2C_LOG_LEVEL #include @@ -41,8 +42,7 @@ struct i2c_sam_twihs_dev_cfg { Twihs *regs; void (*irq_config)(void); uint32_t bitrate; - const struct soc_gpio_pin *pin_list; - uint8_t pin_list_size; + const struct pinctrl_dev_config *pcfg; uint8_t periph_id; uint8_t irq_id; }; @@ -290,7 +290,10 @@ static int i2c_sam_twihs_initialize(const struct device *dev) k_sem_init(&dev_data->sem, 0, 1); /* Connect pins to the peripheral */ - soc_gpio_list_configure(dev_cfg->pin_list, dev_cfg->pin_list_size); + ret = pinctrl_apply_state(dev_cfg->pcfg, PINCTRL_STATE_DEFAULT); + if (ret < 0) { + return ret; + } /* Enable module's clock */ soc_pmc_peripheral_enable(dev_cfg->periph_id); @@ -320,6 +323,7 @@ static const struct i2c_driver_api i2c_sam_twihs_driver_api = { }; #define I2C_TWIHS_SAM_INIT(n) \ + PINCTRL_DT_INST_DEFINE(n); \ static void i2c##n##_sam_irq_config(void) \ { \ IRQ_CONNECT(DT_INST_IRQN(n), DT_INST_IRQ(n, priority), \ @@ -327,15 +331,12 @@ static const struct i2c_driver_api i2c_sam_twihs_driver_api = { DEVICE_DT_INST_GET(n), 0); \ } \ \ - static const struct soc_gpio_pin pins_twihs##n[] = ATMEL_SAM_DT_INST_PINS(n); \ - \ static const struct i2c_sam_twihs_dev_cfg i2c##n##_sam_config = {\ .regs = (Twihs *)DT_INST_REG_ADDR(n), \ .irq_config = i2c##n##_sam_irq_config, \ .periph_id = DT_INST_PROP(n, peripheral_id), \ .irq_id = DT_INST_IRQN(n), \ - .pin_list = pins_twihs##n, \ - .pin_list_size = ARRAY_SIZE(pins_twihs##n), \ + .pcfg = PINCTRL_DT_INST_DEV_CONFIG_GET(n), \ .bitrate = DT_INST_PROP(n, clock_frequency), \ }; \ \ diff --git a/dts/arm/atmel/sam3x.dtsi b/dts/arm/atmel/sam3x.dtsi index 7430dd1b2b8..a5e3a1218b4 100644 --- a/dts/arm/atmel/sam3x.dtsi +++ b/dts/arm/atmel/sam3x.dtsi @@ -73,7 +73,6 @@ status = "disabled"; #address-cells = <1>; #size-cells = <0>; - pinctrl-0 = <&pa18a_twi0_twck0 &pa17a_twi0_twd0>; }; twi1: i2c@40090000 { @@ -86,7 +85,6 @@ status = "disabled"; #address-cells = <1>; #size-cells = <0>; - pinctrl-0 = <&pb13a_twi1_twck1 &pb12a_twi1_twd1>; }; uart: uart@400e0800 { diff --git a/dts/arm/atmel/sam4e.dtsi b/dts/arm/atmel/sam4e.dtsi index c1df4ca1eff..b69f160f042 100644 --- a/dts/arm/atmel/sam4e.dtsi +++ b/dts/arm/atmel/sam4e.dtsi @@ -80,7 +80,6 @@ status = "disabled"; #address-cells = <1>; #size-cells = <0>; - pinctrl-0 = <&pa4a_twi0_twck0 &pa3a_twi0_twd0>; }; twi1: i2c@400ac000 { @@ -93,7 +92,6 @@ status = "disabled"; #address-cells = <1>; #size-cells = <0>; - pinctrl-0 = <&pb5a_twi1_twck1 &pb4a_twi1_twd1>; }; spi0: spi@40088000 { diff --git a/dts/arm/atmel/sam4l.dtsi b/dts/arm/atmel/sam4l.dtsi index d78d9a96b77..672d4c3fea4 100644 --- a/dts/arm/atmel/sam4l.dtsi +++ b/dts/arm/atmel/sam4l.dtsi @@ -79,7 +79,6 @@ status = "disabled"; #address-cells = <1>; #size-cells = <0>; - pinctrl-0 = <&pa23b_twi0_twd0 &pa24b_twi0_twck0>; }; twim1: twim@4001c000 { compatible = "atmel,sam-i2c-twim"; @@ -91,7 +90,6 @@ status = "disabled"; #address-cells = <1>; #size-cells = <0>; - pinctrl-0 = <&pb0a_twi1_twd1 &pb1a_twi1_twck1>; }; twim2: twim@40078000 { compatible = "atmel,sam-i2c-twim"; @@ -103,7 +101,6 @@ status = "disabled"; #address-cells = <1>; #size-cells = <0>; - pinctrl-0 = <&pa21e_twi2_twd2 &pa22e_twi2_twck2>; }; twim3: twim@4007c000 { compatible = "atmel,sam-i2c-twim"; @@ -115,7 +112,6 @@ status = "disabled"; #address-cells = <1>; #size-cells = <0>; - pinctrl-0 = <&pb14c_twi3_twd3 &pb15c_twi3_twck3>; }; spi0: spi@40008000 { diff --git a/dts/arm/atmel/sam4s.dtsi b/dts/arm/atmel/sam4s.dtsi index ea4b76dc013..14fd1e74021 100644 --- a/dts/arm/atmel/sam4s.dtsi +++ b/dts/arm/atmel/sam4s.dtsi @@ -81,7 +81,6 @@ status = "disabled"; #address-cells = <1>; #size-cells = <0>; - pinctrl-0 = <&pa4a_twi0_twck0 &pa3a_twi0_twd0>; }; twi1: i2c@4001c000 { @@ -94,7 +93,6 @@ status = "disabled"; #address-cells = <1>; #size-cells = <0>; - pinctrl-0 = <&pb5a_twi1_twck1 &pb4a_twi1_twd1>; }; spi0: spi@40008000 { diff --git a/dts/arm/atmel/same70.dtsi b/dts/arm/atmel/same70.dtsi index 9839add3bb2..04a3d75e3fb 100644 --- a/dts/arm/atmel/same70.dtsi +++ b/dts/arm/atmel/same70.dtsi @@ -87,7 +87,6 @@ peripheral-id = <19>; label = "I2C_0"; status = "disabled"; - pinctrl-0 = <&pa4a_twihs0_twck0 &pa3a_twihs0_twd0>; }; twihs1: i2c@4001c000 { @@ -100,7 +99,6 @@ peripheral-id = <20>; label = "I2C_1"; status = "disabled"; - pinctrl-0 = <&pb5a_twihs1_twck1 &pb4a_twihs1_twd1>; }; twihs2: i2c@40060000 { @@ -113,7 +111,6 @@ peripheral-id = <41>; label = "I2C_2"; status = "disabled"; - pinctrl-0 = <&pd28c_twihs2_twck2 &pd27c_twihs2_twd2>; }; spi0: spi@40008000 { diff --git a/dts/bindings/i2c/atmel,sam-i2c-twi.yaml b/dts/bindings/i2c/atmel,sam-i2c-twi.yaml index 800f0e6a8e9..4c64435dddd 100644 --- a/dts/bindings/i2c/atmel,sam-i2c-twi.yaml +++ b/dts/bindings/i2c/atmel,sam-i2c-twi.yaml @@ -5,7 +5,9 @@ description: Atmel SAM Family I2C (TWI) node compatible: "atmel,sam-i2c-twi" -include: i2c-controller.yaml +include: + - name: i2c-controller.yaml + - name: pinctrl-device.yaml properties: reg: @@ -18,15 +20,3 @@ properties: type: int description: peripheral ID required: true - - pinctrl-0: - type: phandles - required: true - description: | - PIO pin configuration for TWCK & TWD signals. We expect that - the phandles will reference pinctrl nodes. These nodes will - have a nodelabel that matches the Atmel SoC HAL defines and - be of the form p__. - - For example the I2C on SAM3x would be - pinctrl-0 = <&pa18a_twi0_twck0 &pa17a_twi0_twd0>; diff --git a/dts/bindings/i2c/atmel,sam-i2c-twihs.yaml b/dts/bindings/i2c/atmel,sam-i2c-twihs.yaml index 85e76d65938..da8d58536db 100644 --- a/dts/bindings/i2c/atmel,sam-i2c-twihs.yaml +++ b/dts/bindings/i2c/atmel,sam-i2c-twihs.yaml @@ -5,7 +5,9 @@ description: Atmel SAM Family I2C (TWIHS) node compatible: "atmel,sam-i2c-twihs" -include: i2c-controller.yaml +include: + - name: i2c-controller.yaml + - name: pinctrl-device.yaml properties: reg: @@ -18,15 +20,3 @@ properties: type: int description: peripheral ID required: true - - pinctrl-0: - type: phandles - required: true - description: | - PIO pin configuration for TWCK & TWD signals. We expect that - the phandles will reference pinctrl nodes. These nodes will - have a nodelabel that matches the Atmel SoC HAL defines and - be of the form p__. - - For example the I2C on SAME7x would be - pinctrl-0 = <&pa4a_twihs0_twck0 &pa3a_twihs0_twd0>; diff --git a/dts/bindings/i2c/atmel,sam-i2c-twim.yaml b/dts/bindings/i2c/atmel,sam-i2c-twim.yaml index c373f5d5ee0..0ce59ced15d 100644 --- a/dts/bindings/i2c/atmel,sam-i2c-twim.yaml +++ b/dts/bindings/i2c/atmel,sam-i2c-twim.yaml @@ -37,7 +37,9 @@ description: | compatible: "atmel,sam-i2c-twim" -include: i2c-controller.yaml +include: + - name: i2c-controller.yaml + - name: pinctrl-device.yaml properties: reg: @@ -201,15 +203,3 @@ properties: - 5 # 101 - 6 # 110 - 7 # 111 - - pinctrl-0: - type: phandles - required: true - description: | - GPIO pin configuration for TWCK & TWD signals. We expect that - the phandles will reference pinctrl nodes. These nodes will - have a nodelabel that matches the Atmel SoC HAL defines and - be of the form p__. - - For example the I2C on SAM4L would be - pinctrl-0 = <&pb0a_twi1_twd1 &pb1a_twi1_twck1>;