1// SPDX-License-Identifier: GPL-2.0
2/*
3 * SP7021 Pin Controller Driver.
4 * Copyright (C) Sunplus Tech / Tibbo Tech.
5 */
6
7#include <linux/cleanup.h>
8#include <linux/bitfield.h>
9#include <linux/device.h>
10#include <linux/err.h>
11#include <linux/gpio/driver.h>
12#include <linux/init.h>
13#include <linux/module.h>
14#include <linux/of.h>
15#include <linux/overflow.h>
16#include <linux/platform_device.h>
17#include <linux/seq_file.h>
18#include <linux/slab.h>
19
20#include <linux/pinctrl/pinconf.h>
21#include <linux/pinctrl/pinconf-generic.h>
22#include <linux/pinctrl/pinmux.h>
23
24#include <dt-bindings/pinctrl/sppctl-sp7021.h>
25
26#include "../core.h"
27#include "../pinctrl-utils.h"
28
29#include "sppctl.h"
30
31struct sppctl_gpio_chip {
32	void __iomem *gpioxt_base;	/* MASTER, OE, OUT, IN, I_INV, O_INV, OD */
33	void __iomem *first_base;	/* GPIO_FIRST                            */
34
35	struct gpio_chip chip;
36	spinlock_t lock;		/* lock for accessing OE register        */
37};
38
39static inline u32 sppctl_first_readl(struct sppctl_gpio_chip *spp_gchip, u32 off)
40{
41	return readl(spp_gchip->first_base + SPPCTL_GPIO_OFF_FIRST + off);
42}
43
44static inline void sppctl_first_writel(struct sppctl_gpio_chip *spp_gchip, u32 val, u32 off)
45{
46	writel(val, spp_gchip->first_base + SPPCTL_GPIO_OFF_FIRST + off);
47}
48
49static inline u32 sppctl_gpio_master_readl(struct sppctl_gpio_chip *spp_gchip, u32 off)
50{
51	return readl(spp_gchip->gpioxt_base + SPPCTL_GPIO_OFF_MASTER + off);
52}
53
54static inline void sppctl_gpio_master_writel(struct sppctl_gpio_chip *spp_gchip, u32 val,
55					     u32 off)
56{
57	writel(val, spp_gchip->gpioxt_base + SPPCTL_GPIO_OFF_MASTER + off);
58}
59
60static inline u32 sppctl_gpio_oe_readl(struct sppctl_gpio_chip *spp_gchip, u32 off)
61{
62	return readl(spp_gchip->gpioxt_base + SPPCTL_GPIO_OFF_OE + off);
63}
64
65static inline void sppctl_gpio_oe_writel(struct sppctl_gpio_chip *spp_gchip, u32 val, u32 off)
66{
67	writel(val, spp_gchip->gpioxt_base + SPPCTL_GPIO_OFF_OE + off);
68}
69
70static inline void sppctl_gpio_out_writel(struct sppctl_gpio_chip *spp_gchip, u32 val, u32 off)
71{
72	writel(val, spp_gchip->gpioxt_base + SPPCTL_GPIO_OFF_OUT + off);
73}
74
75static inline u32 sppctl_gpio_in_readl(struct sppctl_gpio_chip *spp_gchip, u32 off)
76{
77	return readl(spp_gchip->gpioxt_base + SPPCTL_GPIO_OFF_IN + off);
78}
79
80static inline u32 sppctl_gpio_iinv_readl(struct sppctl_gpio_chip *spp_gchip, u32 off)
81{
82	return readl(spp_gchip->gpioxt_base + SPPCTL_GPIO_OFF_IINV + off);
83}
84
85static inline void sppctl_gpio_iinv_writel(struct sppctl_gpio_chip *spp_gchip, u32 val,
86					   u32 off)
87{
88	writel(val, spp_gchip->gpioxt_base + SPPCTL_GPIO_OFF_IINV + off);
89}
90
91static inline u32 sppctl_gpio_oinv_readl(struct sppctl_gpio_chip *spp_gchip, u32 off)
92{
93	return readl(spp_gchip->gpioxt_base + SPPCTL_GPIO_OFF_OINV + off);
94}
95
96static inline void sppctl_gpio_oinv_writel(struct sppctl_gpio_chip *spp_gchip, u32 val,
97					   u32 off)
98{
99	writel(val, spp_gchip->gpioxt_base + SPPCTL_GPIO_OFF_OINV + off);
100}
101
102static inline u32 sppctl_gpio_od_readl(struct sppctl_gpio_chip *spp_gchip, u32 off)
103{
104	return readl(spp_gchip->gpioxt_base + SPPCTL_GPIO_OFF_OD + off);
105}
106
107static inline void sppctl_gpio_od_writel(struct sppctl_gpio_chip *spp_gchip, u32 val, u32 off)
108{
109	writel(val, spp_gchip->gpioxt_base + SPPCTL_GPIO_OFF_OD + off);
110}
111
112static inline u32 sppctl_get_reg_and_bit_offset(unsigned int offset, u32 *reg_off)
113{
114	u32 bit_off;
115
116	/* Each register has 32 bits. */
117	*reg_off = (offset / 32) * 4;
118	bit_off = offset % 32;
119
120	return bit_off;
121}
122
123static inline u32 sppctl_get_moon_reg_and_bit_offset(unsigned int offset, u32 *reg_off)
124{
125	u32 bit_off;
126
127	/*
128	 * Each MOON register has 32 bits. Upper 16-bit word are mask-fields.
129	 * The lower 16-bit word are the control-fields. The corresponding
130	 * bits in mask-field should be set then you can write something to
131	 * control-field.
132	 */
133	*reg_off = (offset / 16) * 4;
134	bit_off = offset % 16;
135
136	return bit_off;
137}
138
139static inline u32 sppctl_prep_moon_reg_and_offset(unsigned int offset, u32 *reg_off, int val)
140{
141	u32 bit_off;
142
143	bit_off = sppctl_get_moon_reg_and_bit_offset(offset, reg_off);
144	if (val)
145		return SPPCTL_SET_MOON_REG_BIT(bit_off);
146	else
147		return SPPCTL_CLR_MOON_REG_BIT(bit_off);
148}
149
150/**
151 * sppctl_func_set() - Set pin of fully-pinmux function.
152 *
153 * Mask-fields and control-fields of fully-pinmux function of SP7021 are
154 * arranged as shown below:
155 *
156 *  func# | register |  mask-field  | control-field
157 * -------+----------+--------------+---------------
158 *    0   | base[0]  |  (22 : 16)   |   ( 6 : 0)
159 *    1   | base[0]  |  (30 : 24)   |   (14 : 8)
160 *    2   | base[1]  |  (22 : 16)   |   ( 6 : 0)
161 *    3   | baeg[1]  |  (30 : 24)   |   (14 : 8)
162 *    :   |    :     |      :       |       :
163 *
164 * where mask-fields are used to protect control-fields from write-in
165 * accidentally. Set the corresponding bits in the mask-field before
166 * you write a value into a control-field.
167 *
168 * Control-fields are used to set where the function pin is going to
169 * be routed to.
170 *
171 * Note that mask-fields and control-fields of even number of 'func'
172 * are located at bits (22:16) and (6:0), while odd number of 'func's
173 * are located at bits (30:24) and (14:8).
174 */
175static void sppctl_func_set(struct sppctl_pdata *pctl, u8 func, u8 val)
176{
177	u32 reg, offset;
178
179	/*
180	 * Note that upper 16-bit word are mask-fields and lower 16-bit
181	 * word are the control-fields. Set corresponding bits in mask-
182	 * field before write to a control-field.
183	 */
184	reg = SPPCTL_FULLY_PINMUX_MASK_MASK | val;
185
186	/*
187	 * MUXF_L2SW_CLK_OUT is the first fully-pinmux pin
188	 * and its register offset is 0.
189	 */
190	func -= MUXF_L2SW_CLK_OUT;
191
192	/*
193	 * Check if 'func' is an odd number or not. Mask and control-
194	 * fields of odd number 'func' is located at upper portion of
195	 * a register. Extra shift is needed.
196	 */
197	if (func & BIT(0))
198		reg <<= SPPCTL_FULLY_PINMUX_UPPER_SHIFT;
199
200	/* Convert func# to register offset w.r.t. base register. */
201	offset = func * 2;
202	offset &= GENMASK(31, 2);
203
204	writel(reg, pctl->moon2_base + offset);
205}
206
207/**
208 * sppctl_gmx_set() - Set pin of group-pinmux.
209 *
210 * Mask-fields and control-fields of group-pinmux function of SP7021 are
211 * arranged as shown below:
212 *
213 *  register |  mask-fields | control-fields
214 * ----------+--------------+----------------
215 *  base[0]  |  (31 : 16)   |   (15 : 0)
216 *  base[1]  |  (31 : 24)   |   (15 : 0)
217 *  base[2]  |  (31 : 24)   |   (15 : 0)
218 *     :     |      :       |       :
219 *
220 * where mask-fields are used to protect control-fields from write-in
221 * accidentally. Set the corresponding bits in the mask-field before
222 * you write a value into a control-field.
223 *
224 * Control-fields are used to set where the function pin is going to
225 * be routed to. A control-field consists of one or more bits.
226 */
227static void sppctl_gmx_set(struct sppctl_pdata *pctl, u8 reg_off, u8 bit_off, u8 bit_sz,
228			   u8 val)
229{
230	u32 mask, reg;
231
232	/*
233	 * Note that upper 16-bit word are mask-fields and lower 16-bit
234	 * word are the control-fields. Set corresponding bits in mask-
235	 * field before write to a control-field.
236	 */
237	mask = GENMASK(bit_sz - 1, 0) << SPPCTL_MOON_REG_MASK_SHIFT;
238	reg = (mask | val) << bit_off;
239
240	writel(reg, pctl->moon1_base + reg_off * 4);
241}
242
243/**
244 * sppctl_first_get() - get bit of FIRST register.
245 *
246 * There are 4 FIRST registers. Each has 32 control-bits.
247 * Totally, there are 4 * 32 = 128 control-bits.
248 * Control-bits are arranged as shown below:
249 *
250 *  registers | control-bits
251 * -----------+--------------
252 *  first[0]  |  (31 :  0)
253 *  first[1]  |  (63 : 32)
254 *  first[2]  |  (95 : 64)
255 *  first[3]  | (127 : 96)
256 *
257 * Each control-bit sets type of a GPIO pin.
258 *   0: a fully-pinmux pin
259 *   1: a GPIO or IOP pin
260 */
261static int sppctl_first_get(struct gpio_chip *chip, unsigned int offset)
262{
263	struct sppctl_gpio_chip *spp_gchip = gpiochip_get_data(chip);
264	u32 reg_off, bit_off, reg;
265
266	bit_off = sppctl_get_reg_and_bit_offset(offset, &reg_off);
267	reg = sppctl_first_readl(spp_gchip, reg_off);
268
269	return (reg & BIT(bit_off)) ? 1 : 0;
270}
271
272/**
273 * sppctl_master_get() - get bit of MASTER register.
274 *
275 * There are 8 MASTER registers. Each has 16 mask-bits and 16 control-bits.
276 * Upper 16-bit of MASTER registers are mask-bits while lower 16-bit are
277 * control-bits. Totally, there are 128 mask-bits and 128 control-bits.
278 * They are arranged as shown below:
279 *
280 *  register  |  mask-bits  | control-bits
281 * -----------+-------------+--------------
282 *  master[0] |  (15 :   0) |  (15 :   0)
283 *  master[1] |  (31 :  16) |  (31 :  16)
284 *  master[2] |  (47 :  32) |  (47 :  32)
285 *     :      |      :      |      :
286 *  master[7] | (127 : 112) | (127 : 112)
287 *
288 * where mask-bits are used to protect control-bits from write-in
289 * accidentally. Set the corresponding mask-bit before you write
290 * a value into a control-bit.
291 *
292 * Each control-bit sets type of a GPIO pin when FIRST bit is 1.
293 *   0: a IOP pin
294 *   1: a GPIO pin
295 */
296static int sppctl_master_get(struct gpio_chip *chip, unsigned int offset)
297{
298	struct sppctl_gpio_chip *spp_gchip = gpiochip_get_data(chip);
299	u32 reg_off, bit_off, reg;
300
301	bit_off = sppctl_get_moon_reg_and_bit_offset(offset, &reg_off);
302	reg = sppctl_gpio_master_readl(spp_gchip, reg_off);
303	return (reg & BIT(bit_off)) ? 1 : 0;
304}
305
306static void sppctl_first_master_set(struct gpio_chip *chip, unsigned int offset,
307				    enum mux_first_reg first, enum mux_master_reg master)
308{
309	struct sppctl_gpio_chip *spp_gchip = gpiochip_get_data(chip);
310	u32 reg_off, bit_off, reg;
311	enum mux_first_reg val;
312
313	/* FIRST register */
314	if (first != mux_f_keep) {
315		bit_off = sppctl_get_reg_and_bit_offset(offset, &reg_off);
316		reg = sppctl_first_readl(spp_gchip, reg_off);
317		val = (reg & BIT(bit_off)) ? mux_f_gpio : mux_f_mux;
318
319		if (first != val)
320			switch (first) {
321			case mux_f_gpio:
322				reg |= BIT(bit_off);
323				sppctl_first_writel(spp_gchip, reg, reg_off);
324				break;
325
326			case mux_f_mux:
327				reg &= ~BIT(bit_off);
328				sppctl_first_writel(spp_gchip, reg, reg_off);
329				break;
330
331			case mux_f_keep:
332				break;
333			}
334	}
335
336	/* MASTER register */
337	if (master != mux_m_keep) {
338		reg = sppctl_prep_moon_reg_and_offset(offset, &reg_off, (master == mux_m_gpio));
339		sppctl_gpio_master_writel(spp_gchip, reg, reg_off);
340	}
341}
342
343static void sppctl_gpio_input_inv_set(struct gpio_chip *chip, unsigned int offset)
344{
345	struct sppctl_gpio_chip *spp_gchip = gpiochip_get_data(chip);
346	u32 reg_off, reg;
347
348	reg = sppctl_prep_moon_reg_and_offset(offset, &reg_off, 1);
349	sppctl_gpio_iinv_writel(spp_gchip, reg, reg_off);
350}
351
352static void sppctl_gpio_output_inv_set(struct gpio_chip *chip, unsigned int offset)
353{
354	struct sppctl_gpio_chip *spp_gchip = gpiochip_get_data(chip);
355	u32 reg_off, reg;
356
357	reg = sppctl_prep_moon_reg_and_offset(offset, &reg_off, 1);
358	sppctl_gpio_oinv_writel(spp_gchip, reg, reg_off);
359}
360
361static int sppctl_gpio_output_od_get(struct gpio_chip *chip, unsigned int offset)
362{
363	struct sppctl_gpio_chip *spp_gchip = gpiochip_get_data(chip);
364	u32 reg_off, bit_off, reg;
365
366	bit_off = sppctl_get_moon_reg_and_bit_offset(offset, &reg_off);
367	reg = sppctl_gpio_od_readl(spp_gchip, reg_off);
368
369	return (reg & BIT(bit_off)) ? 1 : 0;
370}
371
372static void sppctl_gpio_output_od_set(struct gpio_chip *chip, unsigned int offset,
373				      unsigned int val)
374{
375	struct sppctl_gpio_chip *spp_gchip = gpiochip_get_data(chip);
376	u32 reg_off, reg;
377
378	reg = sppctl_prep_moon_reg_and_offset(offset, &reg_off, val);
379	sppctl_gpio_od_writel(spp_gchip, reg, reg_off);
380}
381
382static int sppctl_gpio_get_direction(struct gpio_chip *chip, unsigned int offset)
383{
384	struct sppctl_gpio_chip *spp_gchip = gpiochip_get_data(chip);
385	u32 reg_off, bit_off, reg;
386
387	bit_off = sppctl_get_moon_reg_and_bit_offset(offset, &reg_off);
388	reg = sppctl_gpio_oe_readl(spp_gchip, reg_off);
389
390	return (reg & BIT(bit_off)) ? 0 : 1;
391}
392
393static int sppctl_gpio_inv_get(struct gpio_chip *chip, unsigned int offset)
394{
395	struct sppctl_gpio_chip *spp_gchip = gpiochip_get_data(chip);
396	u32 reg_off, bit_off, reg;
397	unsigned long flags;
398
399	bit_off = sppctl_get_moon_reg_and_bit_offset(offset, &reg_off);
400
401	spin_lock_irqsave(&spp_gchip->lock, flags);
402
403	if (sppctl_gpio_get_direction(chip, offset))
404		reg = sppctl_gpio_iinv_readl(spp_gchip, reg_off);
405	else
406		reg = sppctl_gpio_oinv_readl(spp_gchip, reg_off);
407
408	spin_unlock_irqrestore(&spp_gchip->lock, flags);
409
410	return (reg & BIT(bit_off)) ? 1 : 0;
411}
412
413static int sppctl_gpio_direction_input(struct gpio_chip *chip, unsigned int offset)
414{
415	struct sppctl_gpio_chip *spp_gchip = gpiochip_get_data(chip);
416	unsigned long flags;
417	u32 reg_off, reg;
418
419	reg = sppctl_prep_moon_reg_and_offset(offset, &reg_off, 0);
420
421	spin_lock_irqsave(&spp_gchip->lock, flags);
422
423	sppctl_gpio_oe_writel(spp_gchip, reg, reg_off);
424
425	spin_unlock_irqrestore(&spp_gchip->lock, flags);
426	return 0;
427}
428
429static int sppctl_gpio_direction_output(struct gpio_chip *chip, unsigned int offset, int val)
430{
431	struct sppctl_gpio_chip *spp_gchip = gpiochip_get_data(chip);
432	unsigned long flags;
433	u32 reg_off, reg;
434
435	reg = sppctl_prep_moon_reg_and_offset(offset, &reg_off, 1);
436
437	spin_lock_irqsave(&spp_gchip->lock, flags);
438
439	sppctl_gpio_oe_writel(spp_gchip, reg, reg_off);
440
441	if (val < 0) {
442		spin_unlock_irqrestore(&spp_gchip->lock, flags);
443		return 0;
444	}
445
446	reg = sppctl_prep_moon_reg_and_offset(offset, &reg_off, val);
447	sppctl_gpio_out_writel(spp_gchip, reg, reg_off);
448
449	spin_unlock_irqrestore(&spp_gchip->lock, flags);
450	return 0;
451}
452
453static int sppctl_gpio_get(struct gpio_chip *chip, unsigned int offset)
454{
455	struct sppctl_gpio_chip *spp_gchip = gpiochip_get_data(chip);
456	u32 reg_off, bit_off, reg;
457
458	bit_off = sppctl_get_reg_and_bit_offset(offset, &reg_off);
459	reg = sppctl_gpio_in_readl(spp_gchip, reg_off);
460
461	return (reg & BIT(bit_off)) ? 1 : 0;
462}
463
464static void sppctl_gpio_set(struct gpio_chip *chip, unsigned int offset, int val)
465{
466	struct sppctl_gpio_chip *spp_gchip = gpiochip_get_data(chip);
467	u32 reg_off, reg;
468
469	reg = sppctl_prep_moon_reg_and_offset(offset, &reg_off, val);
470	sppctl_gpio_out_writel(spp_gchip, reg, reg_off);
471}
472
473static int sppctl_gpio_set_config(struct gpio_chip *chip, unsigned int offset,
474				  unsigned long config)
475{
476	enum pin_config_param param = pinconf_to_config_param(config);
477	struct sppctl_gpio_chip *spp_gchip = gpiochip_get_data(chip);
478	u32 reg_off, reg;
479
480	switch (param) {
481	case PIN_CONFIG_DRIVE_OPEN_DRAIN:
482		reg = sppctl_prep_moon_reg_and_offset(offset, &reg_off, 1);
483		sppctl_gpio_od_writel(spp_gchip, reg, reg_off);
484		break;
485
486	case PIN_CONFIG_INPUT_ENABLE:
487		break;
488
489	case PIN_CONFIG_OUTPUT:
490		return sppctl_gpio_direction_output(chip, offset, 0);
491
492	case PIN_CONFIG_PERSIST_STATE:
493		return -ENOTSUPP;
494
495	default:
496		return -EINVAL;
497	}
498
499	return 0;
500}
501
502static void sppctl_gpio_dbg_show(struct seq_file *s, struct gpio_chip *chip)
503{
504	int i;
505
506	for (i = 0; i < chip->ngpio; i++) {
507		char *label __free(kfree) = gpiochip_dup_line_label(chip, i);
508		if (IS_ERR(label))
509			continue;
510
511		seq_printf(s, " gpio-%03d (%-16.16s | %-16.16s)", i + chip->base,
512			   chip->names[i], label ?: "");
513		seq_printf(s, " %c", sppctl_gpio_get_direction(chip, i) ? 'I' : 'O');
514		seq_printf(s, ":%d", sppctl_gpio_get(chip, i));
515		seq_printf(s, " %s", sppctl_first_get(chip, i) ? "gpi" : "mux");
516		seq_printf(s, " %s", sppctl_master_get(chip, i) ? "gpi" : "iop");
517		seq_printf(s, " %s", sppctl_gpio_inv_get(chip, i) ? "inv" : "   ");
518		seq_printf(s, " %s", sppctl_gpio_output_od_get(chip, i) ? "oDr" : "");
519		seq_puts(s, "\n");
520	}
521}
522
523static int sppctl_gpio_new(struct platform_device *pdev, struct sppctl_pdata *pctl)
524{
525	struct sppctl_gpio_chip *spp_gchip;
526	struct gpio_chip *gchip;
527	int err;
528
529	spp_gchip = devm_kzalloc(&pdev->dev, sizeof(*spp_gchip), GFP_KERNEL);
530	if (!spp_gchip)
531		return -ENOMEM;
532	pctl->spp_gchip = spp_gchip;
533
534	spp_gchip->gpioxt_base  = pctl->gpioxt_base;
535	spp_gchip->first_base   = pctl->first_base;
536	spin_lock_init(&spp_gchip->lock);
537
538	gchip                   = &spp_gchip->chip;
539	gchip->label            = SPPCTL_MODULE_NAME;
540	gchip->parent           = &pdev->dev;
541	gchip->owner            = THIS_MODULE;
542	gchip->request          = gpiochip_generic_request;
543	gchip->free             = gpiochip_generic_free;
544	gchip->get_direction    = sppctl_gpio_get_direction;
545	gchip->direction_input  = sppctl_gpio_direction_input;
546	gchip->direction_output = sppctl_gpio_direction_output;
547	gchip->get              = sppctl_gpio_get;
548	gchip->set              = sppctl_gpio_set;
549	gchip->set_config       = sppctl_gpio_set_config;
550	gchip->dbg_show         = IS_ENABLED(CONFIG_DEBUG_FS) ?
551				  sppctl_gpio_dbg_show : NULL;
552	gchip->base             = -1;
553	gchip->ngpio            = sppctl_gpio_list_sz;
554	gchip->names            = sppctl_gpio_list_s;
555
556	pctl->pctl_grange.npins = gchip->ngpio;
557	pctl->pctl_grange.name  = gchip->label;
558	pctl->pctl_grange.gc    = gchip;
559
560	err = devm_gpiochip_add_data(&pdev->dev, gchip, spp_gchip);
561	if (err)
562		return dev_err_probe(&pdev->dev, err, "Failed to add gpiochip!\n");
563
564	return 0;
565}
566
567static int sppctl_pin_config_get(struct pinctrl_dev *pctldev, unsigned int pin,
568				 unsigned long *config)
569{
570	struct sppctl_pdata *pctl = pinctrl_dev_get_drvdata(pctldev);
571	unsigned int param = pinconf_to_config_param(*config);
572	unsigned int arg;
573
574	switch (param) {
575	case PIN_CONFIG_DRIVE_OPEN_DRAIN:
576		if (!sppctl_gpio_output_od_get(&pctl->spp_gchip->chip, pin))
577			return -EINVAL;
578		arg = 0;
579		break;
580
581	case PIN_CONFIG_OUTPUT:
582		if (!sppctl_first_get(&pctl->spp_gchip->chip, pin))
583			return -EINVAL;
584		if (!sppctl_master_get(&pctl->spp_gchip->chip, pin))
585			return -EINVAL;
586		if (sppctl_gpio_get_direction(&pctl->spp_gchip->chip, pin))
587			return -EINVAL;
588		arg = sppctl_gpio_get(&pctl->spp_gchip->chip, pin);
589		break;
590
591	default:
592		return -EOPNOTSUPP;
593	}
594	*config = pinconf_to_config_packed(param, arg);
595
596	return 0;
597}
598
599static int sppctl_pin_config_set(struct pinctrl_dev *pctldev, unsigned int pin,
600				 unsigned long *configs, unsigned int num_configs)
601{
602	struct sppctl_pdata *pctl = pinctrl_dev_get_drvdata(pctldev);
603	int i;
604
605	/* Special handling for IOP pins */
606	if (configs[0] == SPPCTL_IOP_CONFIGS) {
607		sppctl_first_master_set(&pctl->spp_gchip->chip, pin, mux_f_gpio, mux_m_iop);
608		return 0;
609	}
610
611	for (i = 0; i < num_configs; i++) {
612		if (configs[i] & SPPCTL_PCTL_L_OUT)
613			sppctl_gpio_direction_output(&pctl->spp_gchip->chip, pin, 0);
614		if (configs[i] & SPPCTL_PCTL_L_OU1)
615			sppctl_gpio_direction_output(&pctl->spp_gchip->chip, pin, 1);
616		if (configs[i] & SPPCTL_PCTL_L_INV)
617			sppctl_gpio_input_inv_set(&pctl->spp_gchip->chip, pin);
618		if (configs[i] & SPPCTL_PCTL_L_ONV)
619			sppctl_gpio_output_inv_set(&pctl->spp_gchip->chip, pin);
620		if (configs[i] & SPPCTL_PCTL_L_ODR)
621			sppctl_gpio_output_od_set(&pctl->spp_gchip->chip, pin, 1);
622	}
623
624	return 0;
625}
626
627static const struct pinconf_ops sppctl_pconf_ops = {
628	.is_generic     = true,
629	.pin_config_get = sppctl_pin_config_get,
630	.pin_config_set = sppctl_pin_config_set,
631};
632
633static int sppctl_get_functions_count(struct pinctrl_dev *pctldev)
634{
635	return sppctl_list_funcs_sz;
636}
637
638static const char *sppctl_get_function_name(struct pinctrl_dev *pctldev,
639					    unsigned int selector)
640{
641	return sppctl_list_funcs[selector].name;
642}
643
644static int sppctl_get_function_groups(struct pinctrl_dev *pctldev, unsigned int selector,
645				      const char * const **groups, unsigned int *num_groups)
646{
647	struct sppctl_pdata *pctl = pinctrl_dev_get_drvdata(pctldev);
648	const struct sppctl_func *f = &sppctl_list_funcs[selector];
649	int i;
650
651	*num_groups = 0;
652	switch (f->type) {
653	case pinmux_type_fpmx:
654		*num_groups = sppctl_pmux_list_sz;
655		*groups = sppctl_pmux_list_s;
656		break;
657
658	case pinmux_type_grp:
659		if (!f->grps)
660			break;
661
662		*num_groups = f->gnum;
663		for (i = 0; i < pctl->unq_grps_sz; i++)
664			if (pctl->g2fp_maps[i].f_idx == selector)
665				break;
666		*groups = &pctl->unq_grps[i];
667		break;
668
669	default:
670		dev_err(pctldev->dev, "Unknown pinmux (selector: %d, type: %d)\n",
671			selector, f->type);
672		break;
673	}
674
675	return 0;
676}
677
678/**
679 * sppctl_fully_pinmux_conv - Convert GPIO# to fully-pinmux control-field setting
680 *
681 * Each fully-pinmux function can be mapped to any of GPIO 8 ~ 71 by
682 * settings its control-field. Refer to following table:
683 *
684 * control-field |  GPIO
685 * --------------+--------
686 *        0      |  No map
687 *        1      |    8
688 *        2      |    9
689 *        3      |   10
690 *        :      |    :
691 *       65      |   71
692 */
693static inline int sppctl_fully_pinmux_conv(unsigned int offset)
694{
695	return (offset < 8) ? 0 : offset - 7;
696}
697
698static int sppctl_set_mux(struct pinctrl_dev *pctldev, unsigned int func_selector,
699			  unsigned int group_selector)
700{
701	const struct sppctl_func *f = &sppctl_list_funcs[func_selector];
702	struct sppctl_pdata *pctl = pinctrl_dev_get_drvdata(pctldev);
703	struct grp2fp_map g2fpm = pctl->g2fp_maps[group_selector];
704	int i;
705
706	switch (f->type) {
707	case pinmux_type_fpmx:
708		sppctl_first_master_set(&pctl->spp_gchip->chip, group_selector,
709					mux_f_mux, mux_m_keep);
710		sppctl_func_set(pctl, func_selector, sppctl_fully_pinmux_conv(group_selector));
711		break;
712
713	case pinmux_type_grp:
714		for (i = 0; i < f->grps[g2fpm.g_idx].pnum; i++)
715			sppctl_first_master_set(&pctl->spp_gchip->chip,
716						f->grps[g2fpm.g_idx].pins[i],
717						mux_f_mux, mux_m_keep);
718		sppctl_gmx_set(pctl, f->roff, f->boff, f->blen, f->grps[g2fpm.g_idx].gval);
719		break;
720
721	default:
722		dev_err(pctldev->dev, "Unknown pinmux type (func_selector: %d, type: %d)\n",
723			func_selector, f->type);
724		break;
725	}
726
727	return 0;
728}
729
730static int sppctl_gpio_request_enable(struct pinctrl_dev *pctldev,
731				      struct pinctrl_gpio_range *range, unsigned int offset)
732{
733	struct sppctl_pdata *pctl = pinctrl_dev_get_drvdata(pctldev);
734	int g_f, g_m;
735
736	g_f = sppctl_first_get(&pctl->spp_gchip->chip, offset);
737	g_m = sppctl_master_get(&pctl->spp_gchip->chip, offset);
738	if (g_f == mux_f_gpio && g_m == mux_m_gpio)
739		return 0;
740
741	sppctl_first_master_set(&pctl->spp_gchip->chip, offset, mux_f_gpio, mux_m_gpio);
742	return 0;
743}
744
745static const struct pinmux_ops sppctl_pinmux_ops = {
746	.get_functions_count = sppctl_get_functions_count,
747	.get_function_name   = sppctl_get_function_name,
748	.get_function_groups = sppctl_get_function_groups,
749	.set_mux             = sppctl_set_mux,
750	.gpio_request_enable = sppctl_gpio_request_enable,
751	.strict              = true,
752};
753
754static int sppctl_get_groups_count(struct pinctrl_dev *pctldev)
755{
756	struct sppctl_pdata *pctl = pinctrl_dev_get_drvdata(pctldev);
757
758	return pctl->unq_grps_sz;
759}
760
761static const char *sppctl_get_group_name(struct pinctrl_dev *pctldev, unsigned int selector)
762{
763	struct sppctl_pdata *pctl = pinctrl_dev_get_drvdata(pctldev);
764
765	return pctl->unq_grps[selector];
766}
767
768static int sppctl_get_group_pins(struct pinctrl_dev *pctldev, unsigned int selector,
769				 const unsigned int **pins, unsigned int *num_pins)
770{
771	struct sppctl_pdata *pctl = pinctrl_dev_get_drvdata(pctldev);
772	struct grp2fp_map g2fpm = pctl->g2fp_maps[selector];
773	const struct sppctl_func *f;
774
775	f = &sppctl_list_funcs[g2fpm.f_idx];
776	*num_pins = 0;
777
778	/* Except group-pinmux, each group has 1 pin. */
779	if (f->type != pinmux_type_grp) {
780		*num_pins = 1;
781		*pins = &sppctl_pins_gpio[selector];
782		return 0;
783	}
784
785	/* Group-pinmux may have more than one pin. */
786	if (!f->grps)
787		return 0;
788
789	if (f->gnum < 1)
790		return 0;
791
792	*num_pins = f->grps[g2fpm.g_idx].pnum;
793	*pins = f->grps[g2fpm.g_idx].pins;
794
795	return 0;
796}
797
798#ifdef CONFIG_DEBUG_FS
799static void sppctl_pin_dbg_show(struct pinctrl_dev *pctldev, struct seq_file *s,
800				unsigned int offset)
801{
802	struct sppctl_pdata *pctl = pinctrl_dev_get_drvdata(pctldev);
803	const char *pin_type;
804	u8 first, master;
805
806	first = sppctl_first_get(&pctl->spp_gchip->chip, offset);
807	master = sppctl_master_get(&pctl->spp_gchip->chip, offset);
808	if (first)
809		if (master)
810			pin_type = "GPIO";
811		else
812			pin_type = " IOP";
813	else
814		pin_type = " MUX";
815	seq_printf(s, " %s", pin_type);
816}
817#endif
818
819static int sppctl_dt_node_to_map(struct pinctrl_dev *pctldev, struct device_node *np_config,
820				 struct pinctrl_map **map, unsigned int *num_maps)
821{
822	struct sppctl_pdata *pctl = pinctrl_dev_get_drvdata(pctldev);
823	int nmG = of_property_count_strings(np_config, "groups");
824	const struct sppctl_func *f = NULL;
825	u8 pin_num, pin_type, pin_func;
826	struct device_node *parent;
827	unsigned long *configs;
828	struct property *prop;
829	const char *s_f, *s_g;
830
831	const __be32 *list;
832	u32 dt_pin, dt_fun;
833	int i, size = 0;
834
835	list = of_get_property(np_config, "sunplus,pins", &size);
836	*num_maps = size / sizeof(*list);
837
838	/*
839	 * Process property:
840	 *     sunplus,pins = < u32 u32 u32 ... >;
841	 *
842	 * Each 32-bit integer defines a individual pin in which:
843	 *
844	 *   Bit 32~24: defines GPIO pin number. Its range is 0 ~ 98.
845	 *   Bit 23~16: defines types: (1) fully-pinmux pins
846	 *                             (2) IO processor pins
847	 *                             (3) digital GPIO pins
848	 *   Bit 15~8:  defines pins of peripherals (which are defined in
849	 *              'include/dt-binging/pinctrl/sppctl.h').
850	 *   Bit 7~0:   defines types or initial-state of digital GPIO pins.
851	 */
852	for (i = 0; i < (*num_maps); i++) {
853		dt_pin = be32_to_cpu(list[i]);
854		pin_num = FIELD_GET(GENMASK(31, 24), dt_pin);
855
856		if (pin_num >= sppctl_pins_all_sz) {
857			dev_err(pctldev->dev, "Invalid pin property at index %d (0x%08x)\n",
858				i, dt_pin);
859			return -EINVAL;
860		}
861	}
862
863	if (nmG <= 0)
864		nmG = 0;
865
866	*map = kcalloc(*num_maps + nmG, sizeof(**map), GFP_KERNEL);
867	if (!(*map))
868		return -ENOMEM;
869
870	parent = of_get_parent(np_config);
871	for (i = 0; i < (*num_maps); i++) {
872		dt_pin = be32_to_cpu(list[i]);
873		pin_num = FIELD_GET(GENMASK(31, 24), dt_pin);
874		pin_type = FIELD_GET(GENMASK(23, 16), dt_pin);
875		pin_func = FIELD_GET(GENMASK(15, 8), dt_pin);
876		(*map)[i].name = parent->name;
877
878		if (pin_type == SPPCTL_PCTL_G_GPIO) {
879			/* A digital GPIO pin */
880			(*map)[i].type = PIN_MAP_TYPE_CONFIGS_PIN;
881			(*map)[i].data.configs.num_configs = 1;
882			(*map)[i].data.configs.group_or_pin = pin_get_name(pctldev, pin_num);
883			configs = kmalloc(sizeof(*configs), GFP_KERNEL);
884			if (!configs)
885				goto sppctl_map_err;
886			*configs = FIELD_GET(GENMASK(7, 0), dt_pin);
887			(*map)[i].data.configs.configs = configs;
888
889			dev_dbg(pctldev->dev, "%s: GPIO (%s)\n",
890				(*map)[i].data.configs.group_or_pin,
891				(*configs & (SPPCTL_PCTL_L_OUT | SPPCTL_PCTL_L_OU1)) ?
892				"OUT" : "IN");
893		} else if (pin_type == SPPCTL_PCTL_G_IOPP) {
894			/* A IO Processor (IOP) pin */
895			(*map)[i].type = PIN_MAP_TYPE_CONFIGS_PIN;
896			(*map)[i].data.configs.num_configs = 1;
897			(*map)[i].data.configs.group_or_pin = pin_get_name(pctldev, pin_num);
898			configs = kmalloc(sizeof(*configs), GFP_KERNEL);
899			if (!configs)
900				goto sppctl_map_err;
901			*configs = SPPCTL_IOP_CONFIGS;
902			(*map)[i].data.configs.configs = configs;
903
904			dev_dbg(pctldev->dev, "%s: IOP\n",
905				(*map)[i].data.configs.group_or_pin);
906		} else {
907			/* A fully-pinmux pin */
908			(*map)[i].type = PIN_MAP_TYPE_MUX_GROUP;
909			(*map)[i].data.mux.function = sppctl_list_funcs[pin_func].name;
910			(*map)[i].data.mux.group = pin_get_name(pctldev, pin_num);
911
912			dev_dbg(pctldev->dev, "%s: %s\n", (*map)[i].data.mux.group,
913				(*map)[i].data.mux.function);
914		}
915	}
916
917	/*
918	 * Process properties:
919	 *     function = "xxx";
920	 *     groups = "yyy";
921	 */
922	if (nmG > 0 && of_property_read_string(np_config, "function", &s_f) == 0) {
923		of_property_for_each_string(np_config, "groups", prop, s_g) {
924			(*map)[*num_maps].type = PIN_MAP_TYPE_MUX_GROUP;
925			(*map)[*num_maps].data.mux.function = s_f;
926			(*map)[*num_maps].data.mux.group = s_g;
927			(*num_maps)++;
928
929			dev_dbg(pctldev->dev, "%s: %s\n", s_f, s_g);
930		}
931	}
932
933	/*
934	 * Process property:
935	 *     sunplus,zerofunc = < u32 u32 u32 ...>
936	 */
937	list = of_get_property(np_config, "sunplus,zerofunc", &size);
938	if (list) {
939		for (i = 0; i < (size / sizeof(*list)); i++) {
940			dt_fun = be32_to_cpu(list[i]);
941			if (dt_fun >= sppctl_list_funcs_sz) {
942				dev_err(pctldev->dev, "Zero-func %d out of range!\n",
943					dt_fun);
944				continue;
945			}
946
947			f = &sppctl_list_funcs[dt_fun];
948			switch (f->type) {
949			case pinmux_type_fpmx:
950				sppctl_func_set(pctl, dt_fun, 0);
951				dev_dbg(pctldev->dev, "%s: No map\n", f->name);
952				break;
953
954			case pinmux_type_grp:
955				sppctl_gmx_set(pctl, f->roff, f->boff, f->blen, 0);
956				dev_dbg(pctldev->dev, "%s: No map\n", f->name);
957				break;
958
959			default:
960				dev_err(pctldev->dev, "Wrong zero-group: %d (%s)\n",
961					dt_fun, f->name);
962				break;
963			}
964		}
965	}
966
967	of_node_put(parent);
968	dev_dbg(pctldev->dev, "%d pins mapped\n", *num_maps);
969	return 0;
970
971sppctl_map_err:
972	for (i = 0; i < (*num_maps); i++)
973		if ((*map)[i].type == PIN_MAP_TYPE_CONFIGS_PIN)
974			kfree((*map)[i].data.configs.configs);
975	kfree(*map);
976	of_node_put(parent);
977	return -ENOMEM;
978}
979
980static const struct pinctrl_ops sppctl_pctl_ops = {
981	.get_groups_count = sppctl_get_groups_count,
982	.get_group_name   = sppctl_get_group_name,
983	.get_group_pins   = sppctl_get_group_pins,
984#ifdef CONFIG_DEBUG_FS
985	.pin_dbg_show     = sppctl_pin_dbg_show,
986#endif
987	.dt_node_to_map   = sppctl_dt_node_to_map,
988	.dt_free_map      = pinctrl_utils_free_map,
989};
990
991static int sppctl_group_groups(struct platform_device *pdev)
992{
993	struct sppctl_pdata *sppctl = platform_get_drvdata(pdev);
994	int i, k, j;
995
996	/* Calculate number of total group (GPIO + group-pinmux group). */
997	sppctl->unq_grps_sz = sppctl_gpio_list_sz;
998	for (i = 0; i < sppctl_list_funcs_sz; i++)
999		if (sppctl_list_funcs[i].type == pinmux_type_grp)
1000			sppctl->unq_grps_sz += sppctl_list_funcs[i].gnum;
1001
1002	sppctl->unq_grps = devm_kcalloc(&pdev->dev, sppctl->unq_grps_sz + 1,
1003					sizeof(*sppctl->unq_grps), GFP_KERNEL);
1004	if (!sppctl->unq_grps)
1005		return -ENOMEM;
1006
1007	sppctl->g2fp_maps = devm_kcalloc(&pdev->dev, sppctl->unq_grps_sz + 1,
1008					 sizeof(*sppctl->g2fp_maps), GFP_KERNEL);
1009	if (!sppctl->g2fp_maps)
1010		return -ENOMEM;
1011
1012	/* Add GPIO pins. */
1013	for (i = 0; i < sppctl_gpio_list_sz; i++) {
1014		sppctl->unq_grps[i] = sppctl_gpio_list_s[i];
1015		sppctl->g2fp_maps[i].f_idx = 0;
1016		sppctl->g2fp_maps[i].g_idx = i;
1017	}
1018
1019	/* Add group-pinmux to end of GPIO pins. */
1020	j = sppctl_gpio_list_sz;
1021	for (i = 0; i < sppctl_list_funcs_sz; i++) {
1022		if (sppctl_list_funcs[i].type != pinmux_type_grp)
1023			continue;
1024
1025		for (k = 0; k < sppctl_list_funcs[i].gnum; k++) {
1026			sppctl->unq_grps[j] = sppctl_list_funcs[i].grps[k].name;
1027			sppctl->g2fp_maps[j].f_idx = i;
1028			sppctl->g2fp_maps[j].g_idx = k;
1029			j++;
1030		}
1031	}
1032
1033	return 0;
1034}
1035
1036static int sppctl_pinctrl_init(struct platform_device *pdev)
1037{
1038	struct sppctl_pdata *sppctl = platform_get_drvdata(pdev);
1039	int err;
1040
1041	sppctl->pctl_desc.owner   = THIS_MODULE;
1042	sppctl->pctl_desc.name    = dev_name(&pdev->dev);
1043	sppctl->pctl_desc.pins    = sppctl_pins_all;
1044	sppctl->pctl_desc.npins   = sppctl_pins_all_sz;
1045	sppctl->pctl_desc.pctlops = &sppctl_pctl_ops;
1046	sppctl->pctl_desc.confops = &sppctl_pconf_ops;
1047	sppctl->pctl_desc.pmxops  = &sppctl_pinmux_ops;
1048
1049	err = sppctl_group_groups(pdev);
1050	if (err)
1051		return err;
1052
1053	err = devm_pinctrl_register_and_init(&pdev->dev, &sppctl->pctl_desc,
1054					     sppctl, &sppctl->pctl_dev);
1055	if (err)
1056		return dev_err_probe(&pdev->dev, err, "Failed to register pinctrl!\n");
1057
1058	pinctrl_enable(sppctl->pctl_dev);
1059	return 0;
1060}
1061
1062static int sppctl_resource_map(struct platform_device *pdev, struct sppctl_pdata *sppctl)
1063{
1064	sppctl->moon2_base = devm_platform_ioremap_resource_byname(pdev, "moon2");
1065	if (IS_ERR(sppctl->moon2_base))
1066		return PTR_ERR(sppctl->moon2_base);
1067
1068	sppctl->gpioxt_base = devm_platform_ioremap_resource_byname(pdev, "gpioxt");
1069	if (IS_ERR(sppctl->gpioxt_base))
1070		return PTR_ERR(sppctl->gpioxt_base);
1071
1072	sppctl->first_base = devm_platform_ioremap_resource_byname(pdev, "first");
1073	if (IS_ERR(sppctl->first_base))
1074		return PTR_ERR(sppctl->first_base);
1075
1076	sppctl->moon1_base = devm_platform_ioremap_resource_byname(pdev, "moon1");
1077	if (IS_ERR(sppctl->moon1_base))
1078		return PTR_ERR(sppctl->moon1_base);
1079
1080	return 0;
1081}
1082
1083static int sppctl_probe(struct platform_device *pdev)
1084{
1085	struct sppctl_pdata *sppctl;
1086	int ret;
1087
1088	sppctl = devm_kzalloc(&pdev->dev, sizeof(*sppctl), GFP_KERNEL);
1089	if (!sppctl)
1090		return -ENOMEM;
1091	platform_set_drvdata(pdev, sppctl);
1092
1093	ret = sppctl_resource_map(pdev, sppctl);
1094	if (ret)
1095		return ret;
1096
1097	ret = sppctl_gpio_new(pdev, sppctl);
1098	if (ret)
1099		return ret;
1100
1101	ret = sppctl_pinctrl_init(pdev);
1102	if (ret)
1103		return ret;
1104
1105	pinctrl_add_gpio_range(sppctl->pctl_dev, &sppctl->pctl_grange);
1106
1107	return 0;
1108}
1109
1110static const struct of_device_id sppctl_match_table[] = {
1111	{ .compatible = "sunplus,sp7021-pctl" },
1112	{ /* sentinel */ }
1113};
1114
1115static struct platform_driver sppctl_pinctrl_driver = {
1116	.driver = {
1117		.name           = SPPCTL_MODULE_NAME,
1118		.of_match_table = sppctl_match_table,
1119	},
1120	.probe  = sppctl_probe,
1121};
1122builtin_platform_driver(sppctl_pinctrl_driver)
1123
1124MODULE_AUTHOR("Dvorkin Dmitry <dvorkin@tibbo.com>");
1125MODULE_AUTHOR("Wells Lu <wellslutw@gmail.com>");
1126MODULE_DESCRIPTION("Sunplus SP7021 Pin Control and GPIO driver");
1127MODULE_LICENSE("GPL v2");
1128