#ifndef _MESON_PINCTRL_H
#define _MESON_PINCTRL_H
#include "opt_soc.h"
#include <sys/bus.h>
#define MESON_PINCTRL_MAXBANK 8
enum meson_pinctrl_regtype {
MESON_PINCTRL_REGTYPE_PULL,
MESON_PINCTRL_REGTYPE_PULL_ENABLE,
MESON_PINCTRL_REGTYPE_GPIO,
};
struct meson_pinctrl_gpioreg {
enum meson_pinctrl_regtype type;
bus_size_t reg;
uint32_t mask;
};
struct meson_pinctrl_gpio {
u_int id;
const char *name;
struct meson_pinctrl_gpioreg oen;
struct meson_pinctrl_gpioreg out;
struct meson_pinctrl_gpioreg in;
struct meson_pinctrl_gpioreg pupden;
struct meson_pinctrl_gpioreg pupd;
};
struct meson_pinctrl_group {
const char *name;
bus_size_t reg;
u_int bit;
u_int bank[MESON_PINCTRL_MAXBANK];
u_int nbank;
uint32_t func;
uint32_t mask;
};
struct meson_pinctrl_config {
const char *name;
const struct meson_pinctrl_group *groups;
u_int ngroups;
const struct meson_pinctrl_gpio *gpios;
u_int ngpios;
};
#ifdef SOC_MESON8B
extern const struct meson_pinctrl_config meson8b_aobus_pinctrl_config;
extern const struct meson_pinctrl_config meson8b_cbus_pinctrl_config;
#endif
#ifdef SOC_MESONGXBB
extern const struct meson_pinctrl_config mesongxbb_aobus_pinctrl_config;
extern const struct meson_pinctrl_config mesongxbb_periphs_pinctrl_config;
#endif
#ifdef SOC_MESONGXL
extern const struct meson_pinctrl_config mesongxl_aobus_pinctrl_config;
extern const struct meson_pinctrl_config mesongxl_periphs_pinctrl_config;
#endif
#ifdef SOC_MESONG12
extern const struct meson_pinctrl_config mesong12a_aobus_pinctrl_config;
extern const struct meson_pinctrl_config mesong12a_periphs_pinctrl_config;
#endif
#endif