Merge tag 'trace-printf-v6.13' of git://git.kernel.org/pub/scm/linux/kernel/git/trace...
[drm/drm-misc.git] / drivers / pinctrl / nuvoton / pinctrl-ma35.c
blob59c4e7c6cddea1277ebb75f02172e60e18e03e1e
1 // SPDX-License-Identifier: GPL-2.0
2 /*
3 * Copyright (C) 2024 Nuvoton Technology Corp.
5 * Author: Shan-Chun Hung <schung@nuvoton.com>
6 * * Jacky Huang <ychuang3@nuvoton.com>
7 */
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>
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"
26 #define MA35_MFP_REG_BASE 0x80
27 #define MA35_MFP_REG_SZ_PER_BANK 8
28 #define MA35_MFP_BITS_PER_PORT 4
30 #define MA35_GPIO_BANK_MAX 14
31 #define MA35_GPIO_PORT_MAX 16
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
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)
57 #define MA35_GP_SLEWCTL_MASK(n) GENMASK(n * 2 + 1, n * 2)
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)
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.
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))
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.
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)
81 #define MVOLT_1800 0
82 #define MVOLT_3300 1
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))
88 static const char * const gpio_group_name[] = {
89 "gpioa", "gpiob", "gpioc", "gpiod", "gpioe", "gpiof", "gpiog",
90 "gpioh", "gpioi", "gpioj", "gpiok", "gpiol", "gpiom", "gpion",
93 static const u32 ds_1800mv_tbl[] = {
94 2900, 4400, 5800, 7300, 8600, 10100, 11500, 13000,
97 static const u32 ds_3300mv_tbl[] = {
98 17100, 25600, 34100, 42800, 48000, 56000, 77000, 82000,
101 struct ma35_pin_func {
102 const char *name;
103 const char **groups;
104 u32 ngroups;
107 struct ma35_pin_setting {
108 u32 offset;
109 u32 shift;
110 u32 muxval;
111 unsigned long *configs;
112 unsigned int nconfigs;
115 struct ma35_pin_group {
116 const char *name;
117 unsigned int npins;
118 unsigned int *pins;
119 struct ma35_pin_setting *settings;
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;
138 struct ma35_pin_ctrl {
139 struct ma35_pin_bank *pin_banks;
140 u32 nr_banks;
141 u32 nr_pins;
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;
156 static DEFINE_RAW_SPINLOCK(ma35_lock);
158 static int ma35_get_groups_count(struct pinctrl_dev *pctldev)
160 struct ma35_pinctrl *npctl = pinctrl_dev_get_drvdata(pctldev);
162 return npctl->ngroups;
165 static const char *ma35_get_group_name(struct pinctrl_dev *pctldev, unsigned int selector)
167 struct ma35_pinctrl *npctl = pinctrl_dev_get_drvdata(pctldev);
169 return npctl->groups[selector].name;
172 static int ma35_get_group_pins(struct pinctrl_dev *pctldev, unsigned int selector,
173 const unsigned int **pins, unsigned int *npins)
175 struct ma35_pinctrl *npctl = pinctrl_dev_get_drvdata(pctldev);
177 if (selector >= npctl->ngroups)
178 return -EINVAL;
180 *pins = npctl->groups[selector].pins;
181 *npins = npctl->groups[selector].npins;
183 return 0;
186 static struct ma35_pin_group *ma35_pinctrl_find_group_by_name(
187 const struct ma35_pinctrl *npctl, const char *name)
189 int i;
191 for (i = 0; i < npctl->ngroups; i++) {
192 if (!strcmp(npctl->groups[i].name, name))
193 return &npctl->groups[i];
195 return NULL;
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)
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;
211 * first find the group of this node and check if we need create
212 * config maps for pins
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;
220 map_num += grp->npins;
221 new_map = kcalloc(map_num, sizeof(*new_map), GFP_KERNEL);
222 if (!new_map)
223 return -ENOMEM;
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;
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);
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;
244 dev_dbg(pctldev->dev, "maps: function %s group %s num %d\n",
245 (*map)->data.mux.function, (*map)->data.mux.group, map_num);
247 return 0;
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,
258 static int ma35_pinmux_get_func_count(struct pinctrl_dev *pctldev)
260 struct ma35_pinctrl *npctl = pinctrl_dev_get_drvdata(pctldev);
262 return npctl->nfunctions;
265 static const char *ma35_pinmux_get_func_name(struct pinctrl_dev *pctldev,
266 unsigned int selector)
268 struct ma35_pinctrl *npctl = pinctrl_dev_get_drvdata(pctldev);
270 return npctl->functions[selector].name;
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)
278 struct ma35_pinctrl *npctl = pinctrl_dev_get_drvdata(pctldev);
280 *groups = npctl->functions[function].groups;
281 *num_groups = npctl->functions[function].ngroups;
283 return 0;
286 static int ma35_pinmux_set_mux(struct pinctrl_dev *pctldev, unsigned int selector,
287 unsigned int group)
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;
294 dev_dbg(npctl->dev, "enable function %s group %s\n",
295 npctl->functions[selector].name, npctl->groups[group].name);
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++;
305 return 0;
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,
316 static void ma35_gpio_set_mode(void __iomem *reg_mode, unsigned int gpio, u32 mode)
318 u32 regval = readl(reg_mode);
320 regval &= ~MA35_GP_MODE_MASK(gpio);
321 regval |= field_prep(MA35_GP_MODE_MASK(gpio), mode);
323 writel(regval, reg_mode);
326 static u32 ma35_gpio_get_mode(void __iomem *reg_mode, unsigned int gpio)
328 u32 regval = readl(reg_mode);
330 return field_get(MA35_GP_MODE_MASK(gpio), regval);
333 static int ma35_gpio_core_direction_in(struct gpio_chip *gc, unsigned int gpio)
335 struct ma35_pin_bank *bank = gpiochip_get_data(gc);
336 void __iomem *reg_mode = bank->reg_base + MA35_GP_REG_MODE;
338 guard(raw_spinlock_irqsave)(&ma35_lock);
340 ma35_gpio_set_mode(reg_mode, gpio, MA35_GP_MODE_INPUT);
342 return 0;
345 static int ma35_gpio_core_direction_out(struct gpio_chip *gc, unsigned int gpio, int val)
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;
352 guard(raw_spinlock_irqsave)(&ma35_lock);
354 regval = readl(reg_dout);
355 if (val)
356 regval |= BIT(gpio);
357 else
358 regval &= ~BIT(gpio);
359 writel(regval, reg_dout);
361 ma35_gpio_set_mode(reg_mode, gpio, MA35_GP_MODE_OUTPUT);
363 return 0;
366 static int ma35_gpio_core_get(struct gpio_chip *gc, unsigned int gpio)
368 struct ma35_pin_bank *bank = gpiochip_get_data(gc);
369 void __iomem *reg_pin = bank->reg_base + MA35_GP_REG_PIN;
371 return !!(readl(reg_pin) & BIT(gpio));
374 static void ma35_gpio_core_set(struct gpio_chip *gc, unsigned int gpio, int val)
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;
380 if (val)
381 regval = readl(reg_dout) | BIT(gpio);
382 else
383 regval = readl(reg_dout) & ~BIT(gpio);
385 writel(regval, reg_dout);
388 static int ma35_gpio_core_to_request(struct gpio_chip *gc, unsigned int gpio)
390 struct ma35_pin_bank *bank = gpiochip_get_data(gc);
391 u32 reg_offs, bit_offs, regval;
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;
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);
407 return 0;
410 static void ma35_irq_gpio_ack(struct irq_data *d)
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);
416 writel(BIT(hwirq), reg_intsrc);
419 static void ma35_irq_gpio_mask(struct irq_data *d)
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;
426 regval = readl(reg_ien);
428 regval &= ~MA35_GP_INTEN_BOTH(hwirq);
430 writel(regval, reg_ien);
433 static void ma35_irq_gpio_unmask(struct irq_data *d)
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;
441 bval = bank->irqtype & BIT(hwirq);
442 regval = readl(reg_itype);
443 regval &= ~BIT(hwirq);
444 writel(regval | bval, reg_itype);
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);
452 static int ma35_irq_irqtype(struct irq_data *d, unsigned int type)
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);
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;
481 writel(bank->irqtype, bank->reg_base + MA35_GP_REG_INTTYPE);
482 writel(bank->irqinten, bank->reg_base + MA35_GP_REG_INTEN);
484 return 0;
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,
499 static void ma35_irq_demux_intgroup(struct irq_desc *desc)
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;
507 chained_irq_enter(irqchip, desc);
509 isr = readl(bank->reg_base + MA35_GP_REG_INTSRC);
511 for_each_set_bit(offset, &isr, bank->nr_pins)
512 generic_handle_irq(irq_find_mapping(irqdomain, offset));
514 chained_irq_exit(irqchip, desc);
517 static int ma35_gpiolib_register(struct platform_device *pdev, struct ma35_pinctrl *npctl)
519 struct ma35_pin_ctrl *ctrl = npctl->ctrl;
520 struct ma35_pin_bank *bank = ctrl->pin_banks;
521 int ret;
522 int i;
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;
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;
543 if (bank->irq > 0) {
544 struct gpio_irq_chip *girq;
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;
551 girq->parents = devm_kcalloc(&pdev->dev, girq->num_parents,
552 sizeof(*girq->parents), GFP_KERNEL);
553 if (!girq->parents)
554 return -ENOMEM;
556 girq->parents[0] = bank->irq;
557 girq->default_type = IRQ_TYPE_NONE;
558 girq->handler = handle_bad_irq;
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;
568 return 0;
571 static int ma35_get_bank_data(struct ma35_pin_bank *bank)
573 bank->reg_base = fwnode_iomap(bank->fwnode, 0);
574 if (!bank->reg_base)
575 return -ENOMEM;
577 bank->irq = fwnode_irq_get(bank->fwnode, 0);
579 bank->nr_pins = MA35_GPIO_PORT_MAX;
581 bank->clk = of_clk_get(to_of_node(bank->fwnode), 0);
582 if (IS_ERR(bank->clk))
583 return PTR_ERR(bank->clk);
585 return clk_prepare_enable(bank->clk);
588 static int ma35_pinctrl_get_soc_data(struct ma35_pinctrl *pctl, struct platform_device *pdev)
590 struct fwnode_handle *child;
591 struct ma35_pin_ctrl *ctrl;
592 struct ma35_pin_bank *bank;
593 int i, id = 0;
595 ctrl = pctl->ctrl;
596 ctrl->nr_banks = MA35_GPIO_BANK_MAX;
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;
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];
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++;
617 return 0;
620 static void ma35_gpio_cla_port(unsigned int gpio_num, unsigned int *group,
621 unsigned int *num)
623 *group = gpio_num / MA35_GPIO_PORT_MAX;
624 *num = gpio_num % MA35_GPIO_PORT_MAX;
627 static int ma35_pinconf_set_pull(struct ma35_pinctrl *npctl, unsigned int pin,
628 int pull_up)
630 unsigned int port, group_num;
631 void __iomem *base;
632 u32 regval, pull_sel = MA35_GP_PUSEL_DISABLE;
634 ma35_gpio_cla_port(pin, &group_num, &port);
635 base = npctl->ctrl->pin_banks[group_num].reg_base;
637 regval = readl(base + MA35_GP_REG_PUSEL);
638 regval &= ~MA35_GP_PUSEL_MASK(port);
640 switch (pull_up) {
641 case PIN_CONFIG_BIAS_PULL_UP:
642 pull_sel = MA35_GP_PUSEL_PULL_UP;
643 break;
645 case PIN_CONFIG_BIAS_PULL_DOWN:
646 pull_sel = MA35_GP_PUSEL_PULL_DOWN;
647 break;
649 case PIN_CONFIG_BIAS_DISABLE:
650 pull_sel = MA35_GP_PUSEL_DISABLE;
651 break;
654 regval |= field_prep(MA35_GP_PUSEL_MASK(port), pull_sel);
655 writel(regval, base + MA35_GP_REG_PUSEL);
657 return 0;
660 static int ma35_pinconf_get_output(struct ma35_pinctrl *npctl, unsigned int pin)
662 unsigned int port, group_num;
663 void __iomem *base;
664 u32 mode;
666 ma35_gpio_cla_port(pin, &group_num, &port);
667 base = npctl->ctrl->pin_banks[group_num].reg_base;
669 mode = ma35_gpio_get_mode(base + MA35_GP_REG_MODE, port);
670 if (mode == MA35_GP_MODE_OUTPUT)
671 return 1;
673 return 0;
676 static int ma35_pinconf_get_pull(struct ma35_pinctrl *npctl, unsigned int pin)
678 unsigned int port, group_num;
679 void __iomem *base;
680 u32 regval, pull_sel;
682 ma35_gpio_cla_port(pin, &group_num, &port);
683 base = npctl->ctrl->pin_banks[group_num].reg_base;
685 regval = readl(base + MA35_GP_REG_PUSEL);
687 pull_sel = field_get(MA35_GP_PUSEL_MASK(port), regval);
689 switch (pull_sel) {
690 case MA35_GP_PUSEL_PULL_UP:
691 return PIN_CONFIG_BIAS_PULL_UP;
693 case MA35_GP_PUSEL_PULL_DOWN:
694 return PIN_CONFIG_BIAS_PULL_DOWN;
696 case MA35_GP_PUSEL_DISABLE:
697 return PIN_CONFIG_BIAS_DISABLE;
700 return PIN_CONFIG_BIAS_DISABLE;
703 static int ma35_pinconf_set_output(struct ma35_pinctrl *npctl, unsigned int pin, bool out)
705 unsigned int port, group_num;
706 void __iomem *base;
708 ma35_gpio_cla_port(pin, &group_num, &port);
709 base = npctl->ctrl->pin_banks[group_num].reg_base;
711 ma35_gpio_set_mode(base + MA35_GP_REG_MODE, port, MA35_GP_MODE_OUTPUT);
713 return 0;
716 static int ma35_pinconf_get_power_source(struct ma35_pinctrl *npctl, unsigned int pin)
718 unsigned int port, group_num;
719 void __iomem *base;
720 u32 regval;
722 ma35_gpio_cla_port(pin, &group_num, &port);
723 base = npctl->ctrl->pin_banks[group_num].reg_base;
725 regval = readl(base + MA35_GP_REG_SPW);
727 if (regval & BIT(port))
728 return MVOLT_3300;
729 else
730 return MVOLT_1800;
733 static int ma35_pinconf_set_power_source(struct ma35_pinctrl *npctl,
734 unsigned int pin, int arg)
736 unsigned int port, group_num;
737 void __iomem *base;
738 u32 regval;
740 if ((arg != MVOLT_1800) && (arg != MVOLT_3300))
741 return -EINVAL;
743 ma35_gpio_cla_port(pin, &group_num, &port);
744 base = npctl->ctrl->pin_banks[group_num].reg_base;
746 regval = readl(base + MA35_GP_REG_SPW);
748 if (arg == MVOLT_1800)
749 regval &= ~BIT(port);
750 else
751 regval |= BIT(port);
753 writel(regval, base + MA35_GP_REG_SPW);
755 return 0;
758 static int ma35_pinconf_get_drive_strength(struct ma35_pinctrl *npctl, unsigned int pin,
759 u32 *strength)
761 unsigned int port, group_num;
762 void __iomem *base;
763 u32 regval, ds_val;
765 ma35_gpio_cla_port(pin, &group_num, &port);
766 base = npctl->ctrl->pin_banks[group_num].reg_base;
768 regval = readl(base + MA35_GP_DS_REG(port));
769 ds_val = field_get(MA35_GP_DS_MASK(port), regval);
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];
776 return 0;
779 static int ma35_pinconf_set_drive_strength(struct ma35_pinctrl *npctl, unsigned int pin,
780 int strength)
782 unsigned int port, group_num;
783 void __iomem *base;
784 int i, ds_val = -1;
785 u32 regval;
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;
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;
802 if (ds_val == -1)
803 return -EINVAL;
805 ma35_gpio_cla_port(pin, &group_num, &port);
806 base = npctl->ctrl->pin_banks[group_num].reg_base;
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);
812 writel(regval, base + MA35_GP_DS_REG(port));
814 return 0;
817 static int ma35_pinconf_get_schmitt_enable(struct ma35_pinctrl *npctl, unsigned int pin)
819 unsigned int port, group_num;
820 void __iomem *base;
821 u32 regval;
823 ma35_gpio_cla_port(pin, &group_num, &port);
824 base = npctl->ctrl->pin_banks[group_num].reg_base;
826 regval = readl(base + MA35_GP_REG_SMTEN);
828 return !!(regval & BIT(port));
831 static int ma35_pinconf_set_schmitt(struct ma35_pinctrl *npctl, unsigned int pin, int enable)
833 unsigned int port, group_num;
834 void __iomem *base;
835 u32 regval;
837 ma35_gpio_cla_port(pin, &group_num, &port);
838 base = npctl->ctrl->pin_banks[group_num].reg_base;
840 regval = readl(base + MA35_GP_REG_SMTEN);
842 if (enable)
843 regval |= BIT(port);
844 else
845 regval &= ~BIT(port);
847 writel(regval, base + MA35_GP_REG_SMTEN);
849 return 0;
852 static int ma35_pinconf_get_slew_rate(struct ma35_pinctrl *npctl, unsigned int pin)
854 unsigned int port, group_num;
855 void __iomem *base;
856 u32 regval;
858 ma35_gpio_cla_port(pin, &group_num, &port);
859 base = npctl->ctrl->pin_banks[group_num].reg_base;
861 regval = readl(base + MA35_GP_REG_SLEWCTL);
863 return field_get(MA35_GP_SLEWCTL_MASK(port), regval);
866 static int ma35_pinconf_set_slew_rate(struct ma35_pinctrl *npctl, unsigned int pin, int rate)
868 unsigned int port, group_num;
869 void __iomem *base;
870 u32 regval;
872 ma35_gpio_cla_port(pin, &group_num, &port);
873 base = npctl->ctrl->pin_banks[group_num].reg_base;
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);
879 writel(regval, base + MA35_GP_REG_SLEWCTL);
881 return 0;
884 static int ma35_pinconf_get(struct pinctrl_dev *pctldev, unsigned int pin, unsigned long *config)
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;
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;
900 case PIN_CONFIG_DRIVE_STRENGTH:
901 ret = ma35_pinconf_get_drive_strength(npctl, pin, &arg);
902 if (ret)
903 return ret;
904 break;
906 case PIN_CONFIG_INPUT_SCHMITT_ENABLE:
907 arg = ma35_pinconf_get_schmitt_enable(npctl, pin);
908 break;
910 case PIN_CONFIG_SLEW_RATE:
911 arg = ma35_pinconf_get_slew_rate(npctl, pin);
912 break;
914 case PIN_CONFIG_OUTPUT_ENABLE:
915 arg = ma35_pinconf_get_output(npctl, pin);
916 break;
918 case PIN_CONFIG_POWER_SOURCE:
919 arg = ma35_pinconf_get_power_source(npctl, pin);
920 break;
922 default:
923 return -EINVAL;
925 *config = pinconf_to_config_packed(param, arg);
927 return 0;
930 static int ma35_pinconf_set(struct pinctrl_dev *pctldev, unsigned int pin,
931 unsigned long *configs, unsigned int num_configs)
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;
938 for (i = 0; i < num_configs; i++) {
939 param = pinconf_to_config_param(configs[i]);
940 arg = pinconf_to_config_argument(configs[i]);
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;
949 case PIN_CONFIG_DRIVE_STRENGTH:
950 ret = ma35_pinconf_set_drive_strength(npctl, pin, arg);
951 break;
953 case PIN_CONFIG_INPUT_SCHMITT_ENABLE:
954 ret = ma35_pinconf_set_schmitt(npctl, pin, 1);
955 break;
957 case PIN_CONFIG_INPUT_SCHMITT:
958 ret = ma35_pinconf_set_schmitt(npctl, pin, arg);
959 break;
961 case PIN_CONFIG_SLEW_RATE:
962 ret = ma35_pinconf_set_slew_rate(npctl, pin, arg);
963 break;
965 case PIN_CONFIG_OUTPUT_ENABLE:
966 ret = ma35_pinconf_set_output(npctl, pin, arg);
967 break;
969 case PIN_CONFIG_POWER_SOURCE:
970 ret = ma35_pinconf_set_power_source(npctl, pin, arg);
971 break;
973 default:
974 return -EINVAL;
977 if (ret)
978 break;
980 return ret;
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,
989 static int ma35_pinctrl_parse_groups(struct device_node *np, struct ma35_pin_group *grp,
990 struct ma35_pinctrl *npctl, u32 index)
992 struct ma35_pin_setting *pin;
993 unsigned long *configs;
994 unsigned int nconfigs;
995 int i, j, count, ret;
996 u32 *elems;
998 grp->name = np->name;
1000 ret = pinconf_generic_parse_dt_config(np, NULL, &configs, &nconfigs);
1001 if (ret)
1002 return ret;
1004 count = of_property_count_elems_of_size(np, "nuvoton,pins", sizeof(u32));
1005 if (!count || count % 3)
1006 return -EINVAL;
1008 elems = devm_kmalloc_array(npctl->dev, count, sizeof(u32), GFP_KERNEL);
1009 if (!elems)
1010 return -ENOMEM;
1012 ret = of_property_read_u32_array(np, "nuvoton,pins", elems, count);
1013 if (ret)
1014 return -EINVAL;
1016 grp->npins = count / 3;
1018 grp->pins = devm_kcalloc(npctl->dev, grp->npins, sizeof(*grp->pins), GFP_KERNEL);
1019 if (!grp->pins)
1020 return -ENOMEM;
1022 grp->settings = devm_kcalloc(npctl->dev, grp->npins, sizeof(*grp->settings), GFP_KERNEL);
1023 if (!grp->settings)
1024 return -ENOMEM;
1026 pin = grp->settings;
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++;
1037 return 0;
1040 static int ma35_pinctrl_parse_functions(struct device_node *np, struct ma35_pinctrl *npctl,
1041 u32 index)
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;
1049 dev_dbg(npctl->dev, "parse function(%d): %s\n", index, np->name);
1051 func = &npctl->functions[index];
1052 func->name = np->name;
1053 func->ngroups = of_get_child_count(np);
1055 if (func->ngroups <= 0)
1056 return 0;
1058 func->groups = devm_kcalloc(npctl->dev, func->ngroups, sizeof(char *), GFP_KERNEL);
1059 if (!func->groups)
1060 return -ENOMEM;
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;
1071 return 0;
1074 static int ma35_pinctrl_probe_dt(struct platform_device *pdev, struct ma35_pinctrl *npctl)
1076 struct fwnode_handle *child;
1077 u32 idx = 0;
1078 int ret;
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));
1087 if (!npctl->nfunctions)
1088 return -EINVAL;
1090 npctl->functions = devm_kcalloc(&pdev->dev, npctl->nfunctions,
1091 sizeof(*npctl->functions), GFP_KERNEL);
1092 if (!npctl->functions)
1093 return -ENOMEM;
1095 npctl->groups = devm_kcalloc(&pdev->dev, npctl->ngroups,
1096 sizeof(*npctl->groups), GFP_KERNEL);
1097 if (!npctl->groups)
1098 return -ENOMEM;
1100 device_for_each_child_node(&pdev->dev, child) {
1101 if (fwnode_property_present(child, "gpio-controller"))
1102 continue;
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;
1111 return 0;
1114 int ma35_pinctrl_probe(struct platform_device *pdev, const struct ma35_pinctrl_soc_info *info)
1116 struct pinctrl_desc *ma35_pinctrl_desc;
1117 struct device *dev = &pdev->dev;
1118 struct ma35_pinctrl *npctl;
1119 int ret;
1121 if (!info || !info->pins || !info->npins) {
1122 dev_err(&pdev->dev, "wrong pinctrl info\n");
1123 return -EINVAL;
1126 npctl = devm_kzalloc(&pdev->dev, sizeof(*npctl), GFP_KERNEL);
1127 if (!npctl)
1128 return -ENOMEM;
1130 ma35_pinctrl_desc = devm_kzalloc(&pdev->dev, sizeof(*ma35_pinctrl_desc), GFP_KERNEL);
1131 if (!ma35_pinctrl_desc)
1132 return -ENOMEM;
1134 npctl->ctrl = devm_kzalloc(&pdev->dev, sizeof(*npctl->ctrl), GFP_KERNEL);
1135 if (!npctl->ctrl)
1136 return -ENOMEM;
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;
1146 npctl->info = info;
1147 npctl->dev = &pdev->dev;
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");
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");
1158 platform_set_drvdata(pdev, npctl);
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");
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");
1168 ret = pinctrl_enable(npctl->pctl);
1169 if (ret)
1170 return dev_err_probe(&pdev->dev, ret, "fail to enable MA35 pinctrl\n");
1172 return ma35_gpiolib_register(pdev, npctl);
1175 int ma35_pinctrl_suspend(struct device *dev)
1177 struct ma35_pinctrl *npctl = dev_get_drvdata(dev);
1179 return pinctrl_force_sleep(npctl->pctl);
1182 int ma35_pinctrl_resume(struct device *dev)
1184 struct ma35_pinctrl *npctl = dev_get_drvdata(dev);
1186 return pinctrl_force_default(npctl->pctl);