soc: kinetis: Add common pinctrl include file

Add pinctrl include file to define SOC specific pinctrl_soc_t structure,
used to store pin configuration for pinctrl driver

Signed-off-by: Daniel DeGrasse <daniel.degrasse@nxp.com>
This commit is contained in:
Daniel DeGrasse 2022-02-21 12:50:56 -06:00 committed by David Leach
commit bdbb72a95a
2 changed files with 62 additions and 0 deletions

View file

@ -4,6 +4,9 @@ zephyr_sources_ifdef(CONFIG_KINETIS_FLASH_CONFIG flash_configuration.c)
add_subdirectory(${SOC_SERIES})
# This is for access to pinctrl macros
zephyr_include_directories(common)
zephyr_linker_sources_ifdef(CONFIG_KINETIS_FLASH_CONFIG
ROM_START
SORT_KEY ${CONFIG_KINETIS_FLASH_CONFIG_OFFSET}

View file

@ -0,0 +1,59 @@
/*
* Copyright (c) 2022 NXP
*
* SPDX-License-Identifier: Apache-2.0
*/
/*
* @file
* NXP Kinetis SOC specific helpers for pinctrl driver
*/
#ifndef ZEPHYR_SOC_ARM_NXP_KINETIS_COMMON_PINCTRL_SOC_H_
#define ZEPHYR_SOC_ARM_NXP_KINETIS_COMMON_PINCTRL_SOC_H_
#include <devicetree.h>
#include <zephyr/types.h>
#ifdef __cplusplus
extern "C" {
#endif
/** @cond INTERNAL_HIDDEN */
typedef uint32_t pinctrl_soc_pin_t;
/* Kinetis KW/KL series does not support open drain. Define macros to have no effect */
#if defined(CONFIG_SOC_SERIES_KINETIS_KWX) || \
defined(CONFIG_SOC_SERIES_KINETIS_KL2X)
#define PORT_PCR_ODE(x) 0x0
#define PORT_PCR_ODE_MASK 0x0
#endif
#define Z_PINCTRL_KINETIS_PINCFG(node_id) \
(PORT_PCR_DSE(DT_ENUM_IDX(node_id, drive_strength)) | \
PORT_PCR_PS(DT_PROP(node_id, bias_pull_up)) | \
PORT_PCR_PE(DT_PROP(node_id, bias_pull_up)) | \
PORT_PCR_PE(DT_PROP(node_id, bias_pull_down)) | \
PORT_PCR_ODE(DT_PROP(node_id, drive_open_drain)) | \
PORT_PCR_SRE(DT_ENUM_IDX(node_id, slew_rate)) | \
PORT_PCR_PFE(DT_PROP(node_id, nxp_passive_filter)))
#define Z_PINCTRL_KINETIS_PCR_MASK \
(PORT_PCR_MUX_MASK | PORT_PCR_DSE_MASK | PORT_PCR_ODE_MASK | \
PORT_PCR_PFE_MASK | PORT_PCR_SRE_MASK | PORT_PCR_PE_MASK | \
PORT_PCR_PS_MASK)
#define Z_PINCTRL_STATE_PIN_INIT(group, pin_prop, idx) \
DT_PROP_BY_IDX(group, pin_prop, idx) | Z_PINCTRL_KINETIS_PINCFG(group),
#define Z_PINCTRL_STATE_PINS_INIT(node_id, prop) \
{DT_FOREACH_CHILD_VARGS(DT_PHANDLE(node_id, prop), \
DT_FOREACH_PROP_ELEM, pinmux, Z_PINCTRL_STATE_PIN_INIT)};
#ifdef __cplusplus
}
#endif
#endif /* ZEPHYR_SOC_ARM_NXP_KINETIS_COMMON_PINCTRL_SOC_H_ */