Linux Kernel  3.7.1
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Groups Pages
pinmux.c
Go to the documentation of this file.
1 /*
2  * Core driver for the pin muxing portions of the pin control subsystem
3  *
4  * Copyright (C) 2011-2012 ST-Ericsson SA
5  * Written on behalf of Linaro for ST-Ericsson
6  * Based on bits of regulator core, gpio core and clk core
7  *
8  * Author: Linus Walleij <[email protected]>
9  *
10  * Copyright (C) 2012 NVIDIA CORPORATION. All rights reserved.
11  *
12  * License terms: GNU General Public License (GPL) version 2
13  */
14 #define pr_fmt(fmt) "pinmux core: " fmt
15 
16 #include <linux/kernel.h>
17 #include <linux/module.h>
18 #include <linux/init.h>
19 #include <linux/device.h>
20 #include <linux/slab.h>
21 #include <linux/radix-tree.h>
22 #include <linux/err.h>
23 #include <linux/list.h>
24 #include <linux/string.h>
25 #include <linux/sysfs.h>
26 #include <linux/debugfs.h>
27 #include <linux/seq_file.h>
28 #include <linux/pinctrl/machine.h>
29 #include <linux/pinctrl/pinmux.h>
30 #include "core.h"
31 #include "pinmux.h"
32 
33 int pinmux_check_ops(struct pinctrl_dev *pctldev)
34 {
35  const struct pinmux_ops *ops = pctldev->desc->pmxops;
36  unsigned nfuncs;
37  unsigned selector = 0;
38 
39  /* Check that we implement required operations */
40  if (!ops ||
41  !ops->get_functions_count ||
42  !ops->get_function_name ||
43  !ops->get_function_groups ||
44  !ops->enable) {
45  dev_err(pctldev->dev, "pinmux ops lacks necessary functions\n");
46  return -EINVAL;
47  }
48  /* Check that all functions registered have names */
49  nfuncs = ops->get_functions_count(pctldev);
50  while (selector < nfuncs) {
51  const char *fname = ops->get_function_name(pctldev,
52  selector);
53  if (!fname) {
54  dev_err(pctldev->dev, "pinmux ops has no name for function%u\n",
55  selector);
56  return -EINVAL;
57  }
58  selector++;
59  }
60 
61  return 0;
62 }
63 
64 int pinmux_validate_map(struct pinctrl_map const *map, int i)
65 {
66  if (!map->data.mux.function) {
67  pr_err("failed to register map %s (%d): no function given\n",
68  map->name, i);
69  return -EINVAL;
70  }
71 
72  return 0;
73 }
74 
83 static int pin_request(struct pinctrl_dev *pctldev,
84  int pin, const char *owner,
85  struct pinctrl_gpio_range *gpio_range)
86 {
87  struct pin_desc *desc;
88  const struct pinmux_ops *ops = pctldev->desc->pmxops;
89  int status = -EINVAL;
90 
91  desc = pin_desc_get(pctldev, pin);
92  if (desc == NULL) {
93  dev_err(pctldev->dev,
94  "pin %d is not registered so it cannot be requested\n",
95  pin);
96  goto out;
97  }
98 
99  dev_dbg(pctldev->dev, "request pin %d (%s) for %s\n",
100  pin, desc->name, owner);
101 
102  if (gpio_range) {
103  /* There's no need to support multiple GPIO requests */
104  if (desc->gpio_owner) {
105  dev_err(pctldev->dev,
106  "pin %s already requested by %s; cannot claim for %s\n",
107  desc->name, desc->gpio_owner, owner);
108  goto out;
109  }
110 
111  desc->gpio_owner = owner;
112  } else {
113  if (desc->mux_usecount && strcmp(desc->mux_owner, owner)) {
114  dev_err(pctldev->dev,
115  "pin %s already requested by %s; cannot claim for %s\n",
116  desc->name, desc->mux_owner, owner);
117  goto out;
118  }
119 
120  desc->mux_usecount++;
121  if (desc->mux_usecount > 1)
122  return 0;
123 
124  desc->mux_owner = owner;
125  }
126 
127  /* Let each pin increase references to this module */
128  if (!try_module_get(pctldev->owner)) {
129  dev_err(pctldev->dev,
130  "could not increase module refcount for pin %d\n",
131  pin);
132  status = -EINVAL;
133  goto out_free_pin;
134  }
135 
136  /*
137  * If there is no kind of request function for the pin we just assume
138  * we got it by default and proceed.
139  */
140  if (gpio_range && ops->gpio_request_enable)
141  /* This requests and enables a single GPIO pin */
142  status = ops->gpio_request_enable(pctldev, gpio_range, pin);
143  else if (ops->request)
144  status = ops->request(pctldev, pin);
145  else
146  status = 0;
147 
148  if (status) {
149  dev_err(pctldev->dev, "request() failed for pin %d\n", pin);
150  module_put(pctldev->owner);
151  }
152 
153 out_free_pin:
154  if (status) {
155  if (gpio_range) {
156  desc->gpio_owner = NULL;
157  } else {
158  desc->mux_usecount--;
159  if (!desc->mux_usecount)
160  desc->mux_owner = NULL;
161  }
162  }
163 out:
164  if (status)
165  dev_err(pctldev->dev, "pin-%d (%s) status %d\n",
166  pin, owner, status);
167 
168  return status;
169 }
170 
182 static const char *pin_free(struct pinctrl_dev *pctldev, int pin,
183  struct pinctrl_gpio_range *gpio_range)
184 {
185  const struct pinmux_ops *ops = pctldev->desc->pmxops;
186  struct pin_desc *desc;
187  const char *owner;
188 
189  desc = pin_desc_get(pctldev, pin);
190  if (desc == NULL) {
191  dev_err(pctldev->dev,
192  "pin is not registered so it cannot be freed\n");
193  return NULL;
194  }
195 
196  if (!gpio_range) {
197  desc->mux_usecount--;
198  if (desc->mux_usecount)
199  return NULL;
200  }
201 
202  /*
203  * If there is no kind of request function for the pin we just assume
204  * we got it by default and proceed.
205  */
206  if (gpio_range && ops->gpio_disable_free)
207  ops->gpio_disable_free(pctldev, gpio_range, pin);
208  else if (ops->free)
209  ops->free(pctldev, pin);
210 
211  if (gpio_range) {
212  owner = desc->gpio_owner;
213  desc->gpio_owner = NULL;
214  } else {
215  owner = desc->mux_owner;
216  desc->mux_owner = NULL;
217  desc->mux_setting = NULL;
218  }
219 
220  module_put(pctldev->owner);
221 
222  return owner;
223 }
224 
231 int pinmux_request_gpio(struct pinctrl_dev *pctldev,
232  struct pinctrl_gpio_range *range,
233  unsigned pin, unsigned gpio)
234 {
235  const char *owner;
236  int ret;
237 
238  /* Conjure some name stating what chip and pin this is taken by */
239  owner = kasprintf(GFP_KERNEL, "%s:%d", range->name, gpio);
240  if (!owner)
241  return -EINVAL;
242 
243  ret = pin_request(pctldev, pin, owner, range);
244  if (ret < 0)
245  kfree(owner);
246 
247  return ret;
248 }
249 
256 void pinmux_free_gpio(struct pinctrl_dev *pctldev, unsigned pin,
257  struct pinctrl_gpio_range *range)
258 {
259  const char *owner;
260 
261  owner = pin_free(pctldev, pin, range);
262  kfree(owner);
263 }
264 
272 int pinmux_gpio_direction(struct pinctrl_dev *pctldev,
273  struct pinctrl_gpio_range *range,
274  unsigned pin, bool input)
275 {
276  const struct pinmux_ops *ops;
277  int ret;
278 
279  ops = pctldev->desc->pmxops;
280 
281  if (ops->gpio_set_direction)
282  ret = ops->gpio_set_direction(pctldev, range, pin, input);
283  else
284  ret = 0;
285 
286  return ret;
287 }
288 
289 static int pinmux_func_name_to_selector(struct pinctrl_dev *pctldev,
290  const char *function)
291 {
292  const struct pinmux_ops *ops = pctldev->desc->pmxops;
293  unsigned nfuncs = ops->get_functions_count(pctldev);
294  unsigned selector = 0;
295 
296  /* See if this pctldev has this function */
297  while (selector < nfuncs) {
298  const char *fname = ops->get_function_name(pctldev,
299  selector);
300 
301  if (!strcmp(function, fname))
302  return selector;
303 
304  selector++;
305  }
306 
307  pr_err("%s does not support function %s\n",
308  pinctrl_dev_get_name(pctldev), function);
309  return -EINVAL;
310 }
311 
313  struct pinctrl_setting *setting)
314 {
315  struct pinctrl_dev *pctldev = setting->pctldev;
316  const struct pinmux_ops *pmxops = pctldev->desc->pmxops;
317  const struct pinctrl_ops *pctlops = pctldev->desc->pctlops;
318  char const * const *groups;
319  unsigned num_groups;
320  int ret;
321  const char *group;
322  int i;
323  const unsigned *pins;
324  unsigned num_pins;
325 
326  if (!pmxops) {
327  dev_err(pctldev->dev, "does not support mux function\n");
328  return -EINVAL;
329  }
330 
331  ret = pinmux_func_name_to_selector(pctldev, map->data.mux.function);
332  if (ret < 0) {
333  dev_err(pctldev->dev, "invalid function %s in map table\n",
334  map->data.mux.function);
335  return ret;
336  }
337  setting->data.mux.func = ret;
338 
339  ret = pmxops->get_function_groups(pctldev, setting->data.mux.func,
340  &groups, &num_groups);
341  if (ret < 0) {
342  dev_err(pctldev->dev, "can't query groups for function %s\n",
343  map->data.mux.function);
344  return ret;
345  }
346  if (!num_groups) {
347  dev_err(pctldev->dev,
348  "function %s can't be selected on any group\n",
349  map->data.mux.function);
350  return -EINVAL;
351  }
352  if (map->data.mux.group) {
353  bool found = false;
354  group = map->data.mux.group;
355  for (i = 0; i < num_groups; i++) {
356  if (!strcmp(group, groups[i])) {
357  found = true;
358  break;
359  }
360  }
361  if (!found) {
362  dev_err(pctldev->dev,
363  "invalid group \"%s\" for function \"%s\"\n",
364  group, map->data.mux.function);
365  return -EINVAL;
366  }
367  } else {
368  group = groups[0];
369  }
370 
371  ret = pinctrl_get_group_selector(pctldev, group);
372  if (ret < 0) {
373  dev_err(pctldev->dev, "invalid group %s in map table\n",
374  map->data.mux.group);
375  return ret;
376  }
377  setting->data.mux.group = ret;
378 
379  ret = pctlops->get_group_pins(pctldev, setting->data.mux.group, &pins,
380  &num_pins);
381  if (ret) {
382  dev_err(pctldev->dev,
383  "could not get pins for device %s group selector %d\n",
384  pinctrl_dev_get_name(pctldev), setting->data.mux.group);
385  return -ENODEV;
386  }
387 
388  /* Try to allocate all pins in this group, one by one */
389  for (i = 0; i < num_pins; i++) {
390  ret = pin_request(pctldev, pins[i], map->dev_name, NULL);
391  if (ret) {
392  dev_err(pctldev->dev,
393  "could not request pin %d on device %s\n",
394  pins[i], pinctrl_dev_get_name(pctldev));
395  /* On error release all taken pins */
396  i--; /* this pin just failed */
397  for (; i >= 0; i--)
398  pin_free(pctldev, pins[i], NULL);
399  return -ENODEV;
400  }
401  }
402 
403  return 0;
404 }
405 
406 void pinmux_free_setting(struct pinctrl_setting const *setting)
407 {
408  struct pinctrl_dev *pctldev = setting->pctldev;
409  const struct pinctrl_ops *pctlops = pctldev->desc->pctlops;
410  const unsigned *pins;
411  unsigned num_pins;
412  int ret;
413  int i;
414 
415  ret = pctlops->get_group_pins(pctldev, setting->data.mux.group,
416  &pins, &num_pins);
417  if (ret) {
418  dev_err(pctldev->dev,
419  "could not get pins for device %s group selector %d\n",
420  pinctrl_dev_get_name(pctldev), setting->data.mux.group);
421  return;
422  }
423 
424  for (i = 0; i < num_pins; i++)
425  pin_free(pctldev, pins[i], NULL);
426 }
427 
428 int pinmux_enable_setting(struct pinctrl_setting const *setting)
429 {
430  struct pinctrl_dev *pctldev = setting->pctldev;
431  const struct pinctrl_ops *pctlops = pctldev->desc->pctlops;
432  const struct pinmux_ops *ops = pctldev->desc->pmxops;
433  int ret;
434  const unsigned *pins;
435  unsigned num_pins;
436  int i;
437  struct pin_desc *desc;
438 
439  ret = pctlops->get_group_pins(pctldev, setting->data.mux.group,
440  &pins, &num_pins);
441  if (ret) {
442  /* errors only affect debug data, so just warn */
443  dev_warn(pctldev->dev,
444  "could not get pins for group selector %d\n",
445  setting->data.mux.group);
446  num_pins = 0;
447  }
448 
449  for (i = 0; i < num_pins; i++) {
450  desc = pin_desc_get(pctldev, pins[i]);
451  if (desc == NULL) {
452  dev_warn(pctldev->dev,
453  "could not get pin desc for pin %d\n",
454  pins[i]);
455  continue;
456  }
457  desc->mux_setting = &(setting->data.mux);
458  }
459 
460  return ops->enable(pctldev, setting->data.mux.func,
461  setting->data.mux.group);
462 }
463 
464 void pinmux_disable_setting(struct pinctrl_setting const *setting)
465 {
466  struct pinctrl_dev *pctldev = setting->pctldev;
467  const struct pinctrl_ops *pctlops = pctldev->desc->pctlops;
468  const struct pinmux_ops *ops = pctldev->desc->pmxops;
469  int ret;
470  const unsigned *pins;
471  unsigned num_pins;
472  int i;
473  struct pin_desc *desc;
474 
475  ret = pctlops->get_group_pins(pctldev, setting->data.mux.group,
476  &pins, &num_pins);
477  if (ret) {
478  /* errors only affect debug data, so just warn */
479  dev_warn(pctldev->dev,
480  "could not get pins for group selector %d\n",
481  setting->data.mux.group);
482  num_pins = 0;
483  }
484 
485  for (i = 0; i < num_pins; i++) {
486  desc = pin_desc_get(pctldev, pins[i]);
487  if (desc == NULL) {
488  dev_warn(pctldev->dev,
489  "could not get pin desc for pin %d\n",
490  pins[i]);
491  continue;
492  }
493  desc->mux_setting = NULL;
494  }
495 
496  if (ops->disable)
497  ops->disable(pctldev, setting->data.mux.func, setting->data.mux.group);
498 }
499 
500 #ifdef CONFIG_DEBUG_FS
501 
502 /* Called from pincontrol core */
503 static int pinmux_functions_show(struct seq_file *s, void *what)
504 {
505  struct pinctrl_dev *pctldev = s->private;
506  const struct pinmux_ops *pmxops = pctldev->desc->pmxops;
507  unsigned nfuncs;
508  unsigned func_selector = 0;
509 
510  if (!pmxops)
511  return 0;
512 
513  mutex_lock(&pinctrl_mutex);
514  nfuncs = pmxops->get_functions_count(pctldev);
515  while (func_selector < nfuncs) {
516  const char *func = pmxops->get_function_name(pctldev,
517  func_selector);
518  const char * const *groups;
519  unsigned num_groups;
520  int ret;
521  int i;
522 
523  ret = pmxops->get_function_groups(pctldev, func_selector,
524  &groups, &num_groups);
525  if (ret)
526  seq_printf(s, "function %s: COULD NOT GET GROUPS\n",
527  func);
528 
529  seq_printf(s, "function: %s, groups = [ ", func);
530  for (i = 0; i < num_groups; i++)
531  seq_printf(s, "%s ", groups[i]);
532  seq_puts(s, "]\n");
533 
534  func_selector++;
535  }
536 
537  mutex_unlock(&pinctrl_mutex);
538 
539  return 0;
540 }
541 
542 static int pinmux_pins_show(struct seq_file *s, void *what)
543 {
544  struct pinctrl_dev *pctldev = s->private;
545  const struct pinctrl_ops *pctlops = pctldev->desc->pctlops;
546  const struct pinmux_ops *pmxops = pctldev->desc->pmxops;
547  unsigned i, pin;
548 
549  if (!pmxops)
550  return 0;
551 
552  seq_puts(s, "Pinmux settings per pin\n");
553  seq_puts(s, "Format: pin (name): mux_owner gpio_owner hog?\n");
554 
555  mutex_lock(&pinctrl_mutex);
556 
557  /* The pin number can be retrived from the pin controller descriptor */
558  for (i = 0; i < pctldev->desc->npins; i++) {
559  struct pin_desc *desc;
560  bool is_hog = false;
561 
562  pin = pctldev->desc->pins[i].number;
563  desc = pin_desc_get(pctldev, pin);
564  /* Skip if we cannot search the pin */
565  if (desc == NULL)
566  continue;
567 
568  if (desc->mux_owner &&
569  !strcmp(desc->mux_owner, pinctrl_dev_get_name(pctldev)))
570  is_hog = true;
571 
572  seq_printf(s, "pin %d (%s): %s %s%s", pin,
573  desc->name ? desc->name : "unnamed",
574  desc->mux_owner ? desc->mux_owner
575  : "(MUX UNCLAIMED)",
576  desc->gpio_owner ? desc->gpio_owner
577  : "(GPIO UNCLAIMED)",
578  is_hog ? " (HOG)" : "");
579 
580  if (desc->mux_setting)
581  seq_printf(s, " function %s group %s\n",
582  pmxops->get_function_name(pctldev,
583  desc->mux_setting->func),
584  pctlops->get_group_name(pctldev,
585  desc->mux_setting->group));
586  else
587  seq_printf(s, "\n");
588  }
589 
590  mutex_unlock(&pinctrl_mutex);
591 
592  return 0;
593 }
594 
595 void pinmux_show_map(struct seq_file *s, struct pinctrl_map const *map)
596 {
597  seq_printf(s, "group %s\nfunction %s\n",
598  map->data.mux.group ? map->data.mux.group : "(default)",
599  map->data.mux.function);
600 }
601 
602 void pinmux_show_setting(struct seq_file *s,
603  struct pinctrl_setting const *setting)
604 {
605  struct pinctrl_dev *pctldev = setting->pctldev;
606  const struct pinmux_ops *pmxops = pctldev->desc->pmxops;
607  const struct pinctrl_ops *pctlops = pctldev->desc->pctlops;
608 
609  seq_printf(s, "group: %s (%u) function: %s (%u)\n",
610  pctlops->get_group_name(pctldev, setting->data.mux.group),
611  setting->data.mux.group,
612  pmxops->get_function_name(pctldev, setting->data.mux.func),
613  setting->data.mux.func);
614 }
615 
616 static int pinmux_functions_open(struct inode *inode, struct file *file)
617 {
618  return single_open(file, pinmux_functions_show, inode->i_private);
619 }
620 
621 static int pinmux_pins_open(struct inode *inode, struct file *file)
622 {
623  return single_open(file, pinmux_pins_show, inode->i_private);
624 }
625 
626 static const struct file_operations pinmux_functions_ops = {
627  .open = pinmux_functions_open,
628  .read = seq_read,
629  .llseek = seq_lseek,
630  .release = single_release,
631 };
632 
633 static const struct file_operations pinmux_pins_ops = {
634  .open = pinmux_pins_open,
635  .read = seq_read,
636  .llseek = seq_lseek,
637  .release = single_release,
638 };
639 
640 void pinmux_init_device_debugfs(struct dentry *devroot,
641  struct pinctrl_dev *pctldev)
642 {
643  debugfs_create_file("pinmux-functions", S_IFREG | S_IRUGO,
644  devroot, pctldev, &pinmux_functions_ops);
645  debugfs_create_file("pinmux-pins", S_IFREG | S_IRUGO,
646  devroot, pctldev, &pinmux_pins_ops);
647 }
648 
649 #endif /* CONFIG_DEBUG_FS */