1 // SPDX-License-Identifier: GPL-2.0
3 * Copyright (C) 2013 John Crispin <blogic@openwrt.org>
6 #include <linux/module.h>
7 #include <linux/device.h>
9 #include <linux/platform_device.h>
10 #include <linux/slab.h>
12 #include <linux/pinctrl/pinctrl.h>
13 #include <linux/pinctrl/pinconf.h>
14 #include <linux/pinctrl/pinconf-generic.h>
15 #include <linux/pinctrl/pinmux.h>
16 #include <linux/pinctrl/consumer.h>
17 #include <linux/pinctrl/machine.h>
19 #include <asm/mach-ralink/ralink_regs.h>
20 #include <asm/mach-ralink/mt7620.h>
22 #include "pinctrl-mtmips.h"
24 #include "../pinctrl-utils.h"
26 #define SYSC_REG_GPIO_MODE 0x60
27 #define SYSC_REG_GPIO_MODE2 0x64
32 struct pinctrl_pin_desc
*pads
;
33 struct pinctrl_desc
*desc
;
35 struct mtmips_pmx_func
**func
;
38 struct mtmips_pmx_group
*groups
;
39 const char **group_names
;
46 static int mtmips_get_group_count(struct pinctrl_dev
*pctrldev
)
48 struct mtmips_priv
*p
= pinctrl_dev_get_drvdata(pctrldev
);
50 return p
->group_count
;
53 static const char *mtmips_get_group_name(struct pinctrl_dev
*pctrldev
,
56 struct mtmips_priv
*p
= pinctrl_dev_get_drvdata(pctrldev
);
58 return (group
>= p
->group_count
) ? NULL
: p
->group_names
[group
];
61 static int mtmips_get_group_pins(struct pinctrl_dev
*pctrldev
,
63 const unsigned int **pins
,
64 unsigned int *num_pins
)
66 struct mtmips_priv
*p
= pinctrl_dev_get_drvdata(pctrldev
);
68 if (group
>= p
->group_count
)
71 *pins
= p
->groups
[group
].func
[0].pins
;
72 *num_pins
= p
->groups
[group
].func
[0].pin_count
;
77 static const struct pinctrl_ops mtmips_pctrl_ops
= {
78 .get_groups_count
= mtmips_get_group_count
,
79 .get_group_name
= mtmips_get_group_name
,
80 .get_group_pins
= mtmips_get_group_pins
,
81 .dt_node_to_map
= pinconf_generic_dt_node_to_map_all
,
82 .dt_free_map
= pinconf_generic_dt_free_map
,
85 static int mtmips_pmx_func_count(struct pinctrl_dev
*pctrldev
)
87 struct mtmips_priv
*p
= pinctrl_dev_get_drvdata(pctrldev
);
92 static const char *mtmips_pmx_func_name(struct pinctrl_dev
*pctrldev
,
95 struct mtmips_priv
*p
= pinctrl_dev_get_drvdata(pctrldev
);
97 return p
->func
[func
]->name
;
100 static int mtmips_pmx_group_get_groups(struct pinctrl_dev
*pctrldev
,
102 const char * const **groups
,
103 unsigned int * const num_groups
)
105 struct mtmips_priv
*p
= pinctrl_dev_get_drvdata(pctrldev
);
107 if (p
->func
[func
]->group_count
== 1)
108 *groups
= &p
->group_names
[p
->func
[func
]->groups
[0]];
110 *groups
= p
->group_names
;
112 *num_groups
= p
->func
[func
]->group_count
;
117 static int mtmips_pmx_group_enable(struct pinctrl_dev
*pctrldev
,
118 unsigned int func
, unsigned int group
)
120 struct mtmips_priv
*p
= pinctrl_dev_get_drvdata(pctrldev
);
122 u32 reg
= SYSC_REG_GPIO_MODE
;
126 /* dont allow double use */
127 if (p
->groups
[group
].enabled
) {
128 dev_err(p
->dev
, "%s is already enabled\n",
129 p
->groups
[group
].name
);
133 p
->groups
[group
].enabled
= 1;
134 p
->func
[func
]->enabled
= 1;
136 shift
= p
->groups
[group
].shift
;
139 reg
= SYSC_REG_GPIO_MODE2
;
141 mode
= rt_sysc_r32(reg
);
142 mode
&= ~(p
->groups
[group
].mask
<< shift
);
144 /* mark the pins as gpio */
145 for (i
= 0; i
< p
->groups
[group
].func
[0].pin_count
; i
++)
146 p
->gpio
[p
->groups
[group
].func
[0].pins
[i
]] = 1;
148 /* function 0 is gpio and needs special handling */
150 mode
|= p
->groups
[group
].gpio
<< shift
;
152 for (i
= 0; i
< p
->func
[func
]->pin_count
; i
++)
153 p
->gpio
[p
->func
[func
]->pins
[i
]] = 0;
154 mode
|= p
->func
[func
]->value
<< shift
;
156 rt_sysc_w32(mode
, reg
);
161 static int mtmips_pmx_group_gpio_request_enable(struct pinctrl_dev
*pctrldev
,
162 struct pinctrl_gpio_range
*range
,
165 struct mtmips_priv
*p
= pinctrl_dev_get_drvdata(pctrldev
);
168 dev_err(p
->dev
, "pin %d is not set to gpio mux\n", pin
);
175 static const struct pinmux_ops mtmips_pmx_group_ops
= {
176 .get_functions_count
= mtmips_pmx_func_count
,
177 .get_function_name
= mtmips_pmx_func_name
,
178 .get_function_groups
= mtmips_pmx_group_get_groups
,
179 .set_mux
= mtmips_pmx_group_enable
,
180 .gpio_request_enable
= mtmips_pmx_group_gpio_request_enable
,
183 static struct pinctrl_desc mtmips_pctrl_desc
= {
184 .owner
= THIS_MODULE
,
185 .name
= "mtmips-pinctrl",
186 .pctlops
= &mtmips_pctrl_ops
,
187 .pmxops
= &mtmips_pmx_group_ops
,
190 static struct mtmips_pmx_func gpio_func
= {
194 static int mtmips_pinctrl_index(struct mtmips_priv
*p
)
196 struct mtmips_pmx_group
*mux
= p
->groups
;
199 /* count the mux functions */
205 /* allocate the group names array needed by the gpio function */
206 p
->group_names
= devm_kcalloc(p
->dev
, p
->group_count
,
207 sizeof(char *), GFP_KERNEL
);
211 for (i
= 0; i
< p
->group_count
; i
++) {
212 p
->group_names
[i
] = p
->groups
[i
].name
;
213 p
->func_count
+= p
->groups
[i
].func_count
;
216 /* we have a dummy function[0] for gpio */
219 /* allocate our function and group mapping index buffers */
220 p
->func
= devm_kcalloc(p
->dev
, p
->func_count
,
221 sizeof(*p
->func
), GFP_KERNEL
);
222 gpio_func
.groups
= devm_kcalloc(p
->dev
, p
->group_count
, sizeof(int),
224 if (!p
->func
|| !gpio_func
.groups
)
227 /* add a backpointer to the function so it knows its group */
228 gpio_func
.group_count
= p
->group_count
;
229 for (i
= 0; i
< gpio_func
.group_count
; i
++)
230 gpio_func
.groups
[i
] = i
;
232 p
->func
[c
] = &gpio_func
;
235 /* add remaining functions */
236 for (i
= 0; i
< p
->group_count
; i
++) {
237 for (j
= 0; j
< p
->groups
[i
].func_count
; j
++) {
238 p
->func
[c
] = &p
->groups
[i
].func
[j
];
239 p
->func
[c
]->groups
= devm_kzalloc(p
->dev
, sizeof(int),
241 if (!p
->func
[c
]->groups
)
243 p
->func
[c
]->groups
[0] = i
;
244 p
->func
[c
]->group_count
= 1;
251 static int mtmips_pinctrl_pins(struct mtmips_priv
*p
)
256 * loop over the functions and initialize the pins array.
257 * also work out the highest pin used.
259 for (i
= 0; i
< p
->func_count
; i
++) {
262 if (!p
->func
[i
]->pin_count
)
265 p
->func
[i
]->pins
= devm_kcalloc(p
->dev
,
266 p
->func
[i
]->pin_count
,
269 if (!p
->func
[i
]->pins
)
271 for (j
= 0; j
< p
->func
[i
]->pin_count
; j
++)
272 p
->func
[i
]->pins
[j
] = p
->func
[i
]->pin_first
+ j
;
274 pin
= p
->func
[i
]->pin_first
+ p
->func
[i
]->pin_count
;
275 if (pin
> p
->max_pins
)
279 /* the buffer that tells us which pins are gpio */
280 p
->gpio
= devm_kcalloc(p
->dev
, p
->max_pins
, sizeof(u8
), GFP_KERNEL
);
281 /* the pads needed to tell pinctrl about our pins */
282 p
->pads
= devm_kcalloc(p
->dev
, p
->max_pins
,
283 sizeof(struct pinctrl_pin_desc
), GFP_KERNEL
);
284 if (!p
->pads
|| !p
->gpio
)
287 memset(p
->gpio
, 1, sizeof(u8
) * p
->max_pins
);
288 for (i
= 0; i
< p
->func_count
; i
++) {
289 if (!p
->func
[i
]->pin_count
)
292 for (j
= 0; j
< p
->func
[i
]->pin_count
; j
++)
293 p
->gpio
[p
->func
[i
]->pins
[j
]] = 0;
296 /* pin 0 is always a gpio */
300 for (i
= 0; i
< p
->max_pins
; i
++) {
301 /* strlen("ioXY") + 1 = 5 */
302 char *name
= devm_kzalloc(p
->dev
, 5, GFP_KERNEL
);
306 snprintf(name
, 5, "io%d", i
);
307 p
->pads
[i
].number
= i
;
308 p
->pads
[i
].name
= name
;
310 p
->desc
->pins
= p
->pads
;
311 p
->desc
->npins
= p
->max_pins
;
316 int mtmips_pinctrl_init(struct platform_device
*pdev
,
317 struct mtmips_pmx_group
*data
)
319 struct mtmips_priv
*p
;
320 struct pinctrl_dev
*dev
;
326 /* setup the private data */
327 p
= devm_kzalloc(&pdev
->dev
, sizeof(struct mtmips_priv
), GFP_KERNEL
);
332 p
->desc
= &mtmips_pctrl_desc
;
334 platform_set_drvdata(pdev
, p
);
336 /* init the device */
337 err
= mtmips_pinctrl_index(p
);
339 dev_err(&pdev
->dev
, "failed to load index\n");
343 err
= mtmips_pinctrl_pins(p
);
345 dev_err(&pdev
->dev
, "failed to load pins\n");
348 dev
= pinctrl_register(p
->desc
, &pdev
->dev
, p
);
350 return PTR_ERR_OR_ZERO(dev
);