blob: 24290e2c461e8fb9e112622ccce14b0fca9f7798 [file] [log] [blame]
/*
* Copyright (c) 2020 Linaro Limited
* Copyright (c) 2021 ATL Electronics
* SPDX-License-Identifier: Apache-2.0
*/
#ifndef PINCTRL_CYPRESS_PSOC6_H_
#define PINCTRL_CYPRESS_PSOC6_H_
#include <zephyr/dt-bindings/dt-util.h>
/**
* Functions are defined using HSIOM SEL
*/
#define HSIOM_SEL_gpio 0
#define HSIOM_SEL_gpio_dsi 1
#define HSIOM_SEL_dsi_dsi 2
#define HSIOM_SEL_dsi_gpio 3
#define HSIOM_SEL_amuxa 4
#define HSIOM_SEL_amuxb 5
#define HSIOM_SEL_amuxa_dsi 6
#define HSIOM_SEL_amuxb_dsi 7
#define HSIOM_SEL_act_0 8
#define HSIOM_SEL_act_1 9
#define HSIOM_SEL_act_2 10
#define HSIOM_SEL_act_3 11
#define HSIOM_SEL_ds_0 12
#define HSIOM_SEL_ds_1 13
#define HSIOM_SEL_ds_2 14
#define HSIOM_SEL_ds_3 15
#define HSIOM_SEL_act_4 16
#define HSIOM_SEL_act_5 17
#define HSIOM_SEL_act_6 18
#define HSIOM_SEL_act_7 19
#define HSIOM_SEL_act_8 20
#define HSIOM_SEL_act_9 21
#define HSIOM_SEL_act_10 22
#define HSIOM_SEL_act_11 23
#define HSIOM_SEL_act_12 24
#define HSIOM_SEL_act_13 25
#define HSIOM_SEL_act_14 26
#define HSIOM_SEL_act_15 27
#define HSIOM_SEL_ds_4 28
#define HSIOM_SEL_ds_5 29
#define HSIOM_SEL_ds_6 30
#define HSIOM_SEL_ds_7 31
/* Create a pincfg device tree node:
*
* The node name and nodelabel will be of the form:
*
* NODE = p<port>_<pin>_<inst>_<signal>
*
* NODE: NODE {
* cypress,pins = < &gpio_prt<port> <pin> HSIOM_SEL_<hsiom> >;
* flags_1;
* ...
* flags_N;
* }
*
* So for example:
*
* DT_CYPRESS_PIN(uart5, rx, 5, 0, act_6);
*
* Will become:
*
* p5_0_uart5_rx: p5_0_uart5_rx {
* cypress,pins = <&gpio_prt5 0x0 0x12 >;
* }
*
* Flags are optional and should be pass one by one as arguments:
*
* DT_CYPRESS_PIN(uart5, rx, 5, 0, act_6, bias-pull-up, input-enable);
*
* Will become:
*
* p5_0_uart5_rx: p5_0_uart5_rx {
* cypress,pins = <&gpio_prt5 0x0 0x12 >;
* bias-pull-up;
* input-enable;
* }
*
* For the complete list of flags see cypress,psoc6-pinctrl.yaml
*
*/
#define DT_CYPRESS_HSIOM_FLAG(flag) flag;
#define DT_CYPRESS_HSIOM_FLAGS(...) \
MACRO_MAP_CAT(DT_CYPRESS_HSIOM_FLAG __VA_OPT__(,) __VA_ARGS__)
#define DT_CYPRESS_HSIOM(inst, signal, port, pin, hsiom, ...) \
p##port##_##pin##_##inst##_##signal: \
p##port##_##pin##_##inst##_##signal { \
cypress,pins = < &gpio_prt##port pin HSIOM_SEL_##hsiom > ; \
DT_CYPRESS_HSIOM_FLAGS(__VA_ARGS__) \
}
#endif /* PINCTRL_CYPRESS_PSOC6_H_ */