1c6114f21SJisheng Zhang /* SPDX-License-Identifier: GPL-2.0 */ 23de68d33SAntoine Tenart /* 33de68d33SAntoine Tenart * Marvell Berlin SoC pinctrl driver. 43de68d33SAntoine Tenart * 53de68d33SAntoine Tenart * Copyright (C) 2014 Marvell Technology Group Ltd. 63de68d33SAntoine Tenart * 71d48fb6eSAntoine Ténart * Antoine Ténart <antoine.tenart@free-electrons.com> 83de68d33SAntoine Tenart */ 93de68d33SAntoine Tenart 103de68d33SAntoine Tenart #ifndef __PINCTRL_BERLIN_H 113de68d33SAntoine Tenart #define __PINCTRL_BERLIN_H 123de68d33SAntoine Tenart 133de68d33SAntoine Tenart struct berlin_desc_function { 143de68d33SAntoine Tenart const char *name; 153de68d33SAntoine Tenart u8 muxval; 163de68d33SAntoine Tenart }; 173de68d33SAntoine Tenart 183de68d33SAntoine Tenart struct berlin_desc_group { 193de68d33SAntoine Tenart const char *name; 203de68d33SAntoine Tenart u8 offset; 213de68d33SAntoine Tenart u8 bit_width; 223de68d33SAntoine Tenart u8 lsb; 233de68d33SAntoine Tenart struct berlin_desc_function *functions; 243de68d33SAntoine Tenart }; 253de68d33SAntoine Tenart 263de68d33SAntoine Tenart struct berlin_pinctrl_desc { 273de68d33SAntoine Tenart const struct berlin_desc_group *groups; 283de68d33SAntoine Tenart unsigned ngroups; 293de68d33SAntoine Tenart }; 303de68d33SAntoine Tenart 313de68d33SAntoine Tenart struct berlin_pinctrl_function { 323de68d33SAntoine Tenart const char *name; 333de68d33SAntoine Tenart const char **groups; 343de68d33SAntoine Tenart unsigned ngroups; 353de68d33SAntoine Tenart }; 363de68d33SAntoine Tenart 373de68d33SAntoine Tenart #define BERLIN_PINCTRL_GROUP(_name, _offset, _width, _lsb, ...) \ 383de68d33SAntoine Tenart { \ 393de68d33SAntoine Tenart .name = _name, \ 403de68d33SAntoine Tenart .offset = _offset, \ 413de68d33SAntoine Tenart .bit_width = _width, \ 423de68d33SAntoine Tenart .lsb = _lsb, \ 433de68d33SAntoine Tenart .functions = (struct berlin_desc_function[]){ \ 443de68d33SAntoine Tenart __VA_ARGS__, { } }, \ 453de68d33SAntoine Tenart } 463de68d33SAntoine Tenart 473de68d33SAntoine Tenart #define BERLIN_PINCTRL_FUNCTION(_muxval, _name) \ 483de68d33SAntoine Tenart { \ 493de68d33SAntoine Tenart .name = _name, \ 503de68d33SAntoine Tenart .muxval = _muxval, \ 513de68d33SAntoine Tenart } 523de68d33SAntoine Tenart 533de68d33SAntoine Tenart #define BERLIN_PINCTRL_FUNCTION_UNKNOWN {} 543de68d33SAntoine Tenart 553de68d33SAntoine Tenart int berlin_pinctrl_probe(struct platform_device *pdev, 563de68d33SAntoine Tenart const struct berlin_pinctrl_desc *desc); 573de68d33SAntoine Tenart 58d5c79fcbSJisheng Zhang int berlin_pinctrl_probe_regmap(struct platform_device *pdev, 59d5c79fcbSJisheng Zhang const struct berlin_pinctrl_desc *desc, 60d5c79fcbSJisheng Zhang struct regmap *regmap); 61d5c79fcbSJisheng Zhang 623de68d33SAntoine Tenart #endif /* __PINCTRL_BERLIN_H */ 63