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