Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 9 additions & 0 deletions tests/drivers/pinctrl/microchip/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
# Copyright (c) 2025 Microchip Technology Inc.
# SPDX-License-Identifier: Apache-2.0

cmake_minimum_required(VERSION 3.20.0)
find_package(Zephyr REQUIRED HINTS $ENV{ZEPHYR_BASE})

project(microchip)

target_sources(app PRIVATE src/main.c ../common/test_device.c)
17 changes: 17 additions & 0 deletions tests/drivers/pinctrl/microchip/Kconfig
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
# Copyright (c) 2025 Microchip Technology Inc.
# SPDX-License-Identifier: Apache-2.0

mainmenu "pinctrl microchip DT Test"

source "Kconfig.zephyr"

config PINCTRL_TEST_NON_STATIC
bool "Access to pin control configuration"
select PINCTRL_NON_STATIC
help
This option should be selected by unit tests that need to access the pin
control configuration defined in a device driver.

config TEST_PINCTRL_MCHP_SAM
bool "Enable test for MCHP SAM drive strength"
default y if SOC_FAMILY_MICROCHIP_SAM_D5X_E5X
4 changes: 4 additions & 0 deletions tests/drivers/pinctrl/microchip/boards/sam_e54_xpro.conf
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
# Copyright (c) 2025 Microchip Technology Inc.
# SPDX-License-Identifier: Apache-2.0

CONFIG_TEST_PINCTRL_MCHP_SAM=y
44 changes: 44 additions & 0 deletions tests/drivers/pinctrl/microchip/boards/sam_e54_xpro.overlay
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
/*
* Copyright (c) 2025 Microchip Technology Inc.
*
* SPDX-License-Identifier: Apache-2.0
*/

/ {
test_device: test_device@0 {
compatible = "vnd,pinctrl-device";
reg = <0x0 0x1>;
pinctrl-0 = <&test_device_default>;
pinctrl-names = "default";
};
};

&pinctrl {
test_device_default: test_device_default {
/* Note: the groups are just meant for testing if properties and
* pins are parsed correctly, but do not necessarily represent a
* feasible combination
*/
group1 {
pinmux = <PB16C_SERCOM5_PAD0>,
<PB17C_SERCOM5_PAD1>;
};
group2 {
pinmux = <PC4C_SERCOM6_PAD0>;
bias-pull-up;
};
group3 {
pinmux = <PC7C_SERCOM6_PAD3>;
bias-pull-down;
};
group4 {
pinmux = <PC22C_SERCOM1_PAD0>;
input-enable;
output-enable;
};
group5 {
pinmux = <PC23C_SERCOM1_PAD1>;
drive-strength=<1>;
};
};
};
2 changes: 2 additions & 0 deletions tests/drivers/pinctrl/microchip/prj.conf
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
CONFIG_ZTEST=y
CONFIG_PINCTRL_TEST_NON_STATIC=y
76 changes: 76 additions & 0 deletions tests/drivers/pinctrl/microchip/src/main.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,76 @@
/*
* Copyright (c) 2025 Microchip Technology Inc.
*
* SPDX-License-Identifier: Apache-2.0
*/

#include <zephyr/drivers/pinctrl.h>
#include <zephyr/ztest.h>

/* Pin configuration for test device */
#define TEST_DEVICE DT_NODELABEL(test_device)
PINCTRL_DT_DEV_CONFIG_DECLARE(TEST_DEVICE);
static const struct pinctrl_dev_config *pcfg = PINCTRL_DT_DEV_CONFIG_GET(TEST_DEVICE);

#define MCHP_PINCTRL_FLAG_GET(pincfg, pos) (((pincfg.pinflag) >> pos) & MCHP_PINCTRL_FLAG_MASK)

ZTEST(pinctrl_mchp, test_pullup_pulldown_none)
{
const struct pinctrl_state *scfg;

scfg = &pcfg->states[0];

zassert_equal(MCHP_PINCTRL_FLAG_GET(scfg->pins[0], MCHP_PINCTRL_PULLUP_POS), 0);
zassert_equal(MCHP_PINCTRL_FLAG_GET(scfg->pins[0], MCHP_PINCTRL_PULLDOWN_POS), 0);
zassert_equal(MCHP_PINCTRL_FLAG_GET(scfg->pins[1], MCHP_PINCTRL_PULLUP_POS), 0);
zassert_equal(MCHP_PINCTRL_FLAG_GET(scfg->pins[1], MCHP_PINCTRL_PULLDOWN_POS), 0);
}

ZTEST(pinctrl_mchp, test_pullup)
{
const struct pinctrl_state *scfg;

scfg = &pcfg->states[0];

zassert_equal(MCHP_PINCTRL_FLAG_GET(scfg->pins[2], MCHP_PINCTRL_PULLUP_POS), 1);
}

ZTEST(pinctrl_mchp, test_pulldown)
{
const struct pinctrl_state *scfg;

scfg = &pcfg->states[0];

zassert_equal(MCHP_PINCTRL_FLAG_GET(scfg->pins[3], MCHP_PINCTRL_PULLDOWN_POS), 1);
}

ZTEST(pinctrl_mchp, test_input_output_enable)
{
const struct pinctrl_state *scfg;

scfg = &pcfg->states[0];

zassert_equal(MCHP_PINCTRL_FLAG_GET(scfg->pins[4], MCHP_PINCTRL_INPUTENABLE_POS), 1);
zassert_equal(MCHP_PINCTRL_FLAG_GET(scfg->pins[4], MCHP_PINCTRL_OUTPUTENABLE_POS), 1);
}

#if defined(CONFIG_TEST_PINCTRL_MCHP_SAM)
ZTEST(pinctrl_mchp, test_drive_strength)
{
const struct pinctrl_state *scfg;

scfg = &pcfg->states[0];

zassert_equal(MCHP_PINCTRL_FLAG_GET(scfg->pins[5], MCHP_PINCTRL_DRIVESTRENGTH_POS), 1);
}
#endif

ZTEST(pinctrl_mchp, test_apply_state)
{
int ret;

ret = pinctrl_apply_state(pcfg, PINCTRL_STATE_DEFAULT);
zassert_equal(ret, 0);
}

ZTEST_SUITE(pinctrl_mchp, NULL, NULL, NULL, NULL, NULL);
7 changes: 7 additions & 0 deletions tests/drivers/pinctrl/microchip/testcase.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
tests:
drivers.pinctrl.microchip:
tags:
- drivers
- pinctrl
platform_allow:
- sam_e54_xpro