13d0407baSopenharmony_ci/* SPDX-License-Identifier: GPL-2.0-only */ 23d0407baSopenharmony_ci/* 33d0407baSopenharmony_ci * Copyright (c) 2020-2021 Rockchip Electronics Co. Ltd. 43d0407baSopenharmony_ci * 53d0407baSopenharmony_ci * Copyright (c) 2013 MundoReader S.L. 63d0407baSopenharmony_ci * Author: Heiko Stuebner <heiko@sntech.de> 73d0407baSopenharmony_ci * 83d0407baSopenharmony_ci * With some ideas taken from pinctrl-samsung: 93d0407baSopenharmony_ci * Copyright (c) 2012 Samsung Electronics Co., Ltd. 103d0407baSopenharmony_ci * http://www.samsung.com 113d0407baSopenharmony_ci * Copyright (c) 2012 Linaro Ltd 123d0407baSopenharmony_ci * https://www.linaro.org 133d0407baSopenharmony_ci * 143d0407baSopenharmony_ci * and pinctrl-at91: 153d0407baSopenharmony_ci * Copyright (C) 2011-2012 Jean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com> 163d0407baSopenharmony_ci */ 173d0407baSopenharmony_ci 183d0407baSopenharmony_ci#ifndef _PINCTRL_ROCKCHIP_H 193d0407baSopenharmony_ci#define _PINCTRL_ROCKCHIP_H 203d0407baSopenharmony_ci 213d0407baSopenharmony_ci#define RK_GPIO0_A0 0 223d0407baSopenharmony_ci#define RK_GPIO0_A1 1 233d0407baSopenharmony_ci#define RK_GPIO0_A2 2 243d0407baSopenharmony_ci#define RK_GPIO0_A3 3 253d0407baSopenharmony_ci#define RK_GPIO0_A4 4 263d0407baSopenharmony_ci#define RK_GPIO0_A5 5 273d0407baSopenharmony_ci#define RK_GPIO0_A6 6 283d0407baSopenharmony_ci#define RK_GPIO0_A7 7 293d0407baSopenharmony_ci#define RK_GPIO0_B0 8 303d0407baSopenharmony_ci#define RK_GPIO0_B1 9 313d0407baSopenharmony_ci#define RK_GPIO0_B2 10 323d0407baSopenharmony_ci#define RK_GPIO0_B3 11 333d0407baSopenharmony_ci#define RK_GPIO0_B4 12 343d0407baSopenharmony_ci#define RK_GPIO0_B5 13 353d0407baSopenharmony_ci#define RK_GPIO0_B6 14 363d0407baSopenharmony_ci#define RK_GPIO0_B7 15 373d0407baSopenharmony_ci#define RK_GPIO0_C0 16 383d0407baSopenharmony_ci#define RK_GPIO0_C1 17 393d0407baSopenharmony_ci#define RK_GPIO0_C2 18 403d0407baSopenharmony_ci#define RK_GPIO0_C3 19 413d0407baSopenharmony_ci#define RK_GPIO0_C4 20 423d0407baSopenharmony_ci#define RK_GPIO0_C5 21 433d0407baSopenharmony_ci#define RK_GPIO0_C6 22 443d0407baSopenharmony_ci#define RK_GPIO0_C7 23 453d0407baSopenharmony_ci#define RK_GPIO0_D0 24 463d0407baSopenharmony_ci#define RK_GPIO0_D1 25 473d0407baSopenharmony_ci#define RK_GPIO0_D2 26 483d0407baSopenharmony_ci#define RK_GPIO0_D3 27 493d0407baSopenharmony_ci#define RK_GPIO0_D4 28 503d0407baSopenharmony_ci#define RK_GPIO0_D5 29 513d0407baSopenharmony_ci#define RK_GPIO0_D6 30 523d0407baSopenharmony_ci#define RK_GPIO0_D7 31 533d0407baSopenharmony_ci 543d0407baSopenharmony_ci#define RK_GPIO1_A0 32 553d0407baSopenharmony_ci#define RK_GPIO1_A1 33 563d0407baSopenharmony_ci#define RK_GPIO1_A2 34 573d0407baSopenharmony_ci#define RK_GPIO1_A3 35 583d0407baSopenharmony_ci#define RK_GPIO1_A4 36 593d0407baSopenharmony_ci#define RK_GPIO1_A5 37 603d0407baSopenharmony_ci#define RK_GPIO1_A6 38 613d0407baSopenharmony_ci#define RK_GPIO1_A7 39 623d0407baSopenharmony_ci#define RK_GPIO1_B0 40 633d0407baSopenharmony_ci#define RK_GPIO1_B1 41 643d0407baSopenharmony_ci#define RK_GPIO1_B2 42 653d0407baSopenharmony_ci#define RK_GPIO1_B3 43 663d0407baSopenharmony_ci#define RK_GPIO1_B4 44 673d0407baSopenharmony_ci#define RK_GPIO1_B5 45 683d0407baSopenharmony_ci#define RK_GPIO1_B6 46 693d0407baSopenharmony_ci#define RK_GPIO1_B7 47 703d0407baSopenharmony_ci#define RK_GPIO1_C0 48 713d0407baSopenharmony_ci#define RK_GPIO1_C1 49 723d0407baSopenharmony_ci#define RK_GPIO1_C2 50 733d0407baSopenharmony_ci#define RK_GPIO1_C3 51 743d0407baSopenharmony_ci#define RK_GPIO1_C4 52 753d0407baSopenharmony_ci#define RK_GPIO1_C5 53 763d0407baSopenharmony_ci#define RK_GPIO1_C6 54 773d0407baSopenharmony_ci#define RK_GPIO1_C7 55 783d0407baSopenharmony_ci#define RK_GPIO1_D0 56 793d0407baSopenharmony_ci#define RK_GPIO1_D1 57 803d0407baSopenharmony_ci#define RK_GPIO1_D2 58 813d0407baSopenharmony_ci#define RK_GPIO1_D3 59 823d0407baSopenharmony_ci#define RK_GPIO1_D4 60 833d0407baSopenharmony_ci#define RK_GPIO1_D5 61 843d0407baSopenharmony_ci#define RK_GPIO1_D6 62 853d0407baSopenharmony_ci#define RK_GPIO1_D7 63 863d0407baSopenharmony_ci 873d0407baSopenharmony_ci#define RK_GPIO2_A0 64 883d0407baSopenharmony_ci#define RK_GPIO2_A1 65 893d0407baSopenharmony_ci#define RK_GPIO2_A2 66 903d0407baSopenharmony_ci#define RK_GPIO2_A3 67 913d0407baSopenharmony_ci#define RK_GPIO2_A4 68 923d0407baSopenharmony_ci#define RK_GPIO2_A5 69 933d0407baSopenharmony_ci#define RK_GPIO2_A6 70 943d0407baSopenharmony_ci#define RK_GPIO2_A7 71 953d0407baSopenharmony_ci#define RK_GPIO2_B0 72 963d0407baSopenharmony_ci#define RK_GPIO2_B1 73 973d0407baSopenharmony_ci#define RK_GPIO2_B2 74 983d0407baSopenharmony_ci#define RK_GPIO2_B3 75 993d0407baSopenharmony_ci#define RK_GPIO2_B4 76 1003d0407baSopenharmony_ci#define RK_GPIO2_B5 77 1013d0407baSopenharmony_ci#define RK_GPIO2_B6 78 1023d0407baSopenharmony_ci#define RK_GPIO2_B7 79 1033d0407baSopenharmony_ci#define RK_GPIO2_C0 80 1043d0407baSopenharmony_ci#define RK_GPIO2_C1 81 1053d0407baSopenharmony_ci#define RK_GPIO2_C2 82 1063d0407baSopenharmony_ci#define RK_GPIO2_C3 83 1073d0407baSopenharmony_ci#define RK_GPIO2_C4 84 1083d0407baSopenharmony_ci#define RK_GPIO2_C5 85 1093d0407baSopenharmony_ci#define RK_GPIO2_C6 86 1103d0407baSopenharmony_ci#define RK_GPIO2_C7 87 1113d0407baSopenharmony_ci#define RK_GPIO2_D0 88 1123d0407baSopenharmony_ci#define RK_GPIO2_D1 89 1133d0407baSopenharmony_ci#define RK_GPIO2_D2 90 1143d0407baSopenharmony_ci#define RK_GPIO2_D3 91 1153d0407baSopenharmony_ci#define RK_GPIO2_D4 92 1163d0407baSopenharmony_ci#define RK_GPIO2_D5 93 1173d0407baSopenharmony_ci#define RK_GPIO2_D6 94 1183d0407baSopenharmony_ci#define RK_GPIO2_D7 95 1193d0407baSopenharmony_ci 1203d0407baSopenharmony_ci#define RK_GPIO3_A0 96 1213d0407baSopenharmony_ci#define RK_GPIO3_A1 97 1223d0407baSopenharmony_ci#define RK_GPIO3_A2 98 1233d0407baSopenharmony_ci#define RK_GPIO3_A3 99 1243d0407baSopenharmony_ci#define RK_GPIO3_A4 100 1253d0407baSopenharmony_ci#define RK_GPIO3_A5 101 1263d0407baSopenharmony_ci#define RK_GPIO3_A6 102 1273d0407baSopenharmony_ci#define RK_GPIO3_A7 103 1283d0407baSopenharmony_ci#define RK_GPIO3_B0 104 1293d0407baSopenharmony_ci#define RK_GPIO3_B1 105 1303d0407baSopenharmony_ci#define RK_GPIO3_B2 106 1313d0407baSopenharmony_ci#define RK_GPIO3_B3 107 1323d0407baSopenharmony_ci#define RK_GPIO3_B4 108 1333d0407baSopenharmony_ci#define RK_GPIO3_B5 109 1343d0407baSopenharmony_ci#define RK_GPIO3_B6 110 1353d0407baSopenharmony_ci#define RK_GPIO3_B7 111 1363d0407baSopenharmony_ci#define RK_GPIO3_C0 112 1373d0407baSopenharmony_ci#define RK_GPIO3_C1 113 1383d0407baSopenharmony_ci#define RK_GPIO3_C2 114 1393d0407baSopenharmony_ci#define RK_GPIO3_C3 115 1403d0407baSopenharmony_ci#define RK_GPIO3_C4 116 1413d0407baSopenharmony_ci#define RK_GPIO3_C5 117 1423d0407baSopenharmony_ci#define RK_GPIO3_C6 118 1433d0407baSopenharmony_ci#define RK_GPIO3_C7 119 1443d0407baSopenharmony_ci#define RK_GPIO3_D0 120 1453d0407baSopenharmony_ci#define RK_GPIO3_D1 121 1463d0407baSopenharmony_ci#define RK_GPIO3_D2 122 1473d0407baSopenharmony_ci#define RK_GPIO3_D3 123 1483d0407baSopenharmony_ci#define RK_GPIO3_D4 124 1493d0407baSopenharmony_ci#define RK_GPIO3_D5 125 1503d0407baSopenharmony_ci#define RK_GPIO3_D6 126 1513d0407baSopenharmony_ci#define RK_GPIO3_D7 127 1523d0407baSopenharmony_ci 1533d0407baSopenharmony_ci#define RK_GPIO4_A0 128 1543d0407baSopenharmony_ci#define RK_GPIO4_A1 129 1553d0407baSopenharmony_ci#define RK_GPIO4_A2 130 1563d0407baSopenharmony_ci#define RK_GPIO4_A3 131 1573d0407baSopenharmony_ci#define RK_GPIO4_A4 132 1583d0407baSopenharmony_ci#define RK_GPIO4_A5 133 1593d0407baSopenharmony_ci#define RK_GPIO4_A6 134 1603d0407baSopenharmony_ci#define RK_GPIO4_A7 135 1613d0407baSopenharmony_ci#define RK_GPIO4_B0 136 1623d0407baSopenharmony_ci#define RK_GPIO4_B1 137 1633d0407baSopenharmony_ci#define RK_GPIO4_B2 138 1643d0407baSopenharmony_ci#define RK_GPIO4_B3 139 1653d0407baSopenharmony_ci#define RK_GPIO4_B4 140 1663d0407baSopenharmony_ci#define RK_GPIO4_B5 141 1673d0407baSopenharmony_ci#define RK_GPIO4_B6 142 1683d0407baSopenharmony_ci#define RK_GPIO4_B7 143 1693d0407baSopenharmony_ci#define RK_GPIO4_C0 144 1703d0407baSopenharmony_ci#define RK_GPIO4_C1 145 1713d0407baSopenharmony_ci#define RK_GPIO4_C2 146 1723d0407baSopenharmony_ci#define RK_GPIO4_C3 147 1733d0407baSopenharmony_ci#define RK_GPIO4_C4 148 1743d0407baSopenharmony_ci#define RK_GPIO4_C5 149 1753d0407baSopenharmony_ci#define RK_GPIO4_C6 150 1763d0407baSopenharmony_ci#define RK_GPIO4_C7 151 1773d0407baSopenharmony_ci#define RK_GPIO4_D0 152 1783d0407baSopenharmony_ci#define RK_GPIO4_D1 153 1793d0407baSopenharmony_ci#define RK_GPIO4_D2 154 1803d0407baSopenharmony_ci#define RK_GPIO4_D3 155 1813d0407baSopenharmony_ci#define RK_GPIO4_D4 156 1823d0407baSopenharmony_ci#define RK_GPIO4_D5 157 1833d0407baSopenharmony_ci#define RK_GPIO4_D6 158 1843d0407baSopenharmony_ci#define RK_GPIO4_D7 159 1853d0407baSopenharmony_ci 1863d0407baSopenharmony_cienum rockchip_pinctrl_type { 1873d0407baSopenharmony_ci PX30, 1883d0407baSopenharmony_ci RV1108, 1893d0407baSopenharmony_ci RV1126, 1903d0407baSopenharmony_ci RK1808, 1913d0407baSopenharmony_ci RK2928, 1923d0407baSopenharmony_ci RK3066B, 1933d0407baSopenharmony_ci RK3128, 1943d0407baSopenharmony_ci RK3188, 1953d0407baSopenharmony_ci RK3288, 1963d0407baSopenharmony_ci RK3308, 1973d0407baSopenharmony_ci RK3368, 1983d0407baSopenharmony_ci RK3399, 1993d0407baSopenharmony_ci RK3568, 2003d0407baSopenharmony_ci RK3588, 2013d0407baSopenharmony_ci}; 2023d0407baSopenharmony_ci 2033d0407baSopenharmony_ci/** 2043d0407baSopenharmony_ci * struct rockchip_gpio_regs 2053d0407baSopenharmony_ci * @port_dr: data register 2063d0407baSopenharmony_ci * @port_ddr: data direction register 2073d0407baSopenharmony_ci * @int_en: interrupt enable 2083d0407baSopenharmony_ci * @int_mask: interrupt mask 2093d0407baSopenharmony_ci * @int_type: interrupt trigger type, such as high, low, edge trriger type. 2103d0407baSopenharmony_ci * @int_polarity: interrupt polarity enable register 2113d0407baSopenharmony_ci * @int_bothedge: interrupt bothedge enable register 2123d0407baSopenharmony_ci * @int_status: interrupt status register 2133d0407baSopenharmony_ci * @int_rawstatus: int_status = int_rawstatus & int_mask 2143d0407baSopenharmony_ci * @debounce: enable debounce for interrupt signal 2153d0407baSopenharmony_ci * @dbclk_div_en: enable divider for debounce clock 2163d0407baSopenharmony_ci * @dbclk_div_con: setting for divider of debounce clock 2173d0407baSopenharmony_ci * @port_eoi: end of interrupt of the port 2183d0407baSopenharmony_ci * @ext_port: port data from external 2193d0407baSopenharmony_ci * @version_id: controller version register 2203d0407baSopenharmony_ci */ 2213d0407baSopenharmony_cistruct rockchip_gpio_regs { 2223d0407baSopenharmony_ci u32 port_dr; 2233d0407baSopenharmony_ci u32 port_ddr; 2243d0407baSopenharmony_ci u32 int_en; 2253d0407baSopenharmony_ci u32 int_mask; 2263d0407baSopenharmony_ci u32 int_type; 2273d0407baSopenharmony_ci u32 int_polarity; 2283d0407baSopenharmony_ci u32 int_bothedge; 2293d0407baSopenharmony_ci u32 int_status; 2303d0407baSopenharmony_ci u32 int_rawstatus; 2313d0407baSopenharmony_ci u32 debounce; 2323d0407baSopenharmony_ci u32 dbclk_div_en; 2333d0407baSopenharmony_ci u32 dbclk_div_con; 2343d0407baSopenharmony_ci u32 port_eoi; 2353d0407baSopenharmony_ci u32 ext_port; 2363d0407baSopenharmony_ci u32 version_id; 2373d0407baSopenharmony_ci}; 2383d0407baSopenharmony_ci 2393d0407baSopenharmony_ci/** 2403d0407baSopenharmony_ci * struct rockchip_iomux 2413d0407baSopenharmony_ci * @type: iomux variant using IOMUX_* constants 2423d0407baSopenharmony_ci * @offset: if initialized to -1 it will be autocalculated, by specifying 2433d0407baSopenharmony_ci * an initial offset value the relevant source offset can be reset 2443d0407baSopenharmony_ci * to a new value for autocalculating the following iomux registers. 2453d0407baSopenharmony_ci */ 2463d0407baSopenharmony_cistruct rockchip_iomux { 2473d0407baSopenharmony_ci int type; 2483d0407baSopenharmony_ci int offset; 2493d0407baSopenharmony_ci}; 2503d0407baSopenharmony_ci 2513d0407baSopenharmony_ci/* 2523d0407baSopenharmony_ci * enum type index corresponding to rockchip_perpin_drv_list arrays index. 2533d0407baSopenharmony_ci */ 2543d0407baSopenharmony_cienum rockchip_pin_drv_type { 2553d0407baSopenharmony_ci DRV_TYPE_IO_DEFAULT = 0, 2563d0407baSopenharmony_ci DRV_TYPE_IO_1V8_OR_3V0, 2573d0407baSopenharmony_ci DRV_TYPE_IO_1V8_ONLY, 2583d0407baSopenharmony_ci DRV_TYPE_IO_1V8_3V0_AUTO, 2593d0407baSopenharmony_ci DRV_TYPE_IO_3V3_ONLY, 2603d0407baSopenharmony_ci DRV_TYPE_MAX 2613d0407baSopenharmony_ci}; 2623d0407baSopenharmony_ci 2633d0407baSopenharmony_ci/* 2643d0407baSopenharmony_ci * enum type index corresponding to rockchip_pull_list arrays index. 2653d0407baSopenharmony_ci */ 2663d0407baSopenharmony_cienum rockchip_pin_pull_type { 2673d0407baSopenharmony_ci PULL_TYPE_IO_DEFAULT = 0, 2683d0407baSopenharmony_ci PULL_TYPE_IO_1V8_ONLY, 2693d0407baSopenharmony_ci PULL_TYPE_MAX 2703d0407baSopenharmony_ci}; 2713d0407baSopenharmony_ci 2723d0407baSopenharmony_ci/** 2733d0407baSopenharmony_ci * struct rockchip_drv 2743d0407baSopenharmony_ci * @drv_type: drive strength variant using rockchip_perpin_drv_type 2753d0407baSopenharmony_ci * @offset: if initialized to -1 it will be autocalculated, by specifying 2763d0407baSopenharmony_ci * an initial offset value the relevant source offset can be reset 2773d0407baSopenharmony_ci * to a new value for autocalculating the following drive strength 2783d0407baSopenharmony_ci * registers. if used chips own cal_drv func instead to calculate 2793d0407baSopenharmony_ci * registers offset, the variant could be ignored. 2803d0407baSopenharmony_ci */ 2813d0407baSopenharmony_cistruct rockchip_drv { 2823d0407baSopenharmony_ci enum rockchip_pin_drv_type drv_type; 2833d0407baSopenharmony_ci int offset; 2843d0407baSopenharmony_ci}; 2853d0407baSopenharmony_ci 2863d0407baSopenharmony_ci/** 2873d0407baSopenharmony_ci * struct rockchip_pin_bank 2883d0407baSopenharmony_ci * @dev: the pinctrl device bind to the bank 2893d0407baSopenharmony_ci * @reg_base: register base of the gpio bank 2903d0407baSopenharmony_ci * @regmap_pull: optional separate register for additional pull settings 2913d0407baSopenharmony_ci * @clk: clock of the gpio bank 2923d0407baSopenharmony_ci * @db_clk: clock of the gpio debounce 2933d0407baSopenharmony_ci * @irq: interrupt of the gpio bank 2943d0407baSopenharmony_ci * @saved_masks: Saved content of GPIO_INTEN at suspend time. 2953d0407baSopenharmony_ci * @pin_base: first pin number 2963d0407baSopenharmony_ci * @nr_pins: number of pins in this bank 2973d0407baSopenharmony_ci * @name: name of the bank 2983d0407baSopenharmony_ci * @bank_num: number of the bank, to account for holes 2993d0407baSopenharmony_ci * @iomux: array describing the 4 iomux sources of the bank 3003d0407baSopenharmony_ci * @drv: array describing the 4 drive strength sources of the bank 3013d0407baSopenharmony_ci * @pull_type: array describing the 4 pull type sources of the bank 3023d0407baSopenharmony_ci * @valid: is all necessary information present 3033d0407baSopenharmony_ci * @of_node: dt node of this bank 3043d0407baSopenharmony_ci * @drvdata: common pinctrl basedata 3053d0407baSopenharmony_ci * @domain: irqdomain of the gpio bank 3063d0407baSopenharmony_ci * @gpio_chip: gpiolib chip 3073d0407baSopenharmony_ci * @grange: gpio range 3083d0407baSopenharmony_ci * @slock: spinlock for the gpio bank 3093d0407baSopenharmony_ci * @toggle_edge_mode: bit mask to toggle (falling/rising) edge mode 3103d0407baSopenharmony_ci * @recalced_mask: bit mask to indicate a need to recalulate the mask 3113d0407baSopenharmony_ci * @route_mask: bits describing the routing pins of per bank 3123d0407baSopenharmony_ci * @deferred_output: gpio output settings to be done after gpio bank probed 3133d0407baSopenharmony_ci * @deferred_lock: mutex for the deferred_output shared btw gpio and pinctrl 3143d0407baSopenharmony_ci */ 3153d0407baSopenharmony_cistruct rockchip_pin_bank { 3163d0407baSopenharmony_ci struct device *dev; 3173d0407baSopenharmony_ci void __iomem *reg_base; 3183d0407baSopenharmony_ci struct regmap *regmap_pull; 3193d0407baSopenharmony_ci struct clk *clk; 3203d0407baSopenharmony_ci struct clk *db_clk; 3213d0407baSopenharmony_ci int irq; 3223d0407baSopenharmony_ci u32 saved_masks; 3233d0407baSopenharmony_ci u32 pin_base; 3243d0407baSopenharmony_ci u8 nr_pins; 3253d0407baSopenharmony_ci char *name; 3263d0407baSopenharmony_ci u8 bank_num; 3273d0407baSopenharmony_ci struct rockchip_iomux iomux[4]; 3283d0407baSopenharmony_ci struct rockchip_drv drv[4]; 3293d0407baSopenharmony_ci enum rockchip_pin_pull_type pull_type[4]; 3303d0407baSopenharmony_ci bool valid; 3313d0407baSopenharmony_ci struct device_node *of_node; 3323d0407baSopenharmony_ci struct rockchip_pinctrl *drvdata; 3333d0407baSopenharmony_ci struct irq_domain *domain; 3343d0407baSopenharmony_ci struct gpio_chip gpio_chip; 3353d0407baSopenharmony_ci struct pinctrl_gpio_range grange; 3363d0407baSopenharmony_ci raw_spinlock_t slock; 3373d0407baSopenharmony_ci const struct rockchip_gpio_regs *gpio_regs; 3383d0407baSopenharmony_ci u32 gpio_type; 3393d0407baSopenharmony_ci u32 toggle_edge_mode; 3403d0407baSopenharmony_ci u32 recalced_mask; 3413d0407baSopenharmony_ci u32 route_mask; 3423d0407baSopenharmony_ci struct list_head deferred_output; 3433d0407baSopenharmony_ci struct mutex deferred_lock; 3443d0407baSopenharmony_ci}; 3453d0407baSopenharmony_ci 3463d0407baSopenharmony_ci/** 3473d0407baSopenharmony_ci * struct rockchip_mux_recalced_data: represent a pin iomux data. 3483d0407baSopenharmony_ci * @num: bank number. 3493d0407baSopenharmony_ci * @pin: pin number. 3503d0407baSopenharmony_ci * @bit: index at register. 3513d0407baSopenharmony_ci * @reg: register offset. 3523d0407baSopenharmony_ci * @mask: mask bit 3533d0407baSopenharmony_ci */ 3543d0407baSopenharmony_cistruct rockchip_mux_recalced_data { 3553d0407baSopenharmony_ci u8 num; 3563d0407baSopenharmony_ci u8 pin; 3573d0407baSopenharmony_ci u32 reg; 3583d0407baSopenharmony_ci u8 bit; 3593d0407baSopenharmony_ci u8 mask; 3603d0407baSopenharmony_ci}; 3613d0407baSopenharmony_ci 3623d0407baSopenharmony_cienum rockchip_mux_route_location { 3633d0407baSopenharmony_ci ROCKCHIP_ROUTE_SAME = 0, 3643d0407baSopenharmony_ci ROCKCHIP_ROUTE_PMU, 3653d0407baSopenharmony_ci ROCKCHIP_ROUTE_GRF, 3663d0407baSopenharmony_ci}; 3673d0407baSopenharmony_ci 3683d0407baSopenharmony_ci/** 3693d0407baSopenharmony_ci * struct rockchip_mux_recalced_data: represent a pin iomux data. 3703d0407baSopenharmony_ci * @bank_num: bank number. 3713d0407baSopenharmony_ci * @pin: index at register or used to calc index. 3723d0407baSopenharmony_ci * @func: the min pin. 3733d0407baSopenharmony_ci * @route_location: the mux route location (same, pmu, grf). 3743d0407baSopenharmony_ci * @route_offset: the max pin. 3753d0407baSopenharmony_ci * @route_val: the register offset. 3763d0407baSopenharmony_ci */ 3773d0407baSopenharmony_cistruct rockchip_mux_route_data { 3783d0407baSopenharmony_ci u8 bank_num; 3793d0407baSopenharmony_ci u8 pin; 3803d0407baSopenharmony_ci u8 func; 3813d0407baSopenharmony_ci enum rockchip_mux_route_location route_location; 3823d0407baSopenharmony_ci u32 route_offset; 3833d0407baSopenharmony_ci u32 route_val; 3843d0407baSopenharmony_ci}; 3853d0407baSopenharmony_ci 3863d0407baSopenharmony_cistruct rockchip_pin_ctrl { 3873d0407baSopenharmony_ci struct rockchip_pin_bank *pin_banks; 3883d0407baSopenharmony_ci u32 nr_banks; 3893d0407baSopenharmony_ci u32 nr_pins; 3903d0407baSopenharmony_ci char *label; 3913d0407baSopenharmony_ci enum rockchip_pinctrl_type type; 3923d0407baSopenharmony_ci int grf_mux_offset; 3933d0407baSopenharmony_ci int pmu_mux_offset; 3943d0407baSopenharmony_ci int grf_drv_offset; 3953d0407baSopenharmony_ci int pmu_drv_offset; 3963d0407baSopenharmony_ci struct rockchip_mux_recalced_data *iomux_recalced; 3973d0407baSopenharmony_ci u32 niomux_recalced; 3983d0407baSopenharmony_ci struct rockchip_mux_route_data *iomux_routes; 3993d0407baSopenharmony_ci u32 niomux_routes; 4003d0407baSopenharmony_ci 4013d0407baSopenharmony_ci int (*ctrl_data_re_init)(struct rockchip_pin_ctrl *ctrl); 4023d0407baSopenharmony_ci 4033d0407baSopenharmony_ci int (*soc_data_init)(struct rockchip_pinctrl *info); 4043d0407baSopenharmony_ci 4053d0407baSopenharmony_ci void (*pull_calc_reg)(struct rockchip_pin_bank *bank, 4063d0407baSopenharmony_ci int pin_num, struct regmap **regmap, 4073d0407baSopenharmony_ci int *reg, u8 *bit); 4083d0407baSopenharmony_ci void (*drv_calc_reg)(struct rockchip_pin_bank *bank, 4093d0407baSopenharmony_ci int pin_num, struct regmap **regmap, 4103d0407baSopenharmony_ci int *reg, u8 *bit); 4113d0407baSopenharmony_ci int (*schmitt_calc_reg)(struct rockchip_pin_bank *bank, 4123d0407baSopenharmony_ci int pin_num, struct regmap **regmap, 4133d0407baSopenharmony_ci int *reg, u8 *bit); 4143d0407baSopenharmony_ci int (*slew_rate_calc_reg)(struct rockchip_pin_bank *bank, 4153d0407baSopenharmony_ci int pin_num, struct regmap **regmap, 4163d0407baSopenharmony_ci int *reg, u8 *bit); 4173d0407baSopenharmony_ci}; 4183d0407baSopenharmony_ci 4193d0407baSopenharmony_cistruct rockchip_pin_config { 4203d0407baSopenharmony_ci unsigned int func; 4213d0407baSopenharmony_ci unsigned long *configs; 4223d0407baSopenharmony_ci unsigned int nconfigs; 4233d0407baSopenharmony_ci}; 4243d0407baSopenharmony_ci 4253d0407baSopenharmony_cistruct rockchip_pin_output_deferred { 4263d0407baSopenharmony_ci struct list_head head; 4273d0407baSopenharmony_ci unsigned int pin; 4283d0407baSopenharmony_ci u32 arg; 4293d0407baSopenharmony_ci}; 4303d0407baSopenharmony_ci 4313d0407baSopenharmony_ci/** 4323d0407baSopenharmony_ci * struct rockchip_pin_group: represent group of pins of a pinmux function. 4333d0407baSopenharmony_ci * @name: name of the pin group, used to lookup the group. 4343d0407baSopenharmony_ci * @pins: the pins included in this group. 4353d0407baSopenharmony_ci * @npins: number of pins included in this group. 4363d0407baSopenharmony_ci * @data: local pin configuration 4373d0407baSopenharmony_ci */ 4383d0407baSopenharmony_cistruct rockchip_pin_group { 4393d0407baSopenharmony_ci const char *name; 4403d0407baSopenharmony_ci unsigned int npins; 4413d0407baSopenharmony_ci unsigned int *pins; 4423d0407baSopenharmony_ci struct rockchip_pin_config *data; 4433d0407baSopenharmony_ci}; 4443d0407baSopenharmony_ci 4453d0407baSopenharmony_ci/** 4463d0407baSopenharmony_ci * struct rockchip_pmx_func: represent a pin function. 4473d0407baSopenharmony_ci * @name: name of the pin function, used to lookup the function. 4483d0407baSopenharmony_ci * @groups: one or more names of pin groups that provide this function. 4493d0407baSopenharmony_ci * @ngroups: number of groups included in @groups. 4503d0407baSopenharmony_ci */ 4513d0407baSopenharmony_cistruct rockchip_pmx_func { 4523d0407baSopenharmony_ci const char *name; 4533d0407baSopenharmony_ci const char **groups; 4543d0407baSopenharmony_ci u8 ngroups; 4553d0407baSopenharmony_ci}; 4563d0407baSopenharmony_ci 4573d0407baSopenharmony_cistruct rockchip_pinctrl { 4583d0407baSopenharmony_ci struct regmap *regmap_base; 4593d0407baSopenharmony_ci int reg_size; 4603d0407baSopenharmony_ci struct regmap *regmap_pull; 4613d0407baSopenharmony_ci struct regmap *regmap_pmu; 4623d0407baSopenharmony_ci struct device *dev; 4633d0407baSopenharmony_ci struct rockchip_pin_ctrl *ctrl; 4643d0407baSopenharmony_ci struct pinctrl_desc pctl; 4653d0407baSopenharmony_ci struct pinctrl_dev *pctl_dev; 4663d0407baSopenharmony_ci struct rockchip_pin_group *groups; 4673d0407baSopenharmony_ci unsigned int ngroups; 4683d0407baSopenharmony_ci struct rockchip_pmx_func *functions; 4693d0407baSopenharmony_ci unsigned int nfunctions; 4703d0407baSopenharmony_ci}; 4713d0407baSopenharmony_ci 4723d0407baSopenharmony_ci#endif 473