1 // SPDX-License-Identifier: GPL-2.0
2 /*
3  * Copyright (C) 2024 Nuvoton Technology Corp.
4  *
5  * Author: Shan-Chun Hung <schung@nuvoton.com>
6  * *       Jacky Huang <ychuang3@nuvoton.com>
7  */
8 
9 #include <linux/bitfield.h>
10 #include <linux/bitops.h>
11 #include <linux/cleanup.h>
12 #include <linux/clk.h>
13 #include <linux/gpio/driver.h>
14 #include <linux/mfd/syscon.h>
15 #include <linux/of.h>
16 #include <linux/platform_device.h>
17 #include <linux/property.h>
18 #include <linux/regmap.h>
19 
20 #include <linux/pinctrl/pinconf.h>
21 #include <linux/pinctrl/pinctrl.h>
22 #include "../core.h"
23 #include "../pinconf.h"
24 #include "pinctrl-ma35.h"
25 
26 #define MA35_MFP_REG_BASE		0x80
27 #define MA35_MFP_REG_SZ_PER_BANK	8
28 #define MA35_MFP_BITS_PER_PORT		4
29 
30 #define MA35_GPIO_BANK_MAX		14
31 #define MA35_GPIO_PORT_MAX		16
32 
33 /* GPIO control registers */
34 #define MA35_GP_REG_MODE		0x00
35 #define MA35_GP_REG_DINOFF		0x04
36 #define MA35_GP_REG_DOUT		0x08
37 #define MA35_GP_REG_DATMSK		0x0c
38 #define MA35_GP_REG_PIN			0x10
39 #define MA35_GP_REG_DBEN		0x14
40 #define MA35_GP_REG_INTTYPE		0x18
41 #define MA35_GP_REG_INTEN		0x1c
42 #define MA35_GP_REG_INTSRC		0x20
43 #define MA35_GP_REG_SMTEN		0x24
44 #define MA35_GP_REG_SLEWCTL		0x28
45 #define MA35_GP_REG_SPW			0x2c
46 #define MA35_GP_REG_PUSEL		0x30
47 #define MA35_GP_REG_DSL			0x38
48 #define MA35_GP_REG_DSH			0x3c
49 
50 /* GPIO mode control */
51 #define MA35_GP_MODE_INPUT		0x0
52 #define MA35_GP_MODE_OUTPUT		0x1
53 #define MA35_GP_MODE_OPEN_DRAIN		0x2
54 #define MA35_GP_MODE_QUASI		0x3
55 #define MA35_GP_MODE_MASK(n)		GENMASK(n * 2 + 1, n * 2)
56 
57 #define MA35_GP_SLEWCTL_MASK(n)		GENMASK(n * 2 + 1, n * 2)
58 
59 /* GPIO pull-up and pull-down selection control */
60 #define MA35_GP_PUSEL_DISABLE		0x0
61 #define MA35_GP_PUSEL_PULL_UP		0x1
62 #define MA35_GP_PUSEL_PULL_DOWN		0x2
63 #define MA35_GP_PUSEL_MASK(n)		GENMASK(n * 2 + 1, n * 2)
64 
65 /*
66  * The MA35_GP_REG_INTEN bits 0 ~ 15 control low-level or falling edge trigger,
67  * while bits 16 ~ 31 control high-level or rising edge trigger.
68  */
69 #define MA35_GP_INTEN_L(n)		BIT(n)
70 #define MA35_GP_INTEN_H(n)		BIT(n + 16)
71 #define MA35_GP_INTEN_BOTH(n)		(MA35_GP_INTEN_H(n) | MA35_GP_INTEN_L(n))
72 
73 /*
74  * The MA35_GP_REG_DSL register controls ports 0 to 7, while the MA35_GP_REG_DSH
75  * register controls ports 8 to 15. Each port occupies a width of 4 bits, with 3
76  * bits being effective.
77  */
78 #define MA35_GP_DS_REG(n)		(n < 8 ? MA35_GP_REG_DSL : MA35_GP_REG_DSH)
79 #define MA35_GP_DS_MASK(n)		GENMASK((n % 8) * 4 + 3, (n % 8) * 4)
80 
81 #define MVOLT_1800			0
82 #define MVOLT_3300			1
83 
84 /* Non-constant mask variant of FIELD_GET() and FIELD_PREP() */
85 #define field_get(_mask, _reg)	(((_reg) & (_mask)) >> (ffs(_mask) - 1))
86 #define field_prep(_mask, _val)	(((_val) << (ffs(_mask) - 1)) & (_mask))
87 
88 static const char * const gpio_group_name[] = {
89 	"gpioa", "gpiob", "gpioc", "gpiod", "gpioe", "gpiof", "gpiog",
90 	"gpioh", "gpioi", "gpioj", "gpiok", "gpiol", "gpiom", "gpion",
91 };
92 
93 static const u32 ds_1800mv_tbl[] = {
94 	2900, 4400, 5800, 7300, 8600, 10100, 11500, 13000,
95 };
96 
97 static const u32 ds_3300mv_tbl[] = {
98 	17100, 25600, 34100, 42800, 48000, 56000, 77000, 82000,
99 };
100 
101 struct ma35_pin_func {
102 	const char		*name;
103 	const char		**groups;
104 	u32			ngroups;
105 };
106 
107 struct ma35_pin_setting {
108 	u32			offset;
109 	u32			shift;
110 	u32			muxval;
111 	unsigned long		*configs;
112 	unsigned int		nconfigs;
113 };
114 
115 struct ma35_pin_group {
116 	const char		*name;
117 	unsigned int		npins;
118 	unsigned int		*pins;
119 	struct ma35_pin_setting	*settings;
120 };
121 
122 struct ma35_pin_bank {
123 	void __iomem		*reg_base;
124 	struct clk		*clk;
125 	int			irq;
126 	u8			bank_num;
127 	u8			nr_pins;
128 	bool			valid;
129 	const char		*name;
130 	struct fwnode_handle	*fwnode;
131 	struct gpio_chip	chip;
132 	u32			irqtype;
133 	u32			irqinten;
134 	struct regmap		*regmap;
135 	struct device		*dev;
136 };
137 
138 struct ma35_pin_ctrl {
139 	struct ma35_pin_bank	*pin_banks;
140 	u32			nr_banks;
141 	u32			nr_pins;
142 };
143 
144 struct ma35_pinctrl {
145 	struct device		*dev;
146 	struct ma35_pin_ctrl	*ctrl;
147 	struct pinctrl_dev	*pctl;
148 	const struct ma35_pinctrl_soc_info *info;
149 	struct regmap		*regmap;
150 	struct ma35_pin_group	*groups;
151 	unsigned int		ngroups;
152 	struct ma35_pin_func	*functions;
153 	unsigned int		nfunctions;
154 };
155 
156 static DEFINE_RAW_SPINLOCK(ma35_lock);
157 
ma35_get_groups_count(struct pinctrl_dev * pctldev)158 static int ma35_get_groups_count(struct pinctrl_dev *pctldev)
159 {
160 	struct ma35_pinctrl *npctl = pinctrl_dev_get_drvdata(pctldev);
161 
162 	return npctl->ngroups;
163 }
164 
ma35_get_group_name(struct pinctrl_dev * pctldev,unsigned int selector)165 static const char *ma35_get_group_name(struct pinctrl_dev *pctldev, unsigned int selector)
166 {
167 	struct ma35_pinctrl *npctl = pinctrl_dev_get_drvdata(pctldev);
168 
169 	return npctl->groups[selector].name;
170 }
171 
ma35_get_group_pins(struct pinctrl_dev * pctldev,unsigned int selector,const unsigned int ** pins,unsigned int * npins)172 static int ma35_get_group_pins(struct pinctrl_dev *pctldev, unsigned int selector,
173 			       const unsigned int **pins, unsigned int *npins)
174 {
175 	struct ma35_pinctrl *npctl = pinctrl_dev_get_drvdata(pctldev);
176 
177 	if (selector >= npctl->ngroups)
178 		return -EINVAL;
179 
180 	*pins = npctl->groups[selector].pins;
181 	*npins = npctl->groups[selector].npins;
182 
183 	return 0;
184 }
185 
ma35_pinctrl_find_group_by_name(const struct ma35_pinctrl * npctl,const char * name)186 static struct ma35_pin_group *ma35_pinctrl_find_group_by_name(
187 			      const struct ma35_pinctrl *npctl, const char *name)
188 {
189 	int i;
190 
191 	for (i = 0; i < npctl->ngroups; i++) {
192 		if (!strcmp(npctl->groups[i].name, name))
193 			return &npctl->groups[i];
194 	}
195 	return NULL;
196 }
197 
ma35_pinctrl_dt_node_to_map_func(struct pinctrl_dev * pctldev,struct device_node * np,struct pinctrl_map ** map,unsigned int * num_maps)198 static int ma35_pinctrl_dt_node_to_map_func(struct pinctrl_dev *pctldev,
199 					    struct device_node *np,
200 					    struct pinctrl_map **map,
201 					    unsigned int *num_maps)
202 {
203 	struct ma35_pinctrl *npctl = pinctrl_dev_get_drvdata(pctldev);
204 	struct ma35_pin_group *grp;
205 	struct pinctrl_map *new_map;
206 	struct device_node *parent;
207 	int map_num = 1;
208 	int i;
209 
210 	/*
211 	 * first find the group of this node and check if we need create
212 	 * config maps for pins
213 	 */
214 	grp = ma35_pinctrl_find_group_by_name(npctl, np->name);
215 	if (!grp) {
216 		dev_err(npctl->dev, "unable to find group for node %s\n", np->name);
217 		return -EINVAL;
218 	}
219 
220 	map_num += grp->npins;
221 	new_map = kcalloc(map_num, sizeof(*new_map), GFP_KERNEL);
222 	if (!new_map)
223 		return -ENOMEM;
224 
225 	*map = new_map;
226 	*num_maps = map_num;
227 	/* create mux map */
228 	parent = of_get_parent(np);
229 	if (!parent)
230 		return -EINVAL;
231 
232 	new_map[0].type = PIN_MAP_TYPE_MUX_GROUP;
233 	new_map[0].data.mux.function = parent->name;
234 	new_map[0].data.mux.group = np->name;
235 	of_node_put(parent);
236 
237 	new_map++;
238 	for (i = 0; i < grp->npins; i++) {
239 		new_map[i].type = PIN_MAP_TYPE_CONFIGS_PIN;
240 		new_map[i].data.configs.group_or_pin = pin_get_name(pctldev, grp->pins[i]);
241 		new_map[i].data.configs.configs = grp->settings[i].configs;
242 		new_map[i].data.configs.num_configs = grp->settings[i].nconfigs;
243 	}
244 	dev_dbg(pctldev->dev, "maps: function %s group %s num %d\n",
245 		(*map)->data.mux.function, (*map)->data.mux.group, map_num);
246 
247 	return 0;
248 }
249 
250 static const struct pinctrl_ops ma35_pctrl_ops = {
251 	.get_groups_count = ma35_get_groups_count,
252 	.get_group_name = ma35_get_group_name,
253 	.get_group_pins = ma35_get_group_pins,
254 	.dt_node_to_map = ma35_pinctrl_dt_node_to_map_func,
255 	.dt_free_map = pinconf_generic_dt_free_map,
256 };
257 
ma35_pinmux_get_func_count(struct pinctrl_dev * pctldev)258 static int ma35_pinmux_get_func_count(struct pinctrl_dev *pctldev)
259 {
260 	struct ma35_pinctrl *npctl = pinctrl_dev_get_drvdata(pctldev);
261 
262 	return npctl->nfunctions;
263 }
264 
ma35_pinmux_get_func_name(struct pinctrl_dev * pctldev,unsigned int selector)265 static const char *ma35_pinmux_get_func_name(struct pinctrl_dev *pctldev,
266 					     unsigned int selector)
267 {
268 	struct ma35_pinctrl *npctl = pinctrl_dev_get_drvdata(pctldev);
269 
270 	return npctl->functions[selector].name;
271 }
272 
ma35_pinmux_get_func_groups(struct pinctrl_dev * pctldev,unsigned int function,const char * const ** groups,unsigned int * const num_groups)273 static int ma35_pinmux_get_func_groups(struct pinctrl_dev *pctldev,
274 				       unsigned int function,
275 				       const char *const **groups,
276 				       unsigned int *const num_groups)
277 {
278 	struct ma35_pinctrl *npctl = pinctrl_dev_get_drvdata(pctldev);
279 
280 	*groups = npctl->functions[function].groups;
281 	*num_groups = npctl->functions[function].ngroups;
282 
283 	return 0;
284 }
285 
ma35_pinmux_set_mux(struct pinctrl_dev * pctldev,unsigned int selector,unsigned int group)286 static int ma35_pinmux_set_mux(struct pinctrl_dev *pctldev, unsigned int selector,
287 			       unsigned int group)
288 {
289 	struct ma35_pinctrl *npctl = pinctrl_dev_get_drvdata(pctldev);
290 	struct ma35_pin_group *grp = &npctl->groups[group];
291 	struct ma35_pin_setting *setting = grp->settings;
292 	u32 i, regval;
293 
294 	dev_dbg(npctl->dev, "enable function %s group %s\n",
295 		npctl->functions[selector].name, npctl->groups[group].name);
296 
297 	for (i = 0; i < grp->npins; i++) {
298 		regmap_read(npctl->regmap, setting->offset, &regval);
299 		regval &= ~GENMASK(setting->shift + MA35_MFP_BITS_PER_PORT - 1,
300 				   setting->shift);
301 		regval |= setting->muxval << setting->shift;
302 		regmap_write(npctl->regmap, setting->offset, regval);
303 		setting++;
304 	}
305 	return 0;
306 }
307 
308 static const struct pinmux_ops ma35_pmx_ops = {
309 	.get_functions_count = ma35_pinmux_get_func_count,
310 	.get_function_name = ma35_pinmux_get_func_name,
311 	.get_function_groups = ma35_pinmux_get_func_groups,
312 	.set_mux = ma35_pinmux_set_mux,
313 	.strict = true,
314 };
315 
ma35_gpio_set_mode(void __iomem * reg_mode,unsigned int gpio,u32 mode)316 static void ma35_gpio_set_mode(void __iomem *reg_mode, unsigned int gpio, u32 mode)
317 {
318 	u32 regval = readl(reg_mode);
319 
320 	regval &= ~MA35_GP_MODE_MASK(gpio);
321 	regval |= field_prep(MA35_GP_MODE_MASK(gpio), mode);
322 
323 	writel(regval, reg_mode);
324 }
325 
ma35_gpio_get_mode(void __iomem * reg_mode,unsigned int gpio)326 static u32 ma35_gpio_get_mode(void __iomem *reg_mode, unsigned int gpio)
327 {
328 	u32 regval = readl(reg_mode);
329 
330 	return field_get(MA35_GP_MODE_MASK(gpio), regval);
331 }
332 
ma35_gpio_core_direction_in(struct gpio_chip * gc,unsigned int gpio)333 static int ma35_gpio_core_direction_in(struct gpio_chip *gc, unsigned int gpio)
334 {
335 	struct ma35_pin_bank *bank = gpiochip_get_data(gc);
336 	void __iomem *reg_mode = bank->reg_base + MA35_GP_REG_MODE;
337 
338 	guard(raw_spinlock_irqsave)(&ma35_lock);
339 
340 	ma35_gpio_set_mode(reg_mode, gpio, MA35_GP_MODE_INPUT);
341 
342 	return 0;
343 }
344 
ma35_gpio_core_direction_out(struct gpio_chip * gc,unsigned int gpio,int val)345 static int ma35_gpio_core_direction_out(struct gpio_chip *gc, unsigned int gpio, int val)
346 {
347 	struct ma35_pin_bank *bank = gpiochip_get_data(gc);
348 	void __iomem *reg_dout = bank->reg_base + MA35_GP_REG_DOUT;
349 	void __iomem *reg_mode = bank->reg_base + MA35_GP_REG_MODE;
350 	unsigned int regval;
351 
352 	guard(raw_spinlock_irqsave)(&ma35_lock);
353 
354 	regval = readl(reg_dout);
355 	if (val)
356 		regval |= BIT(gpio);
357 	else
358 		regval &= ~BIT(gpio);
359 	writel(regval, reg_dout);
360 
361 	ma35_gpio_set_mode(reg_mode, gpio, MA35_GP_MODE_OUTPUT);
362 
363 	return 0;
364 }
365 
ma35_gpio_core_get(struct gpio_chip * gc,unsigned int gpio)366 static int ma35_gpio_core_get(struct gpio_chip *gc, unsigned int gpio)
367 {
368 	struct ma35_pin_bank *bank = gpiochip_get_data(gc);
369 	void __iomem *reg_pin = bank->reg_base + MA35_GP_REG_PIN;
370 
371 	return !!(readl(reg_pin) & BIT(gpio));
372 }
373 
ma35_gpio_core_set(struct gpio_chip * gc,unsigned int gpio,int val)374 static void ma35_gpio_core_set(struct gpio_chip *gc, unsigned int gpio, int val)
375 {
376 	struct ma35_pin_bank *bank = gpiochip_get_data(gc);
377 	void __iomem *reg_dout = bank->reg_base + MA35_GP_REG_DOUT;
378 	u32 regval;
379 
380 	if (val)
381 		regval = readl(reg_dout) | BIT(gpio);
382 	else
383 		regval = readl(reg_dout) & ~BIT(gpio);
384 
385 	writel(regval, reg_dout);
386 }
387 
ma35_gpio_core_to_request(struct gpio_chip * gc,unsigned int gpio)388 static int ma35_gpio_core_to_request(struct gpio_chip *gc, unsigned int gpio)
389 {
390 	struct ma35_pin_bank *bank = gpiochip_get_data(gc);
391 	u32 reg_offs, bit_offs, regval;
392 
393 	if (gpio < 8) {
394 		/* The MFP low register controls port 0 ~ 7 */
395 		reg_offs = bank->bank_num * MA35_MFP_REG_SZ_PER_BANK;
396 		bit_offs = gpio * MA35_MFP_BITS_PER_PORT;
397 	} else {
398 		/* The MFP high register controls port 8 ~ 15 */
399 		reg_offs = bank->bank_num * MA35_MFP_REG_SZ_PER_BANK + 4;
400 		bit_offs = (gpio - 8) * MA35_MFP_BITS_PER_PORT;
401 	}
402 
403 	regmap_read(bank->regmap, MA35_MFP_REG_BASE + reg_offs, &regval);
404 	regval &= ~GENMASK(bit_offs + MA35_MFP_BITS_PER_PORT - 1, bit_offs);
405 	regmap_write(bank->regmap, MA35_MFP_REG_BASE + reg_offs, regval);
406 
407 	return 0;
408 }
409 
ma35_irq_gpio_ack(struct irq_data * d)410 static void ma35_irq_gpio_ack(struct irq_data *d)
411 {
412 	struct ma35_pin_bank *bank = gpiochip_get_data(irq_data_get_irq_chip_data(d));
413 	void __iomem *reg_intsrc = bank->reg_base + MA35_GP_REG_INTSRC;
414 	irq_hw_number_t hwirq = irqd_to_hwirq(d);
415 
416 	writel(BIT(hwirq), reg_intsrc);
417 }
418 
ma35_irq_gpio_mask(struct irq_data * d)419 static void ma35_irq_gpio_mask(struct irq_data *d)
420 {
421 	struct ma35_pin_bank *bank = gpiochip_get_data(irq_data_get_irq_chip_data(d));
422 	void __iomem *reg_ien = bank->reg_base + MA35_GP_REG_INTEN;
423 	irq_hw_number_t hwirq = irqd_to_hwirq(d);
424 	u32 regval;
425 
426 	regval = readl(reg_ien);
427 
428 	regval &= ~MA35_GP_INTEN_BOTH(hwirq);
429 
430 	writel(regval, reg_ien);
431 }
432 
ma35_irq_gpio_unmask(struct irq_data * d)433 static void ma35_irq_gpio_unmask(struct irq_data *d)
434 {
435 	struct ma35_pin_bank *bank = gpiochip_get_data(irq_data_get_irq_chip_data(d));
436 	void __iomem *reg_itype = bank->reg_base + MA35_GP_REG_INTTYPE;
437 	void __iomem *reg_ien = bank->reg_base + MA35_GP_REG_INTEN;
438 	irq_hw_number_t hwirq = irqd_to_hwirq(d);
439 	u32 bval, regval;
440 
441 	bval = bank->irqtype & BIT(hwirq);
442 	regval = readl(reg_itype);
443 	regval &= ~BIT(hwirq);
444 	writel(regval | bval, reg_itype);
445 
446 	bval = bank->irqinten & MA35_GP_INTEN_BOTH(hwirq);
447 	regval = readl(reg_ien);
448 	regval &= ~MA35_GP_INTEN_BOTH(hwirq);
449 	writel(regval | bval, reg_ien);
450 }
451 
ma35_irq_irqtype(struct irq_data * d,unsigned int type)452 static int ma35_irq_irqtype(struct irq_data *d, unsigned int type)
453 {
454 	struct ma35_pin_bank *bank = gpiochip_get_data(irq_data_get_irq_chip_data(d));
455 	irq_hw_number_t hwirq = irqd_to_hwirq(d);
456 
457 	switch (type) {
458 	case IRQ_TYPE_EDGE_BOTH:
459 		irq_set_handler_locked(d, handle_edge_irq);
460 		bank->irqtype &= ~BIT(hwirq);
461 		bank->irqinten |= MA35_GP_INTEN_BOTH(hwirq);
462 		break;
463 	case IRQ_TYPE_EDGE_RISING:
464 	case IRQ_TYPE_LEVEL_HIGH:
465 		irq_set_handler_locked(d, handle_edge_irq);
466 		bank->irqtype &= ~BIT(hwirq);
467 		bank->irqinten |= MA35_GP_INTEN_H(hwirq);
468 		bank->irqinten &= ~MA35_GP_INTEN_L(hwirq);
469 		break;
470 	case IRQ_TYPE_EDGE_FALLING:
471 	case IRQ_TYPE_LEVEL_LOW:
472 		irq_set_handler_locked(d, handle_edge_irq);
473 		bank->irqtype &= ~BIT(hwirq);
474 		bank->irqinten |= MA35_GP_INTEN_L(hwirq);
475 		bank->irqinten &= ~MA35_GP_INTEN_H(hwirq);
476 		break;
477 	default:
478 		return -EINVAL;
479 	}
480 
481 	writel(bank->irqtype, bank->reg_base + MA35_GP_REG_INTTYPE);
482 	writel(bank->irqinten, bank->reg_base + MA35_GP_REG_INTEN);
483 
484 	return 0;
485 }
486 
487 static struct irq_chip ma35_gpio_irqchip = {
488 	.name = "MA35-GPIO-IRQ",
489 	.irq_disable = ma35_irq_gpio_mask,
490 	.irq_enable = ma35_irq_gpio_unmask,
491 	.irq_ack = ma35_irq_gpio_ack,
492 	.irq_mask = ma35_irq_gpio_mask,
493 	.irq_unmask = ma35_irq_gpio_unmask,
494 	.irq_set_type = ma35_irq_irqtype,
495 	.flags = IRQCHIP_MASK_ON_SUSPEND | IRQCHIP_IMMUTABLE,
496 	GPIOCHIP_IRQ_RESOURCE_HELPERS,
497 };
498 
ma35_irq_demux_intgroup(struct irq_desc * desc)499 static void ma35_irq_demux_intgroup(struct irq_desc *desc)
500 {
501 	struct ma35_pin_bank *bank = gpiochip_get_data(irq_desc_get_handler_data(desc));
502 	struct irq_domain *irqdomain = bank->chip.irq.domain;
503 	struct irq_chip *irqchip = irq_desc_get_chip(desc);
504 	unsigned long isr;
505 	int offset;
506 
507 	chained_irq_enter(irqchip, desc);
508 
509 	isr = readl(bank->reg_base + MA35_GP_REG_INTSRC);
510 
511 	for_each_set_bit(offset, &isr, bank->nr_pins)
512 		generic_handle_irq(irq_find_mapping(irqdomain, offset));
513 
514 	chained_irq_exit(irqchip, desc);
515 }
516 
ma35_gpiolib_register(struct platform_device * pdev,struct ma35_pinctrl * npctl)517 static int ma35_gpiolib_register(struct platform_device *pdev, struct ma35_pinctrl *npctl)
518 {
519 	struct ma35_pin_ctrl *ctrl = npctl->ctrl;
520 	struct ma35_pin_bank *bank = ctrl->pin_banks;
521 	int ret;
522 	int i;
523 
524 	for (i = 0; i < ctrl->nr_banks; i++, bank++) {
525 		if (!bank->valid) {
526 			dev_warn(&pdev->dev, "%pfw: bank is not valid\n", bank->fwnode);
527 			continue;
528 		}
529 		bank->irqtype = 0;
530 		bank->irqinten = 0;
531 		bank->chip.label = bank->name;
532 		bank->chip.of_gpio_n_cells = 2;
533 		bank->chip.parent = &pdev->dev;
534 		bank->chip.request = ma35_gpio_core_to_request;
535 		bank->chip.direction_input = ma35_gpio_core_direction_in;
536 		bank->chip.direction_output = ma35_gpio_core_direction_out;
537 		bank->chip.get = ma35_gpio_core_get;
538 		bank->chip.set = ma35_gpio_core_set;
539 		bank->chip.base = -1;
540 		bank->chip.ngpio = bank->nr_pins;
541 		bank->chip.can_sleep = false;
542 
543 		if (bank->irq > 0) {
544 			struct gpio_irq_chip *girq;
545 
546 			girq = &bank->chip.irq;
547 			gpio_irq_chip_set_chip(girq, &ma35_gpio_irqchip);
548 			girq->parent_handler = ma35_irq_demux_intgroup;
549 			girq->num_parents = 1;
550 
551 			girq->parents = devm_kcalloc(&pdev->dev, girq->num_parents,
552 						     sizeof(*girq->parents), GFP_KERNEL);
553 			if (!girq->parents)
554 				return -ENOMEM;
555 
556 			girq->parents[0] = bank->irq;
557 			girq->default_type = IRQ_TYPE_NONE;
558 			girq->handler = handle_bad_irq;
559 		}
560 
561 		ret = devm_gpiochip_add_data(&pdev->dev, &bank->chip, bank);
562 		if (ret) {
563 			dev_err(&pdev->dev, "failed to register gpio_chip %s, error code: %d\n",
564 				bank->chip.label, ret);
565 			return ret;
566 		}
567 	}
568 	return 0;
569 }
570 
ma35_get_bank_data(struct ma35_pin_bank * bank)571 static int ma35_get_bank_data(struct ma35_pin_bank *bank)
572 {
573 	bank->reg_base = fwnode_iomap(bank->fwnode, 0);
574 	if (!bank->reg_base)
575 		return -ENOMEM;
576 
577 	bank->irq = fwnode_irq_get(bank->fwnode, 0);
578 
579 	bank->nr_pins = MA35_GPIO_PORT_MAX;
580 
581 	bank->clk = of_clk_get(to_of_node(bank->fwnode), 0);
582 	if (IS_ERR(bank->clk))
583 		return PTR_ERR(bank->clk);
584 
585 	return clk_prepare_enable(bank->clk);
586 }
587 
ma35_pinctrl_get_soc_data(struct ma35_pinctrl * pctl,struct platform_device * pdev)588 static int ma35_pinctrl_get_soc_data(struct ma35_pinctrl *pctl, struct platform_device *pdev)
589 {
590 	struct fwnode_handle *child;
591 	struct ma35_pin_ctrl *ctrl;
592 	struct ma35_pin_bank *bank;
593 	int i, id = 0;
594 
595 	ctrl = pctl->ctrl;
596 	ctrl->nr_banks = MA35_GPIO_BANK_MAX;
597 
598 	ctrl->pin_banks = devm_kcalloc(&pdev->dev, ctrl->nr_banks,
599 				       sizeof(*ctrl->pin_banks), GFP_KERNEL);
600 	if (!ctrl->pin_banks)
601 		return -ENOMEM;
602 
603 	for (i = 0; i < ctrl->nr_banks; i++) {
604 		ctrl->pin_banks[i].bank_num = i;
605 		ctrl->pin_banks[i].name = gpio_group_name[i];
606 	}
607 
608 	for_each_gpiochip_node(&pdev->dev, child) {
609 		bank = &ctrl->pin_banks[id];
610 		bank->fwnode = child;
611 		bank->regmap = pctl->regmap;
612 		bank->dev = &pdev->dev;
613 		if (!ma35_get_bank_data(bank))
614 			bank->valid = true;
615 		id++;
616 	}
617 	return 0;
618 }
619 
ma35_gpio_cla_port(unsigned int gpio_num,unsigned int * group,unsigned int * num)620 static void ma35_gpio_cla_port(unsigned int gpio_num, unsigned int *group,
621 			       unsigned int *num)
622 {
623 	*group = gpio_num / MA35_GPIO_PORT_MAX;
624 	*num = gpio_num % MA35_GPIO_PORT_MAX;
625 }
626 
ma35_pinconf_set_pull(struct ma35_pinctrl * npctl,unsigned int pin,int pull_up)627 static int ma35_pinconf_set_pull(struct ma35_pinctrl *npctl, unsigned int pin,
628 				 int pull_up)
629 {
630 	unsigned int port, group_num;
631 	void __iomem *base;
632 	u32 regval, pull_sel = MA35_GP_PUSEL_DISABLE;
633 
634 	ma35_gpio_cla_port(pin, &group_num, &port);
635 	base = npctl->ctrl->pin_banks[group_num].reg_base;
636 
637 	regval = readl(base + MA35_GP_REG_PUSEL);
638 	regval &= ~MA35_GP_PUSEL_MASK(port);
639 
640 	switch (pull_up) {
641 	case PIN_CONFIG_BIAS_PULL_UP:
642 		pull_sel = MA35_GP_PUSEL_PULL_UP;
643 		break;
644 
645 	case PIN_CONFIG_BIAS_PULL_DOWN:
646 		pull_sel = MA35_GP_PUSEL_PULL_DOWN;
647 		break;
648 
649 	case PIN_CONFIG_BIAS_DISABLE:
650 		pull_sel = MA35_GP_PUSEL_DISABLE;
651 		break;
652 	}
653 
654 	regval |= field_prep(MA35_GP_PUSEL_MASK(port), pull_sel);
655 	writel(regval, base + MA35_GP_REG_PUSEL);
656 
657 	return 0;
658 }
659 
ma35_pinconf_get_output(struct ma35_pinctrl * npctl,unsigned int pin)660 static int ma35_pinconf_get_output(struct ma35_pinctrl *npctl, unsigned int pin)
661 {
662 	unsigned int port, group_num;
663 	void __iomem *base;
664 	u32 mode;
665 
666 	ma35_gpio_cla_port(pin, &group_num, &port);
667 	base = npctl->ctrl->pin_banks[group_num].reg_base;
668 
669 	mode = ma35_gpio_get_mode(base + MA35_GP_REG_MODE, port);
670 	if (mode == MA35_GP_MODE_OUTPUT)
671 		return 1;
672 
673 	return 0;
674 }
675 
ma35_pinconf_get_pull(struct ma35_pinctrl * npctl,unsigned int pin)676 static int ma35_pinconf_get_pull(struct ma35_pinctrl *npctl, unsigned int pin)
677 {
678 	unsigned int port, group_num;
679 	void __iomem *base;
680 	u32 regval, pull_sel;
681 
682 	ma35_gpio_cla_port(pin, &group_num, &port);
683 	base = npctl->ctrl->pin_banks[group_num].reg_base;
684 
685 	regval = readl(base + MA35_GP_REG_PUSEL);
686 
687 	pull_sel = field_get(MA35_GP_PUSEL_MASK(port), regval);
688 
689 	switch (pull_sel) {
690 	case MA35_GP_PUSEL_PULL_UP:
691 		return PIN_CONFIG_BIAS_PULL_UP;
692 
693 	case MA35_GP_PUSEL_PULL_DOWN:
694 		return PIN_CONFIG_BIAS_PULL_DOWN;
695 
696 	case MA35_GP_PUSEL_DISABLE:
697 		return PIN_CONFIG_BIAS_DISABLE;
698 	}
699 
700 	return PIN_CONFIG_BIAS_DISABLE;
701 }
702 
ma35_pinconf_set_output(struct ma35_pinctrl * npctl,unsigned int pin,bool out)703 static int ma35_pinconf_set_output(struct ma35_pinctrl *npctl, unsigned int pin, bool out)
704 {
705 	unsigned int port, group_num;
706 	void __iomem *base;
707 
708 	ma35_gpio_cla_port(pin, &group_num, &port);
709 	base = npctl->ctrl->pin_banks[group_num].reg_base;
710 
711 	ma35_gpio_set_mode(base + MA35_GP_REG_MODE, port, MA35_GP_MODE_OUTPUT);
712 
713 	return 0;
714 }
715 
ma35_pinconf_get_power_source(struct ma35_pinctrl * npctl,unsigned int pin)716 static int ma35_pinconf_get_power_source(struct ma35_pinctrl *npctl, unsigned int pin)
717 {
718 	unsigned int port, group_num;
719 	void __iomem *base;
720 	u32 regval;
721 
722 	ma35_gpio_cla_port(pin, &group_num, &port);
723 	base = npctl->ctrl->pin_banks[group_num].reg_base;
724 
725 	regval = readl(base + MA35_GP_REG_SPW);
726 
727 	if (regval & BIT(port))
728 		return MVOLT_3300;
729 	else
730 		return MVOLT_1800;
731 }
732 
ma35_pinconf_set_power_source(struct ma35_pinctrl * npctl,unsigned int pin,int arg)733 static int ma35_pinconf_set_power_source(struct ma35_pinctrl *npctl,
734 					 unsigned int pin, int arg)
735 {
736 	unsigned int port, group_num;
737 	void __iomem *base;
738 	u32 regval;
739 
740 	if ((arg != MVOLT_1800) && (arg != MVOLT_3300))
741 		return -EINVAL;
742 
743 	ma35_gpio_cla_port(pin, &group_num, &port);
744 	base = npctl->ctrl->pin_banks[group_num].reg_base;
745 
746 	regval = readl(base + MA35_GP_REG_SPW);
747 
748 	if (arg == MVOLT_1800)
749 		regval &= ~BIT(port);
750 	else
751 		regval |= BIT(port);
752 
753 	writel(regval, base + MA35_GP_REG_SPW);
754 
755 	return 0;
756 }
757 
ma35_pinconf_get_drive_strength(struct ma35_pinctrl * npctl,unsigned int pin,u32 * strength)758 static int ma35_pinconf_get_drive_strength(struct ma35_pinctrl *npctl, unsigned int pin,
759 					   u32 *strength)
760 {
761 	unsigned int port, group_num;
762 	void __iomem *base;
763 	u32 regval, ds_val;
764 
765 	ma35_gpio_cla_port(pin, &group_num, &port);
766 	base = npctl->ctrl->pin_banks[group_num].reg_base;
767 
768 	regval = readl(base + MA35_GP_DS_REG(port));
769 	ds_val = field_get(MA35_GP_DS_MASK(port), regval);
770 
771 	if (ma35_pinconf_get_power_source(npctl, pin) == MVOLT_1800)
772 		*strength = ds_1800mv_tbl[ds_val];
773 	else
774 		*strength = ds_3300mv_tbl[ds_val];
775 
776 	return 0;
777 }
778 
ma35_pinconf_set_drive_strength(struct ma35_pinctrl * npctl,unsigned int pin,int strength)779 static int ma35_pinconf_set_drive_strength(struct ma35_pinctrl *npctl, unsigned int pin,
780 					   int strength)
781 {
782 	unsigned int port, group_num;
783 	void __iomem *base;
784 	int i, ds_val = -1;
785 	u32 regval;
786 
787 	if (ma35_pinconf_get_power_source(npctl, pin) == MVOLT_1800) {
788 		for (i = 0; i < ARRAY_SIZE(ds_1800mv_tbl); i++) {
789 			if (ds_1800mv_tbl[i] == strength) {
790 				ds_val = i;
791 				break;
792 			}
793 		}
794 	} else {
795 		for (i = 0; i < ARRAY_SIZE(ds_3300mv_tbl); i++) {
796 			if (ds_3300mv_tbl[i] == strength) {
797 				ds_val = i;
798 				break;
799 			}
800 		}
801 	}
802 	if (ds_val == -1)
803 		return -EINVAL;
804 
805 	ma35_gpio_cla_port(pin, &group_num, &port);
806 	base = npctl->ctrl->pin_banks[group_num].reg_base;
807 
808 	regval = readl(base + MA35_GP_DS_REG(port));
809 	regval &= ~MA35_GP_DS_MASK(port);
810 	regval |= field_prep(MA35_GP_DS_MASK(port), ds_val);
811 
812 	writel(regval, base + MA35_GP_DS_REG(port));
813 
814 	return 0;
815 }
816 
ma35_pinconf_get_schmitt_enable(struct ma35_pinctrl * npctl,unsigned int pin)817 static int ma35_pinconf_get_schmitt_enable(struct ma35_pinctrl *npctl, unsigned int pin)
818 {
819 	unsigned int port, group_num;
820 	void __iomem *base;
821 	u32 regval;
822 
823 	ma35_gpio_cla_port(pin, &group_num, &port);
824 	base = npctl->ctrl->pin_banks[group_num].reg_base;
825 
826 	regval = readl(base + MA35_GP_REG_SMTEN);
827 
828 	return !!(regval & BIT(port));
829 }
830 
ma35_pinconf_set_schmitt(struct ma35_pinctrl * npctl,unsigned int pin,int enable)831 static int ma35_pinconf_set_schmitt(struct ma35_pinctrl *npctl, unsigned int pin, int enable)
832 {
833 	unsigned int port, group_num;
834 	void __iomem *base;
835 	u32 regval;
836 
837 	ma35_gpio_cla_port(pin, &group_num, &port);
838 	base = npctl->ctrl->pin_banks[group_num].reg_base;
839 
840 	regval = readl(base + MA35_GP_REG_SMTEN);
841 
842 	if (enable)
843 		regval |= BIT(port);
844 	else
845 		regval &= ~BIT(port);
846 
847 	writel(regval, base + MA35_GP_REG_SMTEN);
848 
849 	return 0;
850 }
851 
ma35_pinconf_get_slew_rate(struct ma35_pinctrl * npctl,unsigned int pin)852 static int ma35_pinconf_get_slew_rate(struct ma35_pinctrl *npctl, unsigned int pin)
853 {
854 	unsigned int port, group_num;
855 	void __iomem *base;
856 	u32 regval;
857 
858 	ma35_gpio_cla_port(pin, &group_num, &port);
859 	base = npctl->ctrl->pin_banks[group_num].reg_base;
860 
861 	regval = readl(base + MA35_GP_REG_SLEWCTL);
862 
863 	return field_get(MA35_GP_SLEWCTL_MASK(port), regval);
864 }
865 
ma35_pinconf_set_slew_rate(struct ma35_pinctrl * npctl,unsigned int pin,int rate)866 static int ma35_pinconf_set_slew_rate(struct ma35_pinctrl *npctl, unsigned int pin, int rate)
867 {
868 	unsigned int port, group_num;
869 	void __iomem *base;
870 	u32 regval;
871 
872 	ma35_gpio_cla_port(pin, &group_num, &port);
873 	base = npctl->ctrl->pin_banks[group_num].reg_base;
874 
875 	regval = readl(base + MA35_GP_REG_SLEWCTL);
876 	regval &= ~MA35_GP_SLEWCTL_MASK(port);
877 	regval |= field_prep(MA35_GP_SLEWCTL_MASK(port), rate);
878 
879 	writel(regval, base + MA35_GP_REG_SLEWCTL);
880 
881 	return 0;
882 }
883 
ma35_pinconf_get(struct pinctrl_dev * pctldev,unsigned int pin,unsigned long * config)884 static int ma35_pinconf_get(struct pinctrl_dev *pctldev, unsigned int pin, unsigned long *config)
885 {
886 	struct ma35_pinctrl *npctl = pinctrl_dev_get_drvdata(pctldev);
887 	enum pin_config_param param = pinconf_to_config_param(*config);
888 	u32 arg;
889 	int ret;
890 
891 	switch (param) {
892 	case PIN_CONFIG_BIAS_DISABLE:
893 	case PIN_CONFIG_BIAS_PULL_DOWN:
894 	case PIN_CONFIG_BIAS_PULL_UP:
895 		if (ma35_pinconf_get_pull(npctl, pin) != param)
896 			return -EINVAL;
897 		arg = 1;
898 		break;
899 
900 	case PIN_CONFIG_DRIVE_STRENGTH:
901 		ret = ma35_pinconf_get_drive_strength(npctl, pin, &arg);
902 		if (ret)
903 			return ret;
904 		break;
905 
906 	case PIN_CONFIG_INPUT_SCHMITT_ENABLE:
907 		arg = ma35_pinconf_get_schmitt_enable(npctl, pin);
908 		break;
909 
910 	case PIN_CONFIG_SLEW_RATE:
911 		arg = ma35_pinconf_get_slew_rate(npctl, pin);
912 		break;
913 
914 	case PIN_CONFIG_OUTPUT_ENABLE:
915 		arg = ma35_pinconf_get_output(npctl, pin);
916 		break;
917 
918 	case PIN_CONFIG_POWER_SOURCE:
919 		arg = ma35_pinconf_get_power_source(npctl, pin);
920 		break;
921 
922 	default:
923 		return -EINVAL;
924 	}
925 	*config = pinconf_to_config_packed(param, arg);
926 
927 	return 0;
928 }
929 
ma35_pinconf_set(struct pinctrl_dev * pctldev,unsigned int pin,unsigned long * configs,unsigned int num_configs)930 static int ma35_pinconf_set(struct pinctrl_dev *pctldev, unsigned int pin,
931 			    unsigned long *configs, unsigned int num_configs)
932 {
933 	struct ma35_pinctrl *npctl = pinctrl_dev_get_drvdata(pctldev);
934 	enum pin_config_param param;
935 	unsigned int arg = 0;
936 	int i, ret = 0;
937 
938 	for (i = 0; i < num_configs; i++) {
939 		param = pinconf_to_config_param(configs[i]);
940 		arg = pinconf_to_config_argument(configs[i]);
941 
942 		switch (param) {
943 		case PIN_CONFIG_BIAS_DISABLE:
944 		case PIN_CONFIG_BIAS_PULL_UP:
945 		case PIN_CONFIG_BIAS_PULL_DOWN:
946 			ret = ma35_pinconf_set_pull(npctl, pin, param);
947 			break;
948 
949 		case PIN_CONFIG_DRIVE_STRENGTH:
950 			ret = ma35_pinconf_set_drive_strength(npctl, pin, arg);
951 			break;
952 
953 		case PIN_CONFIG_INPUT_SCHMITT_ENABLE:
954 			ret = ma35_pinconf_set_schmitt(npctl, pin, 1);
955 			break;
956 
957 		case PIN_CONFIG_INPUT_SCHMITT:
958 			ret = ma35_pinconf_set_schmitt(npctl, pin, arg);
959 			break;
960 
961 		case PIN_CONFIG_SLEW_RATE:
962 			ret = ma35_pinconf_set_slew_rate(npctl, pin, arg);
963 			break;
964 
965 		case PIN_CONFIG_OUTPUT_ENABLE:
966 			ret = ma35_pinconf_set_output(npctl, pin, arg);
967 			break;
968 
969 		case PIN_CONFIG_POWER_SOURCE:
970 			ret = ma35_pinconf_set_power_source(npctl, pin, arg);
971 			break;
972 
973 		default:
974 			return -EINVAL;
975 		}
976 
977 		if (ret)
978 			break;
979 	}
980 	return ret;
981 }
982 
983 static const struct pinconf_ops ma35_pinconf_ops = {
984 	.pin_config_get = ma35_pinconf_get,
985 	.pin_config_set = ma35_pinconf_set,
986 	.is_generic = true,
987 };
988 
ma35_pinctrl_parse_groups(struct device_node * np,struct ma35_pin_group * grp,struct ma35_pinctrl * npctl,u32 index)989 static int ma35_pinctrl_parse_groups(struct device_node *np, struct ma35_pin_group *grp,
990 				     struct ma35_pinctrl *npctl, u32 index)
991 {
992 	struct ma35_pin_setting *pin;
993 	unsigned long *configs;
994 	unsigned int nconfigs;
995 	int i, j, count, ret;
996 	u32 *elems;
997 
998 	grp->name = np->name;
999 
1000 	ret = pinconf_generic_parse_dt_config(np, NULL, &configs, &nconfigs);
1001 	if (ret)
1002 		return ret;
1003 
1004 	count = of_property_count_elems_of_size(np, "nuvoton,pins", sizeof(u32));
1005 	if (!count || count % 3)
1006 		return -EINVAL;
1007 
1008 	elems = devm_kmalloc_array(npctl->dev, count, sizeof(u32), GFP_KERNEL);
1009 	if (!elems)
1010 		return -ENOMEM;
1011 
1012 	ret = of_property_read_u32_array(np, "nuvoton,pins", elems, count);
1013 	if (ret)
1014 		return -EINVAL;
1015 
1016 	grp->npins = count / 3;
1017 
1018 	grp->pins = devm_kcalloc(npctl->dev, grp->npins, sizeof(*grp->pins), GFP_KERNEL);
1019 	if (!grp->pins)
1020 		return -ENOMEM;
1021 
1022 	grp->settings = devm_kcalloc(npctl->dev, grp->npins, sizeof(*grp->settings), GFP_KERNEL);
1023 	if (!grp->settings)
1024 		return -ENOMEM;
1025 
1026 	pin = grp->settings;
1027 
1028 	for (i = 0, j = 0; i < count; i += 3, j++) {
1029 		pin->offset = elems[i] * MA35_MFP_REG_SZ_PER_BANK + MA35_MFP_REG_BASE;
1030 		pin->shift = (elems[i + 1] * MA35_MFP_BITS_PER_PORT) % 32;
1031 		pin->muxval = elems[i + 2];
1032 		pin->configs = configs;
1033 		pin->nconfigs = nconfigs;
1034 		grp->pins[j] = npctl->info->get_pin_num(pin->offset, pin->shift);
1035 		pin++;
1036 	}
1037 	return 0;
1038 }
1039 
ma35_pinctrl_parse_functions(struct device_node * np,struct ma35_pinctrl * npctl,u32 index)1040 static int ma35_pinctrl_parse_functions(struct device_node *np, struct ma35_pinctrl *npctl,
1041 					u32 index)
1042 {
1043 	struct device_node *child;
1044 	struct ma35_pin_func *func;
1045 	struct ma35_pin_group *grp;
1046 	static u32 grp_index;
1047 	u32 ret, i = 0;
1048 
1049 	dev_dbg(npctl->dev, "parse function(%d): %s\n", index, np->name);
1050 
1051 	func = &npctl->functions[index];
1052 	func->name = np->name;
1053 	func->ngroups = of_get_child_count(np);
1054 
1055 	if (func->ngroups <= 0)
1056 		return 0;
1057 
1058 	func->groups = devm_kcalloc(npctl->dev, func->ngroups, sizeof(char *), GFP_KERNEL);
1059 	if (!func->groups)
1060 		return -ENOMEM;
1061 
1062 	for_each_child_of_node(np, child) {
1063 		func->groups[i] = child->name;
1064 		grp = &npctl->groups[grp_index++];
1065 		ret = ma35_pinctrl_parse_groups(child, grp, npctl, i++);
1066 		if (ret) {
1067 			of_node_put(child);
1068 			return ret;
1069 		}
1070 	}
1071 	return 0;
1072 }
1073 
ma35_pinctrl_probe_dt(struct platform_device * pdev,struct ma35_pinctrl * npctl)1074 static int ma35_pinctrl_probe_dt(struct platform_device *pdev, struct ma35_pinctrl *npctl)
1075 {
1076 	struct fwnode_handle *child;
1077 	u32 idx = 0;
1078 	int ret;
1079 
1080 	device_for_each_child_node(&pdev->dev, child) {
1081 		if (fwnode_property_present(child, "gpio-controller"))
1082 			continue;
1083 		npctl->nfunctions++;
1084 		npctl->ngroups += of_get_child_count(to_of_node(child));
1085 	}
1086 
1087 	if (!npctl->nfunctions)
1088 		return -EINVAL;
1089 
1090 	npctl->functions = devm_kcalloc(&pdev->dev, npctl->nfunctions,
1091 					sizeof(*npctl->functions), GFP_KERNEL);
1092 	if (!npctl->functions)
1093 		return -ENOMEM;
1094 
1095 	npctl->groups = devm_kcalloc(&pdev->dev, npctl->ngroups,
1096 				     sizeof(*npctl->groups), GFP_KERNEL);
1097 	if (!npctl->groups)
1098 		return -ENOMEM;
1099 
1100 	device_for_each_child_node(&pdev->dev, child) {
1101 		if (fwnode_property_present(child, "gpio-controller"))
1102 			continue;
1103 
1104 		ret = ma35_pinctrl_parse_functions(to_of_node(child), npctl, idx++);
1105 		if (ret) {
1106 			fwnode_handle_put(child);
1107 			dev_err(&pdev->dev, "failed to parse function\n");
1108 			return ret;
1109 		}
1110 	}
1111 	return 0;
1112 }
1113 
ma35_pinctrl_probe(struct platform_device * pdev,const struct ma35_pinctrl_soc_info * info)1114 int ma35_pinctrl_probe(struct platform_device *pdev, const struct ma35_pinctrl_soc_info *info)
1115 {
1116 	struct pinctrl_desc *ma35_pinctrl_desc;
1117 	struct device *dev = &pdev->dev;
1118 	struct ma35_pinctrl *npctl;
1119 	int ret;
1120 
1121 	if (!info || !info->pins || !info->npins) {
1122 		dev_err(&pdev->dev, "wrong pinctrl info\n");
1123 		return -EINVAL;
1124 	}
1125 
1126 	npctl = devm_kzalloc(&pdev->dev, sizeof(*npctl), GFP_KERNEL);
1127 	if (!npctl)
1128 		return -ENOMEM;
1129 
1130 	ma35_pinctrl_desc = devm_kzalloc(&pdev->dev, sizeof(*ma35_pinctrl_desc), GFP_KERNEL);
1131 	if (!ma35_pinctrl_desc)
1132 		return -ENOMEM;
1133 
1134 	npctl->ctrl = devm_kzalloc(&pdev->dev, sizeof(*npctl->ctrl), GFP_KERNEL);
1135 	if (!npctl->ctrl)
1136 		return -ENOMEM;
1137 
1138 	ma35_pinctrl_desc->name = dev_name(&pdev->dev);
1139 	ma35_pinctrl_desc->pins = info->pins;
1140 	ma35_pinctrl_desc->npins = info->npins;
1141 	ma35_pinctrl_desc->pctlops = &ma35_pctrl_ops;
1142 	ma35_pinctrl_desc->pmxops = &ma35_pmx_ops;
1143 	ma35_pinctrl_desc->confops = &ma35_pinconf_ops;
1144 	ma35_pinctrl_desc->owner = THIS_MODULE;
1145 
1146 	npctl->info = info;
1147 	npctl->dev = &pdev->dev;
1148 
1149 	npctl->regmap = syscon_regmap_lookup_by_phandle(pdev->dev.of_node, "nuvoton,sys");
1150 	if (IS_ERR(npctl->regmap))
1151 		return dev_err_probe(&pdev->dev, PTR_ERR(npctl->regmap),
1152 				     "No syscfg phandle specified\n");
1153 
1154 	ret = ma35_pinctrl_get_soc_data(npctl, pdev);
1155 	if (ret)
1156 		return dev_err_probe(&pdev->dev, ret, "fail to get soc data\n");
1157 
1158 	platform_set_drvdata(pdev, npctl);
1159 
1160 	ret = ma35_pinctrl_probe_dt(pdev, npctl);
1161 	if (ret)
1162 		return dev_err_probe(&pdev->dev, ret, "fail to probe MA35 pinctrl dt\n");
1163 
1164 	ret = devm_pinctrl_register_and_init(dev, ma35_pinctrl_desc, npctl, &npctl->pctl);
1165 	if (ret)
1166 		return dev_err_probe(&pdev->dev, ret, "fail to register MA35 pinctrl\n");
1167 
1168 	ret = pinctrl_enable(npctl->pctl);
1169 	if (ret)
1170 		return dev_err_probe(&pdev->dev, ret, "fail to enable MA35 pinctrl\n");
1171 
1172 	return ma35_gpiolib_register(pdev, npctl);
1173 }
1174 
ma35_pinctrl_suspend(struct device * dev)1175 int ma35_pinctrl_suspend(struct device *dev)
1176 {
1177 	struct ma35_pinctrl *npctl = dev_get_drvdata(dev);
1178 
1179 	return pinctrl_force_sleep(npctl->pctl);
1180 }
1181 
ma35_pinctrl_resume(struct device * dev)1182 int ma35_pinctrl_resume(struct device *dev)
1183 {
1184 	struct ma35_pinctrl *npctl = dev_get_drvdata(dev);
1185 
1186 	return pinctrl_force_default(npctl->pctl);
1187 }
1188