2013-09-03 15:28:59 +07:00
|
|
|
/*
|
|
|
|
* Pinctrl Driver for ADI GPIO2 controller
|
|
|
|
*
|
|
|
|
* Copyright 2007-2013 Analog Devices Inc.
|
|
|
|
*
|
|
|
|
* Licensed under the GPLv2 or later
|
|
|
|
*/
|
|
|
|
|
|
|
|
#ifndef PINCTRL_PINCTRL_ADI2_H
|
|
|
|
#define PINCTRL_PINCTRL_ADI2_H
|
|
|
|
|
|
|
|
#include <linux/pinctrl/pinctrl.h>
|
|
|
|
|
|
|
|
/**
|
|
|
|
* struct adi_pin_group - describes a pin group
|
|
|
|
* @name: the name of this pin group
|
|
|
|
* @pins: an array of pins
|
|
|
|
* @num: the number of pins in this array
|
|
|
|
*/
|
|
|
|
struct adi_pin_group {
|
|
|
|
const char *name;
|
|
|
|
const unsigned *pins;
|
|
|
|
const unsigned num;
|
2014-02-14 17:21:06 +07:00
|
|
|
const unsigned short *mux;
|
2013-09-03 15:28:59 +07:00
|
|
|
};
|
|
|
|
|
2014-02-14 17:21:06 +07:00
|
|
|
#define ADI_PIN_GROUP(n, p, m) \
|
2013-09-03 15:28:59 +07:00
|
|
|
{ \
|
|
|
|
.name = n, \
|
|
|
|
.pins = p, \
|
|
|
|
.num = ARRAY_SIZE(p), \
|
2014-02-14 17:21:06 +07:00
|
|
|
.mux = m, \
|
2013-09-03 15:28:59 +07:00
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* struct adi_pmx_func - describes function mux setting of pin groups
|
|
|
|
* @name: the name of this function mux setting
|
|
|
|
* @groups: an array of pin groups
|
|
|
|
* @num_groups: the number of pin groups in this array
|
|
|
|
* @mux: the function mux setting array, end by zero
|
|
|
|
*/
|
|
|
|
struct adi_pmx_func {
|
|
|
|
const char *name;
|
|
|
|
const char * const *groups;
|
|
|
|
const unsigned num_groups;
|
|
|
|
};
|
|
|
|
|
2014-02-14 17:21:06 +07:00
|
|
|
#define ADI_PMX_FUNCTION(n, g) \
|
2013-09-03 15:28:59 +07:00
|
|
|
{ \
|
|
|
|
.name = n, \
|
|
|
|
.groups = g, \
|
|
|
|
.num_groups = ARRAY_SIZE(g), \
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* struct adi_pinctrl_soc_data - ADI pin controller per-SoC configuration
|
|
|
|
* @functions: The functions supported on this SoC.
|
|
|
|
* @nfunction: The number of entries in @functions.
|
|
|
|
* @groups: An array describing all pin groups the pin SoC supports.
|
|
|
|
* @ngroups: The number of entries in @groups.
|
|
|
|
* @pins: An array describing all pins the pin controller affects.
|
|
|
|
* @npins: The number of entries in @pins.
|
|
|
|
*/
|
|
|
|
struct adi_pinctrl_soc_data {
|
|
|
|
const struct adi_pmx_func *functions;
|
|
|
|
int nfunctions;
|
|
|
|
const struct adi_pin_group *groups;
|
|
|
|
int ngroups;
|
|
|
|
const struct pinctrl_pin_desc *pins;
|
|
|
|
int npins;
|
|
|
|
};
|
|
|
|
|
|
|
|
void adi_pinctrl_soc_init(const struct adi_pinctrl_soc_data **soc);
|
|
|
|
|
|
|
|
#endif /* PINCTRL_PINCTRL_ADI2_H */
|