#include <linux/init.h>
#include <linux/module.h>
#include <linux/platform_device.h>
#include <linux/mod_devicetable.h>
#include <linux/pinctrl/pinmux.h>
#include <linux/pinctrl/pinconf-generic.h>
#include <linux/pinctrl/pinctrl.h>
#include <linux/bitops.h>
#include <linux/io.h>
#include <linux/seq_file.h>
#include "core.h"
#include "pinctrl-utils.h"
#define PMX_GROUP(name, offset, bitv) …
#define SPECIFIC_GROUP(group) …
#define FUNCTION(fn) …
struct loongson2_pinctrl { … };
struct loongson2_pmx_group { … };
struct loongson2_pmx_func { … };
#define LOONGSON2_PIN(x) …
static const struct pinctrl_pin_desc loongson2_pctrl_pins[] = …;
static const unsigned int gpio_pins[] = …;
static const unsigned int sdio_pins[] = …;
static const unsigned int can1_pins[] = …;
static const unsigned int can0_pins[] = …;
static const unsigned int pwm3_pins[] = …;
static const unsigned int pwm2_pins[] = …;
static const unsigned int pwm1_pins[] = …;
static const unsigned int pwm0_pins[] = …;
static const unsigned int i2c1_pins[] = …;
static const unsigned int i2c0_pins[] = …;
static const unsigned int nand_pins[] = …;
static const unsigned int sata_led_pins[] = …;
static const unsigned int i2s_pins[] = …;
static const unsigned int hda_pins[] = …;
static struct loongson2_pmx_group loongson2_pmx_groups[] = …;
SPECIFIC_GROUP(sdio);
SPECIFIC_GROUP(can1);
SPECIFIC_GROUP(can0);
SPECIFIC_GROUP(pwm3);
SPECIFIC_GROUP(pwm2);
SPECIFIC_GROUP(pwm1);
SPECIFIC_GROUP(pwm0);
SPECIFIC_GROUP(i2c1);
SPECIFIC_GROUP(i2c0);
SPECIFIC_GROUP(nand);
SPECIFIC_GROUP(sata_led);
SPECIFIC_GROUP(i2s);
SPECIFIC_GROUP(hda);
static const char * const gpio_groups[] = …;
static const struct loongson2_pmx_func loongson2_pmx_functions[] = …;
static int loongson2_get_groups_count(struct pinctrl_dev *pcdev)
{ … }
static const char *loongson2_get_group_name(struct pinctrl_dev *pcdev,
unsigned int selector)
{ … }
static int loongson2_get_group_pins(struct pinctrl_dev *pcdev, unsigned int selector,
const unsigned int **pins, unsigned int *num_pins)
{ … }
static void loongson2_pin_dbg_show(struct pinctrl_dev *pcdev, struct seq_file *s,
unsigned int offset)
{ … }
static const struct pinctrl_ops loongson2_pctrl_ops = …;
static int loongson2_pmx_set_mux(struct pinctrl_dev *pcdev, unsigned int func_num,
unsigned int group_num)
{ … }
static int loongson2_pmx_get_funcs_count(struct pinctrl_dev *pcdev)
{ … }
static const char *loongson2_pmx_get_func_name(struct pinctrl_dev *pcdev,
unsigned int selector)
{ … }
static int loongson2_pmx_get_groups(struct pinctrl_dev *pcdev,
unsigned int selector,
const char * const **groups,
unsigned int * const num_groups)
{ … }
static const struct pinmux_ops loongson2_pmx_ops = …;
static int loongson2_pinctrl_probe(struct platform_device *pdev)
{ … }
static const struct of_device_id loongson2_pinctrl_dt_match[] = …;
MODULE_DEVICE_TABLE(of, loongson2_pinctrl_dt_match);
static struct platform_driver loongson2_pinctrl_driver = …;
static int __init loongson2_pinctrl_init(void)
{ … }
arch_initcall(loongson2_pinctrl_init);
static void __exit loongson2_pinctrl_exit(void)
{ … }
module_exit(loongson2_pinctrl_exit);
MODULE_DESCRIPTION(…) …;
MODULE_LICENSE(…) …;