File Index
Files and directories
Sign in
FILE

machine.h

File preview with syntax highlighting.

linux-6.19.14/include/linux/pinctrl/machine.h C
  1/* SPDX-License-Identifier: GPL-2.0-only */
  2/*
  3 * Machine interface for the pinctrl subsystem.
  4 *
  5 * Copyright (C) 2011 ST-Ericsson SA
  6 * Written on behalf of Linaro for ST-Ericsson
  7 * Based on bits of regulator core, gpio core and clk core
  8 *
  9 * Author: Linus Walleij <linus.walleij@linaro.org>
 10 */
 11#ifndef __LINUX_PINCTRL_MACHINE_H
 12#define __LINUX_PINCTRL_MACHINE_H
 13
 14#include <linux/array_size.h>
 15
 16#include <linux/pinctrl/pinctrl-state.h>
 17
 18enum pinctrl_map_type {
 19	PIN_MAP_TYPE_INVALID,
 20	PIN_MAP_TYPE_DUMMY_STATE,
 21	PIN_MAP_TYPE_MUX_GROUP,
 22	PIN_MAP_TYPE_CONFIGS_PIN,
 23	PIN_MAP_TYPE_CONFIGS_GROUP,
 24};
 25
 26/**
 27 * struct pinctrl_map_mux - mapping table content for MAP_TYPE_MUX_GROUP
 28 * @group: the name of the group whose mux function is to be configured. This
 29 *	field may be left NULL, and the first applicable group for the function
 30 *	will be used.
 31 * @function: the mux function to select for the group
 32 */
 33struct pinctrl_map_mux {
 34	const char *group;
 35	const char *function;
 36};
 37
 38/**
 39 * struct pinctrl_map_configs - mapping table content for MAP_TYPE_CONFIGS_*
 40 * @group_or_pin: the name of the pin or group whose configuration parameters
 41 *	are to be configured.
 42 * @configs: a pointer to an array of config parameters/values to program into
 43 *	hardware. Each individual pin controller defines the format and meaning
 44 *	of config parameters.
 45 * @num_configs: the number of entries in array @configs
 46 */
 47struct pinctrl_map_configs {
 48	const char *group_or_pin;
 49	unsigned long *configs;
 50	unsigned int num_configs;
 51};
 52
 53/**
 54 * struct pinctrl_map - boards/machines shall provide this map for devices
 55 * @dev_name: the name of the device using this specific mapping, the name
 56 *	must be the same as in your struct device*. If this name is set to the
 57 *	same name as the pin controllers own dev_name(), the map entry will be
 58 *	hogged by the driver itself upon registration
 59 * @name: the name of this specific map entry for the particular machine.
 60 *	This is the parameter passed to pinmux_lookup_state()
 61 * @type: the type of mapping table entry
 62 * @ctrl_dev_name: the name of the device controlling this specific mapping,
 63 *	the name must be the same as in your struct device*. This field is not
 64 *	used for PIN_MAP_TYPE_DUMMY_STATE
 65 * @data: Data specific to the mapping type
 66 */
 67struct pinctrl_map {
 68	const char *dev_name;
 69	const char *name;
 70	enum pinctrl_map_type type;
 71	const char *ctrl_dev_name;
 72	union {
 73		struct pinctrl_map_mux mux;
 74		struct pinctrl_map_configs configs;
 75	} data;
 76};
 77
 78/* Convenience macros to create mapping table entries */
 79
 80#define PIN_MAP_DUMMY_STATE(dev, state) \
 81	{								\
 82		.dev_name = dev,					\
 83		.name = state,						\
 84		.type = PIN_MAP_TYPE_DUMMY_STATE,			\
 85	}
 86
 87#define PIN_MAP_MUX_GROUP(dev, state, pinctrl, grp, func)		\
 88	{								\
 89		.dev_name = dev,					\
 90		.name = state,						\
 91		.type = PIN_MAP_TYPE_MUX_GROUP,				\
 92		.ctrl_dev_name = pinctrl,				\
 93		.data.mux = {						\
 94			.group = grp,					\
 95			.function = func,				\
 96		},							\
 97	}
 98
 99#define PIN_MAP_MUX_GROUP_DEFAULT(dev, pinctrl, grp, func)		\
100	PIN_MAP_MUX_GROUP(dev, PINCTRL_STATE_DEFAULT, pinctrl, grp, func)
101
102#define PIN_MAP_MUX_GROUP_HOG(dev, state, grp, func)			\
103	PIN_MAP_MUX_GROUP(dev, state, dev, grp, func)
104
105#define PIN_MAP_MUX_GROUP_HOG_DEFAULT(dev, grp, func)			\
106	PIN_MAP_MUX_GROUP(dev, PINCTRL_STATE_DEFAULT, dev, grp, func)
107
108#define PIN_MAP_CONFIGS_PIN(dev, state, pinctrl, pin, cfgs)		\
109	{								\
110		.dev_name = dev,					\
111		.name = state,						\
112		.type = PIN_MAP_TYPE_CONFIGS_PIN,			\
113		.ctrl_dev_name = pinctrl,				\
114		.data.configs = {					\
115			.group_or_pin = pin,				\
116			.configs = cfgs,				\
117			.num_configs = ARRAY_SIZE(cfgs),		\
118		},							\
119	}
120
121#define PIN_MAP_CONFIGS_PIN_DEFAULT(dev, pinctrl, pin, cfgs)		\
122	PIN_MAP_CONFIGS_PIN(dev, PINCTRL_STATE_DEFAULT, pinctrl, pin, cfgs)
123
124#define PIN_MAP_CONFIGS_PIN_HOG(dev, state, pin, cfgs)			\
125	PIN_MAP_CONFIGS_PIN(dev, state, dev, pin, cfgs)
126
127#define PIN_MAP_CONFIGS_PIN_HOG_DEFAULT(dev, pin, cfgs)			\
128	PIN_MAP_CONFIGS_PIN(dev, PINCTRL_STATE_DEFAULT, dev, pin, cfgs)
129
130#define PIN_MAP_CONFIGS_GROUP(dev, state, pinctrl, grp, cfgs)		\
131	{								\
132		.dev_name = dev,					\
133		.name = state,						\
134		.type = PIN_MAP_TYPE_CONFIGS_GROUP,			\
135		.ctrl_dev_name = pinctrl,				\
136		.data.configs = {					\
137			.group_or_pin = grp,				\
138			.configs = cfgs,				\
139			.num_configs = ARRAY_SIZE(cfgs),		\
140		},							\
141	}
142
143#define PIN_MAP_CONFIGS_GROUP_DEFAULT(dev, pinctrl, grp, cfgs)		\
144	PIN_MAP_CONFIGS_GROUP(dev, PINCTRL_STATE_DEFAULT, pinctrl, grp, cfgs)
145
146#define PIN_MAP_CONFIGS_GROUP_HOG(dev, state, grp, cfgs)		\
147	PIN_MAP_CONFIGS_GROUP(dev, state, dev, grp, cfgs)
148
149#define PIN_MAP_CONFIGS_GROUP_HOG_DEFAULT(dev, grp, cfgs)		\
150	PIN_MAP_CONFIGS_GROUP(dev, PINCTRL_STATE_DEFAULT, dev, grp, cfgs)
151
152struct device;
153struct pinctrl_map;
154
155#ifdef CONFIG_PINCTRL
156
157int pinctrl_register_mappings(const struct pinctrl_map *map,
158			      unsigned int num_maps);
159int devm_pinctrl_register_mappings(struct device *dev,
160				   const struct pinctrl_map *map,
161				   unsigned int num_maps);
162void pinctrl_unregister_mappings(const struct pinctrl_map *map);
163void pinctrl_provide_dummies(void);
164#else
165
166static inline int pinctrl_register_mappings(const struct pinctrl_map *map,
167					    unsigned int num_maps)
168{
169	return 0;
170}
171
172static inline int devm_pinctrl_register_mappings(struct device *dev,
173						 const struct pinctrl_map *map,
174						 unsigned int num_maps)
175{
176	return 0;
177}
178
179static inline void pinctrl_unregister_mappings(const struct pinctrl_map *map)
180{
181}
182
183static inline void pinctrl_provide_dummies(void)
184{
185}
186#endif /* !CONFIG_PINCTRL */
187#endif
~/ Read-only file preview.