18c2ecf20Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0 */ 28c2ecf20Sopenharmony_ci/* 38c2ecf20Sopenharmony_ci * Marvell Berlin SoC pinctrl driver. 48c2ecf20Sopenharmony_ci * 58c2ecf20Sopenharmony_ci * Copyright (C) 2014 Marvell Technology Group Ltd. 68c2ecf20Sopenharmony_ci * 78c2ecf20Sopenharmony_ci * Antoine Ténart <antoine.tenart@free-electrons.com> 88c2ecf20Sopenharmony_ci */ 98c2ecf20Sopenharmony_ci 108c2ecf20Sopenharmony_ci#ifndef __PINCTRL_BERLIN_H 118c2ecf20Sopenharmony_ci#define __PINCTRL_BERLIN_H 128c2ecf20Sopenharmony_ci 138c2ecf20Sopenharmony_cistruct berlin_desc_function { 148c2ecf20Sopenharmony_ci const char *name; 158c2ecf20Sopenharmony_ci u8 muxval; 168c2ecf20Sopenharmony_ci}; 178c2ecf20Sopenharmony_ci 188c2ecf20Sopenharmony_cistruct berlin_desc_group { 198c2ecf20Sopenharmony_ci const char *name; 208c2ecf20Sopenharmony_ci u8 offset; 218c2ecf20Sopenharmony_ci u8 bit_width; 228c2ecf20Sopenharmony_ci u8 lsb; 238c2ecf20Sopenharmony_ci struct berlin_desc_function *functions; 248c2ecf20Sopenharmony_ci}; 258c2ecf20Sopenharmony_ci 268c2ecf20Sopenharmony_cistruct berlin_pinctrl_desc { 278c2ecf20Sopenharmony_ci const struct berlin_desc_group *groups; 288c2ecf20Sopenharmony_ci unsigned ngroups; 298c2ecf20Sopenharmony_ci}; 308c2ecf20Sopenharmony_ci 318c2ecf20Sopenharmony_cistruct berlin_pinctrl_function { 328c2ecf20Sopenharmony_ci const char *name; 338c2ecf20Sopenharmony_ci const char **groups; 348c2ecf20Sopenharmony_ci unsigned ngroups; 358c2ecf20Sopenharmony_ci}; 368c2ecf20Sopenharmony_ci 378c2ecf20Sopenharmony_ci#define BERLIN_PINCTRL_GROUP(_name, _offset, _width, _lsb, ...) \ 388c2ecf20Sopenharmony_ci { \ 398c2ecf20Sopenharmony_ci .name = _name, \ 408c2ecf20Sopenharmony_ci .offset = _offset, \ 418c2ecf20Sopenharmony_ci .bit_width = _width, \ 428c2ecf20Sopenharmony_ci .lsb = _lsb, \ 438c2ecf20Sopenharmony_ci .functions = (struct berlin_desc_function[]){ \ 448c2ecf20Sopenharmony_ci __VA_ARGS__, { } }, \ 458c2ecf20Sopenharmony_ci } 468c2ecf20Sopenharmony_ci 478c2ecf20Sopenharmony_ci#define BERLIN_PINCTRL_FUNCTION(_muxval, _name) \ 488c2ecf20Sopenharmony_ci { \ 498c2ecf20Sopenharmony_ci .name = _name, \ 508c2ecf20Sopenharmony_ci .muxval = _muxval, \ 518c2ecf20Sopenharmony_ci } 528c2ecf20Sopenharmony_ci 538c2ecf20Sopenharmony_ci#define BERLIN_PINCTRL_FUNCTION_UNKNOWN {} 548c2ecf20Sopenharmony_ci 558c2ecf20Sopenharmony_ciint berlin_pinctrl_probe(struct platform_device *pdev, 568c2ecf20Sopenharmony_ci const struct berlin_pinctrl_desc *desc); 578c2ecf20Sopenharmony_ci 588c2ecf20Sopenharmony_ciint berlin_pinctrl_probe_regmap(struct platform_device *pdev, 598c2ecf20Sopenharmony_ci const struct berlin_pinctrl_desc *desc, 608c2ecf20Sopenharmony_ci struct regmap *regmap); 618c2ecf20Sopenharmony_ci 628c2ecf20Sopenharmony_ci#endif /* __PINCTRL_BERLIN_H */ 63