Orange Pi5 kernel

Deprecated Linux kernel 5.10.110 for OrangePi 5/5B/5+ boards

3 Commits   0 Branches   0 Tags
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1) /* SPDX-License-Identifier: GPL-2.0 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3)  * Copyright (c) 2020 TOSHIBA CORPORATION
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4)  * Copyright (c) 2020 Toshiba Electronic Devices & Storage Corporation
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5)  * Copyright (c) 2020 Nobuhiro Iwamatsu <nobuhiro1.iwamatsu@toshiba.co.jp>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8) #ifndef __VISCONTI_PINCTRL_COMMON_H__
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9) #define __VISCONTI_PINCTRL_COMMON_H__
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 11) struct pinctrl_pin_desc;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 12) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 13) /* PIN */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 14) #define VISCONTI_PINS(pins_name, ...)  \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 15) 	static const unsigned int pins_name ## _pins[] = { __VA_ARGS__ }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 16) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 17) struct visconti_desc_pin {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 18) 	struct pinctrl_pin_desc pin;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 19) 	unsigned int dsel_offset;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 20) 	unsigned int dsel_shift;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 21) 	unsigned int pude_offset;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 22) 	unsigned int pudsel_offset;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 23) 	unsigned int pud_shift;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 24) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 25) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 26) #define VISCONTI_PIN(_pin, dsel, d_sh, pude, pudsel, p_sh)	\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 27) {								\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 28) 	.pin = _pin,						\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 29) 	.dsel_offset = dsel,					\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 30) 	.dsel_shift = d_sh,					\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 31) 	.pude_offset = pude,					\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 32) 	.pudsel_offset = pudsel,				\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 33) 	.pud_shift = p_sh,					\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 34) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 35) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 36) /* Group */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 37) #define VISCONTI_GROUPS(groups_name, ...)	\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 38) 	static const char * const groups_name ## _grps[] = { __VA_ARGS__ }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 39) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 40) struct visconti_mux {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 41) 	unsigned int offset;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 42) 	unsigned int mask;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 43) 	unsigned int val;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 44) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 45) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 46) struct visconti_pin_group {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 47) 	const char *name;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 48) 	const unsigned int *pins;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 49) 	unsigned int nr_pins;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 50) 	struct visconti_mux mux;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 51) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 52) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 53) #define VISCONTI_PIN_GROUP(group_name, off, msk, v)	\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 54) {							\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 55) 	.name = __stringify(group_name) "_grp",		\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 56) 	.pins = group_name ## _pins,			\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 57) 	.nr_pins = ARRAY_SIZE(group_name ## _pins),	\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 58) 	.mux = {					\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 59) 		.offset = off,				\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 60) 		.mask = msk,				\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 61) 		.val = v,				\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 62) 	}						\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 63) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 64) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 65) /* MUX */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 66) struct visconti_pin_function {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 67) 	const char *name;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 68) 	const char * const *groups;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 69) 	unsigned int nr_groups;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 70) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 71) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 72) #define VISCONTI_PIN_FUNCTION(func)		\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 73) {						\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 74) 	.name = #func,				\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 75) 	.groups = func ## _grps,		\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 76) 	.nr_groups = ARRAY_SIZE(func ## _grps),	\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 77) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 78) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 79) /* chip dependent data */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 80) struct visconti_pinctrl_devdata {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 81) 	const struct visconti_desc_pin *pins;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 82) 	unsigned int nr_pins;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 83) 	const struct visconti_pin_group *groups;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 84) 	unsigned int nr_groups;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 85) 	const struct visconti_pin_function *functions;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 86) 	unsigned int nr_functions;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 87) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 88) 	const struct visconti_mux *gpio_mux;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 89) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 90) 	void (*unlock)(void __iomem *base);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 91) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 92) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 93) int visconti_pinctrl_probe(struct platform_device *pdev,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 94) 			   const struct visconti_pinctrl_devdata *devdata);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 95) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 96) #endif /* __VISCONTI_PINCTRL_COMMON_H__ */