blob: b0001db44c9396028adca0c0866d1e45392e4428 [file] [log] [blame]
/* SPDX-License-Identifier: (GPL-2.0 OR MIT) */
/*
* Microsemi SoCs pinctrl driver
*
* Author: <alexandre.belloni@free-electrons.com>
* License: Dual MIT/GPL
* Copyright (c) 2017 Microsemi Corporation
*/
#define MSCC_FUNC_PER_PIN 4
struct mscc_pin_caps {
unsigned int pin;
unsigned char functions[MSCC_FUNC_PER_PIN];
};
struct mscc_pin_data {
const char *name;
struct mscc_pin_caps *drv_data;
};
#define MSCC_P(p, f0, f1, f2) \
static struct mscc_pin_caps mscc_pin_##p = { \
.pin = p, \
.functions = { \
FUNC_GPIO, FUNC_##f0, FUNC_##f1, FUNC_##f2, \
}, \
}
struct mscc_pmx_func {
const char **groups;
unsigned int ngroups;
};
struct mscc_pinctrl {
struct udevice *dev;
struct pinctrl_dev *pctl;
void __iomem *regs;
struct mscc_pmx_func *func;
int num_func;
const struct mscc_pin_data *mscc_pins;
int num_pins;
char * const *function_names;
};
int mscc_pinctrl_probe(struct udevice *dev, int num_func,
const struct mscc_pin_data *mscc_pins, int num_pins,
char * const *function_names);
const struct pinctrl_ops mscc_pinctrl_ops;
const struct dm_gpio_ops mscc_gpio_ops;