13de68d33SAntoine Tenart /* 23de68d33SAntoine Tenart * Marvell Berlin SoC pinctrl driver. 33de68d33SAntoine Tenart * 43de68d33SAntoine Tenart * Copyright (C) 2014 Marvell Technology Group Ltd. 53de68d33SAntoine Tenart * 63de68d33SAntoine Tenart * Antoine Ténart <antoine.tenart@free-electrons.com> 73de68d33SAntoine Tenart * 83de68d33SAntoine Tenart * This file is licensed under the terms of the GNU General Public 93de68d33SAntoine Tenart * License version 2. This program is licensed "as is" without any 103de68d33SAntoine Tenart * warranty of any kind, whether express or implied. 113de68d33SAntoine Tenart */ 123de68d33SAntoine Tenart 133de68d33SAntoine Tenart #ifndef __PINCTRL_BERLIN_H 143de68d33SAntoine Tenart #define __PINCTRL_BERLIN_H 153de68d33SAntoine Tenart 163de68d33SAntoine Tenart struct berlin_desc_function { 173de68d33SAntoine Tenart const char *name; 183de68d33SAntoine Tenart u8 muxval; 193de68d33SAntoine Tenart }; 203de68d33SAntoine Tenart 213de68d33SAntoine Tenart struct berlin_desc_group { 223de68d33SAntoine Tenart const char *name; 233de68d33SAntoine Tenart u8 offset; 243de68d33SAntoine Tenart u8 bit_width; 253de68d33SAntoine Tenart u8 lsb; 263de68d33SAntoine Tenart struct berlin_desc_function *functions; 273de68d33SAntoine Tenart }; 283de68d33SAntoine Tenart 293de68d33SAntoine Tenart struct berlin_pinctrl_desc { 303de68d33SAntoine Tenart const struct berlin_desc_group *groups; 313de68d33SAntoine Tenart unsigned ngroups; 323de68d33SAntoine Tenart }; 333de68d33SAntoine Tenart 343de68d33SAntoine Tenart struct berlin_pinctrl_function { 353de68d33SAntoine Tenart const char *name; 363de68d33SAntoine Tenart const char **groups; 373de68d33SAntoine Tenart unsigned ngroups; 383de68d33SAntoine Tenart }; 393de68d33SAntoine Tenart 403de68d33SAntoine Tenart #define BERLIN_PINCTRL_GROUP(_name, _offset, _width, _lsb, ...) \ 413de68d33SAntoine Tenart { \ 423de68d33SAntoine Tenart .name = _name, \ 433de68d33SAntoine Tenart .offset = _offset, \ 443de68d33SAntoine Tenart .bit_width = _width, \ 453de68d33SAntoine Tenart .lsb = _lsb, \ 463de68d33SAntoine Tenart .functions = (struct berlin_desc_function[]){ \ 473de68d33SAntoine Tenart __VA_ARGS__, { } }, \ 483de68d33SAntoine Tenart } 493de68d33SAntoine Tenart 503de68d33SAntoine Tenart #define BERLIN_PINCTRL_FUNCTION(_muxval, _name) \ 513de68d33SAntoine Tenart { \ 523de68d33SAntoine Tenart .name = _name, \ 533de68d33SAntoine Tenart .muxval = _muxval, \ 543de68d33SAntoine Tenart } 553de68d33SAntoine Tenart 563de68d33SAntoine Tenart #define BERLIN_PINCTRL_FUNCTION_UNKNOWN {} 573de68d33SAntoine Tenart 583de68d33SAntoine Tenart int berlin_pinctrl_probe(struct platform_device *pdev, 593de68d33SAntoine Tenart const struct berlin_pinctrl_desc *desc); 603de68d33SAntoine Tenart 61d5c79fcbSJisheng Zhang int berlin_pinctrl_probe_regmap(struct platform_device *pdev, 62d5c79fcbSJisheng Zhang const struct berlin_pinctrl_desc *desc, 63d5c79fcbSJisheng Zhang struct regmap *regmap); 64d5c79fcbSJisheng Zhang 653de68d33SAntoine Tenart #endif /* __PINCTRL_BERLIN_H */ 66