162306a36Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0 */ 262306a36Sopenharmony_ci/* 362306a36Sopenharmony_ci * Marvell Berlin SoC pinctrl driver. 462306a36Sopenharmony_ci * 562306a36Sopenharmony_ci * Copyright (C) 2014 Marvell Technology Group Ltd. 662306a36Sopenharmony_ci * 762306a36Sopenharmony_ci * Antoine Ténart <antoine.tenart@free-electrons.com> 862306a36Sopenharmony_ci */ 962306a36Sopenharmony_ci 1062306a36Sopenharmony_ci#ifndef __PINCTRL_BERLIN_H 1162306a36Sopenharmony_ci#define __PINCTRL_BERLIN_H 1262306a36Sopenharmony_ci 1362306a36Sopenharmony_cistruct berlin_desc_function { 1462306a36Sopenharmony_ci const char *name; 1562306a36Sopenharmony_ci u8 muxval; 1662306a36Sopenharmony_ci}; 1762306a36Sopenharmony_ci 1862306a36Sopenharmony_cistruct berlin_desc_group { 1962306a36Sopenharmony_ci const char *name; 2062306a36Sopenharmony_ci u8 offset; 2162306a36Sopenharmony_ci u8 bit_width; 2262306a36Sopenharmony_ci u8 lsb; 2362306a36Sopenharmony_ci struct berlin_desc_function *functions; 2462306a36Sopenharmony_ci}; 2562306a36Sopenharmony_ci 2662306a36Sopenharmony_cistruct berlin_pinctrl_desc { 2762306a36Sopenharmony_ci const struct berlin_desc_group *groups; 2862306a36Sopenharmony_ci unsigned ngroups; 2962306a36Sopenharmony_ci}; 3062306a36Sopenharmony_ci 3162306a36Sopenharmony_cistruct berlin_pinctrl_function { 3262306a36Sopenharmony_ci const char *name; 3362306a36Sopenharmony_ci const char **groups; 3462306a36Sopenharmony_ci unsigned ngroups; 3562306a36Sopenharmony_ci}; 3662306a36Sopenharmony_ci 3762306a36Sopenharmony_ci#define BERLIN_PINCTRL_GROUP(_name, _offset, _width, _lsb, ...) \ 3862306a36Sopenharmony_ci { \ 3962306a36Sopenharmony_ci .name = _name, \ 4062306a36Sopenharmony_ci .offset = _offset, \ 4162306a36Sopenharmony_ci .bit_width = _width, \ 4262306a36Sopenharmony_ci .lsb = _lsb, \ 4362306a36Sopenharmony_ci .functions = (struct berlin_desc_function[]){ \ 4462306a36Sopenharmony_ci __VA_ARGS__, { } }, \ 4562306a36Sopenharmony_ci } 4662306a36Sopenharmony_ci 4762306a36Sopenharmony_ci#define BERLIN_PINCTRL_FUNCTION(_muxval, _name) \ 4862306a36Sopenharmony_ci { \ 4962306a36Sopenharmony_ci .name = _name, \ 5062306a36Sopenharmony_ci .muxval = _muxval, \ 5162306a36Sopenharmony_ci } 5262306a36Sopenharmony_ci 5362306a36Sopenharmony_ci#define BERLIN_PINCTRL_FUNCTION_UNKNOWN {} 5462306a36Sopenharmony_ci 5562306a36Sopenharmony_ciint berlin_pinctrl_probe(struct platform_device *pdev, 5662306a36Sopenharmony_ci const struct berlin_pinctrl_desc *desc); 5762306a36Sopenharmony_ci 5862306a36Sopenharmony_ciint berlin_pinctrl_probe_regmap(struct platform_device *pdev, 5962306a36Sopenharmony_ci const struct berlin_pinctrl_desc *desc, 6062306a36Sopenharmony_ci struct regmap *regmap); 6162306a36Sopenharmony_ci 6262306a36Sopenharmony_ci#endif /* __PINCTRL_BERLIN_H */ 63