/*
 * Pinctrl driver for the Wondermedia SoC's
 *
 * Copyright (c) 2013 Tony Prisk <linux@prisktech.co.nz>
 *
 * This program is free software; you can redistribute it and/or modify it
 * under the terms and conditions of the GNU General Public License,
 * version 2, as published by the Free Software Foundation.
 *
 * This program is distributed in the hope it will be useful, but WITHOUT
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
 * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
 * more details.
 */

#include <linux/gpio.h>

/* VT8500 has no enable register in the extgpio bank. */
#define NO_REG	0xFFFF

#define WMT_PINCTRL_BANK(__en, __dir, __dout, __din, __pen, __pcfg)	\
{									\
	.reg_en		= __en,						\
	.reg_dir	= __dir,					\
	.reg_data_out	= __dout,					\
	.reg_data_in	= __din,					\
	.reg_pull_en	= __pen,					\
	.reg_pull_cfg	= __pcfg,					\
}

/* Encode/decode the bank/bit pairs into a pin value */
#define WMT_PIN(__bank, __offset)	((__bank << 5) | __offset)
#define WMT_BANK_FROM_PIN(__pin)	(__pin >> 5)
#define WMT_BIT_FROM_PIN(__pin)		(__pin & 0x1f)

#define WMT_GROUP(__name, __data)		\
{						\
	.name = __name,				\
	.pins = __data,				\
	.npins = ARRAY_SIZE(__data),		\
}

struct wmt_pinctrl_bank_registers {
	u32	reg_en;
	u32	reg_dir;
	u32	reg_data_out;
	u32	reg_data_in;

	u32	reg_pull_en;
	u32	reg_pull_cfg;
};

struct wmt_pinctrl_group {
	const char *name;
	const unsigned int *pins;
	const unsigned npins;
};

struct wmt_pinctrl_data {
	struct device *dev;
	struct pinctrl_dev *pctl_dev;

	/* must be initialized before calling wmt_pinctrl_probe */
	void __iomem *base;
	const struct wmt_pinctrl_bank_registers *banks;
	const struct pinctrl_pin_desc *pins;
	const char * const *groups;

	u32 nbanks;
	u32 npins;
	u32 ngroups;

	struct gpio_chip gpio_chip;
	struct pinctrl_gpio_range gpio_range;
};

int wmt_pinctrl_probe(struct platform_device *pdev,
		      struct wmt_pinctrl_data *data);
