2 * Pinctrl driver for Rockchip SoCs
4 * Copyright (c) 2013 MundoReader S.L.
5 * Author: Heiko Stuebner <heiko@sntech.de>
7 * With some ideas taken from pinctrl-samsung:
8 * Copyright (c) 2012 Samsung Electronics Co., Ltd.
9 * http://www.samsung.com
10 * Copyright (c) 2012 Linaro Ltd
11 * http://www.linaro.org
14 * Copyright (C) 2011-2012 Jean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com>
16 * This program is free software; you can redistribute it and/or modify
17 * it under the terms of the GNU General Public License version 2 as published
18 * by the Free Software Foundation.
20 * This program is distributed in the hope that it will be useful,
21 * but WITHOUT ANY WARRANTY; without even the implied warranty of
22 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
23 * GNU General Public License for more details.
26 #include <linux/module.h>
27 #include <linux/platform_device.h>
29 #include <linux/bitops.h>
30 #include <linux/irq.h>
31 #include <linux/interrupt.h>
32 #include <linux/gpio.h>
33 #include <linux/of_address.h>
34 #include <linux/of_irq.h>
35 #include <linux/pinctrl/machine.h>
36 #include <linux/pinctrl/pinconf.h>
37 #include <linux/pinctrl/pinctrl.h>
38 #include <linux/pinctrl/pinmux.h>
39 #include <linux/pinctrl/pinconf-generic.h>
40 #include <linux/irqchip/chained_irq.h>
41 #include <linux/clk.h>
42 #include <dt-bindings/pinctrl/rockchip.h>
43 #include <dt-bindings/pinctrl/rockchip-rk3188.h>
47 #include <linux/of_device.h>
48 #include <linux/pinctrl/consumer.h>
49 #include <linux/slab.h>
57 #define DBG_PINCTRL(x...) if(atomic_read(&info->debug_flag) == 1) printk(x)
59 #define DBG_PINCTRL(x...)
63 /* GPIO control registers */
64 #define GPIO_SWPORT_DR 0x00
65 #define GPIO_SWPORT_DDR 0x04
66 #define GPIO_INTEN 0x30
67 #define GPIO_INTMASK 0x34
68 #define GPIO_INTTYPE_LEVEL 0x38
69 #define GPIO_INT_POLARITY 0x3c
70 #define GPIO_INT_STATUS 0x40
71 #define GPIO_INT_RAWSTATUS 0x44
72 #define GPIO_DEBOUNCE 0x48
73 #define GPIO_PORTS_EOI 0x4c
74 #define GPIO_EXT_PORT 0x50
75 #define GPIO_LS_SYNC 0x60
77 enum rockchip_pinctrl_type {
83 enum rockchip_pin_bank_type {
89 * @reg_base: register base of the gpio bank
90 * @reg_pull: optional separate register for additional pull settings
91 * @clk: clock of the gpio bank
92 * @irq: interrupt of the gpio bank
93 * @pin_base: first pin number
94 * @nr_pins: number of pins in this bank
95 * @name: name of the bank
96 * @bank_num: number of the bank, to account for holes
97 * @valid: are all necessary informations present
98 * @of_node: dt node of this bank
99 * @drvdata: common pinctrl basedata
100 * @domain: irqdomain of the gpio bank
101 * @gpio_chip: gpiolib chip
102 * @grange: gpio range
103 * @slock: spinlock for the gpio bank
105 struct rockchip_pin_bank {
106 void __iomem *reg_base;
107 void __iomem *reg_pull;
114 enum rockchip_pin_bank_type bank_type;
116 struct device_node *of_node;
117 struct rockchip_pinctrl *drvdata;
118 struct irq_domain *domain;
119 struct gpio_chip gpio_chip;
120 struct pinctrl_gpio_range grange;
122 u32 toggle_edge_mode;
127 #define PIN_BANK(id, pins, label) \
136 struct rockchip_pin_ctrl {
137 struct rockchip_pin_bank *pin_banks;
141 enum rockchip_pinctrl_type type;
143 void (*pull_calc_reg)(struct rockchip_pin_bank *bank, int pin_num,
144 void __iomem **reg, u8 *bit);
147 struct rockchip_pin_config {
149 unsigned long *configs;
150 unsigned int nconfigs;
154 * struct rockchip_pin_group: represent group of pins of a pinmux function.
155 * @name: name of the pin group, used to lookup the group.
156 * @pins: the pins included in this group.
157 * @npins: number of pins included in this group.
158 * @func: the mux function number to be programmed when selected.
159 * @configs: the config values to be set for each pin
160 * @nconfigs: number of configs for each pin
162 struct rockchip_pin_group {
164 const char *func_name;
167 struct rockchip_pin_config *data;
171 * struct rockchip_pmx_func: represent a pin function.
172 * @name: name of the pin function, used to lookup the function.
173 * @groups: one or more names of pin groups that provide this function.
174 * @num_groups: number of groups included in @groups.
176 struct rockchip_pmx_func {
182 struct rockchip_pinctrl {
183 void __iomem *reg_base;
184 void __iomem *reg_pull;
186 struct rockchip_pin_ctrl *ctrl;
187 struct pinctrl_desc pctl;
188 struct pinctrl_dev *pctl_dev;
189 struct rockchip_pin_group *groups;
190 unsigned int ngroups;
191 struct rockchip_pmx_func *functions;
192 unsigned int nfunctions;
207 struct iomux_mode mux;
212 struct func_to_reg_offset {
213 unsigned int reg_type;
214 const char *func_name;
215 unsigned int reg_offset;
216 unsigned int bit_offset;
217 unsigned int bit_mask;
220 #define FUNC_TO_REG_OFFSET(type, label, reg, bit, mask) \
223 .func_name = label, \
231 static inline struct rockchip_pin_bank *gc_to_pin_bank(struct gpio_chip *gc)
233 return container_of(gc, struct rockchip_pin_bank, gpio_chip);
236 static const inline struct rockchip_pin_group *pinctrl_name_to_group(
237 const struct rockchip_pinctrl *info,
242 for (i = 0; i < info->ngroups; i++) {
243 if (!strcmp(info->groups[i].name, name))
244 return &info->groups[i];
251 * given a pin number that is local to a pin controller, find out the pin bank
252 * and the register base of the pin bank.
254 static struct rockchip_pin_bank *pin_to_bank(struct rockchip_pinctrl *info,
257 struct rockchip_pin_bank *b = info->ctrl->pin_banks;
259 while (pin >= (b->pin_base + b->nr_pins))
265 static struct rockchip_pin_bank *bank_num_to_bank(
266 struct rockchip_pinctrl *info,
269 struct rockchip_pin_bank *b = info->ctrl->pin_banks;
272 for (i = 0; i < info->ctrl->nr_banks; i++, b++) {
273 if (b->bank_num == num)
277 return ERR_PTR(-EINVAL);
281 * Pinctrl_ops handling
284 static int rockchip_get_groups_count(struct pinctrl_dev *pctldev)
286 struct rockchip_pinctrl *info = pinctrl_dev_get_drvdata(pctldev);
288 return info->ngroups;
291 static const char *rockchip_get_group_name(struct pinctrl_dev *pctldev,
294 struct rockchip_pinctrl *info = pinctrl_dev_get_drvdata(pctldev);
296 return info->groups[selector].name;
299 static int rockchip_get_group_pins(struct pinctrl_dev *pctldev,
300 unsigned selector, const unsigned **pins,
303 struct rockchip_pinctrl *info = pinctrl_dev_get_drvdata(pctldev);
305 if (selector >= info->ngroups)
308 *pins = info->groups[selector].pins;
309 *npins = info->groups[selector].npins;
314 static int rockchip_dt_node_to_map(struct pinctrl_dev *pctldev,
315 struct device_node *np,
316 struct pinctrl_map **map, unsigned *num_maps)
318 struct rockchip_pinctrl *info = pinctrl_dev_get_drvdata(pctldev);
319 const struct rockchip_pin_group *grp;
320 struct pinctrl_map *new_map;
321 struct device_node *parent;
326 * first find the group of this node and check if we need to create
327 * config maps for pins
329 grp = pinctrl_name_to_group(info, np->name);
331 dev_err(info->dev, "unable to find group for node %s\n",
336 map_num += grp->npins;
337 new_map = devm_kzalloc(pctldev->dev, sizeof(*new_map) * map_num,
346 parent = of_get_parent(np);
348 devm_kfree(pctldev->dev, new_map);
351 new_map[0].type = PIN_MAP_TYPE_MUX_GROUP;
352 new_map[0].data.mux.function = parent->name;
353 new_map[0].data.mux.group = np->name;
356 /* create config map */
358 for (i = 0; i < grp->npins; i++) {
359 new_map[i].type = PIN_MAP_TYPE_CONFIGS_GROUP;
360 new_map[i].data.configs.group_or_pin = grp->name;
361 //pin_get_name(pctldev, grp->pins[i]);
362 new_map[i].data.configs.configs = grp->data[i].configs;
363 new_map[i].data.configs.num_configs = grp->data[i].nconfigs;
366 dev_dbg(pctldev->dev, "maps: function %s group %s num %d\n",
367 (*map)->data.mux.function, (*map)->data.mux.group, map_num);
372 static void rockchip_dt_free_map(struct pinctrl_dev *pctldev,
373 struct pinctrl_map *map, unsigned num_maps)
377 static const struct pinctrl_ops rockchip_pctrl_ops = {
378 .get_groups_count = rockchip_get_groups_count,
379 .get_group_name = rockchip_get_group_name,
380 .get_group_pins = rockchip_get_group_pins,
381 .dt_node_to_map = rockchip_dt_node_to_map,
382 .dt_free_map = rockchip_dt_free_map,
388 * Set a new mux function for a pin.
390 * The register is divided into the upper and lower 16 bit. When changing
391 * a value, the previous register value is not read and changed. Instead
392 * it seems the changed bits are marked in the upper 16 bit, while the
393 * changed value gets set in the same offset in the lower 16 bit.
394 * All pin settings seem to be 2 bit wide in both the upper and lower
396 * @bank: pin bank to change
397 * @pin: pin to change
398 * @mux: new mux function to set
400 static void rockchip_set_mux(struct rockchip_pin_bank *bank, int pin, int mux)
402 struct rockchip_pinctrl *info = bank->drvdata;
403 void __iomem *reg = info->reg_base + info->ctrl->mux_offset;
410 /*GPIO0_C0 = 0x0c00, NAND_D8, */
411 /*GPIO0_C1 = 0x0c10, NAND_D9, */
415 if((m.mux.bank != bank->bank_num) || (((m.mux.goff - 0x0A) * 8 + m.mux.off ) != pin))
417 printk("%s:error:mux_bank(%d) != gpio_bank(%d), mux_offset(%d) != gpio_offset(%d)\n",__func__,
418 m.mux.bank, bank->bank_num, ((m.mux.goff - 0x0A) * 8 + m.mux.off ), pin);
422 /* get basic quadrupel of mux registers and the correct reg inside */
423 reg += bank->bank_num * 0x10;
424 reg += (pin / 8) * 4;
427 spin_lock_irqsave(&bank->slock, flags);
429 data = (3 << (bit + 16));
430 data |= (mux & 3) << bit;
433 spin_unlock_irqrestore(&bank->slock, flags);
435 DBG_PINCTRL("%s:setting GPIO%d-%d to mux:0x%x\n", __func__, m.mux.bank, ((m.mux.goff - 0x0A) * 8 + m.mux.off ), mux);
437 //DBG_PINCTRL("%s:setting mux of GPIO%d-%d to %d\n", __func__, bank->bank_num, pin, mux&0x3);
442 * Pinmux_ops handling
445 static int rockchip_pmx_get_funcs_count(struct pinctrl_dev *pctldev)
447 struct rockchip_pinctrl *info = pinctrl_dev_get_drvdata(pctldev);
449 return info->nfunctions;
452 static const char *rockchip_pmx_get_func_name(struct pinctrl_dev *pctldev,
455 struct rockchip_pinctrl *info = pinctrl_dev_get_drvdata(pctldev);
457 return info->functions[selector].name;
460 static int rockchip_pmx_get_groups(struct pinctrl_dev *pctldev,
461 unsigned selector, const char * const **groups,
462 unsigned * const num_groups)
464 struct rockchip_pinctrl *info = pinctrl_dev_get_drvdata(pctldev);
466 *groups = info->functions[selector].groups;
467 *num_groups = info->functions[selector].ngroups;
472 static int rockchip_pmx_enable(struct pinctrl_dev *pctldev, unsigned selector,
475 struct rockchip_pinctrl *info = pinctrl_dev_get_drvdata(pctldev);
476 const unsigned int *pins = info->groups[group].pins;
477 const struct rockchip_pin_config *data = info->groups[group].data;
478 struct rockchip_pin_bank *bank;
481 DBG_PINCTRL("%s:enable function %s group %s\n",
482 __func__, info->functions[selector].name, info->groups[group].name);
485 * for each pin in the pin group selected, program the correspoding pin
486 * pin function number in the config register.
488 for (cnt = 0; cnt < info->groups[group].npins; cnt++) {
489 bank = pin_to_bank(info, pins[cnt]);
490 rockchip_set_mux(bank, pins[cnt] - bank->pin_base,
497 static void rockchip_pmx_disable(struct pinctrl_dev *pctldev,
498 unsigned selector, unsigned group)
500 struct rockchip_pinctrl *info = pinctrl_dev_get_drvdata(pctldev);
501 const unsigned int *pins = info->groups[group].pins;
502 struct rockchip_pin_bank *bank;
505 DBG_PINCTRL("%s:disable function %s group %s\n",
506 __func__, info->functions[selector].name, info->groups[group].name);
508 for (cnt = 0; cnt < info->groups[group].npins; cnt++) {
509 bank = pin_to_bank(info, pins[cnt]);
510 rockchip_set_mux(bank, pins[cnt] - bank->pin_base, 0);
515 * The calls to gpio_direction_output() and gpio_direction_input()
516 * leads to this function call (via the pinctrl_gpio_direction_{input|output}()
517 * function called from the gpiolib interface).
519 static int rockchip_pmx_gpio_set_direction(struct pinctrl_dev *pctldev,
520 struct pinctrl_gpio_range *range,
521 unsigned offset, bool input)
523 struct rockchip_pinctrl *info = pinctrl_dev_get_drvdata(pctldev);
524 struct rockchip_pin_bank *bank;
525 struct gpio_chip *chip;
531 bank = gc_to_pin_bank(chip);
532 pin = offset - chip->base;
534 DBG_PINCTRL("%s:gpio_direction for pin %u as %s-%d to %s\n",
535 __func__, offset, range->name, pin, input ? "input" : "output");
537 mux = (bank->bank_num << 12) | (((pin / 8) + 0x0A) << 8) | ((pin % 8)<< 4) | RK_FUNC_GPIO;
539 rockchip_set_mux(bank, pin, mux);
541 data = readl_relaxed(bank->reg_base + GPIO_SWPORT_DDR);
542 /* set bit to 1 for output, 0 for input */
547 writel_relaxed(data, bank->reg_base + GPIO_SWPORT_DDR);
552 static const struct pinmux_ops rockchip_pmx_ops = {
553 .get_functions_count = rockchip_pmx_get_funcs_count,
554 .get_function_name = rockchip_pmx_get_func_name,
555 .get_function_groups = rockchip_pmx_get_groups,
556 .enable = rockchip_pmx_enable,
557 .disable = rockchip_pmx_disable,
558 .gpio_set_direction = rockchip_pmx_gpio_set_direction,
566 #define TYPE_PULL_REG 0x01
567 #define TYPE_VOL_REG 0x02
568 #define TYPE_DRV_REG 0x03
569 #define TYPE_TRI_REG 0x04
571 #define RK3188_GRF_IO_CON0 0xf4
572 #define RK3188_GRF_IO_CON1 0xf8
573 #define RK3188_GRF_IO_CON2 0xfc
574 #define RK3188_GRF_IO_CON3 0x100
575 #define RK3188_GRF_IO_CON4 0x104
577 static struct func_to_reg_offset rk3188_func_to_reg_offset[] =
579 FUNC_TO_REG_OFFSET(TYPE_DRV_REG, "reserve", RK3188_GRF_IO_CON0, 0 ,3),
580 FUNC_TO_REG_OFFSET(TYPE_DRV_REG, "gpio0_flash", RK3188_GRF_IO_CON0, 2, 3),
581 FUNC_TO_REG_OFFSET(TYPE_DRV_REG, "gpio0_flash", RK3188_GRF_IO_CON0, 4 ,3),
582 FUNC_TO_REG_OFFSET(TYPE_DRV_REG, "gpio0_d", RK3188_GRF_IO_CON0, 6 ,3),
583 FUNC_TO_REG_OFFSET(TYPE_DRV_REG, "gpio1_uart0", RK3188_GRF_IO_CON0, 8 ,3),
584 FUNC_TO_REG_OFFSET(TYPE_DRV_REG, "gpio1_uart1", RK3188_GRF_IO_CON0, 10 ,3),
585 FUNC_TO_REG_OFFSET(TYPE_DRV_REG, "gpio1_spi0", RK3188_GRF_IO_CON0, 10 ,3),
586 FUNC_TO_REG_OFFSET(TYPE_DRV_REG, "gpio1_uart2", RK3188_GRF_IO_CON0, 12 ,3),
587 FUNC_TO_REG_OFFSET(TYPE_DRV_REG, "gpio1_uart3", RK3188_GRF_IO_CON0, 14 ,3),
588 FUNC_TO_REG_OFFSET(TYPE_DRV_REG, "gpio1_spi1", RK3188_GRF_IO_CON0, 14 ,3),
590 FUNC_TO_REG_OFFSET(TYPE_DRV_REG, "gpio1_i2s0", RK3188_GRF_IO_CON1, 0 ,3),
591 FUNC_TO_REG_OFFSET(TYPE_DRV_REG, "gpio1_i2s0", RK3188_GRF_IO_CON1, 2 ,3),
592 FUNC_TO_REG_OFFSET(TYPE_DRV_REG, "gpio1_c", RK3188_GRF_IO_CON1, 4 ,3),
593 FUNC_TO_REG_OFFSET(TYPE_DRV_REG, "gpio1_i2c0", RK3188_GRF_IO_CON1, 6 ,3),
594 FUNC_TO_REG_OFFSET(TYPE_DRV_REG, "gpio1_i2c1", RK3188_GRF_IO_CON1, 8 ,3),
595 FUNC_TO_REG_OFFSET(TYPE_DRV_REG, "gpio1_i2c2", RK3188_GRF_IO_CON1, 10 ,3),
596 FUNC_TO_REG_OFFSET(TYPE_DRV_REG, "gpio1_i2c4", RK3188_GRF_IO_CON1, 12 ,3),
597 FUNC_TO_REG_OFFSET(TYPE_DRV_REG, "gpio2_lcdc1", RK3188_GRF_IO_CON1, 14 ,3),
599 FUNC_TO_REG_OFFSET(TYPE_DRV_REG, "gpio2_lcdc1", RK3188_GRF_IO_CON2, 0 ,3),
600 FUNC_TO_REG_OFFSET(TYPE_DRV_REG, "gpio2_smc", RK3188_GRF_IO_CON2, 2 ,3),
601 FUNC_TO_REG_OFFSET(TYPE_DRV_REG, "reserve", RK3188_GRF_IO_CON2, 4 ,3),
602 FUNC_TO_REG_OFFSET(TYPE_DRV_REG, "gpio3_sdmmc", RK3188_GRF_IO_CON2, 6 ,3),
603 FUNC_TO_REG_OFFSET(TYPE_DRV_REG, "gpio3_sdmmc", RK3188_GRF_IO_CON2, 8 ,3),
604 FUNC_TO_REG_OFFSET(TYPE_DRV_REG, "gpio3_b", RK3188_GRF_IO_CON2, 10 ,3),
605 FUNC_TO_REG_OFFSET(TYPE_DRV_REG, "gpio3_cif", RK3188_GRF_IO_CON2, 12 ,3),
606 FUNC_TO_REG_OFFSET(TYPE_DRV_REG, "gpio3_cif", RK3188_GRF_IO_CON2, 14 ,3),
609 FUNC_TO_REG_OFFSET(TYPE_DRV_REG, "gpio3_sdio", RK3188_GRF_IO_CON3, 0 ,3),
610 FUNC_TO_REG_OFFSET(TYPE_DRV_REG, "gpio3_sdio", RK3188_GRF_IO_CON3, 2 ,3),
611 FUNC_TO_REG_OFFSET(TYPE_DRV_REG, "gpio3_pwm", RK3188_GRF_IO_CON3, 4 ,3),
612 FUNC_TO_REG_OFFSET(TYPE_DRV_REG, "gpio3_d", RK3188_GRF_IO_CON3, 6 ,3),
613 FUNC_TO_REG_OFFSET(TYPE_DRV_REG, "flash", RK3188_GRF_IO_CON3, 8 ,3),
614 FUNC_TO_REG_OFFSET(TYPE_DRV_REG, "flash", RK3188_GRF_IO_CON3, 10 ,3),
615 FUNC_TO_REG_OFFSET(TYPE_DRV_REG, "cif", RK3188_GRF_IO_CON3, 12 ,3),
616 FUNC_TO_REG_OFFSET(TYPE_DRV_REG, "lcdc0", RK3188_GRF_IO_CON3, 14 ,3),
618 FUNC_TO_REG_OFFSET(TYPE_DRV_REG, "lcdc0", RK3188_GRF_IO_CON4, 0 ,3),
619 FUNC_TO_REG_OFFSET(TYPE_DRV_REG, "jtag", RK3188_GRF_IO_CON4, 2 ,3),
620 FUNC_TO_REG_OFFSET(TYPE_DRV_REG, "misc", RK3188_GRF_IO_CON4, 4 ,3),
621 FUNC_TO_REG_OFFSET(TYPE_DRV_REG, "reserve", RK3188_GRF_IO_CON4, 6 ,3),
623 FUNC_TO_REG_OFFSET(TYPE_VOL_REG, "ap0_io", RK3188_GRF_IO_CON4, 8 ,1),
624 FUNC_TO_REG_OFFSET(TYPE_VOL_REG, "ap1_io", RK3188_GRF_IO_CON4, 9 ,1),
625 FUNC_TO_REG_OFFSET(TYPE_VOL_REG, "cif_io", RK3188_GRF_IO_CON4, 10 ,1),
626 FUNC_TO_REG_OFFSET(TYPE_VOL_REG, "flash_io", RK3188_GRF_IO_CON4, 11 ,1),
627 FUNC_TO_REG_OFFSET(TYPE_VOL_REG, "vccio0_io", RK3188_GRF_IO_CON4, 12 ,1),
628 FUNC_TO_REG_OFFSET(TYPE_VOL_REG, "vccio1_io", RK3188_GRF_IO_CON4, 13 ,1),
629 FUNC_TO_REG_OFFSET(TYPE_VOL_REG, "lcdc0_io", RK3188_GRF_IO_CON4, 14 ,1),
630 FUNC_TO_REG_OFFSET(TYPE_VOL_REG, "lcdc1_io", RK3188_GRF_IO_CON4, 15 ,1),
635 static int rockchip_get_pin_config(struct rockchip_pin_bank *bank,
636 int pin_num, int param, int config_type)
638 struct rockchip_pinctrl *info = bank->drvdata;
639 struct rockchip_pin_ctrl *ctrl = info->ctrl;
640 struct func_to_reg_offset reg_offset[4];//same name count should be less four
646 for(i = 0; i < ARRAY_SIZE(rk3188_func_to_reg_offset); i++)
648 if(!strcmp(info->groups->func_name, rk3188_func_to_reg_offset[i].func_name))
650 reg_offset[j++] = rk3188_func_to_reg_offset[i];
656 printk("%s:could find config register for PIN%d-%d\n",__func__, bank->bank_num, pin_num);
681 reg = bank->reg_base + reg_offset[i].reg_offset;
682 value |= ((param & reg_offset[i].bit_mask) << (16 + reg_offset[i].bit_offset));
683 value |= ((param & reg_offset[i].bit_mask) << reg_offset[i].bit_offset);
684 spin_lock_irqsave(&bank->slock, flags);
685 //writel_relaxed(value, reg);
686 spin_unlock_irqrestore(&bank->slock, flags);
688 DBG_PINCTRL("%s:reg[%d]=0x%p,value[%d]=0x%x\n",__func__, i, reg, i, value);
708 DBG_PINCTRL("%s:GPIO%d-%d,group=%s, function=%s, gpio=%s, type=%d\n", __func__, bank->bank_num, pin_num, info->groups->name, info->groups->func_name, bank->of_node->name, config_type);
715 static int rockchip_set_pin_config(struct rockchip_pin_bank *bank,
716 int pin_num, int param, int config_type)
718 struct rockchip_pinctrl *info = bank->drvdata;
719 struct rockchip_pin_ctrl *ctrl = info->ctrl;
720 struct func_to_reg_offset reg_offset[4];//same name count should be less four
726 for(i = 0; i < ARRAY_SIZE(rk3188_func_to_reg_offset); i++)
728 if(!strcmp(info->groups->func_name, rk3188_func_to_reg_offset[i].func_name))
730 reg_offset[j++] = rk3188_func_to_reg_offset[i];
736 printk("%s:could find config register for PIN%d-%d\n",__func__, bank->bank_num, pin_num);
761 reg = bank->reg_base + reg_offset[i].reg_offset;
762 value |= ((param & reg_offset[i].bit_mask) << (16 + reg_offset[i].bit_offset));
763 value |= ((param & reg_offset[i].bit_mask) << reg_offset[i].bit_offset);
764 spin_lock_irqsave(&bank->slock, flags);
765 //writel_relaxed(value, reg);
766 spin_unlock_irqrestore(&bank->slock, flags);
768 DBG_PINCTRL("%s:reg[%d]=0x%p,value[%d]=0x%x\n",__func__, i, reg, i, value);
788 DBG_PINCTRL("%s:GPIO%d-%d,group=%s, function=%s, gpio=%s, type=%d\n", __func__, bank->bank_num, pin_num, info->groups[0].name, info->groups[0].func_name, bank->of_node->name, config_type);
795 static void rk2928_calc_pull_reg_and_bit(struct rockchip_pin_bank *bank,
796 int pin_num, void __iomem **reg, u8 *bit)
798 struct rockchip_pinctrl *info = bank->drvdata;
800 *reg = info->reg_base + RK2928_PULL_OFFSET;
801 *reg += bank->bank_num * RK2928_PULL_BANK_STRIDE;
802 *reg += (pin_num / RK2928_PULL_PINS_PER_REG) * 4;
804 *bit = pin_num % RK2928_PULL_PINS_PER_REG;
806 DBG_PINCTRL("%s:GPIO%d-%d, pull_reg=0x%p, bit=%d\n", __func__, bank->bank_num, pin_num, *reg, *bit);
810 static void rk3188_calc_pull_reg_and_bit(struct rockchip_pin_bank *bank,
811 int pin_num, void __iomem **reg, u8 *bit)
813 struct rockchip_pinctrl *info = bank->drvdata;
815 /* The first 12 pins of the first bank are located elsewhere */
816 if (bank->bank_type == RK3188_BANK0 && pin_num < 12) {
817 *reg = bank->reg_pull +
818 ((pin_num / RK3188_PULL_PINS_PER_REG) * 4);
819 *bit = pin_num % RK3188_PULL_PINS_PER_REG;
820 *bit *= RK3188_PULL_BITS_PER_PIN;
822 *reg = info->reg_pull - 4;
823 *reg += bank->bank_num * RK3188_PULL_BANK_STRIDE;
824 *reg += ((pin_num / RK3188_PULL_PINS_PER_REG) * 4);
827 * The bits in these registers have an inverse ordering
828 * with the lowest pin being in bits 15:14 and the highest
831 *bit = 7 - (pin_num % RK3188_PULL_PINS_PER_REG);
832 *bit *= RK3188_PULL_BITS_PER_PIN;
835 DBG_PINCTRL("%s:GPIO%d-%d, pull_reg=0x%p, bit=%d\n", __func__, bank->bank_num, pin_num, *reg, *bit);
838 static int rockchip_get_pull(struct rockchip_pin_bank *bank, int pin_num)
840 struct rockchip_pinctrl *info = bank->drvdata;
841 struct rockchip_pin_ctrl *ctrl = info->ctrl;
846 /* rk3066b does support any pulls */
847 if (ctrl->type == RK3066B)
848 return PIN_CONFIG_BIAS_DISABLE;
850 ctrl->pull_calc_reg(bank, pin_num, ®, &bit);
852 switch (ctrl->type) {
854 return !(readl_relaxed(reg) & BIT(bit))
855 ? PIN_CONFIG_BIAS_PULL_PIN_DEFAULT
856 : PIN_CONFIG_BIAS_DISABLE;
858 data = readl_relaxed(reg) >> bit;
859 data &= (1 << RK3188_PULL_BITS_PER_PIN) - 1;
863 return PIN_CONFIG_BIAS_DISABLE;
865 return PIN_CONFIG_BIAS_PULL_UP;
867 return PIN_CONFIG_BIAS_PULL_DOWN;
869 return PIN_CONFIG_BIAS_BUS_HOLD;
872 dev_err(info->dev, "unknown pull setting\n");
875 dev_err(info->dev, "unsupported pinctrl type\n");
879 DBG_PINCTRL("%s:GPIO%d-%d pull is 0x%x\n", __func__, bank->bank_num, pin_num, data);
882 static int rockchip_set_pull(struct rockchip_pin_bank *bank,
883 int pin_num, int pull)
885 struct rockchip_pinctrl *info = bank->drvdata;
886 struct rockchip_pin_ctrl *ctrl = info->ctrl;
893 /* rk3066b does support any pulls */
894 if (ctrl->type == RK3066B)
895 return pull ? -EINVAL : 0;
897 ctrl->pull_calc_reg(bank, pin_num, ®, &bit);
899 switch (ctrl->type) {
901 spin_lock_irqsave(&bank->slock, flags);
903 data = BIT(bit + 16);
904 if (pull == PIN_CONFIG_BIAS_DISABLE)
908 spin_unlock_irqrestore(&bank->slock, flags);
911 spin_lock_irqsave(&bank->slock, flags);
913 /* enable the write to the equivalent lower bits */
914 data = ((1 << RK3188_PULL_BITS_PER_PIN) - 1) << (bit + 16);
917 case PIN_CONFIG_BIAS_DISABLE:
919 case PIN_CONFIG_BIAS_PULL_UP:
922 case PIN_CONFIG_BIAS_PULL_DOWN:
925 case PIN_CONFIG_BIAS_BUS_HOLD:
929 dev_err(info->dev, "unsupported pull setting %d\n",
936 spin_unlock_irqrestore(&bank->slock, flags);
939 dev_err(info->dev, "unsupported pinctrl type\n");
944 DBG_PINCTRL("%s:GPIO%d-%d pull is 0x%x\n", __func__, bank->bank_num, pin_num, data);
950 * Pinconf_ops handling
953 static bool rockchip_pinconf_pull_valid(struct rockchip_pin_ctrl *ctrl,
954 enum pin_config_param pull)
956 switch (ctrl->type) {
958 return (pull == PIN_CONFIG_BIAS_PULL_PIN_DEFAULT ||
959 pull == PIN_CONFIG_BIAS_DISABLE);
961 return pull ? false : true;
963 return (pull != PIN_CONFIG_BIAS_PULL_PIN_DEFAULT);
969 /* set the pin config settings for a specified pin */
970 static int rockchip_pinconf_set(struct pinctrl_dev *pctldev, unsigned int pin,
971 unsigned long configs)
973 struct rockchip_pinctrl *info = pinctrl_dev_get_drvdata(pctldev);
974 struct rockchip_pin_bank *bank = pin_to_bank(info, pin);
975 enum pin_config_param param;
980 param = pinconf_to_config_param(configs);
981 arg = pinconf_to_config_argument(configs);
984 case PIN_CONFIG_BIAS_DISABLE:
985 rc = rockchip_set_pull(bank, pin - bank->pin_base,
990 case PIN_CONFIG_BIAS_PULL_UP:
991 case PIN_CONFIG_BIAS_PULL_DOWN:
992 case PIN_CONFIG_BIAS_PULL_PIN_DEFAULT:
993 case PIN_CONFIG_BIAS_BUS_HOLD:
994 if (!rockchip_pinconf_pull_valid(info->ctrl, param))
1000 rc = rockchip_set_pull(bank, pin - bank->pin_base,
1006 case PIN_CONFIG_POWER_SOURCE:
1007 rc = rockchip_set_pin_config(bank, pin - bank->pin_base, param, TYPE_VOL_REG);
1012 case PIN_CONFIG_DRIVE_STRENGTH:
1013 rc = rockchip_set_pin_config(bank, pin - bank->pin_base, param, TYPE_DRV_REG);
1017 case PIN_CONFIG_BIAS_HIGH_IMPEDANCE:
1018 rc = rockchip_set_pin_config(bank, pin - bank->pin_base, param, TYPE_TRI_REG);
1027 DBG_PINCTRL("%s,pin=%d,param=%d\n",__func__,pin, param);
1032 /* get the pin config settings for a specified pin */
1033 static int rockchip_pinconf_get(struct pinctrl_dev *pctldev, unsigned int pin,
1034 unsigned long *config)
1036 struct rockchip_pinctrl *info = pinctrl_dev_get_drvdata(pctldev);
1037 struct rockchip_pin_bank *bank = pin_to_bank(info, pin);
1038 enum pin_config_param param = pinconf_to_config_param(*config);
1042 case PIN_CONFIG_BIAS_DISABLE:
1043 if (rockchip_get_pull(bank, pin - bank->pin_base) != param)
1048 case PIN_CONFIG_BIAS_PULL_UP:
1049 case PIN_CONFIG_BIAS_PULL_DOWN:
1050 case PIN_CONFIG_BIAS_PULL_PIN_DEFAULT:
1051 case PIN_CONFIG_BIAS_BUS_HOLD:
1052 if (!rockchip_pinconf_pull_valid(info->ctrl, param))
1055 if (rockchip_get_pull(bank, pin - bank->pin_base) != param)
1061 case PIN_CONFIG_POWER_SOURCE:
1062 rc = rockchip_get_pin_config(bank, pin - bank->pin_base, param, TYPE_VOL_REG);
1067 case PIN_CONFIG_DRIVE_STRENGTH:
1068 rc = rockchip_get_pin_config(bank, pin - bank->pin_base, param, TYPE_DRV_REG);
1072 case PIN_CONFIG_BIAS_HIGH_IMPEDANCE:
1073 rc = rockchip_get_pin_config(bank, pin - bank->pin_base, param, TYPE_TRI_REG);
1084 DBG_PINCTRL("%s:pin=%d, param=%d\n",__func__, pin, param);
1089 /* set the pin config settings for a specified pin group */
1090 static int rockchip_pinconf_group_set(struct pinctrl_dev *pctldev,
1091 unsigned group, unsigned long config)
1093 struct rockchip_pinctrl *info = pinctrl_dev_get_drvdata(pctldev);
1094 const unsigned int *pins;
1097 DBG_PINCTRL("%s:group[%d]:%s\n",__func__, group, info->groups[group].name);
1098 pins = info->groups[group].pins;
1100 for (cnt = 0; cnt < info->groups[group].npins; cnt++)
1101 rockchip_pinconf_set(pctldev, pins[cnt], config);
1106 /* get the pin config settings for a specified pin group */
1107 static int rockchip_pinconf_group_get(struct pinctrl_dev *pctldev,
1108 unsigned int group, unsigned long *config)
1110 struct rockchip_pinctrl *info = pinctrl_dev_get_drvdata(pctldev);
1111 const unsigned int *pins;
1113 pins = info->groups[group].pins;
1114 rockchip_pinconf_get(pctldev, pins[0], config);
1116 DBG_PINCTRL("%s:group[%d]:%s\n",__func__, group, info->groups[group].name);
1120 static void rockchip_pinconf_dbg_show(struct pinctrl_dev *pctldev,
1121 struct seq_file *s, unsigned pin)
1126 static void rockchip_pinconf_group_dbg_show(struct pinctrl_dev *pctldev,
1127 struct seq_file *s, unsigned group)
1133 static const struct pinconf_ops rockchip_pinconf_ops = {
1134 .pin_config_get = rockchip_pinconf_get,
1135 .pin_config_set = rockchip_pinconf_set,
1136 .pin_config_group_get = rockchip_pinconf_group_get,
1137 .pin_config_group_set = rockchip_pinconf_group_set,
1138 .pin_config_dbg_show = rockchip_pinconf_dbg_show,
1139 .pin_config_group_dbg_show = rockchip_pinconf_group_dbg_show,
1142 static const struct of_device_id rockchip_bank_match[] = {
1143 { .compatible = "rockchip,gpio-bank" },
1144 { .compatible = "rockchip,rk3188-gpio-bank0" },
1148 static void rockchip_pinctrl_child_count(struct rockchip_pinctrl *info,
1149 struct device_node *np)
1151 struct device_node *child;
1153 for_each_child_of_node(np, child) {
1154 if (of_match_node(rockchip_bank_match, child))
1158 info->ngroups += of_get_child_count(child);
1162 static int rockchip_pinctrl_parse_groups(struct device_node *np,
1163 struct rockchip_pin_group *grp,
1164 struct rockchip_pinctrl *info,
1167 struct rockchip_pin_bank *bank;
1171 struct union_mode m;
1173 unsigned long *pinconfig;
1176 DBG_PINCTRL("%s:group(%d): %s\n", __func__, index, np->name);
1178 /* Initialise group */
1179 grp->name = np->name;
1182 * the binding format is rockchip,pins = <bank pin mux CONFIG>,
1183 * do sanity check and calculate pins number
1185 list = of_get_property(np, "rockchip,pins", &size);
1186 /* we do not check return since it's safe node passed down */
1187 size /= sizeof(*list);
1188 if (!size || size % 1) {
1189 dev_err(info->dev, "wrong pins number or pins and configs should be by 1\n");
1193 grp->npins = size / 1;
1195 grp->pins = devm_kzalloc(info->dev, grp->npins * sizeof(unsigned int),
1197 grp->data = devm_kzalloc(info->dev, grp->npins *
1198 sizeof(struct rockchip_pin_config),
1200 if (!grp->pins || !grp->data)
1203 pinconfig = kzalloc(configlen * sizeof(*pinconfig), GFP_KERNEL);
1205 for (i = 0; i < size; i++) {
1206 m.mode = be32_to_cpu(*list++);
1208 bank = bank_num_to_bank(info, m.mux.bank);
1210 return PTR_ERR(bank);
1212 grp->pins[i] = bank->pin_base + (m.mux.goff - 0x0A) * 8 + m.mux.off;
1213 grp->data[i].func = m.mode;
1219 if (of_find_property(np, "rockchip,pull", NULL))
1221 if (of_find_property(np, "rockchip,voltage", NULL))
1223 if (of_find_property(np, "rockchip,drive", NULL))
1225 if (of_find_property(np, "rockchip,tristate", NULL))
1228 pinconfig = kzalloc(configlen * sizeof(*pinconfig), GFP_KERNEL);
1230 if (!of_property_read_u32(np, "allwinner,pull", &val)) {
1231 enum pin_config_param pull = PIN_CONFIG_END;
1233 pull = PIN_CONFIG_BIAS_PULL_UP;
1235 pull = PIN_CONFIG_BIAS_PULL_DOWN;
1237 pinconfig[j++] = pinconf_to_config_packed(pull, 0);
1240 if (!of_property_read_u32(np, "rockchip,voltage", &val)) {
1242 pinconf_to_config_packed(PIN_CONFIG_POWER_SOURCE,
1246 if (!of_property_read_u32(np, "rockchip,drive", &val)) {
1248 pinconf_to_config_packed(PIN_CONFIG_DRIVE_STRENGTH,
1252 if (!of_property_read_u32(np, "rockchip,tristate", &val)) {
1254 pinconf_to_config_packed(PIN_CONFIG_BIAS_HIGH_IMPEDANCE,
1258 grp->data[i].configs = pinconfig;
1259 grp->data[i].nconfigs = configlen;
1267 static int rockchip_pinctrl_parse_functions(struct device_node *np,
1268 struct rockchip_pinctrl *info,
1271 struct device_node *child;
1272 struct rockchip_pmx_func *func;
1273 struct rockchip_pin_group *grp;
1275 static u32 grp_index;
1278 DBG_PINCTRL("%s:parse function(%d): %s\n", __func__, index, np->name);
1280 func = &info->functions[index];
1282 /* Initialise function */
1283 func->name = np->name;
1284 func->ngroups = of_get_child_count(np);
1285 if (func->ngroups <= 0)
1288 func->groups = devm_kzalloc(info->dev,
1289 func->ngroups * sizeof(char *), GFP_KERNEL);
1293 for_each_child_of_node(np, child) {
1294 func->groups[i] = child->name;
1295 grp = &info->groups[grp_index++];
1296 grp->func_name = np->name;
1297 ret = rockchip_pinctrl_parse_groups(child, grp, info, i++);
1301 DBG_PINCTRL("%s:grp->func_name(%d): %s\n", __func__, grp_index, grp->func_name);
1307 static int rockchip_pinctrl_parse_dt(struct platform_device *pdev,
1308 struct rockchip_pinctrl *info)
1310 struct device *dev = &pdev->dev;
1311 struct device_node *np = dev->of_node;
1312 struct device_node *child;
1316 rockchip_pinctrl_child_count(info, np);
1318 dev_dbg(&pdev->dev, "nfunctions = %d\n", info->nfunctions);
1319 dev_dbg(&pdev->dev, "ngroups = %d\n", info->ngroups);
1321 info->functions = devm_kzalloc(dev, info->nfunctions *
1322 sizeof(struct rockchip_pmx_func),
1324 if (!info->functions) {
1325 dev_err(dev, "failed to allocate memory for function list\n");
1329 info->groups = devm_kzalloc(dev, info->ngroups *
1330 sizeof(struct rockchip_pin_group),
1332 if (!info->groups) {
1333 dev_err(dev, "failed allocate memory for ping group list\n");
1339 for_each_child_of_node(np, child) {
1340 if (of_match_node(rockchip_bank_match, child))
1343 ret = rockchip_pinctrl_parse_functions(child, info, i++);
1345 dev_err(&pdev->dev, "failed to parse function\n");
1353 static int rockchip_pinctrl_register(struct platform_device *pdev,
1354 struct rockchip_pinctrl *info)
1356 struct pinctrl_desc *ctrldesc = &info->pctl;
1357 struct pinctrl_pin_desc *pindesc, *pdesc;
1358 struct rockchip_pin_bank *pin_bank;
1362 ctrldesc->name = "rockchip-pinctrl";
1363 ctrldesc->owner = THIS_MODULE;
1364 ctrldesc->pctlops = &rockchip_pctrl_ops;
1365 ctrldesc->pmxops = &rockchip_pmx_ops;
1366 ctrldesc->confops = &rockchip_pinconf_ops;
1368 pindesc = devm_kzalloc(&pdev->dev, sizeof(*pindesc) *
1369 info->ctrl->nr_pins, GFP_KERNEL);
1371 dev_err(&pdev->dev, "mem alloc for pin descriptors failed\n");
1374 ctrldesc->pins = pindesc;
1375 ctrldesc->npins = info->ctrl->nr_pins;
1378 for (bank = 0 , k = 0; bank < info->ctrl->nr_banks; bank++) {
1379 pin_bank = &info->ctrl->pin_banks[bank];
1380 for (pin = 0; pin < pin_bank->nr_pins; pin++, k++) {
1382 pdesc->name = kasprintf(GFP_KERNEL, "%s-%d",
1383 pin_bank->name, pin);
1388 info->pctl_dev = pinctrl_register(ctrldesc, &pdev->dev, info);
1389 if (!info->pctl_dev) {
1390 dev_err(&pdev->dev, "could not register pinctrl driver\n");
1394 for (bank = 0; bank < info->ctrl->nr_banks; ++bank) {
1395 pin_bank = &info->ctrl->pin_banks[bank];
1396 pin_bank->grange.name = pin_bank->name;
1397 pin_bank->grange.id = bank;
1398 pin_bank->grange.pin_base = pin_bank->pin_base;
1399 pin_bank->grange.base = pin_bank->gpio_chip.base;
1400 pin_bank->grange.npins = pin_bank->gpio_chip.ngpio;
1401 pin_bank->grange.gc = &pin_bank->gpio_chip;
1402 pinctrl_add_gpio_range(info->pctl_dev, &pin_bank->grange);
1405 ret = rockchip_pinctrl_parse_dt(pdev, info);
1407 pinctrl_unregister(info->pctl_dev);
1418 static int rockchip_gpio_request(struct gpio_chip *chip, unsigned offset)
1420 struct rockchip_pin_bank *bank = gc_to_pin_bank(chip);
1421 struct rockchip_pinctrl *info = bank->drvdata;
1422 DBG_PINCTRL("%s:GPIO%d-%d\n", __func__, bank->bank_num, offset);
1423 return pinctrl_request_gpio(chip->base + offset);
1426 static void rockchip_gpio_free(struct gpio_chip *chip, unsigned offset)
1428 struct rockchip_pin_bank *bank = gc_to_pin_bank(chip);
1429 struct rockchip_pinctrl *info = bank->drvdata;
1430 DBG_PINCTRL("%s:GPIO%d-%d\n", __func__, bank->bank_num, offset);
1431 pinctrl_free_gpio(chip->base + offset);
1434 static void rockchip_gpio_set(struct gpio_chip *gc, unsigned offset, int value)
1436 struct rockchip_pin_bank *bank = gc_to_pin_bank(gc);
1437 struct rockchip_pinctrl *info = bank->drvdata;
1438 void __iomem *reg = bank->reg_base + GPIO_SWPORT_DR;
1439 unsigned long flags;
1442 spin_lock_irqsave(&bank->slock, flags);
1445 data &= ~BIT(offset);
1447 data |= BIT(offset);
1450 spin_unlock_irqrestore(&bank->slock, flags);
1452 DBG_PINCTRL("%s:GPIO%d-%d level = %d\n", __func__, bank->bank_num, offset, value);
1456 * Returns the level of the pin for input direction and setting of the DR
1457 * register for output gpios.
1459 static int rockchip_gpio_get(struct gpio_chip *gc, unsigned offset)
1461 struct rockchip_pin_bank *bank = gc_to_pin_bank(gc);
1462 struct rockchip_pinctrl *info = bank->drvdata;
1465 data = readl(bank->reg_base + GPIO_EXT_PORT);
1469 DBG_PINCTRL("%s:GPIO%d-%d level = %d\n", __func__, bank->bank_num, offset, data);
1474 * gpiolib gpio_direction_input callback function. The setting of the pin
1475 * mux function as 'gpio input' will be handled by the pinctrl susbsystem
1478 static int rockchip_gpio_direction_input(struct gpio_chip *gc, unsigned offset)
1480 struct rockchip_pin_bank *bank = gc_to_pin_bank(gc);
1481 struct rockchip_pinctrl *info = bank->drvdata;
1483 DBG_PINCTRL("%s:GPIO%d-%d\n", __func__, bank->bank_num, offset);
1484 return pinctrl_gpio_direction_input(gc->base + offset);
1488 * gpiolib gpio_direction_output callback function. The setting of the pin
1489 * mux function as 'gpio output' will be handled by the pinctrl susbsystem
1492 static int rockchip_gpio_direction_output(struct gpio_chip *gc,
1493 unsigned offset, int value)
1495 struct rockchip_pin_bank *bank = gc_to_pin_bank(gc);
1496 struct rockchip_pinctrl *info = bank->drvdata;
1497 rockchip_gpio_set(gc, offset, value);
1499 DBG_PINCTRL("%s:set GPIO%d-%d level %d\n", __func__, bank->bank_num, offset, value);
1500 return pinctrl_gpio_direction_output(gc->base + offset);
1504 * gpiolib gpio_to_irq callback function. Creates a mapping between a GPIO pin
1505 * and a virtual IRQ, if not already present.
1507 static int rockchip_gpio_to_irq(struct gpio_chip *gc, unsigned offset)
1509 struct rockchip_pin_bank *bank = gc_to_pin_bank(gc);
1510 struct rockchip_pinctrl *info = bank->drvdata;
1517 virq = irq_create_mapping(bank->domain, offset);
1519 DBG_PINCTRL("%s:virq=%d, GPIO%d-%d\n", __func__, virq, bank->bank_num, offset);
1521 return (virq) ? : -ENXIO;
1524 static const struct gpio_chip rockchip_gpiolib_chip = {
1525 .request = rockchip_gpio_request,
1526 .free = rockchip_gpio_free,
1527 .set = rockchip_gpio_set,
1528 .get = rockchip_gpio_get,
1529 .direction_input = rockchip_gpio_direction_input,
1530 .direction_output = rockchip_gpio_direction_output,
1531 .to_irq = rockchip_gpio_to_irq,
1532 .owner = THIS_MODULE,
1536 * Interrupt handling
1539 static void rockchip_irq_demux(unsigned int irq, struct irq_desc *desc)
1541 struct irq_chip *chip = irq_get_chip(irq);
1542 struct rockchip_pin_bank *bank = irq_get_handler_data(irq);
1543 struct rockchip_pinctrl *info = bank->drvdata;
1545 u32 polarity = 0, data = 0;
1547 bool edge_changed = false;
1549 dev_dbg(bank->drvdata->dev, "got irq for bank %s\n", bank->name);
1551 chained_irq_enter(chip, desc);
1553 pend = readl_relaxed(bank->reg_base + GPIO_INT_STATUS);
1555 if (bank->toggle_edge_mode) {
1556 polarity = readl_relaxed(bank->reg_base +
1558 data = readl_relaxed(bank->reg_base + GPIO_EXT_PORT);
1566 virq = irq_linear_revmap(bank->domain, irq);
1569 dev_err(bank->drvdata->dev, "unmapped irq %d\n", irq);
1573 dev_dbg(bank->drvdata->dev, "handling irq %d\n", irq);
1576 * Triggering IRQ on both rising and falling edge
1577 * needs manual intervention.
1579 if (bank->toggle_edge_mode & BIT(irq)) {
1580 if (data & BIT(irq))
1581 polarity &= ~BIT(irq);
1583 polarity |= BIT(irq);
1585 edge_changed = true;
1588 generic_handle_irq(virq);
1591 DBG_PINCTRL("%s:irq=%d\n",__func__, irq);
1594 if (bank->toggle_edge_mode && edge_changed) {
1595 /* Interrupt params should only be set with ints disabled */
1596 data = readl_relaxed(bank->reg_base + GPIO_INTEN);
1597 writel_relaxed(0, bank->reg_base + GPIO_INTEN);
1598 writel(polarity, bank->reg_base + GPIO_INT_POLARITY);
1599 writel(data, bank->reg_base + GPIO_INTEN);
1602 chained_irq_exit(chip, desc);
1605 static int rockchip_gpio_irq_set_type(struct irq_data *d, unsigned int type)
1607 struct rockchip_pin_bank *bank = irq_data_get_irq_chip_data(d);
1608 struct rockchip_pinctrl *info = bank->drvdata;
1609 u32 mask = BIT(d->hwirq);
1614 unsigned long flags;
1616 DBG_PINCTRL("%s:type=%d,irq=%d,hwirq=%d\n",__func__,type, d->irq, (int)d->hwirq);
1618 /* make sure the pin is configured as gpio input */
1619 mux = (bank->bank_num << 12) | (((d->hwirq / 8) + 0x0A) << 8) | ((d->hwirq % 8)<< 4) | RK_FUNC_GPIO;
1620 rockchip_set_mux(bank, d->hwirq, mux);
1622 data = readl_relaxed(bank->reg_base + GPIO_SWPORT_DDR);
1624 writel_relaxed(data, bank->reg_base + GPIO_SWPORT_DDR);
1626 if (type & IRQ_TYPE_EDGE_BOTH)
1627 __irq_set_handler_locked(d->irq, handle_edge_irq);
1629 __irq_set_handler_locked(d->irq, handle_level_irq);
1631 spin_lock_irqsave(&bank->slock, flags);
1633 level = readl_relaxed(bank->reg_base + GPIO_INTTYPE_LEVEL);
1634 polarity = readl_relaxed(bank->reg_base + GPIO_INT_POLARITY);
1637 case IRQ_TYPE_EDGE_BOTH:
1638 bank->toggle_edge_mode |= mask;
1642 * Determine gpio state. If 1 next interrupt should be falling
1645 data = readl(bank->reg_base + GPIO_EXT_PORT);
1651 case IRQ_TYPE_EDGE_RISING:
1652 bank->toggle_edge_mode &= ~mask;
1656 case IRQ_TYPE_EDGE_FALLING:
1657 bank->toggle_edge_mode &= ~mask;
1661 case IRQ_TYPE_LEVEL_HIGH:
1662 bank->toggle_edge_mode &= ~mask;
1666 case IRQ_TYPE_LEVEL_LOW:
1667 bank->toggle_edge_mode &= ~mask;
1672 //spin_unlock_irqrestore(&bank->slock, flags);
1676 writel_relaxed(level, bank->reg_base + GPIO_INTTYPE_LEVEL);
1677 writel_relaxed(polarity, bank->reg_base + GPIO_INT_POLARITY);
1679 spin_unlock_irqrestore(&bank->slock, flags);
1681 DBG_PINCTRL("%s:type=%d,irq=%d,hwirq=%d,ok\n",__func__,type, d->irq, (int)d->hwirq);
1685 static int rockchip_interrupts_register(struct platform_device *pdev,
1686 struct rockchip_pinctrl *info)
1688 struct rockchip_pin_ctrl *ctrl = info->ctrl;
1689 struct rockchip_pin_bank *bank = ctrl->pin_banks;
1690 unsigned int clr = IRQ_NOREQUEST | IRQ_NOPROBE | IRQ_NOAUTOEN;
1691 struct irq_chip_generic *gc;
1695 for (i = 0; i < ctrl->nr_banks; ++i, ++bank) {
1697 dev_warn(&pdev->dev, "bank %s is not valid\n",
1702 bank->domain = irq_domain_add_linear(bank->of_node, 32,
1703 &irq_generic_chip_ops, NULL);
1704 if (!bank->domain) {
1705 dev_warn(&pdev->dev, "could not initialize irq domain for bank %s\n",
1710 ret = irq_alloc_domain_generic_chips(bank->domain, 32, 1,
1711 "rockchip_gpio_irq", handle_level_irq,
1712 clr, 0, IRQ_GC_INIT_MASK_CACHE);
1714 dev_err(&pdev->dev, "could not alloc generic chips for bank %s\n",
1716 irq_domain_remove(bank->domain);
1720 gc = irq_get_domain_generic_chip(bank->domain, 0);
1721 gc->reg_base = bank->reg_base;
1723 gc->chip_types[0].regs.mask = GPIO_INTEN;
1724 gc->chip_types[0].regs.ack = GPIO_PORTS_EOI;
1725 gc->chip_types[0].chip.irq_ack = irq_gc_ack_set_bit;
1726 gc->chip_types[0].chip.irq_mask = irq_gc_mask_clr_bit;
1727 gc->chip_types[0].chip.irq_unmask = irq_gc_mask_set_bit;
1728 gc->chip_types[0].chip.irq_set_wake = irq_gc_set_wake;
1729 gc->chip_types[0].chip.irq_set_type = rockchip_gpio_irq_set_type;
1731 irq_set_handler_data(bank->irq, bank);
1732 irq_set_chained_handler(bank->irq, rockchip_irq_demux);
1739 static inline void rockchip_gpio_bit_op(void __iomem *reg_base, unsigned int offset, u32 bit, unsigned char flag)
1741 u32 val = __raw_readl(reg_base + offset);
1746 __raw_writel(val, reg_base + offset);
1749 static inline unsigned gpio_to_bit(struct rockchip_pin_bank *bank, unsigned gpio)
1751 while (gpio >= (bank->pin_base + bank->nr_pins))
1754 return gpio - bank->pin_base;
1757 static inline unsigned offset_to_bit(unsigned offset)
1759 return 1u << offset;
1762 static void GPIOSetPinLevel(void __iomem *reg_base, unsigned int bit, eGPIOPinLevel_t level)
1764 rockchip_gpio_bit_op(reg_base, GPIO_SWPORT_DDR, bit, 1);
1765 rockchip_gpio_bit_op(reg_base, GPIO_SWPORT_DR, bit, level);
1768 static int GPIOGetPinLevel(void __iomem *reg_base, unsigned int bit)
1770 return ((__raw_readl(reg_base + GPIO_EXT_PORT) & bit) != 0);
1773 static void GPIOSetPinDirection(void __iomem *reg_base, unsigned int bit, eGPIOPinDirection_t direction)
1775 rockchip_gpio_bit_op(reg_base, GPIO_SWPORT_DDR, bit, direction);
1776 /* Enable debounce may halt cpu on wfi, disable it by default */
1777 //rockchip_gpio_bit_op(reg_base, GPIO_DEBOUNCE, bit, 1);
1780 static void GPIOEnableIntr(void __iomem *reg_base, unsigned int bit)
1782 rockchip_gpio_bit_op(reg_base, GPIO_INTEN, bit, 1);
1785 static void GPIODisableIntr(void __iomem *reg_base, unsigned int bit)
1787 rockchip_gpio_bit_op(reg_base, GPIO_INTEN, bit, 0);
1790 static void GPIOAckIntr(void __iomem *reg_base, unsigned int bit)
1792 rockchip_gpio_bit_op(reg_base, GPIO_PORTS_EOI, bit, 1);
1795 static void GPIOSetIntrType(void __iomem *reg_base, unsigned int bit, eGPIOIntType_t type)
1799 rockchip_gpio_bit_op(reg_base, GPIO_INT_POLARITY, bit, 0);
1800 rockchip_gpio_bit_op(reg_base, GPIO_INTTYPE_LEVEL, bit, 0);
1803 rockchip_gpio_bit_op(reg_base, GPIO_INTTYPE_LEVEL, bit, 0);
1804 rockchip_gpio_bit_op(reg_base, GPIO_INT_POLARITY, bit, 1);
1806 case GPIOEdgelFalling:
1807 rockchip_gpio_bit_op(reg_base, GPIO_INTTYPE_LEVEL, bit, 1);
1808 rockchip_gpio_bit_op(reg_base, GPIO_INT_POLARITY, bit, 0);
1810 case GPIOEdgelRising:
1811 rockchip_gpio_bit_op(reg_base, GPIO_INTTYPE_LEVEL, bit, 1);
1812 rockchip_gpio_bit_op(reg_base, GPIO_INT_POLARITY, bit, 1);
1817 static int rockchip_gpio_irq_set_type(struct irq_data *d, unsigned int type)
1819 struct rockchip_pin_bank *bank = irq_data_get_irq_chip_data(d);
1820 u32 bit = gpio_to_bit(irq_to_gpio(d->irq));
1821 eGPIOIntType_t int_type;
1822 unsigned long flags;
1825 case IRQ_TYPE_EDGE_RISING:
1826 int_type = GPIOEdgelRising;
1828 case IRQ_TYPE_EDGE_FALLING:
1829 int_type = GPIOEdgelFalling;
1831 case IRQ_TYPE_LEVEL_HIGH:
1832 int_type = GPIOLevelHigh;
1834 case IRQ_TYPE_LEVEL_LOW:
1835 int_type = GPIOLevelLow;
1841 spin_lock_irqsave(&bank->slock, flags);
1842 //ÉèÖÃΪÖжÏ֮ǰ£¬±ØÐëÏÈÉèÖÃΪÊäÈë״̬
1843 GPIOSetPinDirection(bank->reg_base, bit, 0);
1844 GPIOSetIntrType(bank->reg_base, bit, int_type);
1845 spin_unlock_irqrestore(&bank->slock, flags);
1847 if (type & (IRQ_TYPE_LEVEL_LOW | IRQ_TYPE_LEVEL_HIGH))
1848 __irq_set_handler_locked(d->irq, handle_level_irq);
1849 else if (type & (IRQ_TYPE_EDGE_FALLING | IRQ_TYPE_EDGE_RISING))
1850 __irq_set_handler_locked(d->irq, handle_edge_irq);
1855 static int rockchip_gpio_irq_set_wake(struct irq_data *d, unsigned int on)
1857 struct rockchip_pin_bank *bank = irq_data_get_irq_chip_data(d);
1858 struct rockchip_pinctrl *info = bank->drvdata;
1860 //u32 bit = gpio_to_bit(bank, d->irq);
1862 unsigned long flags;
1864 spin_lock_irqsave(&bank->slock, flags);
1867 bank->suspend_wakeup |= bit;
1869 bank->suspend_wakeup &= ~bit;
1870 spin_unlock_irqrestore(&bank->slock, flags);
1872 DBG_PINCTRL("%s:irq=%d,hwirq=%d,bank->reg_base=0x%x,bit=%d\n",__func__,d->irq, (int)d->hwirq, (int)bank->reg_base,bit);
1876 static void rockchip_gpio_irq_unmask(struct irq_data *d)
1878 struct rockchip_pin_bank *bank = irq_data_get_irq_chip_data(d);
1879 struct rockchip_pinctrl *info = bank->drvdata;
1880 //u32 bit = gpio_to_bit(bank, d->irq);
1882 unsigned long flags;
1884 spin_lock_irqsave(&bank->slock, flags);
1885 GPIOEnableIntr(bank->reg_base, bit);
1886 spin_unlock_irqrestore(&bank->slock, flags);
1888 DBG_PINCTRL("%s:irq=%d,hwirq=%d,bank->reg_base=0x%x,bit=%d\n",__func__,d->irq, (int)d->hwirq, (int)bank->reg_base,bit);
1891 static void rockchip_gpio_irq_mask(struct irq_data *d)
1893 struct rockchip_pin_bank *bank = irq_data_get_irq_chip_data(d);
1894 struct rockchip_pinctrl *info = bank->drvdata;
1895 //u32 bit = gpio_to_bit(bank, d->irq);
1897 unsigned long flags;
1899 spin_lock_irqsave(&bank->slock, flags);
1900 GPIODisableIntr(bank->reg_base, bit);
1901 spin_unlock_irqrestore(&bank->slock, flags);
1903 DBG_PINCTRL("%s:irq=%d,hwirq=%d,bank->reg_base=0x%x,bit=%d\n",__func__,d->irq, (int)d->hwirq, (int)bank->reg_base,bit);
1906 static void rockchip_gpio_irq_ack(struct irq_data *d)
1908 struct rockchip_pin_bank *bank = irq_data_get_irq_chip_data(d);
1909 struct rockchip_pinctrl *info = bank->drvdata;
1910 //u32 bit = gpio_to_bit(bank, d->irq);
1913 GPIOAckIntr(bank->reg_base, bit);
1915 DBG_PINCTRL("%s:irq=%d,hwirq=%d,bank->reg_base=0x%x,bit=%d\n",__func__,d->irq, (int)d->hwirq, (int)bank->reg_base,bit);
1919 static struct irq_chip rockchip_gpio_irq_chip = {
1921 .irq_ack = rockchip_gpio_irq_ack,
1922 .irq_disable = rockchip_gpio_irq_mask,
1923 .irq_mask = rockchip_gpio_irq_mask,
1924 .irq_unmask = rockchip_gpio_irq_unmask,
1925 .irq_set_type = rockchip_gpio_irq_set_type,
1926 .irq_set_wake = rockchip_gpio_irq_set_wake,
1930 static int rockchip_gpio_irq_map(struct irq_domain *d, unsigned int irq,
1931 irq_hw_number_t hwirq)
1933 struct rockchip_pin_bank *bank = d->host_data;
1934 struct rockchip_pinctrl *info = bank->drvdata;
1935 struct irq_data *irq_data = irq_get_irq_data(irq);
1939 printk("%s:bank=0x%p,irq=%d\n",__func__,bank, irq);
1943 irq_set_chip_and_handler(irq, &rockchip_gpio_irq_chip, handle_level_irq);
1944 irq_set_chip_data(irq, bank);
1945 set_irq_flags(irq, IRQF_VALID);
1947 irq_data->hwirq = hwirq;
1948 irq_data->irq = irq;
1950 DBG_PINCTRL("%s:irq=%d\n",__func__,irq);
1954 const struct irq_domain_ops rockchip_gpio_irq_ops = {
1955 .map = rockchip_gpio_irq_map,
1956 .xlate = irq_domain_xlate_twocell,
1960 static int rockchip_interrupts_register(struct platform_device *pdev,
1961 struct rockchip_pinctrl *info)
1963 struct rockchip_pin_ctrl *ctrl = info->ctrl;
1964 struct rockchip_pin_bank *bank = ctrl->pin_banks;
1965 //unsigned int clr = IRQ_NOREQUEST | IRQ_NOPROBE | IRQ_NOAUTOEN;
1968 for (i = 0; i < ctrl->nr_banks; ++i, ++bank) {
1970 dev_warn(&pdev->dev, "bank %s is not valid\n",
1975 __raw_writel(0, bank->reg_base + GPIO_INTEN);
1977 bank->drvdata = info;
1978 bank->domain = irq_domain_add_linear(bank->of_node, 32,
1979 &rockchip_gpio_irq_ops, bank);
1980 if (!bank->domain) {
1981 dev_warn(&pdev->dev, "could not initialize irq domain for bank %s\n",
1987 DBG_PINCTRL("%s:bank=%d\n",__func__,i);
1989 irq_set_handler_data(bank->irq, bank);
1990 irq_set_chained_handler(bank->irq, rockchip_irq_demux);
1999 static int rockchip_gpiolib_register(struct platform_device *pdev,
2000 struct rockchip_pinctrl *info)
2002 struct rockchip_pin_ctrl *ctrl = info->ctrl;
2003 struct rockchip_pin_bank *bank = ctrl->pin_banks;
2004 struct gpio_chip *gc;
2008 for (i = 0; i < ctrl->nr_banks; ++i, ++bank) {
2010 dev_warn(&pdev->dev, "bank %s is not valid\n",
2015 bank->gpio_chip = rockchip_gpiolib_chip;
2017 gc = &bank->gpio_chip;
2018 gc->base = bank->pin_base;
2019 gc->ngpio = bank->nr_pins;
2020 gc->dev = &pdev->dev;
2021 gc->of_node = bank->of_node;
2022 gc->label = bank->name;
2024 ret = gpiochip_add(gc);
2026 dev_err(&pdev->dev, "failed to register gpio_chip %s, error code: %d\n",
2032 rockchip_interrupts_register(pdev, info);
2037 for (--i, --bank; i >= 0; --i, --bank) {
2041 if (gpiochip_remove(&bank->gpio_chip))
2042 dev_err(&pdev->dev, "gpio chip %s remove failed\n",
2043 bank->gpio_chip.label);
2048 static int rockchip_gpiolib_unregister(struct platform_device *pdev,
2049 struct rockchip_pinctrl *info)
2051 struct rockchip_pin_ctrl *ctrl = info->ctrl;
2052 struct rockchip_pin_bank *bank = ctrl->pin_banks;
2056 for (i = 0; !ret && i < ctrl->nr_banks; ++i, ++bank) {
2060 ret = gpiochip_remove(&bank->gpio_chip);
2064 dev_err(&pdev->dev, "gpio chip remove failed\n");
2069 static int rockchip_get_bank_data(struct rockchip_pin_bank *bank,
2072 struct resource res;
2074 if (of_address_to_resource(bank->of_node, 0, &res)) {
2075 dev_err(dev, "cannot find IO resource for bank\n");
2079 bank->reg_base = devm_ioremap_resource(dev, &res);
2080 if (IS_ERR(bank->reg_base))
2081 return PTR_ERR(bank->reg_base);
2084 * special case, where parts of the pull setting-registers are
2085 * part of the PMU register space
2087 if (of_device_is_compatible(bank->of_node,
2088 "rockchip,rk3188-gpio-bank0")) {
2089 bank->bank_type = RK3188_BANK0;
2091 if (of_address_to_resource(bank->of_node, 1, &res)) {
2092 dev_err(dev, "cannot find IO resource for bank\n");
2096 bank->reg_pull = devm_ioremap_resource(dev, &res);
2097 if (IS_ERR(bank->reg_pull))
2098 return PTR_ERR(bank->reg_pull);
2100 bank->bank_type = COMMON_BANK;
2103 bank->irq = irq_of_parse_and_map(bank->of_node, 0);
2105 bank->clk = of_clk_get(bank->of_node, 0);
2106 //if (IS_ERR(bank->clk))
2107 //return PTR_ERR(bank->clk);
2109 //return clk_prepare_enable(bank->clk);
2112 static const struct of_device_id rockchip_pinctrl_dt_match[];
2114 /* retrieve the soc specific data */
2115 static struct rockchip_pin_ctrl *rockchip_pinctrl_get_soc_data(
2116 struct rockchip_pinctrl *d,
2117 struct platform_device *pdev)
2119 const struct of_device_id *match;
2120 struct device_node *node = pdev->dev.of_node;
2121 struct device_node *np;
2122 struct rockchip_pin_ctrl *ctrl;
2123 struct rockchip_pin_bank *bank;
2126 match = of_match_node(rockchip_pinctrl_dt_match, node);
2127 ctrl = (struct rockchip_pin_ctrl *)match->data;
2129 for_each_child_of_node(node, np) {
2130 if (!of_find_property(np, "gpio-controller", NULL))
2133 bank = ctrl->pin_banks;
2134 for (i = 0; i < ctrl->nr_banks; ++i, ++bank) {
2135 if (!strcmp(bank->name, np->name)) {
2138 if (!rockchip_get_bank_data(bank, &pdev->dev))
2146 bank = ctrl->pin_banks;
2147 for (i = 0; i < ctrl->nr_banks; ++i, ++bank) {
2148 spin_lock_init(&bank->slock);
2150 bank->pin_base = ctrl->nr_pins;
2151 ctrl->nr_pins += bank->nr_pins;
2157 static irqreturn_t pinctrl_interrupt_test(int irq, void *dev_id)
2159 printk("%s:line=%d\n",__func__, __LINE__);
2163 static int rockchip_pinctrl_probe(struct platform_device *pdev)
2165 struct rockchip_pinctrl *info;
2166 struct device *dev = &pdev->dev;
2167 struct rockchip_pin_ctrl *ctrl;
2168 struct resource *res;
2171 if (!dev->of_node) {
2172 dev_err(dev, "device tree node not found\n");
2176 info = devm_kzalloc(dev, sizeof(struct rockchip_pinctrl), GFP_KERNEL);
2180 ctrl = rockchip_pinctrl_get_soc_data(info, pdev);
2182 dev_err(dev, "driver data not available\n");
2188 atomic_set(&info->debug_flag, 1);
2190 res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
2191 info->reg_base = devm_ioremap_resource(&pdev->dev, res);
2192 if (IS_ERR(info->reg_base))
2193 return PTR_ERR(info->reg_base);
2195 /* The RK3188 has its pull registers in a separate place */
2196 if (ctrl->type == RK3188) {
2197 res = platform_get_resource(pdev, IORESOURCE_MEM, 1);
2198 info->reg_pull = devm_ioremap_resource(&pdev->dev, res);
2199 if (IS_ERR(info->reg_base))
2200 return PTR_ERR(info->reg_base);
2203 ret = rockchip_gpiolib_register(pdev, info);
2207 ret = rockchip_pinctrl_register(pdev, info);
2209 rockchip_gpiolib_unregister(pdev, info);
2213 platform_set_drvdata(pdev, info);
2216 for(i=1; i<32*4; i++)
2220 gpio_request(i, NULL);
2221 gpio_direction_input(i);
2223 ret = request_irq(gpio_to_irq(i), pinctrl_interrupt_test, IRQ_TYPE_EDGE_RISING, "test", info);
2224 disable_irq(gpio_to_irq(i));
2227 printk("%s:init ok\n",__func__);
2231 static struct rockchip_pin_bank rk2928_pin_banks[] = {
2232 PIN_BANK(0, 32, "gpio0"),
2233 PIN_BANK(1, 32, "gpio1"),
2234 PIN_BANK(2, 32, "gpio2"),
2235 PIN_BANK(3, 32, "gpio3"),
2238 static struct rockchip_pin_ctrl rk2928_pin_ctrl = {
2239 .pin_banks = rk2928_pin_banks,
2240 .nr_banks = ARRAY_SIZE(rk2928_pin_banks),
2241 .label = "RK2928-GPIO",
2244 .pull_calc_reg = rk2928_calc_pull_reg_and_bit,
2247 static struct rockchip_pin_bank rk3066a_pin_banks[] = {
2248 PIN_BANK(0, 32, "gpio0"),
2249 PIN_BANK(1, 32, "gpio1"),
2250 PIN_BANK(2, 32, "gpio2"),
2251 PIN_BANK(3, 32, "gpio3"),
2252 PIN_BANK(4, 32, "gpio4"),
2253 PIN_BANK(6, 16, "gpio6"),
2256 static struct rockchip_pin_ctrl rk3066a_pin_ctrl = {
2257 .pin_banks = rk3066a_pin_banks,
2258 .nr_banks = ARRAY_SIZE(rk3066a_pin_banks),
2259 .label = "RK3066a-GPIO",
2262 .pull_calc_reg = rk2928_calc_pull_reg_and_bit,
2265 static struct rockchip_pin_bank rk3066b_pin_banks[] = {
2266 PIN_BANK(0, 32, "gpio0"),
2267 PIN_BANK(1, 32, "gpio1"),
2268 PIN_BANK(2, 32, "gpio2"),
2269 PIN_BANK(3, 32, "gpio3"),
2272 static struct rockchip_pin_ctrl rk3066b_pin_ctrl = {
2273 .pin_banks = rk3066b_pin_banks,
2274 .nr_banks = ARRAY_SIZE(rk3066b_pin_banks),
2275 .label = "RK3066b-GPIO",
2280 static struct rockchip_pin_bank rk3188_pin_banks[] = {
2281 PIN_BANK(0, 32, "gpio0"),
2282 PIN_BANK(1, 32, "gpio1"),
2283 PIN_BANK(2, 32, "gpio2"),
2284 PIN_BANK(3, 32, "gpio3"),
2287 static struct rockchip_pin_ctrl rk3188_pin_ctrl = {
2288 .pin_banks = rk3188_pin_banks,
2289 .nr_banks = ARRAY_SIZE(rk3188_pin_banks),
2290 .label = "RK3188-GPIO",
2293 .pull_calc_reg = rk3188_calc_pull_reg_and_bit,
2296 static const struct of_device_id rockchip_pinctrl_dt_match[] = {
2297 { .compatible = "rockchip,rk2928-pinctrl",
2298 .data = (void *)&rk2928_pin_ctrl },
2299 { .compatible = "rockchip,rk3066a-pinctrl",
2300 .data = (void *)&rk3066a_pin_ctrl },
2301 { .compatible = "rockchip,rk3066b-pinctrl",
2302 .data = (void *)&rk3066b_pin_ctrl },
2303 { .compatible = "rockchip,rk3188-pinctrl",
2304 .data = (void *)&rk3188_pin_ctrl },
2307 MODULE_DEVICE_TABLE(of, rockchip_pinctrl_dt_match);
2309 static struct platform_driver rockchip_pinctrl_driver = {
2310 .probe = rockchip_pinctrl_probe,
2312 .name = "rockchip-pinctrl",
2313 .owner = THIS_MODULE,
2314 .of_match_table = rockchip_pinctrl_dt_match,
2318 static int __init rockchip_pinctrl_drv_register(void)
2320 return platform_driver_register(&rockchip_pinctrl_driver);
2322 postcore_initcall(rockchip_pinctrl_drv_register);
2324 MODULE_AUTHOR("Heiko Stuebner <heiko@sntech.de>");
2325 MODULE_DESCRIPTION("Rockchip pinctrl driver");
2326 MODULE_LICENSE("GPL v2");