xref: /linux/drivers/pinctrl/nuvoton/pinctrl-ma35.c (revision 0227b49b50276657243e54f5609e65c4f0eaaf4d)
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_setting {
102 	u32			offset;
103 	u32			shift;
104 	u32			muxval;
105 	unsigned long		*configs;
106 	unsigned int		nconfigs;
107 };
108 
109 struct ma35_pin_bank {
110 	void __iomem		*reg_base;
111 	struct clk		*clk;
112 	int			irq;
113 	u8			bank_num;
114 	u8			nr_pins;
115 	bool			valid;
116 	const char		*name;
117 	struct fwnode_handle	*fwnode;
118 	struct gpio_chip	chip;
119 	u32			irqtype;
120 	u32			irqinten;
121 	struct regmap		*regmap;
122 	struct device		*dev;
123 };
124 
125 struct ma35_pin_ctrl {
126 	struct ma35_pin_bank	*pin_banks;
127 	u32			nr_banks;
128 	u32			nr_pins;
129 };
130 
131 struct ma35_pinctrl {
132 	struct device		*dev;
133 	struct ma35_pin_ctrl	*ctrl;
134 	struct pinctrl_dev	*pctl;
135 	const struct ma35_pinctrl_soc_info *info;
136 	struct regmap		*regmap;
137 	struct group_desc	*groups;
138 	unsigned int		ngroups;
139 	struct pinfunction	*functions;
140 	unsigned int		nfunctions;
141 };
142 
143 static DEFINE_RAW_SPINLOCK(ma35_lock);
144 
ma35_get_groups_count(struct pinctrl_dev * pctldev)145 static int ma35_get_groups_count(struct pinctrl_dev *pctldev)
146 {
147 	struct ma35_pinctrl *npctl = pinctrl_dev_get_drvdata(pctldev);
148 
149 	return npctl->ngroups;
150 }
151 
ma35_get_group_name(struct pinctrl_dev * pctldev,unsigned int selector)152 static const char *ma35_get_group_name(struct pinctrl_dev *pctldev, unsigned int selector)
153 {
154 	struct ma35_pinctrl *npctl = pinctrl_dev_get_drvdata(pctldev);
155 
156 	return npctl->groups[selector].grp.name;
157 }
158 
ma35_get_group_pins(struct pinctrl_dev * pctldev,unsigned int selector,const unsigned int ** pins,unsigned int * npins)159 static int ma35_get_group_pins(struct pinctrl_dev *pctldev, unsigned int selector,
160 			       const unsigned int **pins, unsigned int *npins)
161 {
162 	struct ma35_pinctrl *npctl = pinctrl_dev_get_drvdata(pctldev);
163 
164 	if (selector >= npctl->ngroups)
165 		return -EINVAL;
166 
167 	*pins = npctl->groups[selector].grp.pins;
168 	*npins = npctl->groups[selector].grp.npins;
169 
170 	return 0;
171 }
172 
173 static struct group_desc *
ma35_pinctrl_find_group_by_name(const struct ma35_pinctrl * npctl,const char * name)174 ma35_pinctrl_find_group_by_name(const struct ma35_pinctrl *npctl, const char *name)
175 {
176 	int i;
177 
178 	for (i = 0; i < npctl->ngroups; i++) {
179 		if (!strcmp(npctl->groups[i].grp.name, name))
180 			return &npctl->groups[i];
181 	}
182 	return NULL;
183 }
184 
ma35_pinctrl_dt_node_to_map_func(struct pinctrl_dev * pctldev,struct device_node * np,struct pinctrl_map ** map,unsigned int * num_maps)185 static int ma35_pinctrl_dt_node_to_map_func(struct pinctrl_dev *pctldev,
186 					    struct device_node *np,
187 					    struct pinctrl_map **map,
188 					    unsigned int *num_maps)
189 {
190 	struct ma35_pinctrl *npctl = pinctrl_dev_get_drvdata(pctldev);
191 	struct ma35_pin_setting *setting;
192 	struct pinctrl_map *new_map;
193 	struct device_node *parent;
194 	struct group_desc *grp;
195 	int map_num = 1;
196 	int i;
197 
198 	/*
199 	 * first find the group of this node and check if we need create
200 	 * config maps for pins
201 	 */
202 	grp = ma35_pinctrl_find_group_by_name(npctl, np->name);
203 	if (!grp) {
204 		dev_err(npctl->dev, "unable to find group for node %s\n", np->name);
205 		return -EINVAL;
206 	}
207 
208 	map_num += grp->grp.npins;
209 	new_map = kcalloc(map_num, sizeof(*new_map), GFP_KERNEL);
210 	if (!new_map)
211 		return -ENOMEM;
212 
213 	*map = new_map;
214 	*num_maps = map_num;
215 	/* create mux map */
216 	parent = of_get_parent(np);
217 	if (!parent)
218 		return -EINVAL;
219 
220 	setting = grp->data;
221 
222 	new_map[0].type = PIN_MAP_TYPE_MUX_GROUP;
223 	new_map[0].data.mux.function = parent->name;
224 	new_map[0].data.mux.group = np->name;
225 	of_node_put(parent);
226 
227 	new_map++;
228 	for (i = 0; i < grp->grp.npins; i++) {
229 		new_map[i].type = PIN_MAP_TYPE_CONFIGS_PIN;
230 		new_map[i].data.configs.group_or_pin = pin_get_name(pctldev, grp->grp.pins[i]);
231 		new_map[i].data.configs.configs = setting[i].configs;
232 		new_map[i].data.configs.num_configs = setting[i].nconfigs;
233 	}
234 	dev_dbg(pctldev->dev, "maps: function %s group %s num %d\n",
235 		(*map)->data.mux.function, (*map)->data.mux.group, map_num);
236 
237 	return 0;
238 }
239 
240 static const struct pinctrl_ops ma35_pctrl_ops = {
241 	.get_groups_count = ma35_get_groups_count,
242 	.get_group_name = ma35_get_group_name,
243 	.get_group_pins = ma35_get_group_pins,
244 	.dt_node_to_map = ma35_pinctrl_dt_node_to_map_func,
245 	.dt_free_map = pinconf_generic_dt_free_map,
246 };
247 
ma35_pinmux_get_func_count(struct pinctrl_dev * pctldev)248 static int ma35_pinmux_get_func_count(struct pinctrl_dev *pctldev)
249 {
250 	struct ma35_pinctrl *npctl = pinctrl_dev_get_drvdata(pctldev);
251 
252 	return npctl->nfunctions;
253 }
254 
ma35_pinmux_get_func_name(struct pinctrl_dev * pctldev,unsigned int selector)255 static const char *ma35_pinmux_get_func_name(struct pinctrl_dev *pctldev,
256 					     unsigned int selector)
257 {
258 	struct ma35_pinctrl *npctl = pinctrl_dev_get_drvdata(pctldev);
259 
260 	return npctl->functions[selector].name;
261 }
262 
ma35_pinmux_get_func_groups(struct pinctrl_dev * pctldev,unsigned int function,const char * const ** groups,unsigned int * const num_groups)263 static int ma35_pinmux_get_func_groups(struct pinctrl_dev *pctldev,
264 				       unsigned int function,
265 				       const char *const **groups,
266 				       unsigned int *const num_groups)
267 {
268 	struct ma35_pinctrl *npctl = pinctrl_dev_get_drvdata(pctldev);
269 
270 	*groups = npctl->functions[function].groups;
271 	*num_groups = npctl->functions[function].ngroups;
272 
273 	return 0;
274 }
275 
ma35_pinmux_set_mux(struct pinctrl_dev * pctldev,unsigned int selector,unsigned int group)276 static int ma35_pinmux_set_mux(struct pinctrl_dev *pctldev, unsigned int selector,
277 			       unsigned int group)
278 {
279 	struct ma35_pinctrl *npctl = pinctrl_dev_get_drvdata(pctldev);
280 	struct group_desc *grp = &npctl->groups[group];
281 	struct ma35_pin_setting *setting = grp->data;
282 	u32 i, regval;
283 
284 	dev_dbg(npctl->dev, "enable function %s group %s\n",
285 		npctl->functions[selector].name, grp->grp.name);
286 
287 	for (i = 0; i < grp->grp.npins; i++) {
288 		regmap_read(npctl->regmap, setting->offset, &regval);
289 		regval &= ~GENMASK(setting->shift + MA35_MFP_BITS_PER_PORT - 1,
290 				   setting->shift);
291 		regval |= setting->muxval << setting->shift;
292 		regmap_write(npctl->regmap, setting->offset, regval);
293 		setting++;
294 	}
295 	return 0;
296 }
297 
298 static const struct pinmux_ops ma35_pmx_ops = {
299 	.get_functions_count = ma35_pinmux_get_func_count,
300 	.get_function_name = ma35_pinmux_get_func_name,
301 	.get_function_groups = ma35_pinmux_get_func_groups,
302 	.set_mux = ma35_pinmux_set_mux,
303 	.strict = true,
304 };
305 
ma35_gpio_set_mode(void __iomem * reg_mode,unsigned int gpio,u32 mode)306 static void ma35_gpio_set_mode(void __iomem *reg_mode, unsigned int gpio, u32 mode)
307 {
308 	u32 regval = readl(reg_mode);
309 
310 	regval &= ~MA35_GP_MODE_MASK(gpio);
311 	regval |= field_prep(MA35_GP_MODE_MASK(gpio), mode);
312 
313 	writel(regval, reg_mode);
314 }
315 
ma35_gpio_get_mode(void __iomem * reg_mode,unsigned int gpio)316 static u32 ma35_gpio_get_mode(void __iomem *reg_mode, unsigned int gpio)
317 {
318 	u32 regval = readl(reg_mode);
319 
320 	return field_get(MA35_GP_MODE_MASK(gpio), regval);
321 }
322 
ma35_gpio_core_direction_in(struct gpio_chip * gc,unsigned int gpio)323 static int ma35_gpio_core_direction_in(struct gpio_chip *gc, unsigned int gpio)
324 {
325 	struct ma35_pin_bank *bank = gpiochip_get_data(gc);
326 	void __iomem *reg_mode = bank->reg_base + MA35_GP_REG_MODE;
327 
328 	guard(raw_spinlock_irqsave)(&ma35_lock);
329 
330 	ma35_gpio_set_mode(reg_mode, gpio, MA35_GP_MODE_INPUT);
331 
332 	return 0;
333 }
334 
ma35_gpio_core_direction_out(struct gpio_chip * gc,unsigned int gpio,int val)335 static int ma35_gpio_core_direction_out(struct gpio_chip *gc, unsigned int gpio, int val)
336 {
337 	struct ma35_pin_bank *bank = gpiochip_get_data(gc);
338 	void __iomem *reg_dout = bank->reg_base + MA35_GP_REG_DOUT;
339 	void __iomem *reg_mode = bank->reg_base + MA35_GP_REG_MODE;
340 	unsigned int regval;
341 
342 	guard(raw_spinlock_irqsave)(&ma35_lock);
343 
344 	regval = readl(reg_dout);
345 	if (val)
346 		regval |= BIT(gpio);
347 	else
348 		regval &= ~BIT(gpio);
349 	writel(regval, reg_dout);
350 
351 	ma35_gpio_set_mode(reg_mode, gpio, MA35_GP_MODE_OUTPUT);
352 
353 	return 0;
354 }
355 
ma35_gpio_core_get(struct gpio_chip * gc,unsigned int gpio)356 static int ma35_gpio_core_get(struct gpio_chip *gc, unsigned int gpio)
357 {
358 	struct ma35_pin_bank *bank = gpiochip_get_data(gc);
359 	void __iomem *reg_pin = bank->reg_base + MA35_GP_REG_PIN;
360 
361 	return !!(readl(reg_pin) & BIT(gpio));
362 }
363 
ma35_gpio_core_set(struct gpio_chip * gc,unsigned int gpio,int val)364 static int ma35_gpio_core_set(struct gpio_chip *gc, unsigned int gpio, int val)
365 {
366 	struct ma35_pin_bank *bank = gpiochip_get_data(gc);
367 	void __iomem *reg_dout = bank->reg_base + MA35_GP_REG_DOUT;
368 	u32 regval;
369 
370 	if (val)
371 		regval = readl(reg_dout) | BIT(gpio);
372 	else
373 		regval = readl(reg_dout) & ~BIT(gpio);
374 
375 	writel(regval, reg_dout);
376 
377 	return 0;
378 }
379 
ma35_gpio_core_to_request(struct gpio_chip * gc,unsigned int gpio)380 static int ma35_gpio_core_to_request(struct gpio_chip *gc, unsigned int gpio)
381 {
382 	struct ma35_pin_bank *bank = gpiochip_get_data(gc);
383 	u32 reg_offs, bit_offs, regval;
384 
385 	if (gpio < 8) {
386 		/* The MFP low register controls port 0 ~ 7 */
387 		reg_offs = bank->bank_num * MA35_MFP_REG_SZ_PER_BANK;
388 		bit_offs = gpio * MA35_MFP_BITS_PER_PORT;
389 	} else {
390 		/* The MFP high register controls port 8 ~ 15 */
391 		reg_offs = bank->bank_num * MA35_MFP_REG_SZ_PER_BANK + 4;
392 		bit_offs = (gpio - 8) * MA35_MFP_BITS_PER_PORT;
393 	}
394 
395 	regmap_read(bank->regmap, MA35_MFP_REG_BASE + reg_offs, &regval);
396 	regval &= ~GENMASK(bit_offs + MA35_MFP_BITS_PER_PORT - 1, bit_offs);
397 	regmap_write(bank->regmap, MA35_MFP_REG_BASE + reg_offs, regval);
398 
399 	return 0;
400 }
401 
ma35_irq_gpio_ack(struct irq_data * d)402 static void ma35_irq_gpio_ack(struct irq_data *d)
403 {
404 	struct ma35_pin_bank *bank = gpiochip_get_data(irq_data_get_irq_chip_data(d));
405 	void __iomem *reg_intsrc = bank->reg_base + MA35_GP_REG_INTSRC;
406 	irq_hw_number_t hwirq = irqd_to_hwirq(d);
407 
408 	writel(BIT(hwirq), reg_intsrc);
409 }
410 
ma35_irq_gpio_mask(struct irq_data * d)411 static void ma35_irq_gpio_mask(struct irq_data *d)
412 {
413 	struct ma35_pin_bank *bank = gpiochip_get_data(irq_data_get_irq_chip_data(d));
414 	void __iomem *reg_ien = bank->reg_base + MA35_GP_REG_INTEN;
415 	irq_hw_number_t hwirq = irqd_to_hwirq(d);
416 	u32 regval;
417 
418 	regval = readl(reg_ien);
419 
420 	regval &= ~MA35_GP_INTEN_BOTH(hwirq);
421 
422 	writel(regval, reg_ien);
423 }
424 
ma35_irq_gpio_unmask(struct irq_data * d)425 static void ma35_irq_gpio_unmask(struct irq_data *d)
426 {
427 	struct ma35_pin_bank *bank = gpiochip_get_data(irq_data_get_irq_chip_data(d));
428 	void __iomem *reg_itype = bank->reg_base + MA35_GP_REG_INTTYPE;
429 	void __iomem *reg_ien = bank->reg_base + MA35_GP_REG_INTEN;
430 	irq_hw_number_t hwirq = irqd_to_hwirq(d);
431 	u32 bval, regval;
432 
433 	bval = bank->irqtype & BIT(hwirq);
434 	regval = readl(reg_itype);
435 	regval &= ~BIT(hwirq);
436 	writel(regval | bval, reg_itype);
437 
438 	bval = bank->irqinten & MA35_GP_INTEN_BOTH(hwirq);
439 	regval = readl(reg_ien);
440 	regval &= ~MA35_GP_INTEN_BOTH(hwirq);
441 	writel(regval | bval, reg_ien);
442 }
443 
ma35_irq_irqtype(struct irq_data * d,unsigned int type)444 static int ma35_irq_irqtype(struct irq_data *d, unsigned int type)
445 {
446 	struct ma35_pin_bank *bank = gpiochip_get_data(irq_data_get_irq_chip_data(d));
447 	irq_hw_number_t hwirq = irqd_to_hwirq(d);
448 
449 	switch (type) {
450 	case IRQ_TYPE_EDGE_BOTH:
451 		irq_set_handler_locked(d, handle_edge_irq);
452 		bank->irqtype &= ~BIT(hwirq);
453 		bank->irqinten |= MA35_GP_INTEN_BOTH(hwirq);
454 		break;
455 	case IRQ_TYPE_EDGE_RISING:
456 	case IRQ_TYPE_LEVEL_HIGH:
457 		irq_set_handler_locked(d, handle_edge_irq);
458 		bank->irqtype &= ~BIT(hwirq);
459 		bank->irqinten |= MA35_GP_INTEN_H(hwirq);
460 		bank->irqinten &= ~MA35_GP_INTEN_L(hwirq);
461 		break;
462 	case IRQ_TYPE_EDGE_FALLING:
463 	case IRQ_TYPE_LEVEL_LOW:
464 		irq_set_handler_locked(d, handle_edge_irq);
465 		bank->irqtype &= ~BIT(hwirq);
466 		bank->irqinten |= MA35_GP_INTEN_L(hwirq);
467 		bank->irqinten &= ~MA35_GP_INTEN_H(hwirq);
468 		break;
469 	default:
470 		return -EINVAL;
471 	}
472 
473 	writel(bank->irqtype, bank->reg_base + MA35_GP_REG_INTTYPE);
474 	writel(bank->irqinten, bank->reg_base + MA35_GP_REG_INTEN);
475 
476 	return 0;
477 }
478 
479 static struct irq_chip ma35_gpio_irqchip = {
480 	.name = "MA35-GPIO-IRQ",
481 	.irq_disable = ma35_irq_gpio_mask,
482 	.irq_enable = ma35_irq_gpio_unmask,
483 	.irq_ack = ma35_irq_gpio_ack,
484 	.irq_mask = ma35_irq_gpio_mask,
485 	.irq_unmask = ma35_irq_gpio_unmask,
486 	.irq_set_type = ma35_irq_irqtype,
487 	.flags = IRQCHIP_MASK_ON_SUSPEND | IRQCHIP_IMMUTABLE,
488 	GPIOCHIP_IRQ_RESOURCE_HELPERS,
489 };
490 
ma35_irq_demux_intgroup(struct irq_desc * desc)491 static void ma35_irq_demux_intgroup(struct irq_desc *desc)
492 {
493 	struct ma35_pin_bank *bank = gpiochip_get_data(irq_desc_get_handler_data(desc));
494 	struct irq_domain *irqdomain = bank->chip.irq.domain;
495 	struct irq_chip *irqchip = irq_desc_get_chip(desc);
496 	unsigned long isr;
497 	int offset;
498 
499 	chained_irq_enter(irqchip, desc);
500 
501 	isr = readl(bank->reg_base + MA35_GP_REG_INTSRC);
502 
503 	for_each_set_bit(offset, &isr, bank->nr_pins)
504 		generic_handle_irq(irq_find_mapping(irqdomain, offset));
505 
506 	chained_irq_exit(irqchip, desc);
507 }
508 
ma35_gpiolib_register(struct platform_device * pdev,struct ma35_pinctrl * npctl)509 static int ma35_gpiolib_register(struct platform_device *pdev, struct ma35_pinctrl *npctl)
510 {
511 	struct ma35_pin_ctrl *ctrl = npctl->ctrl;
512 	struct ma35_pin_bank *bank = ctrl->pin_banks;
513 	int ret;
514 	int i;
515 
516 	for (i = 0; i < ctrl->nr_banks; i++, bank++) {
517 		if (!bank->valid) {
518 			dev_warn(&pdev->dev, "%pfw: bank is not valid\n", bank->fwnode);
519 			continue;
520 		}
521 		bank->irqtype = 0;
522 		bank->irqinten = 0;
523 		bank->chip.label = bank->name;
524 		bank->chip.parent = &pdev->dev;
525 		bank->chip.request = ma35_gpio_core_to_request;
526 		bank->chip.direction_input = ma35_gpio_core_direction_in;
527 		bank->chip.direction_output = ma35_gpio_core_direction_out;
528 		bank->chip.get = ma35_gpio_core_get;
529 		bank->chip.set = ma35_gpio_core_set;
530 		bank->chip.base = -1;
531 		bank->chip.ngpio = bank->nr_pins;
532 		bank->chip.can_sleep = false;
533 
534 		if (bank->irq > 0) {
535 			struct gpio_irq_chip *girq;
536 
537 			girq = &bank->chip.irq;
538 			gpio_irq_chip_set_chip(girq, &ma35_gpio_irqchip);
539 			girq->parent_handler = ma35_irq_demux_intgroup;
540 			girq->num_parents = 1;
541 
542 			girq->parents = devm_kcalloc(&pdev->dev, girq->num_parents,
543 						     sizeof(*girq->parents), GFP_KERNEL);
544 			if (!girq->parents)
545 				return -ENOMEM;
546 
547 			girq->parents[0] = bank->irq;
548 			girq->default_type = IRQ_TYPE_NONE;
549 			girq->handler = handle_bad_irq;
550 		}
551 
552 		ret = devm_gpiochip_add_data(&pdev->dev, &bank->chip, bank);
553 		if (ret) {
554 			dev_err(&pdev->dev, "failed to register gpio_chip %s, error code: %d\n",
555 				bank->chip.label, ret);
556 			return ret;
557 		}
558 	}
559 	return 0;
560 }
561 
ma35_get_bank_data(struct ma35_pin_bank * bank)562 static int ma35_get_bank_data(struct ma35_pin_bank *bank)
563 {
564 	bank->reg_base = fwnode_iomap(bank->fwnode, 0);
565 	if (!bank->reg_base)
566 		return -ENOMEM;
567 
568 	bank->irq = fwnode_irq_get(bank->fwnode, 0);
569 
570 	bank->nr_pins = MA35_GPIO_PORT_MAX;
571 
572 	bank->clk = of_clk_get(to_of_node(bank->fwnode), 0);
573 	if (IS_ERR(bank->clk))
574 		return PTR_ERR(bank->clk);
575 
576 	return clk_prepare_enable(bank->clk);
577 }
578 
ma35_pinctrl_get_soc_data(struct ma35_pinctrl * pctl,struct platform_device * pdev)579 static int ma35_pinctrl_get_soc_data(struct ma35_pinctrl *pctl, struct platform_device *pdev)
580 {
581 	struct fwnode_handle *child;
582 	struct ma35_pin_ctrl *ctrl;
583 	struct ma35_pin_bank *bank;
584 	int i, id = 0;
585 
586 	ctrl = pctl->ctrl;
587 	ctrl->nr_banks = MA35_GPIO_BANK_MAX;
588 
589 	ctrl->pin_banks = devm_kcalloc(&pdev->dev, ctrl->nr_banks,
590 				       sizeof(*ctrl->pin_banks), GFP_KERNEL);
591 	if (!ctrl->pin_banks)
592 		return -ENOMEM;
593 
594 	for (i = 0; i < ctrl->nr_banks; i++) {
595 		ctrl->pin_banks[i].bank_num = i;
596 		ctrl->pin_banks[i].name = gpio_group_name[i];
597 	}
598 
599 	for_each_gpiochip_node(&pdev->dev, child) {
600 		bank = &ctrl->pin_banks[id];
601 		bank->fwnode = child;
602 		bank->regmap = pctl->regmap;
603 		bank->dev = &pdev->dev;
604 		if (!ma35_get_bank_data(bank))
605 			bank->valid = true;
606 		id++;
607 	}
608 	return 0;
609 }
610 
ma35_gpio_cla_port(unsigned int gpio_num,unsigned int * group,unsigned int * num)611 static void ma35_gpio_cla_port(unsigned int gpio_num, unsigned int *group,
612 			       unsigned int *num)
613 {
614 	*group = gpio_num / MA35_GPIO_PORT_MAX;
615 	*num = gpio_num % MA35_GPIO_PORT_MAX;
616 }
617 
ma35_pinconf_set_pull(struct ma35_pinctrl * npctl,unsigned int pin,int pull_up)618 static int ma35_pinconf_set_pull(struct ma35_pinctrl *npctl, unsigned int pin,
619 				 int pull_up)
620 {
621 	unsigned int port, group_num;
622 	void __iomem *base;
623 	u32 regval, pull_sel = MA35_GP_PUSEL_DISABLE;
624 
625 	ma35_gpio_cla_port(pin, &group_num, &port);
626 	base = npctl->ctrl->pin_banks[group_num].reg_base;
627 
628 	regval = readl(base + MA35_GP_REG_PUSEL);
629 	regval &= ~MA35_GP_PUSEL_MASK(port);
630 
631 	switch (pull_up) {
632 	case PIN_CONFIG_BIAS_PULL_UP:
633 		pull_sel = MA35_GP_PUSEL_PULL_UP;
634 		break;
635 
636 	case PIN_CONFIG_BIAS_PULL_DOWN:
637 		pull_sel = MA35_GP_PUSEL_PULL_DOWN;
638 		break;
639 
640 	case PIN_CONFIG_BIAS_DISABLE:
641 		pull_sel = MA35_GP_PUSEL_DISABLE;
642 		break;
643 	}
644 
645 	regval |= field_prep(MA35_GP_PUSEL_MASK(port), pull_sel);
646 	writel(regval, base + MA35_GP_REG_PUSEL);
647 
648 	return 0;
649 }
650 
ma35_pinconf_get_output(struct ma35_pinctrl * npctl,unsigned int pin)651 static int ma35_pinconf_get_output(struct ma35_pinctrl *npctl, unsigned int pin)
652 {
653 	unsigned int port, group_num;
654 	void __iomem *base;
655 	u32 mode;
656 
657 	ma35_gpio_cla_port(pin, &group_num, &port);
658 	base = npctl->ctrl->pin_banks[group_num].reg_base;
659 
660 	mode = ma35_gpio_get_mode(base + MA35_GP_REG_MODE, port);
661 	if (mode == MA35_GP_MODE_OUTPUT)
662 		return 1;
663 
664 	return 0;
665 }
666 
ma35_pinconf_get_pull(struct ma35_pinctrl * npctl,unsigned int pin)667 static int ma35_pinconf_get_pull(struct ma35_pinctrl *npctl, unsigned int pin)
668 {
669 	unsigned int port, group_num;
670 	void __iomem *base;
671 	u32 regval, pull_sel;
672 
673 	ma35_gpio_cla_port(pin, &group_num, &port);
674 	base = npctl->ctrl->pin_banks[group_num].reg_base;
675 
676 	regval = readl(base + MA35_GP_REG_PUSEL);
677 
678 	pull_sel = field_get(MA35_GP_PUSEL_MASK(port), regval);
679 
680 	switch (pull_sel) {
681 	case MA35_GP_PUSEL_PULL_UP:
682 		return PIN_CONFIG_BIAS_PULL_UP;
683 
684 	case MA35_GP_PUSEL_PULL_DOWN:
685 		return PIN_CONFIG_BIAS_PULL_DOWN;
686 
687 	case MA35_GP_PUSEL_DISABLE:
688 		return PIN_CONFIG_BIAS_DISABLE;
689 	}
690 
691 	return PIN_CONFIG_BIAS_DISABLE;
692 }
693 
ma35_pinconf_set_output(struct ma35_pinctrl * npctl,unsigned int pin,bool out)694 static int ma35_pinconf_set_output(struct ma35_pinctrl *npctl, unsigned int pin, bool out)
695 {
696 	unsigned int port, group_num;
697 	void __iomem *base;
698 
699 	ma35_gpio_cla_port(pin, &group_num, &port);
700 	base = npctl->ctrl->pin_banks[group_num].reg_base;
701 
702 	ma35_gpio_set_mode(base + MA35_GP_REG_MODE, port, MA35_GP_MODE_OUTPUT);
703 
704 	return 0;
705 }
706 
ma35_pinconf_get_power_source(struct ma35_pinctrl * npctl,unsigned int pin)707 static int ma35_pinconf_get_power_source(struct ma35_pinctrl *npctl, unsigned int pin)
708 {
709 	unsigned int port, group_num;
710 	void __iomem *base;
711 	u32 regval;
712 
713 	ma35_gpio_cla_port(pin, &group_num, &port);
714 	base = npctl->ctrl->pin_banks[group_num].reg_base;
715 
716 	regval = readl(base + MA35_GP_REG_SPW);
717 
718 	if (regval & BIT(port))
719 		return MVOLT_3300;
720 	else
721 		return MVOLT_1800;
722 }
723 
ma35_pinconf_set_power_source(struct ma35_pinctrl * npctl,unsigned int pin,int arg)724 static int ma35_pinconf_set_power_source(struct ma35_pinctrl *npctl,
725 					 unsigned int pin, int arg)
726 {
727 	unsigned int port, group_num;
728 	void __iomem *base;
729 	u32 regval;
730 
731 	if ((arg != MVOLT_1800) && (arg != MVOLT_3300))
732 		return -EINVAL;
733 
734 	ma35_gpio_cla_port(pin, &group_num, &port);
735 	base = npctl->ctrl->pin_banks[group_num].reg_base;
736 
737 	regval = readl(base + MA35_GP_REG_SPW);
738 
739 	if (arg == MVOLT_1800)
740 		regval &= ~BIT(port);
741 	else
742 		regval |= BIT(port);
743 
744 	writel(regval, base + MA35_GP_REG_SPW);
745 
746 	return 0;
747 }
748 
ma35_pinconf_get_drive_strength(struct ma35_pinctrl * npctl,unsigned int pin,u32 * strength)749 static int ma35_pinconf_get_drive_strength(struct ma35_pinctrl *npctl, unsigned int pin,
750 					   u32 *strength)
751 {
752 	unsigned int port, group_num;
753 	void __iomem *base;
754 	u32 regval, ds_val;
755 
756 	ma35_gpio_cla_port(pin, &group_num, &port);
757 	base = npctl->ctrl->pin_banks[group_num].reg_base;
758 
759 	regval = readl(base + MA35_GP_DS_REG(port));
760 	ds_val = field_get(MA35_GP_DS_MASK(port), regval);
761 
762 	if (ma35_pinconf_get_power_source(npctl, pin) == MVOLT_1800)
763 		*strength = ds_1800mv_tbl[ds_val];
764 	else
765 		*strength = ds_3300mv_tbl[ds_val];
766 
767 	return 0;
768 }
769 
ma35_pinconf_set_drive_strength(struct ma35_pinctrl * npctl,unsigned int pin,int strength)770 static int ma35_pinconf_set_drive_strength(struct ma35_pinctrl *npctl, unsigned int pin,
771 					   int strength)
772 {
773 	unsigned int port, group_num;
774 	void __iomem *base;
775 	int i, ds_val = -1;
776 	u32 regval;
777 
778 	if (ma35_pinconf_get_power_source(npctl, pin) == MVOLT_1800) {
779 		for (i = 0; i < ARRAY_SIZE(ds_1800mv_tbl); i++) {
780 			if (ds_1800mv_tbl[i] == strength) {
781 				ds_val = i;
782 				break;
783 			}
784 		}
785 	} else {
786 		for (i = 0; i < ARRAY_SIZE(ds_3300mv_tbl); i++) {
787 			if (ds_3300mv_tbl[i] == strength) {
788 				ds_val = i;
789 				break;
790 			}
791 		}
792 	}
793 	if (ds_val == -1)
794 		return -EINVAL;
795 
796 	ma35_gpio_cla_port(pin, &group_num, &port);
797 	base = npctl->ctrl->pin_banks[group_num].reg_base;
798 
799 	regval = readl(base + MA35_GP_DS_REG(port));
800 	regval &= ~MA35_GP_DS_MASK(port);
801 	regval |= field_prep(MA35_GP_DS_MASK(port), ds_val);
802 
803 	writel(regval, base + MA35_GP_DS_REG(port));
804 
805 	return 0;
806 }
807 
ma35_pinconf_get_schmitt_enable(struct ma35_pinctrl * npctl,unsigned int pin)808 static int ma35_pinconf_get_schmitt_enable(struct ma35_pinctrl *npctl, unsigned int pin)
809 {
810 	unsigned int port, group_num;
811 	void __iomem *base;
812 	u32 regval;
813 
814 	ma35_gpio_cla_port(pin, &group_num, &port);
815 	base = npctl->ctrl->pin_banks[group_num].reg_base;
816 
817 	regval = readl(base + MA35_GP_REG_SMTEN);
818 
819 	return !!(regval & BIT(port));
820 }
821 
ma35_pinconf_set_schmitt(struct ma35_pinctrl * npctl,unsigned int pin,int enable)822 static int ma35_pinconf_set_schmitt(struct ma35_pinctrl *npctl, unsigned int pin, int enable)
823 {
824 	unsigned int port, group_num;
825 	void __iomem *base;
826 	u32 regval;
827 
828 	ma35_gpio_cla_port(pin, &group_num, &port);
829 	base = npctl->ctrl->pin_banks[group_num].reg_base;
830 
831 	regval = readl(base + MA35_GP_REG_SMTEN);
832 
833 	if (enable)
834 		regval |= BIT(port);
835 	else
836 		regval &= ~BIT(port);
837 
838 	writel(regval, base + MA35_GP_REG_SMTEN);
839 
840 	return 0;
841 }
842 
ma35_pinconf_get_slew_rate(struct ma35_pinctrl * npctl,unsigned int pin)843 static int ma35_pinconf_get_slew_rate(struct ma35_pinctrl *npctl, unsigned int pin)
844 {
845 	unsigned int port, group_num;
846 	void __iomem *base;
847 	u32 regval;
848 
849 	ma35_gpio_cla_port(pin, &group_num, &port);
850 	base = npctl->ctrl->pin_banks[group_num].reg_base;
851 
852 	regval = readl(base + MA35_GP_REG_SLEWCTL);
853 
854 	return field_get(MA35_GP_SLEWCTL_MASK(port), regval);
855 }
856 
ma35_pinconf_set_slew_rate(struct ma35_pinctrl * npctl,unsigned int pin,int rate)857 static int ma35_pinconf_set_slew_rate(struct ma35_pinctrl *npctl, unsigned int pin, int rate)
858 {
859 	unsigned int port, group_num;
860 	void __iomem *base;
861 	u32 regval;
862 
863 	ma35_gpio_cla_port(pin, &group_num, &port);
864 	base = npctl->ctrl->pin_banks[group_num].reg_base;
865 
866 	regval = readl(base + MA35_GP_REG_SLEWCTL);
867 	regval &= ~MA35_GP_SLEWCTL_MASK(port);
868 	regval |= field_prep(MA35_GP_SLEWCTL_MASK(port), rate);
869 
870 	writel(regval, base + MA35_GP_REG_SLEWCTL);
871 
872 	return 0;
873 }
874 
ma35_pinconf_get(struct pinctrl_dev * pctldev,unsigned int pin,unsigned long * config)875 static int ma35_pinconf_get(struct pinctrl_dev *pctldev, unsigned int pin, unsigned long *config)
876 {
877 	struct ma35_pinctrl *npctl = pinctrl_dev_get_drvdata(pctldev);
878 	enum pin_config_param param = pinconf_to_config_param(*config);
879 	u32 arg;
880 	int ret;
881 
882 	switch (param) {
883 	case PIN_CONFIG_BIAS_DISABLE:
884 	case PIN_CONFIG_BIAS_PULL_DOWN:
885 	case PIN_CONFIG_BIAS_PULL_UP:
886 		if (ma35_pinconf_get_pull(npctl, pin) != param)
887 			return -EINVAL;
888 		arg = 1;
889 		break;
890 
891 	case PIN_CONFIG_DRIVE_STRENGTH:
892 		ret = ma35_pinconf_get_drive_strength(npctl, pin, &arg);
893 		if (ret)
894 			return ret;
895 		break;
896 
897 	case PIN_CONFIG_INPUT_SCHMITT_ENABLE:
898 		arg = ma35_pinconf_get_schmitt_enable(npctl, pin);
899 		break;
900 
901 	case PIN_CONFIG_SLEW_RATE:
902 		arg = ma35_pinconf_get_slew_rate(npctl, pin);
903 		break;
904 
905 	case PIN_CONFIG_OUTPUT_ENABLE:
906 		arg = ma35_pinconf_get_output(npctl, pin);
907 		break;
908 
909 	case PIN_CONFIG_POWER_SOURCE:
910 		arg = ma35_pinconf_get_power_source(npctl, pin);
911 		break;
912 
913 	default:
914 		return -EINVAL;
915 	}
916 	*config = pinconf_to_config_packed(param, arg);
917 
918 	return 0;
919 }
920 
ma35_pinconf_set(struct pinctrl_dev * pctldev,unsigned int pin,unsigned long * configs,unsigned int num_configs)921 static int ma35_pinconf_set(struct pinctrl_dev *pctldev, unsigned int pin,
922 			    unsigned long *configs, unsigned int num_configs)
923 {
924 	struct ma35_pinctrl *npctl = pinctrl_dev_get_drvdata(pctldev);
925 	enum pin_config_param param;
926 	unsigned int arg = 0;
927 	int i, ret = 0;
928 
929 	for (i = 0; i < num_configs; i++) {
930 		param = pinconf_to_config_param(configs[i]);
931 		arg = pinconf_to_config_argument(configs[i]);
932 
933 		switch (param) {
934 		case PIN_CONFIG_BIAS_DISABLE:
935 		case PIN_CONFIG_BIAS_PULL_UP:
936 		case PIN_CONFIG_BIAS_PULL_DOWN:
937 			ret = ma35_pinconf_set_pull(npctl, pin, param);
938 			break;
939 
940 		case PIN_CONFIG_DRIVE_STRENGTH:
941 			ret = ma35_pinconf_set_drive_strength(npctl, pin, arg);
942 			break;
943 
944 		case PIN_CONFIG_INPUT_SCHMITT_ENABLE:
945 			ret = ma35_pinconf_set_schmitt(npctl, pin, 1);
946 			break;
947 
948 		case PIN_CONFIG_INPUT_SCHMITT:
949 			ret = ma35_pinconf_set_schmitt(npctl, pin, arg);
950 			break;
951 
952 		case PIN_CONFIG_SLEW_RATE:
953 			ret = ma35_pinconf_set_slew_rate(npctl, pin, arg);
954 			break;
955 
956 		case PIN_CONFIG_OUTPUT_ENABLE:
957 			ret = ma35_pinconf_set_output(npctl, pin, arg);
958 			break;
959 
960 		case PIN_CONFIG_POWER_SOURCE:
961 			ret = ma35_pinconf_set_power_source(npctl, pin, arg);
962 			break;
963 
964 		default:
965 			return -EINVAL;
966 		}
967 
968 		if (ret)
969 			break;
970 	}
971 	return ret;
972 }
973 
974 static const struct pinconf_ops ma35_pinconf_ops = {
975 	.pin_config_get = ma35_pinconf_get,
976 	.pin_config_set = ma35_pinconf_set,
977 	.is_generic = true,
978 };
979 
ma35_pinctrl_parse_groups(struct fwnode_handle * fwnode,struct group_desc * grp,struct ma35_pinctrl * npctl,u32 index)980 static int ma35_pinctrl_parse_groups(struct fwnode_handle *fwnode, struct group_desc *grp,
981 				     struct ma35_pinctrl *npctl, u32 index)
982 {
983 	struct device_node *np = to_of_node(fwnode);
984 	struct ma35_pin_setting *pin;
985 	unsigned long *configs;
986 	unsigned int nconfigs;
987 	unsigned int *pins;
988 	int i, j, count, ret;
989 	u32 *elems;
990 
991 	ret = pinconf_generic_parse_dt_config(np, NULL, &configs, &nconfigs);
992 	if (ret)
993 		return ret;
994 
995 	count = fwnode_property_count_u32(fwnode, "nuvoton,pins");
996 	if (!count || count % 3)
997 		return -EINVAL;
998 
999 	elems = devm_kmalloc_array(npctl->dev, count, sizeof(u32), GFP_KERNEL);
1000 	if (!elems)
1001 		return -ENOMEM;
1002 
1003 	grp->grp.name = np->name;
1004 
1005 	ret = fwnode_property_read_u32_array(fwnode, "nuvoton,pins", elems, count);
1006 	if (ret)
1007 		return -EINVAL;
1008 	grp->grp.npins = count / 3;
1009 
1010 	pins = devm_kcalloc(npctl->dev, grp->grp.npins, sizeof(*pins), GFP_KERNEL);
1011 	if (!pins)
1012 		return -ENOMEM;
1013 	grp->grp.pins = pins;
1014 
1015 	pin = devm_kcalloc(npctl->dev, grp->grp.npins, sizeof(*pin), GFP_KERNEL);
1016 	if (!pin)
1017 		return -ENOMEM;
1018 	grp->data = pin;
1019 
1020 	for (i = 0, j = 0; i < count; i += 3, j++) {
1021 		pin->offset = elems[i] * MA35_MFP_REG_SZ_PER_BANK + MA35_MFP_REG_BASE;
1022 		pin->shift = (elems[i + 1] * MA35_MFP_BITS_PER_PORT) % 32;
1023 		pin->muxval = elems[i + 2];
1024 		pin->configs = configs;
1025 		pin->nconfigs = nconfigs;
1026 		pins[j] = npctl->info->get_pin_num(pin->offset, pin->shift);
1027 		pin++;
1028 	}
1029 	return 0;
1030 }
1031 
ma35_pinctrl_parse_functions(struct fwnode_handle * fwnode,struct ma35_pinctrl * npctl,u32 index)1032 static int ma35_pinctrl_parse_functions(struct fwnode_handle *fwnode, struct ma35_pinctrl *npctl,
1033 					u32 index)
1034 {
1035 	struct device_node *np = to_of_node(fwnode);
1036 	struct fwnode_handle *child;
1037 	struct pinfunction *func;
1038 	struct group_desc *grp;
1039 	static u32 grp_index;
1040 	const char **groups;
1041 	u32 ret, i = 0;
1042 
1043 	dev_dbg(npctl->dev, "parse function(%d): %s\n", index, np->name);
1044 
1045 	func = &npctl->functions[index];
1046 	func->name = np->name;
1047 	func->ngroups = of_get_child_count(np);
1048 
1049 	if (func->ngroups <= 0)
1050 		return 0;
1051 
1052 	groups = devm_kcalloc(npctl->dev, func->ngroups, sizeof(*groups), GFP_KERNEL);
1053 	if (!groups)
1054 		return -ENOMEM;
1055 
1056 	fwnode_for_each_child_node(fwnode, child) {
1057 		struct device_node *node = to_of_node(child);
1058 
1059 		groups[i] = node->name;
1060 		grp = &npctl->groups[grp_index++];
1061 		ret = ma35_pinctrl_parse_groups(child, grp, npctl, i++);
1062 		if (ret) {
1063 			fwnode_handle_put(child);
1064 			return ret;
1065 		}
1066 	}
1067 
1068 	func->groups = groups;
1069 	return 0;
1070 }
1071 
ma35_pinctrl_probe_dt(struct platform_device * pdev,struct ma35_pinctrl * npctl)1072 static int ma35_pinctrl_probe_dt(struct platform_device *pdev, struct ma35_pinctrl *npctl)
1073 {
1074 	struct device *dev = &pdev->dev;
1075 	struct fwnode_handle *child;
1076 	u32 idx = 0;
1077 	int ret;
1078 
1079 	device_for_each_child_node(dev, child) {
1080 		if (fwnode_property_present(child, "gpio-controller"))
1081 			continue;
1082 
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(dev, child) {
1101 		if (fwnode_property_present(child, "gpio-controller"))
1102 			continue;
1103 
1104 		ret = ma35_pinctrl_parse_functions(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(dev_of_node(dev), "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