// SPDX-License-Identifier: GPL-2.0+
/*
 * Bitmain BM1880 SoC Pinctrl driver
 *
 * Copyright (c) 2019 Linaro Ltd.
 * Author: Manivannan Sadhasivam <manivannan.sadhasivam@linaro.org>
 */

#include <linux/io.h>
#include <linux/of.h>
#include <linux/platform_device.h>
#include <linux/pinctrl/pinctrl.h>
#include <linux/pinctrl/pinmux.h>
#include <linux/pinctrl/pinconf-generic.h>
#include <linux/slab.h>

#include "core.h"
#include "pinctrl-utils.h"

#define BM1880_REG_MUX 0x20

/**
 * struct bm1880_pinctrl - driver data
 * @base:	Pinctrl base address
 * @pctrl:	Pinctrl device
 * @groups:	Pingroups
 * @ngroups:	Number of @groups
 * @funcs:	Pinmux functions
 * @nfuncs:	Number of @funcs
 * @pconf:	Pinconf data
 */
struct bm1880_pinctrl {
	void __iomem *base;
	struct pinctrl_dev *pctrldev;
	const struct bm1880_pctrl_group *groups;
	unsigned int ngroups;
	const struct bm1880_pinmux_function *funcs;
	unsigned int nfuncs;
	const struct bm1880_pinconf_data *pinconf;
};

/**
 * struct bm1880_pctrl_group - pinctrl group
 * @name:	Name of the group
 * @pins:	Array of pins belonging to this group
 * @npins:	Number of @pins
 */
struct bm1880_pctrl_group {
	const char *name;
	const unsigned int *pins;
	const unsigned int npins;
};

/**
 * struct bm1880_pinmux_function - a pinmux function
 * @name:	Name of the pinmux function.
 * @groups:	List of pingroups for this function.
 * @ngroups:	Number of entries in @groups.
 * @mux_val:	Selector for this function
 * @mux:	Offset of function specific mux
 * @mux_shift:	Shift for function specific selector
 */
struct bm1880_pinmux_function {
	const char *name;
	const char * const *groups;
	unsigned int ngroups;
	u32 mux_val;
	u32 mux;
	u8 mux_shift;
};

/**
 * struct bm1880_pinconf_data - pinconf data
 * @drv_bits:	Drive strength bit width
 */
struct bm1880_pinconf_data {
	u32 drv_bits;
};

static const struct pinctrl_pin_desc bm1880_pins[] = {
	PINCTRL_PIN(0,   "MIO0"),
	PINCTRL_PIN(1,   "MIO1"),
	PINCTRL_PIN(2,   "MIO2"),
	PINCTRL_PIN(3,   "MIO3"),
	PINCTRL_PIN(4,   "MIO4"),
	PINCTRL_PIN(5,   "MIO5"),
	PINCTRL_PIN(6,   "MIO6"),
	PINCTRL_PIN(7,   "MIO7"),
	PINCTRL_PIN(8,   "MIO8"),
	PINCTRL_PIN(9,   "MIO9"),
	PINCTRL_PIN(10,   "MIO10"),
	PINCTRL_PIN(11,   "MIO11"),
	PINCTRL_PIN(12,   "MIO12"),
	PINCTRL_PIN(13,   "MIO13"),
	PINCTRL_PIN(14,   "MIO14"),
	PINCTRL_PIN(15,   "MIO15"),
	PINCTRL_PIN(16,   "MIO16"),
	PINCTRL_PIN(17,   "MIO17"),
	PINCTRL_PIN(18,   "MIO18"),
	PINCTRL_PIN(19,   "MIO19"),
	PINCTRL_PIN(20,   "MIO20"),
	PINCTRL_PIN(21,   "MIO21"),
	PINCTRL_PIN(22,   "MIO22"),
	PINCTRL_PIN(23,   "MIO23"),
	PINCTRL_PIN(24,   "MIO24"),
	PINCTRL_PIN(25,   "MIO25"),
	PINCTRL_PIN(26,   "MIO26"),
	PINCTRL_PIN(27,   "MIO27"),
	PINCTRL_PIN(28,   "MIO28"),
	PINCTRL_PIN(29,   "MIO29"),
	PINCTRL_PIN(30,   "MIO30"),
	PINCTRL_PIN(31,   "MIO31"),
	PINCTRL_PIN(32,   "MIO32"),
	PINCTRL_PIN(33,   "MIO33"),
	PINCTRL_PIN(34,   "MIO34"),
	PINCTRL_PIN(35,   "MIO35"),
	PINCTRL_PIN(36,   "MIO36"),
	PINCTRL_PIN(37,   "MIO37"),
	PINCTRL_PIN(38,   "MIO38"),
	PINCTRL_PIN(39,   "MIO39"),
	PINCTRL_PIN(40,   "MIO40"),
	PINCTRL_PIN(41,   "MIO41"),
	PINCTRL_PIN(42,   "MIO42"),
	PINCTRL_PIN(43,   "MIO43"),
	PINCTRL_PIN(44,   "MIO44"),
	PINCTRL_PIN(45,   "MIO45"),
	PINCTRL_PIN(46,   "MIO46"),
	PINCTRL_PIN(47,   "MIO47"),
	PINCTRL_PIN(48,   "MIO48"),
	PINCTRL_PIN(49,   "MIO49"),
	PINCTRL_PIN(50,   "MIO50"),
	PINCTRL_PIN(51,   "MIO51"),
	PINCTRL_PIN(52,   "MIO52"),
	PINCTRL_PIN(53,   "MIO53"),
	PINCTRL_PIN(54,   "MIO54"),
	PINCTRL_PIN(55,   "MIO55"),
	PINCTRL_PIN(56,   "MIO56"),
	PINCTRL_PIN(57,   "MIO57"),
	PINCTRL_PIN(58,   "MIO58"),
	PINCTRL_PIN(59,   "MIO59"),
	PINCTRL_PIN(60,   "MIO60"),
	PINCTRL_PIN(61,   "MIO61"),
	PINCTRL_PIN(62,   "MIO62"),
	PINCTRL_PIN(63,   "MIO63"),
	PINCTRL_PIN(64,   "MIO64"),
	PINCTRL_PIN(65,   "MIO65"),
	PINCTRL_PIN(66,   "MIO66"),
	PINCTRL_PIN(67,   "MIO67"),
	PINCTRL_PIN(68,   "MIO68"),
	PINCTRL_PIN(69,   "MIO69"),
	PINCTRL_PIN(70,   "MIO70"),
	PINCTRL_PIN(71,   "MIO71"),
	PINCTRL_PIN(72,   "MIO72"),
	PINCTRL_PIN(73,   "MIO73"),
	PINCTRL_PIN(74,   "MIO74"),
	PINCTRL_PIN(75,   "MIO75"),
	PINCTRL_PIN(76,   "MIO76"),
	PINCTRL_PIN(77,   "MIO77"),
	PINCTRL_PIN(78,   "MIO78"),
	PINCTRL_PIN(79,   "MIO79"),
	PINCTRL_PIN(80,   "MIO80"),
	PINCTRL_PIN(81,   "MIO81"),
	PINCTRL_PIN(82,   "MIO82"),
	PINCTRL_PIN(83,   "MIO83"),
	PINCTRL_PIN(84,   "MIO84"),
	PINCTRL_PIN(85,   "MIO85"),
	PINCTRL_PIN(86,   "MIO86"),
	PINCTRL_PIN(87,   "MIO87"),
	PINCTRL_PIN(88,   "MIO88"),
	PINCTRL_PIN(89,   "MIO89"),
	PINCTRL_PIN(90,   "MIO90"),
	PINCTRL_PIN(91,   "MIO91"),
	PINCTRL_PIN(92,   "MIO92"),
	PINCTRL_PIN(93,   "MIO93"),
	PINCTRL_PIN(94,   "MIO94"),
	PINCTRL_PIN(95,   "MIO95"),
	PINCTRL_PIN(96,   "MIO96"),
	PINCTRL_PIN(97,   "MIO97"),
	PINCTRL_PIN(98,   "MIO98"),
	PINCTRL_PIN(99,   "MIO99"),
	PINCTRL_PIN(100,   "MIO100"),
	PINCTRL_PIN(101,   "MIO101"),
	PINCTRL_PIN(102,   "MIO102"),
	PINCTRL_PIN(103,   "MIO103"),
	PINCTRL_PIN(104,   "MIO104"),
	PINCTRL_PIN(105,   "MIO105"),
	PINCTRL_PIN(106,   "MIO106"),
	PINCTRL_PIN(107,   "MIO107"),
	PINCTRL_PIN(108,   "MIO108"),
	PINCTRL_PIN(109,   "MIO109"),
	PINCTRL_PIN(110,   "MIO110"),
	PINCTRL_PIN(111,   "MIO111"),
};

enum bm1880_pinmux_functions {
	F_nand, F_spi, F_emmc, F_sdio, F_eth0, F_pwm0, F_pwm1, F_pwm2,
	F_pwm3, F_pwm4, F_pwm5, F_pwm6, F_pwm7, F_pwm8, F_pwm9, F_pwm10,
	F_pwm11, F_pwm12, F_pwm13, F_pwm14, F_pwm15, F_pwm16, F_pwm17,
	F_pwm18, F_pwm19, F_pwm20, F_pwm21, F_pwm22, F_pwm23, F_pwm24,
	F_pwm25, F_pwm26, F_pwm27, F_pwm28, F_pwm29, F_pwm30, F_pwm31,
	F_pwm32, F_pwm33, F_pwm34, F_pwm35, F_pwm36, F_pwm37, F_i2c0, F_i2c1,
	F_i2c2, F_i2c3, F_i2c4, F_uart0, F_uart1, F_uart2, F_uart3, F_uart4,
	F_uart5, F_uart6, F_uart7, F_uart8, F_uart9, F_uart10, F_uart11,
	F_uart12, F_uart13, F_uart14, F_uart15, F_gpio0, F_gpio1, F_gpio2,
	F_gpio3, F_gpio4, F_gpio5, F_gpio6, F_gpio7, F_gpio8, F_gpio9, F_gpio10,
	F_gpio11, F_gpio12, F_gpio13, F_gpio14, F_gpio15, F_gpio16, F_gpio17,
	F_gpio18, F_gpio19, F_gpio20, F_gpio21, F_gpio22, F_gpio23, F_gpio24,
	F_gpio25, F_gpio26, F_gpio27, F_gpio28, F_gpio29, F_gpio30, F_gpio31,
	F_gpio32, F_gpio33, F_gpio34, F_gpio35, F_gpio36, F_gpio37, F_gpio38,
	F_gpio39, F_gpio40, F_gpio41, F_gpio42, F_gpio43, F_gpio44, F_gpio45,
	F_gpio46, F_gpio47, F_gpio48, F_gpio49, F_gpio50, F_gpio51, F_gpio52,
	F_gpio53, F_gpio54, F_gpio55, F_gpio56, F_gpio57, F_gpio58, F_gpio59,
	F_gpio60, F_gpio61, F_gpio62, F_gpio63, F_gpio64, F_gpio65, F_gpio66,
	F_gpio67, F_eth1, F_i2s0, F_i2s0_mclkin, F_i2s1, F_i2s1_mclkin, F_spi0,
	F_max
};

static const unsigned int nand_pins[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9,
					  10, 11, 12, 13, 14, 15, 16 };
static const unsigned int spi_pins[] = { 0, 1, 8, 10, 11, 12, 13 };
static const unsigned int emmc_pins[] = { 2, 3, 4, 5, 6, 7, 9, 14, 15, 16 };
static const unsigned int sdio_pins[] = { 17, 18, 19, 20, 21, 22, 23, 24,
					  25, 26 };
static const unsigned int eth0_pins[] = { 27, 28, 29, 30, 31, 32, 33, 34, 35,
					  36, 37, 38, 39, 40, 41, 42 };
static const unsigned int pwm0_pins[] = { 29 };
static const unsigned int pwm1_pins[] = { 30 };
static const unsigned int pwm2_pins[] = { 34 };
static const unsigned int pwm3_pins[] = { 35 };
static const unsigned int pwm4_pins[] = { 43 };
static const unsigned int pwm5_pins[] = { 44 };
static const unsigned int pwm6_pins[] = { 45 };
static const unsigned int pwm7_pins[] = { 46 };
static const unsigned int pwm8_pins[] = { 47 };
static const unsigned int pwm9_pins[] = { 48 };
static const unsigned int pwm10_pins[] = { 49 };
static const unsigned int pwm11_pins[] = { 50 };
static const unsigned int pwm12_pins[] = { 51 };
static const unsigned int pwm13_pins[] = { 52 };
static const unsigned int pwm14_pins[] = { 53 };
static const unsigned int pwm15_pins[] = { 54 };
static const unsigned int pwm16_pins[] = { 55 };
static const unsigned int pwm17_pins[] = { 56 };
static const unsigned int pwm18_pins[] = { 57 };
static const unsigned int pwm19_pins[] = { 58 };
static const unsigned int pwm20_pins[] = { 59 };
static const unsigned int pwm21_pins[] = { 60 };
static const unsigned int pwm22_pins[] = { 61 };
static const unsigned int pwm23_pins[] = { 62 };
static const unsigned int pwm24_pins[] = { 97 };
static const unsigned int pwm25_pins[] = { 98 };
static const unsigned int pwm26_pins[] = { 99 };
static const unsigned int pwm27_pins[] = { 100 };
static const unsigned int pwm28_pins[] = { 101 };
static const unsigned int pwm29_pins[] = { 102 };
static const unsigned int pwm30_pins[] = { 103 };
static const unsigned int pwm31_pins[] = { 104 };
static const unsigned int pwm32_pins[] = { 105 };
static const unsigned int pwm33_pins[] = { 106 };
static const unsigned int pwm34_pins[] = { 107 };
static const unsigned int pwm35_pins[] = { 108 };
static const unsigned int pwm36_pins[] = { 109 };
static const unsigned int pwm37_pins[] = { 110 };
static const unsigned int i2c0_pins[] = { 63, 64 };
static const unsigned int i2c1_pins[] = { 65, 66 };
static const unsigned int i2c2_pins[] = { 67, 68 };
static const unsigned int i2c3_pins[] = { 69, 70 };
static const unsigned int i2c4_pins[] = { 71, 72 };
static const unsigned int uart0_pins[] = { 73, 74 };
static const unsigned int uart1_pins[] = { 75, 76 };
static const unsigned int uart2_pins[] = { 77, 78 };
static const unsigned int uart3_pins[] = { 79, 80 };
static const unsigned int uart4_pins[] = { 81, 82 };
static const unsigned int uart5_pins[] = { 83, 84 };
static const unsigned int uart6_pins[] = { 85, 86 };
static const unsigned int uart7_pins[] = { 87, 88 };
static const unsigned int uart8_pins[] = { 89, 90 };
static const unsigned int uart9_pins[] = { 91, 92 };
static const unsigned int uart10_pins[] = { 93, 94 };
static const unsigned int uart11_pins[] = { 95, 96 };
static const unsigned int uart12_pins[] = { 73, 74, 75, 76 };
static const unsigned int uart13_pins[] = { 77, 78, 83, 84 };
static const unsigned int uart14_pins[] = { 79, 80, 85, 86 };
static const unsigned int uart15_pins[] = { 81, 82, 87, 88 };
static const unsigned int gpio0_pins[] = { 97 };
static const unsigned int gpio1_pins[] = { 98 };
static const unsigned int gpio2_pins[] = { 99 };
static const unsigned int gpio3_pins[] = { 100 };
static const unsigned int gpio4_pins[] = { 101 };
static const unsigned int gpio5_pins[] = { 102 };
static const unsigned int gpio6_pins[] = { 103 };
static const unsigned int gpio7_pins[] = { 104 };
static const unsigned int gpio8_pins[] = { 105 };
static const unsigned int gpio9_pins[] = { 106 };
static const unsigned int gpio10_pins[] = { 107 };
static const unsigned int gpio11_pins[] = { 108 };
static const unsigned int gpio12_pins[] = { 109 };
static const unsigned int gpio13_pins[] = { 110 };
static const unsigned int gpio14_pins[] = { 43 };
static const unsigned int gpio15_pins[] = { 44 };
static const unsigned int gpio16_pins[] = { 45 };
static const unsigned int gpio17_pins[] = { 46 };
static const unsigned int gpio18_pins[] = { 47 };
static const unsigned int gpio19_pins[] = { 48 };
static const unsigned int gpio20_pins[] = { 49 };
static const unsigned int gpio21_pins[] = { 50 };
static const unsigned int gpio22_pins[] = { 51 };
static const unsigned int gpio23_pins[] = { 52 };
static const unsigned int gpio24_pins[] = { 53 };
static const unsigned int gpio25_pins[] = { 54 };
static const unsigned int gpio26_pins[] = { 55 };
static const unsigned int gpio27_pins[] = { 56 };
static const unsigned int gpio28_pins[] = { 57 };
static const unsigned int gpio29_pins[] = { 58 };
static const unsigned int gpio30_pins[] = { 59 };
static const unsigned int gpio31_pins[] = { 60 };
static const unsigned int gpio32_pins[] = { 61 };
static const unsigned int gpio33_pins[] = { 62 };
static const unsigned int gpio34_pins[] = { 63 };
static const unsigned int gpio35_pins[] = { 64 };
static const unsigned int gpio36_pins[] = { 65 };
static const unsigned int gpio37_pins[] = { 66 };
static const unsigned int gpio38_pins[] = { 67 };
static const unsigned int gpio39_pins[] = { 68 };
static const unsigned int gpio40_pins[] = { 69 };
static const unsigned int gpio41_pins[] = { 70 };
static const unsigned int gpio42_pins[] = { 71 };
static const unsigned int gpio43_pins[] = { 72 };
static const unsigned int gpio44_pins[] = { 73 };
static const unsigned int gpio45_pins[] = { 74 };
static const unsigned int gpio46_pins[] = { 75 };
static const unsigned int gpio47_pins[] = { 76 };
static const unsigned int gpio48_pins[] = { 77 };
static const unsigned int gpio49_pins[] = { 78 };
static const unsigned int gpio50_pins[] = { 79 };
static const unsigned int gpio51_pins[] = { 80 };
static const unsigned int gpio52_pins[] = { 81 };
static const unsigned int gpio53_pins[] = { 82 };
static const unsigned int gpio54_pins[] = { 83 };
static const unsigned int gpio55_pins[] = { 84 };
static const unsigned int gpio56_pins[] = { 85 };
static const unsigned int gpio57_pins[] = { 86 };
static const unsigned int gpio58_pins[] = { 87 };
static const unsigned int gpio59_pins[] = { 88 };
static const unsigned int gpio60_pins[] = { 89 };
static const unsigned int gpio61_pins[] = { 90 };
static const unsigned int gpio62_pins[] = { 91 };
static const unsigned int gpio63_pins[] = { 92 };
static const unsigned int gpio64_pins[] = { 93 };
static const unsigned int gpio65_pins[] = { 94 };
static const unsigned int gpio66_pins[] = { 95 };
static const unsigned int gpio67_pins[] = { 96 };
static const unsigned int eth1_pins[] = { 43, 44, 45, 46, 47, 48, 49, 50, 51,
					  52, 53, 54, 55, 56, 57, 58 };
static const unsigned int i2s0_pins[] = { 87, 88, 89, 90, 91 };
static const unsigned int i2s0_mclkin_pins[] = { 97 };
static const unsigned int i2s1_pins[] = { 92, 93, 94, 95, 96 };
static const unsigned int i2s1_mclkin_pins[] = { 98 };
static const unsigned int spi0_pins[] = { 59, 60, 61, 62 };

#define BM1880_PINCTRL_GRP(nm) \
	{ \
		.name = #nm "_grp", \
		.pins = nm ## _pins, \
		.npins = ARRAY_SIZE(nm ## _pins), \
	}

static const struct bm1880_pctrl_group bm1880_pctrl_groups[] = {
	BM1880_PINCTRL_GRP(nand),
	BM1880_PINCTRL_GRP(spi),
	BM1880_PINCTRL_GRP(emmc),
	BM1880_PINCTRL_GRP(sdio),
	BM1880_PINCTRL_GRP(eth0),
	BM1880_PINCTRL_GRP(pwm0),
	BM1880_PINCTRL_GRP(pwm1),
	BM1880_PINCTRL_GRP(pwm2),
	BM1880_PINCTRL_GRP(pwm3),
	BM1880_PINCTRL_GRP(pwm4),
	BM1880_PINCTRL_GRP(pwm5),
	BM1880_PINCTRL_GRP(pwm6),
	BM1880_PINCTRL_GRP(pwm7),
	BM1880_PINCTRL_GRP(pwm8),
	BM1880_PINCTRL_GRP(pwm9),
	BM1880_PINCTRL_GRP(pwm10),
	BM1880_PINCTRL_GRP(pwm11),
	BM1880_PINCTRL_GRP(pwm12),
	BM1880_PINCTRL_GRP(pwm13),
	BM1880_PINCTRL_GRP(pwm14),
	BM1880_PINCTRL_GRP(pwm15),
	BM1880_PINCTRL_GRP(pwm16),
	BM1880_PINCTRL_GRP(pwm17),
	BM1880_PINCTRL_GRP(pwm18),
	BM1880_PINCTRL_GRP(pwm19),
	BM1880_PINCTRL_GRP(pwm20),
	BM1880_PINCTRL_GRP(pwm21),
	BM1880_PINCTRL_GRP(pwm22),
	BM1880_PINCTRL_GRP(pwm23),
	BM1880_PINCTRL_GRP(pwm24),
	BM1880_PINCTRL_GRP(pwm25),
	BM1880_PINCTRL_GRP(pwm26),
	BM1880_PINCTRL_GRP(pwm27),
	BM1880_PINCTRL_GRP(pwm28),
	BM1880_PINCTRL_GRP(pwm29),
	BM1880_PINCTRL_GRP(pwm30),
	BM1880_PINCTRL_GRP(pwm31),
	BM1880_PINCTRL_GRP(pwm32),
	BM1880_PINCTRL_GRP(pwm33),
	BM1880_PINCTRL_GRP(pwm34),
	BM1880_PINCTRL_GRP(pwm35),
	BM1880_PINCTRL_GRP(pwm36),
	BM1880_PINCTRL_GRP(pwm37),
	BM1880_PINCTRL_GRP(i2c0),
	BM1880_PINCTRL_GRP(i2c1),
	BM1880_PINCTRL_GRP(i2c2),
	BM1880_PINCTRL_GRP(i2c3),
	BM1880_PINCTRL_GRP(i2c4),
	BM1880_PINCTRL_GRP(uart0),
	BM1880_PINCTRL_GRP(uart1),
	BM1880_PINCTRL_GRP(uart2),
	BM1880_PINCTRL_GRP(uart3),
	BM1880_PINCTRL_GRP(uart4),
	BM1880_PINCTRL_GRP(uart5),
	BM1880_PINCTRL_GRP(uart6),
	BM1880_PINCTRL_GRP(uart7),
	BM1880_PINCTRL_GRP(uart8),
	BM1880_PINCTRL_GRP(uart9),
	BM1880_PINCTRL_GRP(uart10),
	BM1880_PINCTRL_GRP(uart11),
	BM1880_PINCTRL_GRP(uart12),
	BM1880_PINCTRL_GRP(uart13),
	BM1880_PINCTRL_GRP(uart14),
	BM1880_PINCTRL_GRP(uart15),
	BM1880_PINCTRL_GRP(gpio0),
	BM1880_PINCTRL_GRP(gpio1),
	BM1880_PINCTRL_GRP(gpio2),
	BM1880_PINCTRL_GRP(gpio3),
	BM1880_PINCTRL_GRP(gpio4),
	BM1880_PINCTRL_GRP(gpio5),
	BM1880_PINCTRL_GRP(gpio6),
	BM1880_PINCTRL_GRP(gpio7),
	BM1880_PINCTRL_GRP(gpio8),
	BM1880_PINCTRL_GRP(gpio9),
	BM1880_PINCTRL_GRP(gpio10),
	BM1880_PINCTRL_GRP(gpio11),
	BM1880_PINCTRL_GRP(gpio12),
	BM1880_PINCTRL_GRP(gpio13),
	BM1880_PINCTRL_GRP(gpio14),
	BM1880_PINCTRL_GRP(gpio15),
	BM1880_PINCTRL_GRP(gpio16),
	BM1880_PINCTRL_GRP(gpio17),
	BM1880_PINCTRL_GRP(gpio18),
	BM1880_PINCTRL_GRP(gpio19),
	BM1880_PINCTRL_GRP(gpio20),
	BM1880_PINCTRL_GRP(gpio21),
	BM1880_PINCTRL_GRP(gpio22),
	BM1880_PINCTRL_GRP(gpio23),
	BM1880_PINCTRL_GRP(gpio24),
	BM1880_PINCTRL_GRP(gpio25),
	BM1880_PINCTRL_GRP(gpio26),
	BM1880_PINCTRL_GRP(gpio27),
	BM1880_PINCTRL_GRP(gpio28),
	BM1880_PINCTRL_GRP(gpio29),
	BM1880_PINCTRL_GRP(gpio30),
	BM1880_PINCTRL_GRP(gpio31),
	BM1880_PINCTRL_GRP(gpio32),
	BM1880_PINCTRL_GRP(gpio33),
	BM1880_PINCTRL_GRP(gpio34),
	BM1880_PINCTRL_GRP(gpio35),
	BM1880_PINCTRL_GRP(gpio36),
	BM1880_PINCTRL_GRP(gpio37),
	BM1880_PINCTRL_GRP(gpio38),
	BM1880_PINCTRL_GRP(gpio39),
	BM1880_PINCTRL_GRP(gpio40),
	BM1880_PINCTRL_GRP(gpio41),
	BM1880_PINCTRL_GRP(gpio42),
	BM1880_PINCTRL_GRP(gpio43),
	BM1880_PINCTRL_GRP(gpio44),
	BM1880_PINCTRL_GRP(gpio45),
	BM1880_PINCTRL_GRP(gpio46),
	BM1880_PINCTRL_GRP(gpio47),
	BM1880_PINCTRL_GRP(gpio48),
	BM1880_PINCTRL_GRP(gpio49),
	BM1880_PINCTRL_GRP(gpio50),
	BM1880_PINCTRL_GRP(gpio51),
	BM1880_PINCTRL_GRP(gpio52),
	BM1880_PINCTRL_GRP(gpio53),
	BM1880_PINCTRL_GRP(gpio54),
	BM1880_PINCTRL_GRP(gpio55),
	BM1880_PINCTRL_GRP(gpio56),
	BM1880_PINCTRL_GRP(gpio57),
	BM1880_PINCTRL_GRP(gpio58),
	BM1880_PINCTRL_GRP(gpio59),
	BM1880_PINCTRL_GRP(gpio60),
	BM1880_PINCTRL_GRP(gpio61),
	BM1880_PINCTRL_GRP(gpio62),
	BM1880_PINCTRL_GRP(gpio63),
	BM1880_PINCTRL_GRP(gpio64),
	BM1880_PINCTRL_GRP(gpio65),
	BM1880_PINCTRL_GRP(gpio66),
	BM1880_PINCTRL_GRP(gpio67),
	BM1880_PINCTRL_GRP(eth1),
	BM1880_PINCTRL_GRP(i2s0),
	BM1880_PINCTRL_GRP(i2s0_mclkin),
	BM1880_PINCTRL_GRP(i2s1),
	BM1880_PINCTRL_GRP(i2s1_mclkin),
	BM1880_PINCTRL_GRP(spi0),
};

static const char * const nand_group[] = { "nand_grp" };
static const char * const spi_group[] = { "spi_grp" };
static const char * const emmc_group[] = { "emmc_grp" };
static const char * const sdio_group[] = { "sdio_grp" };
static const char * const eth0_group[] = { "eth0_grp" };
static const char * const pwm0_group[] = { "pwm0_grp" };
static const char * const pwm1_group[] = { "pwm1_grp" };
static const char * const pwm2_group[] = { "pwm2_grp" };
static const char * const pwm3_group[] = { "pwm3_grp" };
static const char * const pwm4_group[] = { "pwm4_grp" };
static const char * const pwm5_group[] = { "pwm5_grp" };
static const char * const pwm6_group[] = { "pwm6_grp" };
static const char * const pwm7_group[] = { "pwm7_grp" };
static const char * const pwm8_group[] = { "pwm8_grp" };
static const char * const pwm9_group[] = { "pwm9_grp" };
static const char * const pwm10_group[] = { "pwm10_grp" };
static const char * const pwm11_group[] = { "pwm11_grp" };
static const char * const pwm12_group[] = { "pwm12_grp" };
static const char * const pwm13_group[] = { "pwm13_grp" };
static const char * const pwm14_group[] = { "pwm14_grp" };
static const char * const pwm15_group[] = { "pwm15_grp" };
static const char * const pwm16_group[] = { "pwm16_grp" };
static const char * const pwm17_group[] = { "pwm17_grp" };
static const char * const pwm18_group[] = { "pwm18_grp" };
static const char * const pwm19_group[] = { "pwm19_grp" };
static const char * const pwm20_group[] = { "pwm20_grp" };
static const char * const pwm21_group[] = { "pwm21_grp" };
static const char * const pwm22_group[] = { "pwm22_grp" };
static const char * const pwm23_group[] = { "pwm23_grp" };
static const char * const pwm24_group[] = { "pwm24_grp" };
static const char * const pwm25_group[] = { "pwm25_grp" };
static const char * const pwm26_group[] = { "pwm26_grp" };
static const char * const pwm27_group[] = { "pwm27_grp" };
static const char * const pwm28_group[] = { "pwm28_grp" };
static const char * const pwm29_group[] = { "pwm29_grp" };
static const char * const pwm30_group[] = { "pwm30_grp" };
static const char * const pwm31_group[] = { "pwm31_grp" };
static const char * const pwm32_group[] = { "pwm32_grp" };
static const char * const pwm33_group[] = { "pwm33_grp" };
static const char * const pwm34_group[] = { "pwm34_grp" };
static const char * const pwm35_group[] = { "pwm35_grp" };
static const char * const pwm36_group[] = { "pwm36_grp" };
static const char * const pwm37_group[] = { "pwm37_grp" };
static const char * const i2c0_group[] = { "i2c0_grp" };
static const char * const i2c1_group[] = { "i2c1_grp" };
static const char * const i2c2_group[] = { "i2c2_grp" };
static const char * const i2c3_group[] = { "i2c3_grp" };
static const char * const i2c4_group[] = { "i2c4_grp" };
static const char * const uart0_group[] = { "uart0_grp" };
static const char * const uart1_group[] = { "uart1_grp" };
static const char * const uart2_group[] = { "uart2_grp" };
static const char * const uart3_group[] = { "uart3_grp" };
static const char * const uart4_group[] = { "uart4_grp" };
static const char * const uart5_group[] = { "uart5_grp" };
static const char * const uart6_group[] = { "uart6_grp" };
static const char * const uart7_group[] = { "uart7_grp" };
static const char * const uart8_group[] = { "uart8_grp" };
static const char * const uart9_group[] = { "uart9_grp" };
static const char * const uart10_group[] = { "uart10_grp" };
static const char * const uart11_group[] = { "uart11_grp" };
static const char * const uart12_group[] = { "uart12_grp" };
static const char * const uart13_group[] = { "uart13_grp" };
static const char * const uart14_group[] = { "uart14_grp" };
static const char * const uart15_group[] = { "uart15_grp" };
static const char * const gpio0_group[] = { "gpio0_grp" };
static const char * const gpio1_group[] = { "gpio1_grp" };
static const char * const gpio2_group[] = { "gpio2_grp" };
static const char * const gpio3_group[] = { "gpio3_grp" };
static const char * const gpio4_group[] = { "gpio4_grp" };
static const char * const gpio5_group[] = { "gpio5_grp" };
static const char * const gpio6_group[] = { "gpio6_grp" };
static const char * const gpio7_group[] = { "gpio7_grp" };
static const char * const gpio8_group[] = { "gpio8_grp" };
static const char * const gpio9_group[] = { "gpio9_grp" };
static const char * const gpio10_group[] = { "gpio10_grp" };
static const char * const gpio11_group[] = { "gpio11_grp" };
static const char * const gpio12_group[] = { "gpio12_grp" };
static const char * const gpio13_group[] = { "gpio13_grp" };
static const char * const gpio14_group[] = { "gpio14_grp" };
static const char * const gpio15_group[] = { "gpio15_grp" };
static const char * const gpio16_group[] = { "gpio16_grp" };
static const char * const gpio17_group[] = { "gpio17_grp" };
static const char * const gpio18_group[] = { "gpio18_grp" };
static const char * const gpio19_group[] = { "gpio19_grp" };
static const char * const gpio20_group[] = { "gpio20_grp" };
static const char * const gpio21_group[] = { "gpio21_grp" };
static const char * const gpio22_group[] = { "gpio22_grp" };
static const char * const gpio23_group[] = { "gpio23_grp" };
static const char * const gpio24_group[] = { "gpio24_grp" };
static const char * const gpio25_group[] = { "gpio25_grp" };
static const char * const gpio26_group[] = { "gpio26_grp" };
static const char * const gpio27_group[] = { "gpio27_grp" };
static const char * const gpio28_group[] = { "gpio28_grp" };
static const char * const gpio29_group[] = { "gpio29_grp" };
static const char * const gpio30_group[] = { "gpio30_grp" };
static const char * const gpio31_group[] = { "gpio31_grp" };
static const char * const gpio32_group[] = { "gpio32_grp" };
static const char * const gpio33_group[] = { "gpio33_grp" };
static const char * const gpio34_group[] = { "gpio34_grp" };
static const char * const gpio35_group[] = { "gpio35_grp" };
static const char * const gpio36_group[] = { "gpio36_grp" };
static const char * const gpio37_group[] = { "gpio37_grp" };
static const char * const gpio38_group[] = { "gpio38_grp" };
static const char * const gpio39_group[] = { "gpio39_grp" };
static const char * const gpio40_group[] = { "gpio40_grp" };
static const char * const gpio41_group[] = { "gpio41_grp" };
static const char * const gpio42_group[] = { "gpio42_grp" };
static const char * const gpio43_group[] = { "gpio43_grp" };
static const char * const gpio44_group[] = { "gpio44_grp" };
static const char * const gpio45_group[] = { "gpio45_grp" };
static const char * const gpio46_group[] = { "gpio46_grp" };
static const char * const gpio47_group[] = { "gpio47_grp" };
static const char * const gpio48_group[] = { "gpio48_grp" };
static const char * const gpio49_group[] = { "gpio49_grp" };
static const char * const gpio50_group[] = { "gpio50_grp" };
static const char * const gpio51_group[] = { "gpio51_grp" };
static const char * const gpio52_group[] = { "gpio52_grp" };
static const char * const gpio53_group[] = { "gpio53_grp" };
static const char * const gpio54_group[] = { "gpio54_grp" };
static const char * const gpio55_group[] = { "gpio55_grp" };
static const char * const gpio56_group[] = { "gpio56_grp" };
static const char * const gpio57_group[] = { "gpio57_grp" };
static const char * const gpio58_group[] = { "gpio58_grp" };
static const char * const gpio59_group[] = { "gpio59_grp" };
static const char * const gpio60_group[] = { "gpio60_grp" };
static const char * const gpio61_group[] = { "gpio61_grp" };
static const char * const gpio62_group[] = { "gpio62_grp" };
static const char * const gpio63_group[] = { "gpio63_grp" };
static const char * const gpio64_group[] = { "gpio64_grp" };
static const char * const gpio65_group[] = { "gpio65_grp" };
static const char * const gpio66_group[] = { "gpio66_grp" };
static const char * const gpio67_group[] = { "gpio67_grp" };
static const char * const eth1_group[] = { "eth1_grp" };
static const char * const i2s0_group[] = { "i2s0_grp" };
static const char * const i2s0_mclkin_group[] = { "i2s0_mclkin_grp" };
static const char * const i2s1_group[] = { "i2s1_grp" };
static const char * const i2s1_mclkin_group[] = { "i2s1_mclkin_grp" };
static const char * const spi0_group[] = { "spi0_grp" };

#define BM1880_PINMUX_FUNCTION(fname, mval)		\
	[F_##fname] = {					\
		.name = #fname,				\
		.groups = fname##_group,		\
		.ngroups = ARRAY_SIZE(fname##_group),	\
		.mux_val = mval,			\
	}

static const struct bm1880_pinmux_function bm1880_pmux_functions[] = {
	BM1880_PINMUX_FUNCTION(nand, 2),
	BM1880_PINMUX_FUNCTION(spi, 0),
	BM1880_PINMUX_FUNCTION(emmc, 1),
	BM1880_PINMUX_FUNCTION(sdio, 0),
	BM1880_PINMUX_FUNCTION(eth0, 0),
	BM1880_PINMUX_FUNCTION(pwm0, 2),
	BM1880_PINMUX_FUNCTION(pwm1, 2),
	BM1880_PINMUX_FUNCTION(pwm2, 2),
	BM1880_PINMUX_FUNCTION(pwm3, 2),
	BM1880_PINMUX_FUNCTION(pwm4, 2),
	BM1880_PINMUX_FUNCTION(pwm5, 2),
	BM1880_PINMUX_FUNCTION(pwm6, 2),
	BM1880_PINMUX_FUNCTION(pwm7, 2),
	BM1880_PINMUX_FUNCTION(pwm8, 2),
	BM1880_PINMUX_FUNCTION(pwm9, 2),
	BM1880_PINMUX_FUNCTION(pwm10, 2),
	BM1880_PINMUX_FUNCTION(pwm11, 2),
	BM1880_PINMUX_FUNCTION(pwm12, 2),
	BM1880_PINMUX_FUNCTION(pwm13, 2),
	BM1880_PINMUX_FUNCTION(pwm14, 2),
	BM1880_PINMUX_FUNCTION(pwm15, 2),
	BM1880_PINMUX_FUNCTION(pwm16, 2),
	BM1880_PINMUX_FUNCTION(pwm17, 2),
	BM1880_PINMUX_FUNCTION(pwm18, 2),
	BM1880_PINMUX_FUNCTION(pwm19, 2),
	BM1880_PINMUX_FUNCTION(pwm20, 2),
	BM1880_PINMUX_FUNCTION(pwm21, 2),
	BM1880_PINMUX_FUNCTION(pwm22, 2),
	BM1880_PINMUX_FUNCTION(pwm23, 2),
	BM1880_PINMUX_FUNCTION(pwm24, 2),
	BM1880_PINMUX_FUNCTION(pwm25, 2),
	BM1880_PINMUX_FUNCTION(pwm26, 2),
	BM1880_PINMUX_FUNCTION(pwm27, 2),
	BM1880_PINMUX_FUNCTION(pwm28, 2),
	BM1880_PINMUX_FUNCTION(pwm29, 2),
	BM1880_PINMUX_FUNCTION(pwm30, 2),
	BM1880_PINMUX_FUNCTION(pwm31, 2),
	BM1880_PINMUX_FUNCTION(pwm32, 2),
	BM1880_PINMUX_FUNCTION(pwm33, 2),
	BM1880_PINMUX_FUNCTION(pwm34, 2),
	BM1880_PINMUX_FUNCTION(pwm35, 2),
	BM1880_PINMUX_FUNCTION(pwm36, 2),
	BM1880_PINMUX_FUNCTION(pwm37, 2),
	BM1880_PINMUX_FUNCTION(i2c0, 1),
	BM1880_PINMUX_FUNCTION(i2c1, 1),
	BM1880_PINMUX_FUNCTION(i2c2, 1),
	BM1880_PINMUX_FUNCTION(i2c3, 1),
	BM1880_PINMUX_FUNCTION(i2c4, 1),
	BM1880_PINMUX_FUNCTION(uart0, 3),
	BM1880_PINMUX_FUNCTION(uart1, 3),
	BM1880_PINMUX_FUNCTION(uart2, 3),
	BM1880_PINMUX_FUNCTION(uart3, 3),
	BM1880_PINMUX_FUNCTION(uart4, 1),
	BM1880_PINMUX_FUNCTION(uart5, 1),
	BM1880_PINMUX_FUNCTION(uart6, 1),
	BM1880_PINMUX_FUNCTION(uart7, 1),
	BM1880_PINMUX_FUNCTION(uart8, 1),
	BM1880_PINMUX_FUNCTION(uart9, 1),
	BM1880_PINMUX_FUNCTION(uart10, 1),
	BM1880_PINMUX_FUNCTION(uart11, 1),
	BM1880_PINMUX_FUNCTION(uart12, 3),
	BM1880_PINMUX_FUNCTION(uart13, 3),
	BM1880_PINMUX_FUNCTION(uart14, 3),
	BM1880_PINMUX_FUNCTION(uart15, 3),
	BM1880_PINMUX_FUNCTION(gpio0, 0),
	BM1880_PINMUX_FUNCTION(gpio1, 0),
	BM1880_PINMUX_FUNCTION(gpio2, 0),
	BM1880_PINMUX_FUNCTION(gpio3, 0),
	BM1880_PINMUX_FUNCTION(gpio4, 0),
	BM1880_PINMUX_FUNCTION(gpio5, 0),
	BM1880_PINMUX_FUNCTION(gpio6, 0),
	BM1880_PINMUX_FUNCTION(gpio7, 0),
	BM1880_PINMUX_FUNCTION(gpio8, 0),
	BM1880_PINMUX_FUNCTION(gpio9, 0),
	BM1880_PINMUX_FUNCTION(gpio10, 0),
	BM1880_PINMUX_FUNCTION(gpio11, 0),
	BM1880_PINMUX_FUNCTION(gpio12, 1),
	BM1880_PINMUX_FUNCTION(gpio13, 1),
	BM1880_PINMUX_FUNCTION(gpio14, 0),
	BM1880_PINMUX_FUNCTION(gpio15, 0),
	BM1880_PINMUX_FUNCTION(gpio16, 0),
	BM1880_PINMUX_FUNCTION(gpio17, 0),
	BM1880_PINMUX_FUNCTION(gpio18, 0),
	BM1880_PINMUX_FUNCTION(gpio19, 0),
	BM1880_PINMUX_FUNCTION(gpio20, 0),
	BM1880_PINMUX_FUNCTION(gpio21, 0),
	BM1880_PINMUX_FUNCTION(gpio22, 0),
	BM1880_PINMUX_FUNCTION(gpio23, 0),
	BM1880_PINMUX_FUNCTION(gpio24, 0),
	BM1880_PINMUX_FUNCTION(gpio25, 0),
	BM1880_PINMUX_FUNCTION(gpio26, 0),
	BM1880_PINMUX_FUNCTION(gpio27, 0),
	BM1880_PINMUX_FUNCTION(gpio28, 0),
	BM1880_PINMUX_FUNCTION(gpio29, 0),
	BM1880_PINMUX_FUNCTION(gpio30, 0),
	BM1880_PINMUX_FUNCTION(gpio31, 0),
	BM1880_PINMUX_FUNCTION(gpio32, 0),
	BM1880_PINMUX_FUNCTION(gpio33, 0),
	BM1880_PINMUX_FUNCTION(gpio34, 0),
	BM1880_PINMUX_FUNCTION(gpio35, 0),
	BM1880_PINMUX_FUNCTION(gpio36, 0),
	BM1880_PINMUX_FUNCTION(gpio37, 0),
	BM1880_PINMUX_FUNCTION(gpio38, 0),
	BM1880_PINMUX_FUNCTION(gpio39, 0),
	BM1880_PINMUX_FUNCTION(gpio40, 0),
	BM1880_PINMUX_FUNCTION(gpio41, 0),
	BM1880_PINMUX_FUNCTION(gpio42, 0),
	BM1880_PINMUX_FUNCTION(gpio43, 0),
	BM1880_PINMUX_FUNCTION(gpio44, 0),
	BM1880_PINMUX_FUNCTION(gpio45, 0),
	BM1880_PINMUX_FUNCTION(gpio46, 0),
	BM1880_PINMUX_FUNCTION(gpio47, 0),
	BM1880_PINMUX_FUNCTION(gpio48, 0),
	BM1880_PINMUX_FUNCTION(gpio49, 0),
	BM1880_PINMUX_FUNCTION(gpio50, 0),
	BM1880_PINMUX_FUNCTION(gpio51, 0),
	BM1880_PINMUX_FUNCTION(gpio52, 0),
	BM1880_PINMUX_FUNCTION(gpio53, 0),
	BM1880_PINMUX_FUNCTION(gpio54, 0),
	BM1880_PINMUX_FUNCTION(gpio55, 0),
	BM1880_PINMUX_FUNCTION(gpio56, 0),
	BM1880_PINMUX_FUNCTION(gpio57, 0),
	BM1880_PINMUX_FUNCTION(gpio58, 0),
	BM1880_PINMUX_FUNCTION(gpio59, 0),
	BM1880_PINMUX_FUNCTION(gpio60, 0),
	BM1880_PINMUX_FUNCTION(gpio61, 0),
	BM1880_PINMUX_FUNCTION(gpio62, 0),
	BM1880_PINMUX_FUNCTION(gpio63, 0),
	BM1880_PINMUX_FUNCTION(gpio64, 0),
	BM1880_PINMUX_FUNCTION(gpio65, 0),
	BM1880_PINMUX_FUNCTION(gpio66, 0),
	BM1880_PINMUX_FUNCTION(gpio67, 0),
	BM1880_PINMUX_FUNCTION(eth1, 1),
	BM1880_PINMUX_FUNCTION(i2s0, 2),
	BM1880_PINMUX_FUNCTION(i2s0_mclkin, 1),
	BM1880_PINMUX_FUNCTION(i2s1, 2),
	BM1880_PINMUX_FUNCTION(i2s1_mclkin, 1),
	BM1880_PINMUX_FUNCTION(spi0, 1),
};

#define BM1880_PINCONF_DAT(_width)		\
	{					\
		.drv_bits = _width,		\
	}

static const struct bm1880_pinconf_data bm1880_pinconf[] = {
	BM1880_PINCONF_DAT(0x03),
	BM1880_PINCONF_DAT(0x03),
	BM1880_PINCONF_DAT(0x03),
	BM1880_PINCONF_DAT(0x03),
	BM1880_PINCONF_DAT(0x03),
	BM1880_PINCONF_DAT(0x03),
	BM1880_PINCONF_DAT(0x03),
	BM1880_PINCONF_DAT(0x03),
	BM1880_PINCONF_DAT(0x03),
	BM1880_PINCONF_DAT(0x03),
	BM1880_PINCONF_DAT(0x03),
	BM1880_PINCONF_DAT(0x03),
	BM1880_PINCONF_DAT(0x03),
	BM1880_PINCONF_DAT(0x03),
	BM1880_PINCONF_DAT(0x03),
	BM1880_PINCONF_DAT(0x03),
	BM1880_PINCONF_DAT(0x03),
	BM1880_PINCONF_DAT(0x03),
	BM1880_PINCONF_DAT(0x03),
	BM1880_PINCONF_DAT(0x03),
	BM1880_PINCONF_DAT(0x03),
	BM1880_PINCONF_DAT(0x03),
	BM1880_PINCONF_DAT(0x03),
	BM1880_PINCONF_DAT(0x03),
	BM1880_PINCONF_DAT(0x03),
	BM1880_PINCONF_DAT(0x03),
	BM1880_PINCONF_DAT(0x03),
	BM1880_PINCONF_DAT(0x03),
	BM1880_PINCONF_DAT(0x03),
	BM1880_PINCONF_DAT(0x03),
	BM1880_PINCONF_DAT(0x03),
	BM1880_PINCONF_DAT(0x03),
	BM1880_PINCONF_DAT(0x03),
	BM1880_PINCONF_DAT(0x03),
	BM1880_PINCONF_DAT(0x03),
	BM1880_PINCONF_DAT(0x03),
	BM1880_PINCONF_DAT(0x03),
	BM1880_PINCONF_DAT(0x03),
	BM1880_PINCONF_DAT(0x03),
	BM1880_PINCONF_DAT(0x03),
	BM1880_PINCONF_DAT(0x03),
	BM1880_PINCONF_DAT(0x03),
	BM1880_PINCONF_DAT(0x03),
	BM1880_PINCONF_DAT(0x03),
	BM1880_PINCONF_DAT(0x03),
	BM1880_PINCONF_DAT(0x03),
	BM1880_PINCONF_DAT(0x03),
	BM1880_PINCONF_DAT(0x03),
	BM1880_PINCONF_DAT(0x03),
	BM1880_PINCONF_DAT(0x03),
	BM1880_PINCONF_DAT(0x03),
	BM1880_PINCONF_DAT(0x03),
	BM1880_PINCONF_DAT(0x03),
	BM1880_PINCONF_DAT(0x03),
	BM1880_PINCONF_DAT(0x03),
	BM1880_PINCONF_DAT(0x03),
	BM1880_PINCONF_DAT(0x03),
	BM1880_PINCONF_DAT(0x03),
	BM1880_PINCONF_DAT(0x03),
	BM1880_PINCONF_DAT(0x03),
	BM1880_PINCONF_DAT(0x02),
	BM1880_PINCONF_DAT(0x02),
	BM1880_PINCONF_DAT(0x02),
	BM1880_PINCONF_DAT(0x02),
	BM1880_PINCONF_DAT(0x02),
	BM1880_PINCONF_DAT(0x02),
	BM1880_PINCONF_DAT(0x02),
	BM1880_PINCONF_DAT(0x02),
	BM1880_PINCONF_DAT(0x02),
	BM1880_PINCONF_DAT(0x02),
	BM1880_PINCONF_DAT(0x02),
	BM1880_PINCONF_DAT(0x02),
	BM1880_PINCONF_DAT(0x02),
	BM1880_PINCONF_DAT(0x02),
	BM1880_PINCONF_DAT(0x02),
	BM1880_PINCONF_DAT(0x02),
	BM1880_PINCONF_DAT(0x02),
	BM1880_PINCONF_DAT(0x02),
	BM1880_PINCONF_DAT(0x02),
	BM1880_PINCONF_DAT(0x02),
	BM1880_PINCONF_DAT(0x02),
	BM1880_PINCONF_DAT(0x02),
	BM1880_PINCONF_DAT(0x02),
	BM1880_PINCONF_DAT(0x02),
	BM1880_PINCONF_DAT(0x02),
	BM1880_PINCONF_DAT(0x02),
	BM1880_PINCONF_DAT(0x02),
	BM1880_PINCONF_DAT(0x02),
	BM1880_PINCONF_DAT(0x02),
	BM1880_PINCONF_DAT(0x02),
	BM1880_PINCONF_DAT(0x02),
	BM1880_PINCONF_DAT(0x02),
	BM1880_PINCONF_DAT(0x02),
	BM1880_PINCONF_DAT(0x02),
	BM1880_PINCONF_DAT(0x02),
	BM1880_PINCONF_DAT(0x02),
	BM1880_PINCONF_DAT(0x02),
	BM1880_PINCONF_DAT(0x02),
	BM1880_PINCONF_DAT(0x02),
	BM1880_PINCONF_DAT(0x02),
	BM1880_PINCONF_DAT(0x02),
	BM1880_PINCONF_DAT(0x02),
	BM1880_PINCONF_DAT(0x02),
	BM1880_PINCONF_DAT(0x02),
	BM1880_PINCONF_DAT(0x02),
	BM1880_PINCONF_DAT(0x02),
	BM1880_PINCONF_DAT(0x02),
	BM1880_PINCONF_DAT(0x02),
	BM1880_PINCONF_DAT(0x02),
	BM1880_PINCONF_DAT(0x02),
	BM1880_PINCONF_DAT(0x02),
	BM1880_PINCONF_DAT(0x02),
};

static int bm1880_pctrl_get_groups_count(struct pinctrl_dev *pctldev)
{
	struct bm1880_pinctrl *pctrl = pinctrl_dev_get_drvdata(pctldev);

	return pctrl->ngroups;
}

static const char *bm1880_pctrl_get_group_name(struct pinctrl_dev *pctldev,
					       unsigned int selector)
{
	struct bm1880_pinctrl *pctrl = pinctrl_dev_get_drvdata(pctldev);

	return pctrl->groups[selector].name;
}

static int bm1880_pctrl_get_group_pins(struct pinctrl_dev *pctldev,
				       unsigned int selector,
				       const unsigned int **pins,
				       unsigned int *num_pins)
{
	struct bm1880_pinctrl *pctrl = pinctrl_dev_get_drvdata(pctldev);

	*pins = pctrl->groups[selector].pins;
	*num_pins = pctrl->groups[selector].npins;

	return 0;
}

static const struct pinctrl_ops bm1880_pctrl_ops = {
	.get_groups_count = bm1880_pctrl_get_groups_count,
	.get_group_name = bm1880_pctrl_get_group_name,
	.get_group_pins = bm1880_pctrl_get_group_pins,
	.dt_node_to_map = pinconf_generic_dt_node_to_map_all,
	.dt_free_map = pinctrl_utils_free_map,
};

/* pinmux */
static int bm1880_pmux_get_functions_count(struct pinctrl_dev *pctldev)
{
	struct bm1880_pinctrl *pctrl = pinctrl_dev_get_drvdata(pctldev);

	return pctrl->nfuncs;
}

static const char *bm1880_pmux_get_function_name(struct pinctrl_dev *pctldev,
						 unsigned int selector)
{
	struct bm1880_pinctrl *pctrl = pinctrl_dev_get_drvdata(pctldev);

	return pctrl->funcs[selector].name;
}

static int bm1880_pmux_get_function_groups(struct pinctrl_dev *pctldev,
					   unsigned int selector,
					   const char * const **groups,
					   unsigned * const num_groups)
{
	struct bm1880_pinctrl *pctrl = pinctrl_dev_get_drvdata(pctldev);

	*groups = pctrl->funcs[selector].groups;
	*num_groups = pctrl->funcs[selector].ngroups;
	return 0;
}

static int bm1880_pinmux_set_mux(struct pinctrl_dev *pctldev,
				 unsigned int function,
				 unsigned int  group)
{
	struct bm1880_pinctrl *pctrl = pinctrl_dev_get_drvdata(pctldev);
	const struct bm1880_pctrl_group *pgrp = &pctrl->groups[group];
	const struct bm1880_pinmux_function *func = &pctrl->funcs[function];
	int i;

	for (i = 0; i < pgrp->npins; i++) {
		unsigned int pin = pgrp->pins[i];
		u32 offset = (pin >> 1) << 2;
		u32 mux_offset = ((!((pin + 1) & 1) << 4) + 4);
		u32 regval = readl_relaxed(pctrl->base + BM1880_REG_MUX +
					   offset);

		regval &= ~(0x03 << mux_offset);
		regval |= func->mux_val << mux_offset;

		writel_relaxed(regval, pctrl->base + BM1880_REG_MUX + offset);
	}

	return 0;
}

#define BM1880_PINCONF(pin, idx) ((!((pin + 1) & 1) << 4) + idx)
#define BM1880_PINCONF_PULLCTRL(pin)	BM1880_PINCONF(pin, 0)
#define BM1880_PINCONF_PULLUP(pin)	BM1880_PINCONF(pin, 1)
#define BM1880_PINCONF_PULLDOWN(pin)	BM1880_PINCONF(pin, 2)
#define BM1880_PINCONF_DRV(pin)		BM1880_PINCONF(pin, 6)
#define BM1880_PINCONF_SCHMITT(pin)	BM1880_PINCONF(pin, 9)
#define BM1880_PINCONF_SLEW(pin)	BM1880_PINCONF(pin, 10)

static int bm1880_pinconf_drv_set(unsigned int mA, u32 width,
				  u32 *regval, u32 bit_offset)
{
	u32 _regval;

	_regval = *regval;

	/*
	 * There are two sets of drive strength bit width exposed by the
	 * SoC at 4mA step, hence we need to handle them separately.
	 */
	if (width == 0x03) {
		switch (mA) {
		case 4:
			_regval &= ~(width << bit_offset);
			_regval |= (0 << bit_offset);
			break;
		case 8:
			_regval &= ~(width << bit_offset);
			_regval |= (1 << bit_offset);
			break;
		case 12:
			_regval &= ~(width << bit_offset);
			_regval |= (2 << bit_offset);
			break;
		case 16:
			_regval &= ~(width << bit_offset);
			_regval |= (3 << bit_offset);
			break;
		case 20:
			_regval &= ~(width << bit_offset);
			_regval |= (4 << bit_offset);
			break;
		case 24:
			_regval &= ~(width << bit_offset);
			_regval |= (5 << bit_offset);
			break;
		case 28:
			_regval &= ~(width << bit_offset);
			_regval |= (6 << bit_offset);
			break;
		case 32:
			_regval &= ~(width << bit_offset);
			_regval |= (7 << bit_offset);
			break;
		default:
			return -EINVAL;
		}
	} else {
		switch (mA) {
		case 4:
			_regval &= ~(width << bit_offset);
			_regval |= (0 << bit_offset);
			break;
		case 8:
			_regval &= ~(width << bit_offset);
			_regval |= (1 << bit_offset);
			break;
		case 12:
			_regval &= ~(width << bit_offset);
			_regval |= (2 << bit_offset);
			break;
		case 16:
			_regval &= ~(width << bit_offset);
			_regval |= (3 << bit_offset);
			break;
		default:
			return -EINVAL;
		}
	}

	*regval = _regval;

	return 0;
}

static int bm1880_pinconf_drv_get(u32 width, u32 drv)
{
	int ret = -ENOTSUPP;

	/*
	 * There are two sets of drive strength bit width exposed by the
	 * SoC at 4mA step, hence we need to handle them separately.
	 */
	if (width == 0x03) {
		switch (drv) {
		case 0:
			ret  = 4;
			break;
		case 1:
			ret  = 8;
			break;
		case 2:
			ret  = 12;
			break;
		case 3:
			ret  = 16;
			break;
		case 4:
			ret  = 20;
			break;
		case 5:
			ret  = 24;
			break;
		case 6:
			ret  = 28;
			break;
		case 7:
			ret  = 32;
			break;
		default:
			break;
		}
	} else {
		switch (drv) {
		case 0:
			ret  = 4;
			break;
		case 1:
			ret  = 8;
			break;
		case 2:
			ret  = 12;
			break;
		case 3:
			ret  = 16;
			break;
		default:
			break;
		}
	}

	return ret;
}

static int bm1880_pinconf_cfg_get(struct pinctrl_dev *pctldev,
				  unsigned int pin,
				  unsigned long *config)
{
	struct bm1880_pinctrl *pctrl = pinctrl_dev_get_drvdata(pctldev);
	unsigned int param = pinconf_to_config_param(*config);
	unsigned int arg = 0;
	u32 regval, offset, bit_offset;
	int ret;

	offset = (pin >> 1) << 2;
	regval = readl_relaxed(pctrl->base + BM1880_REG_MUX + offset);

	switch (param) {
	case PIN_CONFIG_BIAS_PULL_UP:
		bit_offset = BM1880_PINCONF_PULLUP(pin);
		arg = !!(regval & BIT(bit_offset));
		break;
	case PIN_CONFIG_BIAS_PULL_DOWN:
		bit_offset = BM1880_PINCONF_PULLDOWN(pin);
		arg = !!(regval & BIT(bit_offset));
		break;
	case PIN_CONFIG_BIAS_DISABLE:
		bit_offset = BM1880_PINCONF_PULLCTRL(pin);
		arg = !!(regval & BIT(bit_offset));
		break;
	case PIN_CONFIG_INPUT_SCHMITT_ENABLE:
		bit_offset = BM1880_PINCONF_SCHMITT(pin);
		arg = !!(regval & BIT(bit_offset));
		break;
	case PIN_CONFIG_SLEW_RATE:
		bit_offset = BM1880_PINCONF_SLEW(pin);
		arg = !!(regval & BIT(bit_offset));
		break;
	case PIN_CONFIG_DRIVE_STRENGTH:
		bit_offset = BM1880_PINCONF_DRV(pin);
		ret = bm1880_pinconf_drv_get(pctrl->pinconf[pin].drv_bits,
					     !!(regval & BIT(bit_offset)));
		if (ret < 0)
			return ret;

		arg = ret;
		break;
	default:
		return -ENOTSUPP;
	}

	*config = pinconf_to_config_packed(param, arg);

	return 0;
}

static int bm1880_pinconf_cfg_set(struct pinctrl_dev *pctldev,
				  unsigned int pin,
				  unsigned long *configs,
				  unsigned int num_configs)
{
	struct bm1880_pinctrl *pctrl = pinctrl_dev_get_drvdata(pctldev);
	u32 regval, offset, bit_offset;
	int i, ret;

	offset = (pin >> 1) << 2;
	regval = readl_relaxed(pctrl->base + BM1880_REG_MUX + offset);

	for (i = 0; i < num_configs; i++) {
		unsigned int param = pinconf_to_config_param(configs[i]);
		unsigned int arg = pinconf_to_config_argument(configs[i]);

		switch (param) {
		case PIN_CONFIG_BIAS_PULL_UP:
			bit_offset = BM1880_PINCONF_PULLUP(pin);
			regval |= BIT(bit_offset);
			break;
		case PIN_CONFIG_BIAS_PULL_DOWN:
			bit_offset = BM1880_PINCONF_PULLDOWN(pin);
			regval |= BIT(bit_offset);
			break;
		case PIN_CONFIG_BIAS_DISABLE:
			bit_offset = BM1880_PINCONF_PULLCTRL(pin);
			regval |= BIT(bit_offset);
			break;
		case PIN_CONFIG_INPUT_SCHMITT_ENABLE:
			bit_offset = BM1880_PINCONF_SCHMITT(pin);
			if (arg)
				regval |= BIT(bit_offset);
			else
				regval &= ~BIT(bit_offset);
			break;
		case PIN_CONFIG_SLEW_RATE:
			bit_offset = BM1880_PINCONF_SLEW(pin);
			if (arg)
				regval |= BIT(bit_offset);
			else
				regval &= ~BIT(bit_offset);
			break;
		case PIN_CONFIG_DRIVE_STRENGTH:
			bit_offset = BM1880_PINCONF_DRV(pin);
			ret = bm1880_pinconf_drv_set(arg,
						pctrl->pinconf[pin].drv_bits,
						&regval, bit_offset);
			if (ret < 0)
				return ret;

			break;
		default:
			dev_warn(pctldev->dev,
				 "unsupported configuration parameter '%u'\n",
				 param);
			continue;
		}

		writel_relaxed(regval, pctrl->base + BM1880_REG_MUX + offset);
	}

	return 0;
}

static int bm1880_pinconf_group_set(struct pinctrl_dev *pctldev,
				    unsigned int selector,
				    unsigned long *configs,
				    unsigned int  num_configs)
{
	int i, ret;
	struct bm1880_pinctrl *pctrl = pinctrl_dev_get_drvdata(pctldev);
	const struct bm1880_pctrl_group *pgrp = &pctrl->groups[selector];

	for (i = 0; i < pgrp->npins; i++) {
		ret = bm1880_pinconf_cfg_set(pctldev, pgrp->pins[i], configs,
					     num_configs);
		if (ret)
			return ret;
	}

	return 0;
}

static const struct pinconf_ops bm1880_pinconf_ops = {
	.is_generic = true,
	.pin_config_get = bm1880_pinconf_cfg_get,
	.pin_config_set = bm1880_pinconf_cfg_set,
	.pin_config_group_set = bm1880_pinconf_group_set,
};

static const struct pinmux_ops bm1880_pinmux_ops = {
	.get_functions_count = bm1880_pmux_get_functions_count,
	.get_function_name = bm1880_pmux_get_function_name,
	.get_function_groups = bm1880_pmux_get_function_groups,
	.set_mux = bm1880_pinmux_set_mux,
};

static struct pinctrl_desc bm1880_desc = {
	.name = "bm1880_pinctrl",
	.pins = bm1880_pins,
	.npins = ARRAY_SIZE(bm1880_pins),
	.pctlops = &bm1880_pctrl_ops,
	.pmxops = &bm1880_pinmux_ops,
	.confops = &bm1880_pinconf_ops,
	.owner = THIS_MODULE,
};

static int bm1880_pinctrl_probe(struct platform_device *pdev)

{
	struct bm1880_pinctrl *pctrl;

	pctrl = devm_kzalloc(&pdev->dev, sizeof(*pctrl), GFP_KERNEL);
	if (!pctrl)
		return -ENOMEM;

	pctrl->base = devm_platform_ioremap_resource(pdev, 0);
	if (IS_ERR(pctrl->base))
		return PTR_ERR(pctrl->base);

	pctrl->groups = bm1880_pctrl_groups;
	pctrl->ngroups = ARRAY_SIZE(bm1880_pctrl_groups);
	pctrl->funcs = bm1880_pmux_functions;
	pctrl->nfuncs = ARRAY_SIZE(bm1880_pmux_functions);
	pctrl->pinconf = bm1880_pinconf;

	pctrl->pctrldev = devm_pinctrl_register(&pdev->dev, &bm1880_desc,
						pctrl);
	if (IS_ERR(pctrl->pctrldev))
		return PTR_ERR(pctrl->pctrldev);

	platform_set_drvdata(pdev, pctrl);

	dev_info(&pdev->dev, "BM1880 pinctrl driver initialized\n");

	return 0;
}

static const struct of_device_id bm1880_pinctrl_of_match[] = {
	{ .compatible = "bitmain,bm1880-pinctrl" },
	{ }
};

static struct platform_driver bm1880_pinctrl_driver = {
	.driver = {
		.name = "pinctrl-bm1880",
		.of_match_table = of_match_ptr(bm1880_pinctrl_of_match),
	},
	.probe = bm1880_pinctrl_probe,
};

static int __init bm1880_pinctrl_init(void)
{
	return platform_driver_register(&bm1880_pinctrl_driver);
}
arch_initcall(bm1880_pinctrl_init);
