14 #define pr_fmt(fmt) "pinmux core: " fmt
16 #include <linux/kernel.h>
17 #include <linux/module.h>
19 #include <linux/device.h>
20 #include <linux/slab.h>
23 #include <linux/list.h>
24 #include <linux/string.h>
35 const struct pinmux_ops *
ops = pctldev->
desc->pmxops;
41 !ops->get_functions_count ||
42 !ops->get_function_name ||
43 !ops->get_function_groups ||
45 dev_err(pctldev->
dev,
"pinmux ops lacks necessary functions\n");
49 nfuncs = ops->get_functions_count(pctldev);
50 while (selector < nfuncs) {
51 const char *
fname = ops->get_function_name(pctldev,
54 dev_err(pctldev->
dev,
"pinmux ops has no name for function%u\n",
67 pr_err(
"failed to register map %s (%d): no function given\n",
85 struct pinctrl_gpio_range *gpio_range)
88 const struct pinmux_ops *
ops = pctldev->
desc->pmxops;
91 desc = pin_desc_get(pctldev, pin);
94 "pin %d is not registered so it cannot be requested\n",
99 dev_dbg(pctldev->
dev,
"request pin %d (%s) for %s\n",
100 pin, desc->
name, owner);
104 if (desc->gpio_owner) {
106 "pin %s already requested by %s; cannot claim for %s\n",
107 desc->
name, desc->gpio_owner, owner);
111 desc->gpio_owner =
owner;
113 if (desc->mux_usecount &&
strcmp(desc->mux_owner, owner)) {
115 "pin %s already requested by %s; cannot claim for %s\n",
116 desc->
name, desc->mux_owner, owner);
120 desc->mux_usecount++;
121 if (desc->mux_usecount > 1)
124 desc->mux_owner =
owner;
128 if (!try_module_get(pctldev->
owner)) {
130 "could not increase module refcount for pin %d\n",
140 if (gpio_range && ops->gpio_request_enable)
142 status = ops->gpio_request_enable(pctldev, gpio_range, pin);
143 else if (ops->request)
144 status = ops->request(pctldev, pin);
149 dev_err(pctldev->
dev,
"request() failed for pin %d\n", pin);
150 module_put(pctldev->
owner);
156 desc->gpio_owner =
NULL;
158 desc->mux_usecount--;
159 if (!desc->mux_usecount)
160 desc->mux_owner =
NULL;
165 dev_err(pctldev->
dev,
"pin-%d (%s) status %d\n",
182 static const char *pin_free(
struct pinctrl_dev *pctldev,
int pin,
183 struct pinctrl_gpio_range *gpio_range)
185 const struct pinmux_ops *ops = pctldev->
desc->pmxops;
189 desc = pin_desc_get(pctldev, pin);
192 "pin is not registered so it cannot be freed\n");
197 desc->mux_usecount--;
198 if (desc->mux_usecount)
206 if (gpio_range && ops->gpio_disable_free)
207 ops->gpio_disable_free(pctldev, gpio_range, pin);
209 ops->free(pctldev, pin);
212 owner = desc->gpio_owner;
213 desc->gpio_owner =
NULL;
215 owner = desc->mux_owner;
216 desc->mux_owner =
NULL;
217 desc->mux_setting =
NULL;
220 module_put(pctldev->
owner);
232 struct pinctrl_gpio_range *
range,
233 unsigned pin,
unsigned gpio)
243 ret = pin_request(pctldev, pin, owner, range);
257 struct pinctrl_gpio_range *
range)
261 owner = pin_free(pctldev, pin, range);
273 struct pinctrl_gpio_range *
range,
274 unsigned pin,
bool input)
276 const struct pinmux_ops *ops;
279 ops = pctldev->
desc->pmxops;
281 if (ops->gpio_set_direction)
282 ret = ops->gpio_set_direction(pctldev, range, pin, input);
289 static int pinmux_func_name_to_selector(
struct pinctrl_dev *pctldev,
290 const char *
function)
292 const struct pinmux_ops *ops = pctldev->
desc->pmxops;
293 unsigned nfuncs = ops->get_functions_count(pctldev);
297 while (selector < nfuncs) {
298 const char *
fname = ops->get_function_name(pctldev,
301 if (!
strcmp(
function, fname))
307 pr_err(
"%s does not support function %s\n",
316 const struct pinmux_ops *pmxops = pctldev->
desc->pmxops;
317 const struct pinctrl_ops *pctlops = pctldev->
desc->pctlops;
318 char const *
const *groups;
323 const unsigned *
pins;
327 dev_err(pctldev->
dev,
"does not support mux function\n");
331 ret = pinmux_func_name_to_selector(pctldev, map->
data.
mux.function);
333 dev_err(pctldev->
dev,
"invalid function %s in map table\n",
339 ret = pmxops->get_function_groups(pctldev, setting->
data.
mux.func,
340 &groups, &num_groups);
342 dev_err(pctldev->
dev,
"can't query groups for function %s\n",
348 "function %s can't be selected on any group\n",
355 for (i = 0; i < num_groups; i++) {
356 if (!
strcmp(group, groups[i])) {
363 "invalid group \"%s\" for function \"%s\"\n",
364 group, map->
data.
mux.function);
373 dev_err(pctldev->
dev,
"invalid group %s in map table\n",
379 ret = pctlops->get_group_pins(pctldev, setting->
data.
mux.group, &pins,
383 "could not get pins for device %s group selector %d\n",
389 for (i = 0; i < num_pins; i++) {
390 ret = pin_request(pctldev, pins[i], map->
dev_name,
NULL);
393 "could not request pin %d on device %s\n",
398 pin_free(pctldev, pins[i],
NULL);
409 const struct pinctrl_ops *pctlops = pctldev->
desc->pctlops;
410 const unsigned *
pins;
415 ret = pctlops->get_group_pins(pctldev, setting->
data.
mux.group,
419 "could not get pins for device %s group selector %d\n",
424 for (i = 0; i < num_pins; i++)
425 pin_free(pctldev, pins[i],
NULL);
431 const struct pinctrl_ops *pctlops = pctldev->
desc->pctlops;
432 const struct pinmux_ops *ops = pctldev->
desc->pmxops;
434 const unsigned *
pins;
439 ret = pctlops->get_group_pins(pctldev, setting->
data.
mux.group,
444 "could not get pins for group selector %d\n",
449 for (i = 0; i < num_pins; i++) {
450 desc = pin_desc_get(pctldev, pins[i]);
453 "could not get pin desc for pin %d\n",
457 desc->mux_setting = &(setting->
data.
mux);
460 return ops->enable(pctldev, setting->
data.
mux.func,
467 const struct pinctrl_ops *pctlops = pctldev->
desc->pctlops;
468 const struct pinmux_ops *ops = pctldev->
desc->pmxops;
470 const unsigned *
pins;
475 ret = pctlops->get_group_pins(pctldev, setting->
data.
mux.group,
480 "could not get pins for group selector %d\n",
485 for (i = 0; i < num_pins; i++) {
486 desc = pin_desc_get(pctldev, pins[i]);
489 "could not get pin desc for pin %d\n",
493 desc->mux_setting =
NULL;
497 ops->disable(pctldev, setting->
data.
mux.func, setting->
data.
mux.group);
500 #ifdef CONFIG_DEBUG_FS
503 static int pinmux_functions_show(
struct seq_file *
s,
void *
what)
506 const struct pinmux_ops *pmxops = pctldev->
desc->pmxops;
508 unsigned func_selector = 0;
514 nfuncs = pmxops->get_functions_count(pctldev);
515 while (func_selector < nfuncs) {
516 const char *
func = pmxops->get_function_name(pctldev,
518 const char *
const *groups;
523 ret = pmxops->get_function_groups(pctldev, func_selector,
524 &groups, &num_groups);
526 seq_printf(s,
"function %s: COULD NOT GET GROUPS\n",
529 seq_printf(s,
"function: %s, groups = [ ", func);
530 for (i = 0; i < num_groups; i++)
542 static int pinmux_pins_show(
struct seq_file *s,
void *what)
545 const struct pinctrl_ops *pctlops = pctldev->
desc->pctlops;
546 const struct pinmux_ops *pmxops = pctldev->
desc->pmxops;
552 seq_puts(s,
"Pinmux settings per pin\n");
553 seq_puts(s,
"Format: pin (name): mux_owner gpio_owner hog?\n");
558 for (i = 0; i < pctldev->
desc->npins; i++) {
562 pin = pctldev->
desc->pins[
i].number;
563 desc = pin_desc_get(pctldev, pin);
568 if (desc->mux_owner &&
573 desc->
name ? desc->
name :
"unnamed",
574 desc->mux_owner ? desc->mux_owner
576 desc->gpio_owner ? desc->gpio_owner
577 :
"(GPIO UNCLAIMED)",
578 is_hog ?
" (HOG)" :
"");
580 if (desc->mux_setting)
582 pmxops->get_function_name(pctldev,
583 desc->mux_setting->func),
584 pctlops->get_group_name(pctldev,
585 desc->mux_setting->group));
602 void pinmux_show_setting(
struct seq_file *s,
606 const struct pinmux_ops *pmxops = pctldev->
desc->pmxops;
607 const struct pinctrl_ops *pctlops = pctldev->
desc->pctlops;
609 seq_printf(s,
"group: %s (%u) function: %s (%u)\n",
610 pctlops->get_group_name(pctldev, setting->
data.
mux.group),
612 pmxops->get_function_name(pctldev, setting->
data.
mux.func),
627 .
open = pinmux_functions_open,
634 .
open = pinmux_pins_open,
640 void pinmux_init_device_debugfs(
struct dentry *devroot,
644 devroot, pctldev, &pinmux_functions_ops);
646 devroot, pctldev, &pinmux_pins_ops);