/*
 * Marvell Berlin BG2 pinctrl driver.
 *
 * Copyright (C) 2014 Marvell Technology Group Ltd.
 *
 * Antoine Ténart <antoine.tenart@free-electrons.com>
 *
 * This file is licensed under the terms of the GNU General Public
 * License version 2. This program is licensed "as is" without any
 * warranty of any kind, whether express or implied.
 */

#include <linux/module.h>
#include <linux/of_device.h>
#include <linux/platform_device.h>
#include <linux/regmap.h>

#include "berlin.h"

static const struct berlin_desc_group berlin2_soc_pinctrl_groups[] = {
	/* G */
	BERLIN_PINCTRL_GROUP("G0", 0x00, 0x1, 0x00,
		BERLIN_PINCTRL_FUNCTION(0x0, "spi1"), /* SS0n */
		BERLIN_PINCTRL_FUNCTION(0x1, "gpio")),
	BERLIN_PINCTRL_GROUP("G1", 0x00, 0x2, 0x01,
		BERLIN_PINCTRL_FUNCTION(0x0, "spi1"), /* SS1n */
		BERLIN_PINCTRL_FUNCTION(0x1, "gpio"),
		BERLIN_PINCTRL_FUNCTION(0x2, "usb1")),
	BERLIN_PINCTRL_GROUP("G2", 0x00, 0x2, 0x02,
		BERLIN_PINCTRL_FUNCTION(0x0, "gpio"),
		BERLIN_PINCTRL_FUNCTION(0x1, "spi1"), /* SS2n */
		BERLIN_PINCTRL_FUNCTION(0x2, "pwm"),
		BERLIN_PINCTRL_FUNCTION(0x3, "i2s0")),
	BERLIN_PINCTRL_GROUP("G3", 0x00, 0x2, 0x04,
		BERLIN_PINCTRL_FUNCTION(0x0, "soc"),
		BERLIN_PINCTRL_FUNCTION(0x1, "spi1"), /* SS3n */
		BERLIN_PINCTRL_FUNCTION(0x2, "gpio"),
		BERLIN_PINCTRL_FUNCTION(0x3, "i2s1")),
	BERLIN_PINCTRL_GROUP("G4", 0x00, 0x2, 0x06,
		BERLIN_PINCTRL_FUNCTION(0x0, "spi1"), /* CLK/SDI/SDO */
		BERLIN_PINCTRL_FUNCTION(0x1, "gpio"),
		BERLIN_PINCTRL_FUNCTION(0x2, "pwm")),
	BERLIN_PINCTRL_GROUP("G5", 0x00, 0x3, 0x08,
		BERLIN_PINCTRL_FUNCTION(0x0, "gpio"),
		BERLIN_PINCTRL_FUNCTION(0x1, "sts1"),
		BERLIN_PINCTRL_FUNCTION(0x2, "et"),
		/*
		 * Mode 0x3 mux i2s2 mclk *and* i2s3 mclk:
		 * add two functions so it can be used with other groups
		 * within the same subnode in the device tree
		 */
		BERLIN_PINCTRL_FUNCTION(0x3, "i2s2"),
		BERLIN_PINCTRL_FUNCTION(0x3, "i2s3")),
	BERLIN_PINCTRL_GROUP("G6", 0x00, 0x2, 0x0b,
		BERLIN_PINCTRL_FUNCTION(0x0, "gpio"),
		BERLIN_PINCTRL_FUNCTION(0x1, "sts0"),
		BERLIN_PINCTRL_FUNCTION(0x2, "et")),
	BERLIN_PINCTRL_GROUP("G7", 0x00, 0x3, 0x0d,
		BERLIN_PINCTRL_FUNCTION(0x0, "gpio"),
		BERLIN_PINCTRL_FUNCTION(0x1, "sts0"),
		BERLIN_PINCTRL_FUNCTION(0x2, "et"),
		BERLIN_PINCTRL_FUNCTION(0x3, "vdac")),
	BERLIN_PINCTRL_GROUP("G8", 0x00, 0x3, 0x10,
		BERLIN_PINCTRL_FUNCTION(0x0, "gpio"),
		BERLIN_PINCTRL_FUNCTION(0x1, "sd0"),
		BERLIN_PINCTRL_FUNCTION(0x2, "et"),
		BERLIN_PINCTRL_FUNCTION(0x3, "usb0_dbg"),
		BERLIN_PINCTRL_FUNCTION(0x4, "sata_dbg"),
		BERLIN_PINCTRL_FUNCTION(0x7, "usb1_dbg")),
	BERLIN_PINCTRL_GROUP("G9", 0x00, 0x3, 0x13,
		BERLIN_PINCTRL_FUNCTION(0x0, "gpio"),
		BERLIN_PINCTRL_FUNCTION(0x1, "sd0"),
		BERLIN_PINCTRL_FUNCTION(0x2, "et"),
		BERLIN_PINCTRL_FUNCTION(0x3, "usb0_dbg"),
		BERLIN_PINCTRL_FUNCTION(0x4, "sata_dbg"),
		BERLIN_PINCTRL_FUNCTION(0x7, "usb1_dbg")),
	BERLIN_PINCTRL_GROUP("G10", 0x00, 0x2, 0x16,
		BERLIN_PINCTRL_FUNCTION(0x0, "soc"),
		BERLIN_PINCTRL_FUNCTION(0x1, "twsi0"),
		BERLIN_PINCTRL_FUNCTION(0x2, "gpio"),
		BERLIN_PINCTRL_FUNCTION(0x3, "ptp")),
	BERLIN_PINCTRL_GROUP("G11", 0x00, 0x2, 0x18,
		BERLIN_PINCTRL_FUNCTION(0x0, "soc"),
		BERLIN_PINCTRL_FUNCTION(0x1, "twsi1"),
		BERLIN_PINCTRL_FUNCTION(0x2, "gpio"),
		BERLIN_PINCTRL_FUNCTION(0x3, "eddc")),
	BERLIN_PINCTRL_GROUP("G12", 0x00, 0x3, 0x1a,
		BERLIN_PINCTRL_FUNCTION(0x0, "sts2"),
		BERLIN_PINCTRL_FUNCTION(0x1, "sata"),
		BERLIN_PINCTRL_FUNCTION(0x2, "sd1"),
		BERLIN_PINCTRL_FUNCTION(0x3, "usb0_dbg"),
		BERLIN_PINCTRL_FUNCTION(0x4, "sts1"),
		BERLIN_PINCTRL_FUNCTION(0x7, "usb1_dbg")),
	BERLIN_PINCTRL_GROUP("G13", 0x04, 0x3, 0x00,
		BERLIN_PINCTRL_FUNCTION(0x0, "gpio"),
		BERLIN_PINCTRL_FUNCTION(0x1, "sata"),
		BERLIN_PINCTRL_FUNCTION(0x2, "sd1"),
		BERLIN_PINCTRL_FUNCTION(0x3, "usb0_dbg"),
		BERLIN_PINCTRL_FUNCTION(0x4, "sts1"),
		BERLIN_PINCTRL_FUNCTION(0x7, "usb1_dbg")),
	BERLIN_PINCTRL_GROUP("G14", 0x04, 0x1, 0x03,
		BERLIN_PINCTRL_FUNCTION_UNKNOWN),
	BERLIN_PINCTRL_GROUP("G15", 0x04, 0x2, 0x04,
		BERLIN_PINCTRL_FUNCTION(0x0, "gpio"),
		BERLIN_PINCTRL_FUNCTION(0x2, "et"),
		BERLIN_PINCTRL_FUNCTION(0x3, "osco")),
	BERLIN_PINCTRL_GROUP("G16", 0x04, 0x3, 0x06,
		BERLIN_PINCTRL_FUNCTION(0x0, "gpio"),
		BERLIN_PINCTRL_FUNCTION(0x1, "dvio"),
		BERLIN_PINCTRL_FUNCTION(0x2, "fp")),
	BERLIN_PINCTRL_GROUP("G17", 0x04, 0x3, 0x09,
		BERLIN_PINCTRL_FUNCTION(0x0, "gpio"),
		BERLIN_PINCTRL_FUNCTION(0x1, "dvio"),
		BERLIN_PINCTRL_FUNCTION(0x2, "fp")),
	BERLIN_PINCTRL_GROUP("G18", 0x04, 0x1, 0x0c,
		BERLIN_PINCTRL_FUNCTION(0x0, "pll"),
		BERLIN_PINCTRL_FUNCTION(0x1, "i2s0")),
	BERLIN_PINCTRL_GROUP("G19", 0x04, 0x1, 0x0d,
		BERLIN_PINCTRL_FUNCTION(0x0, "i2s0"),
		BERLIN_PINCTRL_FUNCTION(0x1, "pwm")),
	BERLIN_PINCTRL_GROUP("G20", 0x04, 0x1, 0x0e,
		BERLIN_PINCTRL_FUNCTION(0x0, "spdif"),
		BERLIN_PINCTRL_FUNCTION(0x1, "arc")),
	BERLIN_PINCTRL_GROUP("G21", 0x04, 0x3, 0x0f,
		BERLIN_PINCTRL_FUNCTION(0x0, "gpio"),
		BERLIN_PINCTRL_FUNCTION(0x1, "dvio"),
		BERLIN_PINCTRL_FUNCTION(0x2, "fp"),
		BERLIN_PINCTRL_FUNCTION(0x3, "adac_dbg"),
		BERLIN_PINCTRL_FUNCTION(0x4, "pdm_a"),	/* gpio17..19,pdm */
		BERLIN_PINCTRL_FUNCTION(0x7, "pdm_b")),	/* gpio12..14,pdm */
	BERLIN_PINCTRL_GROUP("G22", 0x04, 0x3, 0x12,
		BERLIN_PINCTRL_FUNCTION(0x0, "gpio"),
		BERLIN_PINCTRL_FUNCTION(0x1, "dv0"),
		BERLIN_PINCTRL_FUNCTION(0x2, "fp"),
		BERLIN_PINCTRL_FUNCTION(0x3, "twsi0"),
		BERLIN_PINCTRL_FUNCTION(0x4, "pwm")),
	BERLIN_PINCTRL_GROUP("G23", 0x04, 0x3, 0x15,
		BERLIN_PINCTRL_FUNCTION(0x0, "vclki"),
		BERLIN_PINCTRL_FUNCTION(0x1, "dv0"),
		BERLIN_PINCTRL_FUNCTION(0x2, "fp"),
		BERLIN_PINCTRL_FUNCTION(0x3, "i2s0"),
		BERLIN_PINCTRL_FUNCTION(0x4, "pwm"),
		BERLIN_PINCTRL_FUNCTION(0x7, "pdm")),
	BERLIN_PINCTRL_GROUP("G24", 0x04, 0x2, 0x18,
		BERLIN_PINCTRL_FUNCTION(0x0, "i2s2"),
		BERLIN_PINCTRL_FUNCTION(0x1, "i2s1")),
	BERLIN_PINCTRL_GROUP("G25", 0x04, 0x2, 0x1a,
		BERLIN_PINCTRL_FUNCTION(0x0, "gpio"),
		BERLIN_PINCTRL_FUNCTION(0x1, "nand"),
		BERLIN_PINCTRL_FUNCTION(0x2, "i2s2")),
	BERLIN_PINCTRL_GROUP("G26", 0x04, 0x1, 0x1c,
		BERLIN_PINCTRL_FUNCTION(0x0, "nand"),
		BERLIN_PINCTRL_FUNCTION(0x1, "emmc")),
	BERLIN_PINCTRL_GROUP("G27", 0x04, 0x1, 0x1d,
		BERLIN_PINCTRL_FUNCTION(0x0, "gpio"),
		BERLIN_PINCTRL_FUNCTION(0x1, "nand")),
	BERLIN_PINCTRL_GROUP("G28", 0x04, 0x2, 0x1e,
		BERLIN_PINCTRL_FUNCTION(0x0, "dvo"),
		BERLIN_PINCTRL_FUNCTION(0x2, "sp")),
};

static const struct berlin_desc_group berlin2_sysmgr_pinctrl_groups[] = {
	/* GSM */
	BERLIN_PINCTRL_GROUP("GSM0", 0x40, 0x2, 0x00,
		BERLIN_PINCTRL_FUNCTION(0x0, "gpio"),
		BERLIN_PINCTRL_FUNCTION(0x1, "spi2"), /* SS0n */
		BERLIN_PINCTRL_FUNCTION(0x2, "eth1")),
	BERLIN_PINCTRL_GROUP("GSM1", 0x40, 0x2, 0x02,
		BERLIN_PINCTRL_FUNCTION(0x0, "gpio"),
		BERLIN_PINCTRL_FUNCTION(0x1, "spi2"), /* SS1n */
		BERLIN_PINCTRL_FUNCTION(0x2, "eth1")),
	BERLIN_PINCTRL_GROUP("GSM2", 0x40, 0x2, 0x04,
		BERLIN_PINCTRL_FUNCTION(0x0, "twsi2"),
		BERLIN_PINCTRL_FUNCTION(0x1, "spi2")), /* SS2n/SS3n */
	BERLIN_PINCTRL_GROUP("GSM3", 0x40, 0x2, 0x06,
		BERLIN_PINCTRL_FUNCTION(0x0, "gpio"),
		BERLIN_PINCTRL_FUNCTION(0x1, "uart0"),	/* CTS/RTS */
		BERLIN_PINCTRL_FUNCTION(0x2, "uart2"),	/* RX/TX */
		BERLIN_PINCTRL_FUNCTION(0x3, "twsi2")),
	BERLIN_PINCTRL_GROUP("GSM4", 0x40, 0x2, 0x08,
		BERLIN_PINCTRL_FUNCTION(0x0, "uart0"),	/* RX/TX */
		BERLIN_PINCTRL_FUNCTION(0x1, "irda0")),
	BERLIN_PINCTRL_GROUP("GSM5", 0x40, 0x2, 0x0a,
		BERLIN_PINCTRL_FUNCTION(0x0, "gpio"),
		BERLIN_PINCTRL_FUNCTION(0x1, "uart1"),	/* RX/TX */
		BERLIN_PINCTRL_FUNCTION(0x2, "irda1"),
		BERLIN_PINCTRL_FUNCTION(0x3, "twsi3")),
	BERLIN_PINCTRL_GROUP("GSM6", 0x40, 0x2, 0x0c,
		BERLIN_PINCTRL_FUNCTION(0x0, "gpio"),
		BERLIN_PINCTRL_FUNCTION(0x1, "spi2"), /* CLK/SDO */
		BERLIN_PINCTRL_FUNCTION(0x1, "clki")),
	BERLIN_PINCTRL_GROUP("GSM7", 0x40, 0x1, 0x0e,
		BERLIN_PINCTRL_FUNCTION(0x0, "gpio"),
		BERLIN_PINCTRL_FUNCTION(0x1, "hdmi")),
	BERLIN_PINCTRL_GROUP("GSM8", 0x40, 0x1, 0x0f,
		BERLIN_PINCTRL_FUNCTION(0x0, "gpio"),
		BERLIN_PINCTRL_FUNCTION(0x1, "hdmi")),
	BERLIN_PINCTRL_GROUP("GSM9", 0x40, 0x1, 0x10,
		BERLIN_PINCTRL_FUNCTION(0x0, "gpio"),
		BERLIN_PINCTRL_FUNCTION(0x1, "led")),
	BERLIN_PINCTRL_GROUP("GSM10", 0x40, 0x1, 0x11,
		BERLIN_PINCTRL_FUNCTION(0x0, "gpio"),
		BERLIN_PINCTRL_FUNCTION(0x1, "led")),
	BERLIN_PINCTRL_GROUP("GSM11", 0x40, 0x1, 0x12,
		BERLIN_PINCTRL_FUNCTION(0x0, "gpio"),
		BERLIN_PINCTRL_FUNCTION(0x1, "led")),
};

static const struct berlin_pinctrl_desc berlin2_soc_pinctrl_data = {
	.groups = berlin2_soc_pinctrl_groups,
	.ngroups = ARRAY_SIZE(berlin2_soc_pinctrl_groups),
};

static const struct berlin_pinctrl_desc berlin2_sysmgr_pinctrl_data = {
	.groups = berlin2_sysmgr_pinctrl_groups,
	.ngroups = ARRAY_SIZE(berlin2_sysmgr_pinctrl_groups),
};

static const struct of_device_id berlin2_pinctrl_match[] = {
	{
		.compatible = "marvell,berlin2-soc-pinctrl",
		.data = &berlin2_soc_pinctrl_data
	},
	{
		.compatible = "marvell,berlin2-system-pinctrl",
		.data = &berlin2_sysmgr_pinctrl_data
	},
	{}
};
MODULE_DEVICE_TABLE(of, berlin2_pinctrl_match);

static int berlin2_pinctrl_probe(struct platform_device *pdev)
{
	const struct of_device_id *match =
		of_match_device(berlin2_pinctrl_match, &pdev->dev);

	return berlin_pinctrl_probe(pdev, match->data);
}

static struct platform_driver berlin2_pinctrl_driver = {
	.probe	= berlin2_pinctrl_probe,
	.driver	= {
		.name = "berlin-bg2-pinctrl",
		.of_match_table = berlin2_pinctrl_match,
	},
};
module_platform_driver(berlin2_pinctrl_driver);

MODULE_AUTHOR("Antoine Ténart <antoine.tenart@free-electrons.com>");
MODULE_DESCRIPTION("Marvell Berlin BG2 pinctrl driver");
MODULE_LICENSE("GPL");
