162306a36Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0-only */
262306a36Sopenharmony_ci/*
362306a36Sopenharmony_ci *  Copyright (C) 2012 John Crispin <john@phrozen.org>
462306a36Sopenharmony_ci */
562306a36Sopenharmony_ci
662306a36Sopenharmony_ci#ifndef _PINCTRL_MTMIPS_H__
762306a36Sopenharmony_ci#define _PINCTRL_MTMIPS_H__
862306a36Sopenharmony_ci
962306a36Sopenharmony_ci#define FUNC(name, value, pin_first, pin_count) \
1062306a36Sopenharmony_ci	{ name, value, pin_first, pin_count }
1162306a36Sopenharmony_ci
1262306a36Sopenharmony_ci#define GRP(_name, _func, _mask, _shift) \
1362306a36Sopenharmony_ci	{ .name = _name, .mask = _mask, .shift = _shift, \
1462306a36Sopenharmony_ci	  .func = _func, .gpio = _mask, \
1562306a36Sopenharmony_ci	  .func_count = ARRAY_SIZE(_func) }
1662306a36Sopenharmony_ci
1762306a36Sopenharmony_ci#define GRP_G(_name, _func, _mask, _gpio, _shift) \
1862306a36Sopenharmony_ci	{ .name = _name, .mask = _mask, .shift = _shift, \
1962306a36Sopenharmony_ci	  .func = _func, .gpio = _gpio, \
2062306a36Sopenharmony_ci	  .func_count = ARRAY_SIZE(_func) }
2162306a36Sopenharmony_ci
2262306a36Sopenharmony_cistruct mtmips_pmx_group;
2362306a36Sopenharmony_ci
2462306a36Sopenharmony_cistruct mtmips_pmx_func {
2562306a36Sopenharmony_ci	const char *name;
2662306a36Sopenharmony_ci	const char value;
2762306a36Sopenharmony_ci
2862306a36Sopenharmony_ci	int pin_first;
2962306a36Sopenharmony_ci	int pin_count;
3062306a36Sopenharmony_ci	int *pins;
3162306a36Sopenharmony_ci
3262306a36Sopenharmony_ci	int *groups;
3362306a36Sopenharmony_ci	int group_count;
3462306a36Sopenharmony_ci
3562306a36Sopenharmony_ci	int enabled;
3662306a36Sopenharmony_ci};
3762306a36Sopenharmony_ci
3862306a36Sopenharmony_cistruct mtmips_pmx_group {
3962306a36Sopenharmony_ci	const char *name;
4062306a36Sopenharmony_ci	int enabled;
4162306a36Sopenharmony_ci
4262306a36Sopenharmony_ci	const u32 shift;
4362306a36Sopenharmony_ci	const char mask;
4462306a36Sopenharmony_ci	const char gpio;
4562306a36Sopenharmony_ci
4662306a36Sopenharmony_ci	struct mtmips_pmx_func *func;
4762306a36Sopenharmony_ci	int func_count;
4862306a36Sopenharmony_ci};
4962306a36Sopenharmony_ci
5062306a36Sopenharmony_ciint mtmips_pinctrl_init(struct platform_device *pdev,
5162306a36Sopenharmony_ci			struct mtmips_pmx_group *data);
5262306a36Sopenharmony_ci
5362306a36Sopenharmony_ci#endif
54