#include <linux/module.h>
#include <linux/device.h>
#include <linux/platform_device.h>
#include "pinctrl-lantiq.h"
static int ltq_get_group_count(struct pinctrl_dev *pctrldev)
struct ltq_pinmux_info *info = pinctrl_dev_get_drvdata(pctrldev);
static const char *ltq_get_group_name(struct pinctrl_dev *pctrldev,
struct ltq_pinmux_info *info = pinctrl_dev_get_drvdata(pctrldev);
if (selector >= info->num_grps)
return info->grps[selector].name;
static int ltq_get_group_pins(struct pinctrl_dev *pctrldev,
struct ltq_pinmux_info *info = pinctrl_dev_get_drvdata(pctrldev);
if (selector >= info->num_grps)
*pins = info->grps[selector].pins;
*num_pins = info->grps[selector].npins;
static void ltq_pinctrl_dt_free_map(struct pinctrl_dev *pctldev,
struct pinctrl_map *map, unsigned num_maps)
for (i = 0; i < num_maps; i++)
if (map[i].type == PIN_MAP_TYPE_CONFIGS_PIN ||
map[i].type == PIN_MAP_TYPE_CONFIGS_GROUP)
kfree(map[i].data.configs.configs);
static void ltq_pinctrl_pin_dbg_show(struct pinctrl_dev *pctldev,
seq_printf(s, " %s", dev_name(pctldev->dev));
static void ltq_pinctrl_dt_subnode_to_map(struct pinctrl_dev *pctldev,
struct pinctrl_map **map)
struct ltq_pinmux_info *info = pinctrl_dev_get_drvdata(pctldev);
struct property *pins = of_find_property(np, "lantiq,pins", NULL);
struct property *groups = of_find_property(np, "lantiq,groups", NULL);
unsigned long configs[3];
unsigned num_configs = 0;
dev_err(pctldev->dev, "%pOFn defines neither pins nor groups\n",
dev_err(pctldev->dev, "%pOFn defines both pins and groups\n",