From 63b2a38f1690c15e7fc9e25b9ca8650ccd15f742 Mon Sep 17 00:00:00 2001 From: Gerson Fernando Budke Date: Sun, 13 Mar 2022 12:06:04 -0300 Subject: [PATCH] drivers: i2c: Add sam0 support to pinctrl This add support to pinctrl at Atmel sam0 i2c driver. It updates all boards with new pinctrl groups format and drop pinmux entries. Signed-off-by: Gerson Fernando Budke --- ...afruit_feather_m0_basic_proto-pinctrl.dtsi | 7 +++++ .../adafruit_feather_m0_basic_proto.dts | 3 +++ .../adafruit_feather_m0_basic_proto/pinmux.c | 21 --------------- .../arduino_nano_33_iot-pinctrl.dtsi | 7 +++++ .../arduino_nano_33_iot.dts | 3 +++ boards/arm/arduino_nano_33_iot/pinmux.c | 23 ---------------- .../atsamd20_xpro/atsamd20_xpro-pinctrl.dtsi | 7 +++++ boards/arm/atsamd20_xpro/atsamd20_xpro.dts | 3 +++ boards/arm/atsamd20_xpro/pinmux.c | 21 --------------- .../atsamd21_xpro/atsamd21_xpro-pinctrl.dtsi | 7 +++++ boards/arm/atsamd21_xpro/atsamd21_xpro.dts | 3 +++ boards/arm/atsamd21_xpro/pinmux.c | 21 --------------- .../atsame54_xpro/atsame54_xpro-pinctrl.dtsi | 7 +++++ boards/arm/atsame54_xpro/atsame54_xpro.dts | 3 +++ boards/arm/atsame54_xpro/pinmux.c | 26 ------------------- .../atsamr21_xpro/atsamr21_xpro-pinctrl.dtsi | 7 +++++ boards/arm/atsamr21_xpro/atsamr21_xpro.dts | 3 +++ boards/arm/atsamr21_xpro/pinmux.c | 21 --------------- boards/arm/seeeduino_xiao/pinmux.c | 22 ---------------- .../seeeduino_xiao-pinctrl.dtsi | 7 +++++ boards/arm/seeeduino_xiao/seeeduino_xiao.dts | 3 +++ boards/arm/serpente/pinmux.c | 6 ----- boards/arm/serpente/serpente-pinctrl.dtsi | 7 +++++ drivers/i2c/i2c_sam0.c | 12 ++++++++- dts/bindings/i2c/atmel,sam0-i2c.yaml | 4 ++- 25 files changed, 91 insertions(+), 163 deletions(-) diff --git a/boards/arm/adafruit_feather_m0_basic_proto/adafruit_feather_m0_basic_proto-pinctrl.dtsi b/boards/arm/adafruit_feather_m0_basic_proto/adafruit_feather_m0_basic_proto-pinctrl.dtsi index b782e738a13..9784f46154b 100644 --- a/boards/arm/adafruit_feather_m0_basic_proto/adafruit_feather_m0_basic_proto-pinctrl.dtsi +++ b/boards/arm/adafruit_feather_m0_basic_proto/adafruit_feather_m0_basic_proto-pinctrl.dtsi @@ -6,6 +6,13 @@ #include &pinctrl { + sercom3_i2c_default: sercom3_i2c_default { + group1 { + pinmux = , + ; + }; + }; + sercom4_spi_default: sercom4_spi_default { group1 { pinmux = , diff --git a/boards/arm/adafruit_feather_m0_basic_proto/adafruit_feather_m0_basic_proto.dts b/boards/arm/adafruit_feather_m0_basic_proto/adafruit_feather_m0_basic_proto.dts index 95020870732..a53a63a5e5c 100644 --- a/boards/arm/adafruit_feather_m0_basic_proto/adafruit_feather_m0_basic_proto.dts +++ b/boards/arm/adafruit_feather_m0_basic_proto/adafruit_feather_m0_basic_proto.dts @@ -58,6 +58,9 @@ clock-frequency = ; #address-cells = <1>; #size-cells = <0>; + + pinctrl-0 = <&sercom3_i2c_default>; + pinctrl-names = "default"; }; &sercom4 { diff --git a/boards/arm/adafruit_feather_m0_basic_proto/pinmux.c b/boards/arm/adafruit_feather_m0_basic_proto/pinmux.c index 656b1154097..5bacb9cd07b 100644 --- a/boards/arm/adafruit_feather_m0_basic_proto/pinmux.c +++ b/boards/arm/adafruit_feather_m0_basic_proto/pinmux.c @@ -22,27 +22,6 @@ static int board_pinmux_init(const struct device *dev) return -ENXIO; } -#if (ATMEL_SAM0_DT_SERCOM_CHECK(3, atmel_sam0_i2c) && CONFIG_I2C_SAM0) - /* SERCOM3 on SDA=PA22/pad 0, SCL=PA23/pad 1 */ - pinmux_pin_set(muxa, 22, PINMUX_FUNC_C); - pinmux_pin_set(muxa, 23, PINMUX_FUNC_C); -#endif -#if (ATMEL_SAM0_DT_SERCOM_CHECK(0, atmel_sam0_i2c) && CONFIG_I2C_SAM0) -#warning Pin mapping may not be configured -#endif -#if (ATMEL_SAM0_DT_SERCOM_CHECK(1, atmel_sam0_i2c) && CONFIG_I2C_SAM0) -#warning Pin mapping may not be configured -#endif -#if (ATMEL_SAM0_DT_SERCOM_CHECK(2, atmel_sam0_i2c) && CONFIG_I2C_SAM0) -#warning Pin mapping may not be configured -#endif -#if (ATMEL_SAM0_DT_SERCOM_CHECK(4, atmel_sam0_i2c) && CONFIG_I2C_SAM0) -#warning Pin mapping may not be configured -#endif -#if (ATMEL_SAM0_DT_SERCOM_CHECK(5, atmel_sam0_i2c) && CONFIG_I2C_SAM0) -#warning Pin mapping may not be configured -#endif - #ifdef CONFIG_USB_DC_SAM0 /* USB DP on PA25, USB DM on PA24 */ pinmux_pin_set(muxa, 25, PINMUX_FUNC_G); diff --git a/boards/arm/arduino_nano_33_iot/arduino_nano_33_iot-pinctrl.dtsi b/boards/arm/arduino_nano_33_iot/arduino_nano_33_iot-pinctrl.dtsi index 06f1ffe9391..4b6c294f672 100644 --- a/boards/arm/arduino_nano_33_iot/arduino_nano_33_iot-pinctrl.dtsi +++ b/boards/arm/arduino_nano_33_iot/arduino_nano_33_iot-pinctrl.dtsi @@ -6,6 +6,13 @@ #include &pinctrl { + sercom4_i2c_default: sercom4_i2c_default { + group1 { + pinmux = , + ; + }; + }; + sercom1_spi_default: sercom1_spi_default { group1 { pinmux = , diff --git a/boards/arm/arduino_nano_33_iot/arduino_nano_33_iot.dts b/boards/arm/arduino_nano_33_iot/arduino_nano_33_iot.dts index d15103c1aaa..8bffff98762 100644 --- a/boards/arm/arduino_nano_33_iot/arduino_nano_33_iot.dts +++ b/boards/arm/arduino_nano_33_iot/arduino_nano_33_iot.dts @@ -107,6 +107,9 @@ #address-cells = <1>; #size-cells = <0>; + pinctrl-0 = <&sercom4_i2c_default>; + pinctrl-names = "default"; + lsm6ds3@6a { compatible = "st,lsm6ds3"; reg = <0x6a>; diff --git a/boards/arm/arduino_nano_33_iot/pinmux.c b/boards/arm/arduino_nano_33_iot/pinmux.c index 91b5415e08d..83d471fd198 100644 --- a/boards/arm/arduino_nano_33_iot/pinmux.c +++ b/boards/arm/arduino_nano_33_iot/pinmux.c @@ -22,29 +22,6 @@ static int board_pinmux_init(const struct device *dev) return -ENXIO; } -#if defined(CONFIG_I2C_SAM0) -#if ATMEL_SAM0_DT_SERCOM_CHECK(4, atmel_sam0_i2c) - /* SDA on PB8/pad 0 SCL on PB9/pad 1 */ - pinmux_pin_set(muxb, 8, PINMUX_FUNC_D); - pinmux_pin_set(muxb, 9, PINMUX_FUNC_D); -#endif -#if ATMEL_SAM0_DT_SERCOM_CHECK(0, atmel_sam0_i2c) -#warning Pin mapping may not be configured -#endif -#if ATMEL_SAM0_DT_SERCOM_CHECK(1, atmel_sam0_i2c) -#warning Pin mapping may not be configured -#endif -#if ATMEL_SAM0_DT_SERCOM_CHECK(2, atmel_sam0_i2c) -#warning Pin mapping may not be configured -#endif -#if ATMEL_SAM0_DT_SERCOM_CHECK(3, atmel_sam0_i2c) -#warning Pin mapping may not be configured -#endif -#if ATMEL_SAM0_DT_SERCOM_CHECK(5, atmel_sam0_i2c) -#warning Pin mapping may not be configured -#endif -#endif - #if defined(CONFIG_PWM_SAM0_TCC) #if ATMEL_SAM0_DT_TCC_CHECK(2, atmel_sam0_tcc_pwm) /* LED0 on PA17/TCC2/WO[1] */ diff --git a/boards/arm/atsamd20_xpro/atsamd20_xpro-pinctrl.dtsi b/boards/arm/atsamd20_xpro/atsamd20_xpro-pinctrl.dtsi index a6eaec543a6..2834998156d 100644 --- a/boards/arm/atsamd20_xpro/atsamd20_xpro-pinctrl.dtsi +++ b/boards/arm/atsamd20_xpro/atsamd20_xpro-pinctrl.dtsi @@ -6,6 +6,13 @@ #include &pinctrl { + sercom2_i2c_default: sercom2_i2c_default { + group1 { + pinmux = , + ; + }; + }; + sercom0_spi_default: sercom0_spi_default { group1 { pinmux = , diff --git a/boards/arm/atsamd20_xpro/atsamd20_xpro.dts b/boards/arm/atsamd20_xpro/atsamd20_xpro.dts index c2d9a06ed8b..82dea381871 100644 --- a/boards/arm/atsamd20_xpro/atsamd20_xpro.dts +++ b/boards/arm/atsamd20_xpro/atsamd20_xpro.dts @@ -65,6 +65,9 @@ clock-frequency = ; #address-cells = <1>; #size-cells = <0>; + + pinctrl-0 = <&sercom2_i2c_default>; + pinctrl-names = "default"; }; &sercom3 { diff --git a/boards/arm/atsamd20_xpro/pinmux.c b/boards/arm/atsamd20_xpro/pinmux.c index a7c9c85498e..2fb63cd822c 100644 --- a/boards/arm/atsamd20_xpro/pinmux.c +++ b/boards/arm/atsamd20_xpro/pinmux.c @@ -22,27 +22,6 @@ static int board_pinmux_init(const struct device *dev) return -ENXIO; } -#if (ATMEL_SAM0_DT_SERCOM_CHECK(0, atmel_sam0_i2c) && CONFIG_I2C_SAM0) -#warning Pin mapping may not be configured -#endif -#if (ATMEL_SAM0_DT_SERCOM_CHECK(1, atmel_sam0_i2c) && CONFIG_I2C_SAM0) -#warning Pin mapping may not be configured -#endif -#if (ATMEL_SAM0_DT_SERCOM_CHECK(2, atmel_sam0_i2c) && CONFIG_I2C_SAM0) - /* SERCOM2 on SDA=PA08, SCL=PA09 */ - pinmux_pin_set(muxa, 8, PINMUX_FUNC_D); - pinmux_pin_set(muxa, 9, PINMUX_FUNC_D); -#endif -#if (ATMEL_SAM0_DT_SERCOM_CHECK(3, atmel_sam0_i2c) && CONFIG_I2C_SAM0) -#warning Pin mapping may not be configured -#endif -#if (ATMEL_SAM0_DT_SERCOM_CHECK(4, atmel_sam0_i2c) && CONFIG_I2C_SAM0) -#warning Pin mapping may not be configured -#endif -#if (ATMEL_SAM0_DT_SERCOM_CHECK(5, atmel_sam0_i2c) && CONFIG_I2C_SAM0) -#warning Pin mapping may not be configured -#endif - return 0; } diff --git a/boards/arm/atsamd21_xpro/atsamd21_xpro-pinctrl.dtsi b/boards/arm/atsamd21_xpro/atsamd21_xpro-pinctrl.dtsi index b07c646a955..0c94c040348 100644 --- a/boards/arm/atsamd21_xpro/atsamd21_xpro-pinctrl.dtsi +++ b/boards/arm/atsamd21_xpro/atsamd21_xpro-pinctrl.dtsi @@ -6,6 +6,13 @@ #include &pinctrl { + sercom2_i2c_default: sercom2_i2c_default { + group1 { + pinmux = , + ; + }; + }; + sercom5_spi_default: sercom5_spi_default { group1 { pinmux = , diff --git a/boards/arm/atsamd21_xpro/atsamd21_xpro.dts b/boards/arm/atsamd21_xpro/atsamd21_xpro.dts index 36bf4cb8ae5..a260454a48d 100644 --- a/boards/arm/atsamd21_xpro/atsamd21_xpro.dts +++ b/boards/arm/atsamd21_xpro/atsamd21_xpro.dts @@ -91,6 +91,9 @@ clock-frequency = ; #address-cells = <1>; #size-cells = <0>; + + pinctrl-0 = <&sercom2_i2c_default>; + pinctrl-names = "default"; }; &sercom3 { diff --git a/boards/arm/atsamd21_xpro/pinmux.c b/boards/arm/atsamd21_xpro/pinmux.c index 8b587065e21..4ffa19f49f0 100644 --- a/boards/arm/atsamd21_xpro/pinmux.c +++ b/boards/arm/atsamd21_xpro/pinmux.c @@ -22,27 +22,6 @@ static int board_pinmux_init(const struct device *dev) return -ENXIO; } -#if (ATMEL_SAM0_DT_SERCOM_CHECK(0, atmel_sam0_i2c) && CONFIG_I2C_SAM0) -#warning Pin mapping may not be configured -#endif -#if (ATMEL_SAM0_DT_SERCOM_CHECK(1, atmel_sam0_i2c) && CONFIG_I2C_SAM0) -#warning Pin mapping may not be configured -#endif -#if (ATMEL_SAM0_DT_SERCOM_CHECK(2, atmel_sam0_i2c) && CONFIG_I2C_SAM0) - /* SERCOM2 on SDA=PA08, SCL=PA09 */ - pinmux_pin_set(muxa, 8, PINMUX_FUNC_D); - pinmux_pin_set(muxa, 9, PINMUX_FUNC_D); -#endif -#if (ATMEL_SAM0_DT_SERCOM_CHECK(3, atmel_sam0_i2c) && CONFIG_I2C_SAM0) -#warning Pin mapping may not be configured -#endif -#if (ATMEL_SAM0_DT_SERCOM_CHECK(4, atmel_sam0_i2c) && CONFIG_I2C_SAM0) -#warning Pin mapping may not be configured -#endif -#if (ATMEL_SAM0_DT_SERCOM_CHECK(5, atmel_sam0_i2c) && CONFIG_I2C_SAM0) -#warning Pin mapping may not be configured -#endif - #if (ATMEL_SAM0_DT_TCC_CHECK(0, atmel_sam0_tcc_pwm) && CONFIG_PWM_SAM0_TCC) /* TCC0 on WO0=PB30 */ pinmux_pin_set(muxb, 30, PINMUX_FUNC_E); diff --git a/boards/arm/atsame54_xpro/atsame54_xpro-pinctrl.dtsi b/boards/arm/atsame54_xpro/atsame54_xpro-pinctrl.dtsi index f17d9a9cbb5..bfc24a3b846 100644 --- a/boards/arm/atsame54_xpro/atsame54_xpro-pinctrl.dtsi +++ b/boards/arm/atsame54_xpro/atsame54_xpro-pinctrl.dtsi @@ -6,6 +6,13 @@ #include &pinctrl { + sercom7_i2c_default: sercom7_i2c_default { + group1 { + pinmux = , + ; + }; + }; + sercom4_spi_default: sercom4_spi_default { group1 { pinmux = , diff --git a/boards/arm/atsame54_xpro/atsame54_xpro.dts b/boards/arm/atsame54_xpro/atsame54_xpro.dts index 8fdc8941131..ba3a70514c6 100644 --- a/boards/arm/atsame54_xpro/atsame54_xpro.dts +++ b/boards/arm/atsame54_xpro/atsame54_xpro.dts @@ -92,6 +92,9 @@ label = "I2C_0"; #address-cells = <1>; #size-cells = <0>; + + pinctrl-0 = <&sercom7_i2c_default>; + pinctrl-names = "default"; }; &adc0 { diff --git a/boards/arm/atsame54_xpro/pinmux.c b/boards/arm/atsame54_xpro/pinmux.c index c02e78ba6d8..d186b419252 100644 --- a/boards/arm/atsame54_xpro/pinmux.c +++ b/boards/arm/atsame54_xpro/pinmux.c @@ -30,32 +30,6 @@ static int board_pinmux_init(const struct device *dev) return -ENXIO; } -#if (ATMEL_SAM0_DT_SERCOM_CHECK(0, atmel_sam0_i2c) && CONFIG_I2C_SAM0) -#warning Pin mapping may not be configured -#endif -#if (ATMEL_SAM0_DT_SERCOM_CHECK(1, atmel_sam0_i2c) && CONFIG_I2C_SAM0) -#warning Pin mapping may not be configured -#endif -#if (ATMEL_SAM0_DT_SERCOM_CHECK(2, atmel_sam0_i2c) && CONFIG_I2C_SAM0) -#warning Pin mapping may not be configured -#endif -#if (ATMEL_SAM0_DT_SERCOM_CHECK(3, atmel_sam0_i2c) && CONFIG_I2C_SAM0) -#warning Pin mapping may not be configured -#endif -#if (ATMEL_SAM0_DT_SERCOM_CHECK(4, atmel_sam0_i2c) && CONFIG_I2C_SAM0) -#warning Pin mapping may not be configured -#endif -#if (ATMEL_SAM0_DT_SERCOM_CHECK(5, atmel_sam0_i2c) && CONFIG_I2C_SAM0) -#warning Pin mapping may not be configured -#endif -#if (ATMEL_SAM0_DT_SERCOM_CHECK(6, atmel_sam0_i2c) && CONFIG_I2C_SAM0) -#warning Pin mapping may not be configured -#endif -#if (ATMEL_SAM0_DT_SERCOM_CHECK(7, atmel_sam0_i2c) && CONFIG_I2C_SAM0) - pinmux_pin_set(muxd, 8, PINMUX_FUNC_C); - pinmux_pin_set(muxd, 9, PINMUX_FUNC_C); -#endif - #if (ATMEL_SAM0_DT_TCC_CHECK(0, atmel_sam0_tcc_pwm) && CONFIG_PWM_SAM0_TCC) /* TCC0 on WO2=PC18 */ pinmux_pin_set(muxc, 18, PINMUX_FUNC_F); diff --git a/boards/arm/atsamr21_xpro/atsamr21_xpro-pinctrl.dtsi b/boards/arm/atsamr21_xpro/atsamr21_xpro-pinctrl.dtsi index 703c6a8e122..e883a5e5dc4 100644 --- a/boards/arm/atsamr21_xpro/atsamr21_xpro-pinctrl.dtsi +++ b/boards/arm/atsamr21_xpro/atsamr21_xpro-pinctrl.dtsi @@ -6,6 +6,13 @@ #include &pinctrl { + sercom1_i2c_default: sercom1_i2c_default { + group1 { + pinmux = , + ; + }; + }; + sercom4_spi_default: sercom4_spi_default { group1 { pinmux = , diff --git a/boards/arm/atsamr21_xpro/atsamr21_xpro.dts b/boards/arm/atsamr21_xpro/atsamr21_xpro.dts index 3f3f1a99036..4737f2d7540 100644 --- a/boards/arm/atsamr21_xpro/atsamr21_xpro.dts +++ b/boards/arm/atsamr21_xpro/atsamr21_xpro.dts @@ -126,6 +126,9 @@ label = "I2C_0"; #address-cells = <1>; #size-cells = <0>; + + pinctrl-0 = <&sercom1_i2c_default>; + pinctrl-names = "default"; }; &sercom4 { diff --git a/boards/arm/atsamr21_xpro/pinmux.c b/boards/arm/atsamr21_xpro/pinmux.c index 9837367d487..87d164149ab 100644 --- a/boards/arm/atsamr21_xpro/pinmux.c +++ b/boards/arm/atsamr21_xpro/pinmux.c @@ -27,27 +27,6 @@ static int board_pinmux_init(const struct device *dev) return -ENXIO; } -#if (ATMEL_SAM0_DT_SERCOM_CHECK(0, atmel_sam0_i2c) && CONFIG_I2C_SAM0) -#warning Pin mapping may not be configured -#endif -#if (ATMEL_SAM0_DT_SERCOM_CHECK(1, atmel_sam0_i2c) && CONFIG_I2C_SAM0) - /* SERCOM1 on SDA=PA16, SCL=PA17 */ - pinmux_pin_set(muxa, 16, PINMUX_FUNC_C); - pinmux_pin_set(muxa, 17, PINMUX_FUNC_C); -#endif -#if (ATMEL_SAM0_DT_SERCOM_CHECK(2, atmel_sam0_i2c) && CONFIG_I2C_SAM0) -#warning Pin mapping may not be configured -#endif -#if (ATMEL_SAM0_DT_SERCOM_CHECK(3, atmel_sam0_i2c) && CONFIG_I2C_SAM0) -#warning Pin mapping may not be configured -#endif -#if (ATMEL_SAM0_DT_SERCOM_CHECK(4, atmel_sam0_i2c) && CONFIG_I2C_SAM0) -#warning Pin mapping may not be configured -#endif -#if (ATMEL_SAM0_DT_SERCOM_CHECK(5, atmel_sam0_i2c) && CONFIG_I2C_SAM0) -#warning Pin mapping may not be configured -#endif - #if (ATMEL_SAM0_DT_TCC_CHECK(0, atmel_sam0_tcc_pwm) && \ defined(CONFIG_PWM_SAM0_TCC)) diff --git a/boards/arm/seeeduino_xiao/pinmux.c b/boards/arm/seeeduino_xiao/pinmux.c index 1f32667045d..9fd898d6163 100644 --- a/boards/arm/seeeduino_xiao/pinmux.c +++ b/boards/arm/seeeduino_xiao/pinmux.c @@ -22,28 +22,6 @@ static int board_pinmux_init(const struct device *dev) return -ENXIO; } -#if ATMEL_SAM0_DT_SERCOM_CHECK(2, atmel_sam0_i2c) && defined(CONFIG_I2C_SAM0) - /* SERCOM2 on SDA=PA08, SCL=PA09 */ - pinmux_pin_set(muxa, 8, PINMUX_FUNC_D); - pinmux_pin_set(muxa, 9, PINMUX_FUNC_D); -#endif - -#if ATMEL_SAM0_DT_SERCOM_CHECK(0, atmel_sam0_i2c) && defined(CONFIG_I2C_SAM0) -#warning Pin mapping may not be configured -#endif -#if ATMEL_SAM0_DT_SERCOM_CHECK(1, atmel_sam0_i2c) && defined(CONFIG_I2C_SAM0) -#warning Pin mapping may not be configured -#endif -#if ATMEL_SAM0_DT_SERCOM_CHECK(3, atmel_sam0_i2c) && defined(CONFIG_I2C_SAM0) -#warning Pin mapping may not be configured -#endif -#if ATMEL_SAM0_DT_SERCOM_CHECK(4, atmel_sam0_i2c) && defined(CONFIG_I2C_SAM0) -#warning Pin mapping may not be configured -#endif -#if ATMEL_SAM0_DT_SERCOM_CHECK(5, atmel_sam0_i2c) && defined(CONFIG_I2C_SAM0) -#warning Pin mapping may not be configured -#endif - #if defined(CONFIG_USB_DC_SAM0) /* USB DP on PA25, USB DM on PA24 */ pinmux_pin_set(muxa, 25, PINMUX_FUNC_G); diff --git a/boards/arm/seeeduino_xiao/seeeduino_xiao-pinctrl.dtsi b/boards/arm/seeeduino_xiao/seeeduino_xiao-pinctrl.dtsi index cddf1372405..3a45aa22b00 100644 --- a/boards/arm/seeeduino_xiao/seeeduino_xiao-pinctrl.dtsi +++ b/boards/arm/seeeduino_xiao/seeeduino_xiao-pinctrl.dtsi @@ -6,6 +6,13 @@ #include &pinctrl { + sercom2_i2c_default: sercom2_i2c_default { + group1 { + pinmux = , + ; + }; + }; + sercom0_spi_default: sercom0_spi_default { group1 { pinmux = , diff --git a/boards/arm/seeeduino_xiao/seeeduino_xiao.dts b/boards/arm/seeeduino_xiao/seeeduino_xiao.dts index 70b7705442e..eccb8a8389f 100644 --- a/boards/arm/seeeduino_xiao/seeeduino_xiao.dts +++ b/boards/arm/seeeduino_xiao/seeeduino_xiao.dts @@ -78,6 +78,9 @@ clock-frequency = ; #address-cells = <1>; #size-cells = <0>; + + pinctrl-0 = <&sercom2_i2c_default>; + pinctrl-names = "default"; }; zephyr_udc0: &usb0 { diff --git a/boards/arm/serpente/pinmux.c b/boards/arm/serpente/pinmux.c index a74f47da963..af4d1dfe5f1 100644 --- a/boards/arm/serpente/pinmux.c +++ b/boards/arm/serpente/pinmux.c @@ -18,12 +18,6 @@ static int board_pinmux_init(const struct device *dev) return -ENXIO; } -#if ATMEL_SAM0_DT_SERCOM_CHECK(2, atmel_sam0_i2c) && defined(CONFIG_I2C_SAM0) - /* SERCOM2 on SDA=PA08, SCL=PA09 */ - pinmux_pin_set(muxa, 4, PINMUX_FUNC_D); - pinmux_pin_set(muxa, 5, PINMUX_FUNC_D); -#endif - #ifdef CONFIG_USB_DC_SAM0 /* USB DP on PA25, USB DM on PA24 */ pinmux_pin_set(muxa, 25, PINMUX_FUNC_G); diff --git a/boards/arm/serpente/serpente-pinctrl.dtsi b/boards/arm/serpente/serpente-pinctrl.dtsi index d87d067a351..2a91e95f681 100644 --- a/boards/arm/serpente/serpente-pinctrl.dtsi +++ b/boards/arm/serpente/serpente-pinctrl.dtsi @@ -6,6 +6,13 @@ #include &pinctrl { + sercom0_i2c_default: sercom0_i2c_default { + group1 { + pinmux = , + ; + }; + }; + sercom0_spi_default: sercom0_spi_default { group1 { pinmux = , diff --git a/drivers/i2c/i2c_sam0.c b/drivers/i2c/i2c_sam0.c index 3195a395f5f..22bba48abd3 100644 --- a/drivers/i2c/i2c_sam0.c +++ b/drivers/i2c/i2c_sam0.c @@ -12,6 +12,7 @@ #include #include #include +#include #include LOG_MODULE_REGISTER(i2c_sam0, CONFIG_I2C_LOG_LEVEL); @@ -24,6 +25,7 @@ LOG_MODULE_REGISTER(i2c_sam0, CONFIG_I2C_LOG_LEVEL); struct i2c_sam0_dev_config { SercomI2cm *regs; + const struct pinctrl_dev_config *pcfg; uint32_t bitrate; #ifdef MCLK volatile uint32_t *mclk; @@ -711,6 +713,11 @@ static int i2c_sam0_initialize(const struct device *dev) /* Disable all I2C interrupts */ i2c->INTENCLR.reg = SERCOM_I2CM_INTENCLR_MASK; + retval = pinctrl_apply_state(cfg->pcfg, PINCTRL_STATE_DEFAULT); + if (retval < 0) { + return retval; + } + /* I2C mode, enable timeouts */ i2c->CTRLA.reg = SERCOM_I2CM_CTRLA_MODE_I2C_MASTER | #ifdef SERCOM_I2CM_CTRLA_LOWTOUTEN @@ -796,17 +803,19 @@ static void i2c_sam0_irq_config_##n(const struct device *dev) \ #define I2C_SAM0_CONFIG(n) \ static const struct i2c_sam0_dev_config i2c_sam0_dev_config_##n = { \ .regs = (SercomI2cm *)DT_INST_REG_ADDR(n), \ + .pcfg = PINCTRL_DT_INST_DEV_CONFIG_GET(n), \ .bitrate = DT_INST_PROP(n, clock_frequency), \ .mclk = (volatile uint32_t *)MCLK_MASK_DT_INT_REG_ADDR(n), \ .mclk_mask = BIT(DT_INST_CLOCKS_CELL_BY_NAME(n, mclk, bit)), \ .gclk_core_id = DT_INST_CLOCKS_CELL_BY_NAME(n, gclk, periph_ch),\ - .irq_config_func = &i2c_sam0_irq_config_##n \ + .irq_config_func = &i2c_sam0_irq_config_##n, \ I2C_SAM0_DMA_CHANNELS(n) \ } #else /* !MCLK */ #define I2C_SAM0_CONFIG(n) \ static const struct i2c_sam0_dev_config i2c_sam0_dev_config_##n = { \ .regs = (SercomI2cm *)DT_INST_REG_ADDR(n), \ + .pcfg = PINCTRL_DT_INST_DEV_CONFIG_GET(n), \ .bitrate = DT_INST_PROP(n, clock_frequency), \ .pm_apbcmask = BIT(DT_INST_CLOCKS_CELL_BY_NAME(n, pm, bit)), \ .gclk_clkctrl_id = DT_INST_CLOCKS_CELL_BY_NAME(n, gclk, clkctrl_id),\ @@ -816,6 +825,7 @@ static const struct i2c_sam0_dev_config i2c_sam0_dev_config_##n = { \ #endif #define I2C_SAM0_DEVICE(n) \ + PINCTRL_DT_INST_DEFINE(n); \ static void i2c_sam0_irq_config_##n(const struct device *dev); \ I2C_SAM0_CONFIG(n); \ static struct i2c_sam0_dev_data i2c_sam0_dev_data_##n; \ diff --git a/dts/bindings/i2c/atmel,sam0-i2c.yaml b/dts/bindings/i2c/atmel,sam0-i2c.yaml index aacf61f3e2e..aaa46d61737 100644 --- a/dts/bindings/i2c/atmel,sam0-i2c.yaml +++ b/dts/bindings/i2c/atmel,sam0-i2c.yaml @@ -5,7 +5,9 @@ description: Atmel SAM0 series SERCOM I2C node compatible: "atmel,sam0-i2c" -include: i2c-controller.yaml +include: + - name: i2c-controller.yaml + - name: pinctrl-device.yaml properties: reg: