162306a36Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0+ */
262306a36Sopenharmony_ci/*
362306a36Sopenharmony_ci * IMX pinmux core definitions
462306a36Sopenharmony_ci *
562306a36Sopenharmony_ci * Copyright (C) 2012 Freescale Semiconductor, Inc.
662306a36Sopenharmony_ci * Copyright (C) 2012 Linaro Ltd.
762306a36Sopenharmony_ci *
862306a36Sopenharmony_ci * Author: Dong Aisheng <dong.aisheng@linaro.org>
962306a36Sopenharmony_ci */
1062306a36Sopenharmony_ci
1162306a36Sopenharmony_ci#ifndef __DRIVERS_PINCTRL_IMX1_H
1262306a36Sopenharmony_ci#define __DRIVERS_PINCTRL_IMX1_H
1362306a36Sopenharmony_ci
1462306a36Sopenharmony_cistruct platform_device;
1562306a36Sopenharmony_ci
1662306a36Sopenharmony_ci/**
1762306a36Sopenharmony_ci * struct imx1_pin - describes an IMX1/21/27 pin.
1862306a36Sopenharmony_ci * @pin_id: ID of the described pin.
1962306a36Sopenharmony_ci * @mux_id: ID of the mux setup.
2062306a36Sopenharmony_ci * @config: Configuration of the pin (currently only pullup-enable).
2162306a36Sopenharmony_ci */
2262306a36Sopenharmony_cistruct imx1_pin {
2362306a36Sopenharmony_ci	unsigned int pin_id;
2462306a36Sopenharmony_ci	unsigned int mux_id;
2562306a36Sopenharmony_ci	unsigned long config;
2662306a36Sopenharmony_ci};
2762306a36Sopenharmony_ci
2862306a36Sopenharmony_ci/**
2962306a36Sopenharmony_ci * struct imx1_pin_group - describes an IMX pin group
3062306a36Sopenharmony_ci * @name: the name of this specific pin group
3162306a36Sopenharmony_ci * @pins: an array of imx1_pin structs used in this group
3262306a36Sopenharmony_ci * @npins: the number of pins in this group array, i.e. the number of
3362306a36Sopenharmony_ci *	elements in .pins so we can iterate over that array
3462306a36Sopenharmony_ci */
3562306a36Sopenharmony_cistruct imx1_pin_group {
3662306a36Sopenharmony_ci	const char *name;
3762306a36Sopenharmony_ci	unsigned int *pin_ids;
3862306a36Sopenharmony_ci	struct imx1_pin *pins;
3962306a36Sopenharmony_ci	unsigned npins;
4062306a36Sopenharmony_ci};
4162306a36Sopenharmony_ci
4262306a36Sopenharmony_ci/**
4362306a36Sopenharmony_ci * struct imx1_pmx_func - describes IMX pinmux functions
4462306a36Sopenharmony_ci * @name: the name of this specific function
4562306a36Sopenharmony_ci * @groups: corresponding pin groups
4662306a36Sopenharmony_ci * @num_groups: the number of groups
4762306a36Sopenharmony_ci */
4862306a36Sopenharmony_cistruct imx1_pmx_func {
4962306a36Sopenharmony_ci	const char *name;
5062306a36Sopenharmony_ci	const char **groups;
5162306a36Sopenharmony_ci	unsigned num_groups;
5262306a36Sopenharmony_ci};
5362306a36Sopenharmony_ci
5462306a36Sopenharmony_cistruct imx1_pinctrl_soc_info {
5562306a36Sopenharmony_ci	struct device *dev;
5662306a36Sopenharmony_ci	const struct pinctrl_pin_desc *pins;
5762306a36Sopenharmony_ci	unsigned int npins;
5862306a36Sopenharmony_ci	struct imx1_pin_group *groups;
5962306a36Sopenharmony_ci	unsigned int ngroups;
6062306a36Sopenharmony_ci	struct imx1_pmx_func *functions;
6162306a36Sopenharmony_ci	unsigned int nfunctions;
6262306a36Sopenharmony_ci};
6362306a36Sopenharmony_ci
6462306a36Sopenharmony_ci#define IMX_PINCTRL_PIN(pin) PINCTRL_PIN(pin, #pin)
6562306a36Sopenharmony_ci
6662306a36Sopenharmony_ciint imx1_pinctrl_core_probe(struct platform_device *pdev,
6762306a36Sopenharmony_ci			struct imx1_pinctrl_soc_info *info);
6862306a36Sopenharmony_ci#endif /* __DRIVERS_PINCTRL_IMX1_H */
69