pinctrl: Declare operation structures as const
[linux-2.6-block.git] / drivers / pinctrl / pinctrl-single.c
1 /*
2  * Generic device tree based pinctrl driver for one register per pin
3  * type pinmux controllers
4  *
5  * Copyright (C) 2012 Texas Instruments, Inc.
6  *
7  * This file is licensed under the terms of the GNU General Public
8  * License version 2. This program is licensed "as is" without any
9  * warranty of any kind, whether express or implied.
10  */
11
12 #include <linux/init.h>
13 #include <linux/module.h>
14 #include <linux/io.h>
15 #include <linux/slab.h>
16 #include <linux/err.h>
17 #include <linux/list.h>
18
19 #include <linux/of.h>
20 #include <linux/of_device.h>
21 #include <linux/of_address.h>
22
23 #include <linux/pinctrl/pinctrl.h>
24 #include <linux/pinctrl/pinmux.h>
25
26 #include "core.h"
27
28 #define DRIVER_NAME                     "pinctrl-single"
29 #define PCS_MUX_PINS_NAME               "pinctrl-single,pins"
30 #define PCS_MUX_BITS_NAME               "pinctrl-single,bits"
31 #define PCS_REG_NAME_LEN                ((sizeof(unsigned long) * 2) + 1)
32 #define PCS_OFF_DISABLED                ~0U
33
34 /**
35  * struct pcs_pingroup - pingroups for a function
36  * @np:         pingroup device node pointer
37  * @name:       pingroup name
38  * @gpins:      array of the pins in the group
39  * @ngpins:     number of pins in the group
40  * @node:       list node
41  */
42 struct pcs_pingroup {
43         struct device_node *np;
44         const char *name;
45         int *gpins;
46         int ngpins;
47         struct list_head node;
48 };
49
50 /**
51  * struct pcs_func_vals - mux function register offset and value pair
52  * @reg:        register virtual address
53  * @val:        register value
54  */
55 struct pcs_func_vals {
56         void __iomem *reg;
57         unsigned val;
58         unsigned mask;
59 };
60
61 /**
62  * struct pcs_function - pinctrl function
63  * @name:       pinctrl function name
64  * @vals:       register and vals array
65  * @nvals:      number of entries in vals array
66  * @pgnames:    array of pingroup names the function uses
67  * @npgnames:   number of pingroup names the function uses
68  * @node:       list node
69  */
70 struct pcs_function {
71         const char *name;
72         struct pcs_func_vals *vals;
73         unsigned nvals;
74         const char **pgnames;
75         int npgnames;
76         struct list_head node;
77 };
78
79 /**
80  * struct pcs_data - wrapper for data needed by pinctrl framework
81  * @pa:         pindesc array
82  * @cur:        index to current element
83  *
84  * REVISIT: We should be able to drop this eventually by adding
85  * support for registering pins individually in the pinctrl
86  * framework for those drivers that don't need a static array.
87  */
88 struct pcs_data {
89         struct pinctrl_pin_desc *pa;
90         int cur;
91 };
92
93 /**
94  * struct pcs_name - register name for a pin
95  * @name:       name of the pinctrl register
96  *
97  * REVISIT: We may want to make names optional in the pinctrl
98  * framework as some drivers may not care about pin names to
99  * avoid kernel bloat. The pin names can be deciphered by user
100  * space tools using debugfs based on the register address and
101  * SoC packaging information.
102  */
103 struct pcs_name {
104         char name[PCS_REG_NAME_LEN];
105 };
106
107 /**
108  * struct pcs_device - pinctrl device instance
109  * @res:        resources
110  * @base:       virtual address of the controller
111  * @size:       size of the ioremapped area
112  * @dev:        device entry
113  * @pctl:       pin controller device
114  * @mutex:      mutex protecting the lists
115  * @width:      bits per mux register
116  * @fmask:      function register mask
117  * @fshift:     function register shift
118  * @foff:       value to turn mux off
119  * @fmax:       max number of functions in fmask
120  * @names:      array of register names for pins
121  * @pins:       physical pins on the SoC
122  * @pgtree:     pingroup index radix tree
123  * @ftree:      function index radix tree
124  * @pingroups:  list of pingroups
125  * @functions:  list of functions
126  * @ngroups:    number of pingroups
127  * @nfuncs:     number of functions
128  * @desc:       pin controller descriptor
129  * @read:       register read function to use
130  * @write:      register write function to use
131  */
132 struct pcs_device {
133         struct resource *res;
134         void __iomem *base;
135         unsigned size;
136         struct device *dev;
137         struct pinctrl_dev *pctl;
138         struct mutex mutex;
139         unsigned width;
140         unsigned fmask;
141         unsigned fshift;
142         unsigned foff;
143         unsigned fmax;
144         bool bits_per_mux;
145         struct pcs_name *names;
146         struct pcs_data pins;
147         struct radix_tree_root pgtree;
148         struct radix_tree_root ftree;
149         struct list_head pingroups;
150         struct list_head functions;
151         unsigned ngroups;
152         unsigned nfuncs;
153         struct pinctrl_desc desc;
154         unsigned (*read)(void __iomem *reg);
155         void (*write)(unsigned val, void __iomem *reg);
156 };
157
158 /*
159  * REVISIT: Reads and writes could eventually use regmap or something
160  * generic. But at least on omaps, some mux registers are performance
161  * critical as they may need to be remuxed every time before and after
162  * idle. Adding tests for register access width for every read and
163  * write like regmap is doing is not desired, and caching the registers
164  * does not help in this case.
165  */
166
167 static unsigned __maybe_unused pcs_readb(void __iomem *reg)
168 {
169         return readb(reg);
170 }
171
172 static unsigned __maybe_unused pcs_readw(void __iomem *reg)
173 {
174         return readw(reg);
175 }
176
177 static unsigned __maybe_unused pcs_readl(void __iomem *reg)
178 {
179         return readl(reg);
180 }
181
182 static void __maybe_unused pcs_writeb(unsigned val, void __iomem *reg)
183 {
184         writeb(val, reg);
185 }
186
187 static void __maybe_unused pcs_writew(unsigned val, void __iomem *reg)
188 {
189         writew(val, reg);
190 }
191
192 static void __maybe_unused pcs_writel(unsigned val, void __iomem *reg)
193 {
194         writel(val, reg);
195 }
196
197 static int pcs_get_groups_count(struct pinctrl_dev *pctldev)
198 {
199         struct pcs_device *pcs;
200
201         pcs = pinctrl_dev_get_drvdata(pctldev);
202
203         return pcs->ngroups;
204 }
205
206 static const char *pcs_get_group_name(struct pinctrl_dev *pctldev,
207                                         unsigned gselector)
208 {
209         struct pcs_device *pcs;
210         struct pcs_pingroup *group;
211
212         pcs = pinctrl_dev_get_drvdata(pctldev);
213         group = radix_tree_lookup(&pcs->pgtree, gselector);
214         if (!group) {
215                 dev_err(pcs->dev, "%s could not find pingroup%i\n",
216                         __func__, gselector);
217                 return NULL;
218         }
219
220         return group->name;
221 }
222
223 static int pcs_get_group_pins(struct pinctrl_dev *pctldev,
224                                         unsigned gselector,
225                                         const unsigned **pins,
226                                         unsigned *npins)
227 {
228         struct pcs_device *pcs;
229         struct pcs_pingroup *group;
230
231         pcs = pinctrl_dev_get_drvdata(pctldev);
232         group = radix_tree_lookup(&pcs->pgtree, gselector);
233         if (!group) {
234                 dev_err(pcs->dev, "%s could not find pingroup%i\n",
235                         __func__, gselector);
236                 return -EINVAL;
237         }
238
239         *pins = group->gpins;
240         *npins = group->ngpins;
241
242         return 0;
243 }
244
245 static void pcs_pin_dbg_show(struct pinctrl_dev *pctldev,
246                                         struct seq_file *s,
247                                         unsigned pin)
248 {
249         struct pcs_device *pcs;
250         unsigned val, mux_bytes;
251
252         pcs = pinctrl_dev_get_drvdata(pctldev);
253
254         mux_bytes = pcs->width / BITS_PER_BYTE;
255         val = pcs->read(pcs->base + pin * mux_bytes);
256
257         seq_printf(s, "%08x %s " , val, DRIVER_NAME);
258 }
259
260 static void pcs_dt_free_map(struct pinctrl_dev *pctldev,
261                                 struct pinctrl_map *map, unsigned num_maps)
262 {
263         struct pcs_device *pcs;
264
265         pcs = pinctrl_dev_get_drvdata(pctldev);
266         devm_kfree(pcs->dev, map);
267 }
268
269 static int pcs_dt_node_to_map(struct pinctrl_dev *pctldev,
270                                 struct device_node *np_config,
271                                 struct pinctrl_map **map, unsigned *num_maps);
272
273 static const struct pinctrl_ops pcs_pinctrl_ops = {
274         .get_groups_count = pcs_get_groups_count,
275         .get_group_name = pcs_get_group_name,
276         .get_group_pins = pcs_get_group_pins,
277         .pin_dbg_show = pcs_pin_dbg_show,
278         .dt_node_to_map = pcs_dt_node_to_map,
279         .dt_free_map = pcs_dt_free_map,
280 };
281
282 static int pcs_get_functions_count(struct pinctrl_dev *pctldev)
283 {
284         struct pcs_device *pcs;
285
286         pcs = pinctrl_dev_get_drvdata(pctldev);
287
288         return pcs->nfuncs;
289 }
290
291 static const char *pcs_get_function_name(struct pinctrl_dev *pctldev,
292                                                 unsigned fselector)
293 {
294         struct pcs_device *pcs;
295         struct pcs_function *func;
296
297         pcs = pinctrl_dev_get_drvdata(pctldev);
298         func = radix_tree_lookup(&pcs->ftree, fselector);
299         if (!func) {
300                 dev_err(pcs->dev, "%s could not find function%i\n",
301                         __func__, fselector);
302                 return NULL;
303         }
304
305         return func->name;
306 }
307
308 static int pcs_get_function_groups(struct pinctrl_dev *pctldev,
309                                         unsigned fselector,
310                                         const char * const **groups,
311                                         unsigned * const ngroups)
312 {
313         struct pcs_device *pcs;
314         struct pcs_function *func;
315
316         pcs = pinctrl_dev_get_drvdata(pctldev);
317         func = radix_tree_lookup(&pcs->ftree, fselector);
318         if (!func) {
319                 dev_err(pcs->dev, "%s could not find function%i\n",
320                         __func__, fselector);
321                 return -EINVAL;
322         }
323         *groups = func->pgnames;
324         *ngroups = func->npgnames;
325
326         return 0;
327 }
328
329 static int pcs_enable(struct pinctrl_dev *pctldev, unsigned fselector,
330         unsigned group)
331 {
332         struct pcs_device *pcs;
333         struct pcs_function *func;
334         int i;
335
336         pcs = pinctrl_dev_get_drvdata(pctldev);
337         func = radix_tree_lookup(&pcs->ftree, fselector);
338         if (!func)
339                 return -EINVAL;
340
341         dev_dbg(pcs->dev, "enabling %s function%i\n",
342                 func->name, fselector);
343
344         for (i = 0; i < func->nvals; i++) {
345                 struct pcs_func_vals *vals;
346                 unsigned val, mask;
347
348                 vals = &func->vals[i];
349                 val = pcs->read(vals->reg);
350                 if (!vals->mask)
351                         mask = pcs->fmask;
352                 else
353                         mask = pcs->fmask & vals->mask;
354
355                 val &= ~mask;
356                 val |= (vals->val & mask);
357                 pcs->write(val, vals->reg);
358         }
359
360         return 0;
361 }
362
363 static void pcs_disable(struct pinctrl_dev *pctldev, unsigned fselector,
364                                         unsigned group)
365 {
366         struct pcs_device *pcs;
367         struct pcs_function *func;
368         int i;
369
370         pcs = pinctrl_dev_get_drvdata(pctldev);
371         func = radix_tree_lookup(&pcs->ftree, fselector);
372         if (!func) {
373                 dev_err(pcs->dev, "%s could not find function%i\n",
374                         __func__, fselector);
375                 return;
376         }
377
378         /*
379          * Ignore disable if function-off is not specified. Some hardware
380          * does not have clearly defined disable function. For pin specific
381          * off modes, you can use alternate named states as described in
382          * pinctrl-bindings.txt.
383          */
384         if (pcs->foff == PCS_OFF_DISABLED) {
385                 dev_dbg(pcs->dev, "ignoring disable for %s function%i\n",
386                         func->name, fselector);
387                 return;
388         }
389
390         dev_dbg(pcs->dev, "disabling function%i %s\n",
391                 fselector, func->name);
392
393         for (i = 0; i < func->nvals; i++) {
394                 struct pcs_func_vals *vals;
395                 unsigned val;
396
397                 vals = &func->vals[i];
398                 val = pcs->read(vals->reg);
399                 val &= ~pcs->fmask;
400                 val |= pcs->foff << pcs->fshift;
401                 pcs->write(val, vals->reg);
402         }
403 }
404
405 static int pcs_request_gpio(struct pinctrl_dev *pctldev,
406                         struct pinctrl_gpio_range *range, unsigned offset)
407 {
408         return -ENOTSUPP;
409 }
410
411 static const struct pinmux_ops pcs_pinmux_ops = {
412         .get_functions_count = pcs_get_functions_count,
413         .get_function_name = pcs_get_function_name,
414         .get_function_groups = pcs_get_function_groups,
415         .enable = pcs_enable,
416         .disable = pcs_disable,
417         .gpio_request_enable = pcs_request_gpio,
418 };
419
420 static int pcs_pinconf_get(struct pinctrl_dev *pctldev,
421                                 unsigned pin, unsigned long *config)
422 {
423         return -ENOTSUPP;
424 }
425
426 static int pcs_pinconf_set(struct pinctrl_dev *pctldev,
427                                 unsigned pin, unsigned long config)
428 {
429         return -ENOTSUPP;
430 }
431
432 static int pcs_pinconf_group_get(struct pinctrl_dev *pctldev,
433                                 unsigned group, unsigned long *config)
434 {
435         return -ENOTSUPP;
436 }
437
438 static int pcs_pinconf_group_set(struct pinctrl_dev *pctldev,
439                                 unsigned group, unsigned long config)
440 {
441         return -ENOTSUPP;
442 }
443
444 static void pcs_pinconf_dbg_show(struct pinctrl_dev *pctldev,
445                                 struct seq_file *s, unsigned offset)
446 {
447 }
448
449 static void pcs_pinconf_group_dbg_show(struct pinctrl_dev *pctldev,
450                                 struct seq_file *s, unsigned selector)
451 {
452 }
453
454 static const struct pinconf_ops pcs_pinconf_ops = {
455         .pin_config_get = pcs_pinconf_get,
456         .pin_config_set = pcs_pinconf_set,
457         .pin_config_group_get = pcs_pinconf_group_get,
458         .pin_config_group_set = pcs_pinconf_group_set,
459         .pin_config_dbg_show = pcs_pinconf_dbg_show,
460         .pin_config_group_dbg_show = pcs_pinconf_group_dbg_show,
461 };
462
463 /**
464  * pcs_add_pin() - add a pin to the static per controller pin array
465  * @pcs: pcs driver instance
466  * @offset: register offset from base
467  */
468 static int pcs_add_pin(struct pcs_device *pcs, unsigned offset)
469 {
470         struct pinctrl_pin_desc *pin;
471         struct pcs_name *pn;
472         int i;
473
474         i = pcs->pins.cur;
475         if (i >= pcs->desc.npins) {
476                 dev_err(pcs->dev, "too many pins, max %i\n",
477                         pcs->desc.npins);
478                 return -ENOMEM;
479         }
480
481         pin = &pcs->pins.pa[i];
482         pn = &pcs->names[i];
483         sprintf(pn->name, "%lx",
484                 (unsigned long)pcs->res->start + offset);
485         pin->name = pn->name;
486         pin->number = i;
487         pcs->pins.cur++;
488
489         return i;
490 }
491
492 /**
493  * pcs_allocate_pin_table() - adds all the pins for the pinctrl driver
494  * @pcs: pcs driver instance
495  *
496  * In case of errors, resources are freed in pcs_free_resources.
497  *
498  * If your hardware needs holes in the address space, then just set
499  * up multiple driver instances.
500  */
501 static int pcs_allocate_pin_table(struct pcs_device *pcs)
502 {
503         int mux_bytes, nr_pins, i;
504
505         mux_bytes = pcs->width / BITS_PER_BYTE;
506         nr_pins = pcs->size / mux_bytes;
507
508         dev_dbg(pcs->dev, "allocating %i pins\n", nr_pins);
509         pcs->pins.pa = devm_kzalloc(pcs->dev,
510                                 sizeof(*pcs->pins.pa) * nr_pins,
511                                 GFP_KERNEL);
512         if (!pcs->pins.pa)
513                 return -ENOMEM;
514
515         pcs->names = devm_kzalloc(pcs->dev,
516                                 sizeof(struct pcs_name) * nr_pins,
517                                 GFP_KERNEL);
518         if (!pcs->names)
519                 return -ENOMEM;
520
521         pcs->desc.pins = pcs->pins.pa;
522         pcs->desc.npins = nr_pins;
523
524         for (i = 0; i < pcs->desc.npins; i++) {
525                 unsigned offset;
526                 int res;
527
528                 offset = i * mux_bytes;
529                 res = pcs_add_pin(pcs, offset);
530                 if (res < 0) {
531                         dev_err(pcs->dev, "error adding pins: %i\n", res);
532                         return res;
533                 }
534         }
535
536         return 0;
537 }
538
539 /**
540  * pcs_add_function() - adds a new function to the function list
541  * @pcs: pcs driver instance
542  * @np: device node of the mux entry
543  * @name: name of the function
544  * @vals: array of mux register value pairs used by the function
545  * @nvals: number of mux register value pairs
546  * @pgnames: array of pingroup names for the function
547  * @npgnames: number of pingroup names
548  */
549 static struct pcs_function *pcs_add_function(struct pcs_device *pcs,
550                                         struct device_node *np,
551                                         const char *name,
552                                         struct pcs_func_vals *vals,
553                                         unsigned nvals,
554                                         const char **pgnames,
555                                         unsigned npgnames)
556 {
557         struct pcs_function *function;
558
559         function = devm_kzalloc(pcs->dev, sizeof(*function), GFP_KERNEL);
560         if (!function)
561                 return NULL;
562
563         function->name = name;
564         function->vals = vals;
565         function->nvals = nvals;
566         function->pgnames = pgnames;
567         function->npgnames = npgnames;
568
569         mutex_lock(&pcs->mutex);
570         list_add_tail(&function->node, &pcs->functions);
571         radix_tree_insert(&pcs->ftree, pcs->nfuncs, function);
572         pcs->nfuncs++;
573         mutex_unlock(&pcs->mutex);
574
575         return function;
576 }
577
578 static void pcs_remove_function(struct pcs_device *pcs,
579                                 struct pcs_function *function)
580 {
581         int i;
582
583         mutex_lock(&pcs->mutex);
584         for (i = 0; i < pcs->nfuncs; i++) {
585                 struct pcs_function *found;
586
587                 found = radix_tree_lookup(&pcs->ftree, i);
588                 if (found == function)
589                         radix_tree_delete(&pcs->ftree, i);
590         }
591         list_del(&function->node);
592         mutex_unlock(&pcs->mutex);
593 }
594
595 /**
596  * pcs_add_pingroup() - add a pingroup to the pingroup list
597  * @pcs: pcs driver instance
598  * @np: device node of the mux entry
599  * @name: name of the pingroup
600  * @gpins: array of the pins that belong to the group
601  * @ngpins: number of pins in the group
602  */
603 static int pcs_add_pingroup(struct pcs_device *pcs,
604                                         struct device_node *np,
605                                         const char *name,
606                                         int *gpins,
607                                         int ngpins)
608 {
609         struct pcs_pingroup *pingroup;
610
611         pingroup = devm_kzalloc(pcs->dev, sizeof(*pingroup), GFP_KERNEL);
612         if (!pingroup)
613                 return -ENOMEM;
614
615         pingroup->name = name;
616         pingroup->np = np;
617         pingroup->gpins = gpins;
618         pingroup->ngpins = ngpins;
619
620         mutex_lock(&pcs->mutex);
621         list_add_tail(&pingroup->node, &pcs->pingroups);
622         radix_tree_insert(&pcs->pgtree, pcs->ngroups, pingroup);
623         pcs->ngroups++;
624         mutex_unlock(&pcs->mutex);
625
626         return 0;
627 }
628
629 /**
630  * pcs_get_pin_by_offset() - get a pin index based on the register offset
631  * @pcs: pcs driver instance
632  * @offset: register offset from the base
633  *
634  * Note that this is OK as long as the pins are in a static array.
635  */
636 static int pcs_get_pin_by_offset(struct pcs_device *pcs, unsigned offset)
637 {
638         unsigned index;
639
640         if (offset >= pcs->size) {
641                 dev_err(pcs->dev, "mux offset out of range: 0x%x (0x%x)\n",
642                         offset, pcs->size);
643                 return -EINVAL;
644         }
645
646         index = offset / (pcs->width / BITS_PER_BYTE);
647
648         return index;
649 }
650
651 /**
652  * smux_parse_one_pinctrl_entry() - parses a device tree mux entry
653  * @pcs: pinctrl driver instance
654  * @np: device node of the mux entry
655  * @map: map entry
656  * @pgnames: pingroup names
657  *
658  * Note that this binding currently supports only sets of one register + value.
659  *
660  * Also note that this driver tries to avoid understanding pin and function
661  * names because of the extra bloat they would cause especially in the case of
662  * a large number of pins. This driver just sets what is specified for the board
663  * in the .dts file. Further user space debugging tools can be developed to
664  * decipher the pin and function names using debugfs.
665  *
666  * If you are concerned about the boot time, set up the static pins in
667  * the bootloader, and only set up selected pins as device tree entries.
668  */
669 static int pcs_parse_one_pinctrl_entry(struct pcs_device *pcs,
670                                                 struct device_node *np,
671                                                 struct pinctrl_map **map,
672                                                 const char **pgnames)
673 {
674         struct pcs_func_vals *vals;
675         const __be32 *mux;
676         int size, params, rows, *pins, index = 0, found = 0, res = -ENOMEM;
677         struct pcs_function *function;
678
679         if (pcs->bits_per_mux) {
680                 params = 3;
681                 mux = of_get_property(np, PCS_MUX_BITS_NAME, &size);
682         } else {
683                 params = 2;
684                 mux = of_get_property(np, PCS_MUX_PINS_NAME, &size);
685         }
686
687         if (!mux) {
688                 dev_err(pcs->dev, "no valid property for %s\n", np->name);
689                 return -EINVAL;
690         }
691
692         if (size < (sizeof(*mux) * params)) {
693                 dev_err(pcs->dev, "bad data for %s\n", np->name);
694                 return -EINVAL;
695         }
696
697         size /= sizeof(*mux);   /* Number of elements in array */
698         rows = size / params;
699
700         vals = devm_kzalloc(pcs->dev, sizeof(*vals) * rows, GFP_KERNEL);
701         if (!vals)
702                 return -ENOMEM;
703
704         pins = devm_kzalloc(pcs->dev, sizeof(*pins) * rows, GFP_KERNEL);
705         if (!pins)
706                 goto free_vals;
707
708         while (index < size) {
709                 unsigned offset, val;
710                 int pin;
711
712                 offset = be32_to_cpup(mux + index++);
713                 val = be32_to_cpup(mux + index++);
714                 vals[found].reg = pcs->base + offset;
715                 vals[found].val = val;
716                 if (params == 3) {
717                         val = be32_to_cpup(mux + index++);
718                         vals[found].mask = val;
719                 }
720
721                 pin = pcs_get_pin_by_offset(pcs, offset);
722                 if (pin < 0) {
723                         dev_err(pcs->dev,
724                                 "could not add functions for %s %ux\n",
725                                 np->name, offset);
726                         break;
727                 }
728                 pins[found++] = pin;
729         }
730
731         pgnames[0] = np->name;
732         function = pcs_add_function(pcs, np, np->name, vals, found, pgnames, 1);
733         if (!function)
734                 goto free_pins;
735
736         res = pcs_add_pingroup(pcs, np, np->name, pins, found);
737         if (res < 0)
738                 goto free_function;
739
740         (*map)->type = PIN_MAP_TYPE_MUX_GROUP;
741         (*map)->data.mux.group = np->name;
742         (*map)->data.mux.function = np->name;
743
744         return 0;
745
746 free_function:
747         pcs_remove_function(pcs, function);
748
749 free_pins:
750         devm_kfree(pcs->dev, pins);
751
752 free_vals:
753         devm_kfree(pcs->dev, vals);
754
755         return res;
756 }
757 /**
758  * pcs_dt_node_to_map() - allocates and parses pinctrl maps
759  * @pctldev: pinctrl instance
760  * @np_config: device tree pinmux entry
761  * @map: array of map entries
762  * @num_maps: number of maps
763  */
764 static int pcs_dt_node_to_map(struct pinctrl_dev *pctldev,
765                                 struct device_node *np_config,
766                                 struct pinctrl_map **map, unsigned *num_maps)
767 {
768         struct pcs_device *pcs;
769         const char **pgnames;
770         int ret;
771
772         pcs = pinctrl_dev_get_drvdata(pctldev);
773
774         *map = devm_kzalloc(pcs->dev, sizeof(**map), GFP_KERNEL);
775         if (!*map)
776                 return -ENOMEM;
777
778         *num_maps = 0;
779
780         pgnames = devm_kzalloc(pcs->dev, sizeof(*pgnames), GFP_KERNEL);
781         if (!pgnames) {
782                 ret = -ENOMEM;
783                 goto free_map;
784         }
785
786         ret = pcs_parse_one_pinctrl_entry(pcs, np_config, map, pgnames);
787         if (ret < 0) {
788                 dev_err(pcs->dev, "no pins entries for %s\n",
789                         np_config->name);
790                 goto free_pgnames;
791         }
792         *num_maps = 1;
793
794         return 0;
795
796 free_pgnames:
797         devm_kfree(pcs->dev, pgnames);
798 free_map:
799         devm_kfree(pcs->dev, *map);
800
801         return ret;
802 }
803
804 /**
805  * pcs_free_funcs() - free memory used by functions
806  * @pcs: pcs driver instance
807  */
808 static void pcs_free_funcs(struct pcs_device *pcs)
809 {
810         struct list_head *pos, *tmp;
811         int i;
812
813         mutex_lock(&pcs->mutex);
814         for (i = 0; i < pcs->nfuncs; i++) {
815                 struct pcs_function *func;
816
817                 func = radix_tree_lookup(&pcs->ftree, i);
818                 if (!func)
819                         continue;
820                 radix_tree_delete(&pcs->ftree, i);
821         }
822         list_for_each_safe(pos, tmp, &pcs->functions) {
823                 struct pcs_function *function;
824
825                 function = list_entry(pos, struct pcs_function, node);
826                 list_del(&function->node);
827         }
828         mutex_unlock(&pcs->mutex);
829 }
830
831 /**
832  * pcs_free_pingroups() - free memory used by pingroups
833  * @pcs: pcs driver instance
834  */
835 static void pcs_free_pingroups(struct pcs_device *pcs)
836 {
837         struct list_head *pos, *tmp;
838         int i;
839
840         mutex_lock(&pcs->mutex);
841         for (i = 0; i < pcs->ngroups; i++) {
842                 struct pcs_pingroup *pingroup;
843
844                 pingroup = radix_tree_lookup(&pcs->pgtree, i);
845                 if (!pingroup)
846                         continue;
847                 radix_tree_delete(&pcs->pgtree, i);
848         }
849         list_for_each_safe(pos, tmp, &pcs->pingroups) {
850                 struct pcs_pingroup *pingroup;
851
852                 pingroup = list_entry(pos, struct pcs_pingroup, node);
853                 list_del(&pingroup->node);
854         }
855         mutex_unlock(&pcs->mutex);
856 }
857
858 /**
859  * pcs_free_resources() - free memory used by this driver
860  * @pcs: pcs driver instance
861  */
862 static void pcs_free_resources(struct pcs_device *pcs)
863 {
864         if (pcs->pctl)
865                 pinctrl_unregister(pcs->pctl);
866
867         pcs_free_funcs(pcs);
868         pcs_free_pingroups(pcs);
869 }
870
871 #define PCS_GET_PROP_U32(name, reg, err)                                \
872         do {                                                            \
873                 ret = of_property_read_u32(np, name, reg);              \
874                 if (ret) {                                              \
875                         dev_err(pcs->dev, err);                         \
876                         return ret;                                     \
877                 }                                                       \
878         } while (0);
879
880 static struct of_device_id pcs_of_match[];
881
882 static int pcs_probe(struct platform_device *pdev)
883 {
884         struct device_node *np = pdev->dev.of_node;
885         const struct of_device_id *match;
886         struct resource *res;
887         struct pcs_device *pcs;
888         int ret;
889
890         match = of_match_device(pcs_of_match, &pdev->dev);
891         if (!match)
892                 return -EINVAL;
893
894         pcs = devm_kzalloc(&pdev->dev, sizeof(*pcs), GFP_KERNEL);
895         if (!pcs) {
896                 dev_err(&pdev->dev, "could not allocate\n");
897                 return -ENOMEM;
898         }
899         pcs->dev = &pdev->dev;
900         mutex_init(&pcs->mutex);
901         INIT_LIST_HEAD(&pcs->pingroups);
902         INIT_LIST_HEAD(&pcs->functions);
903
904         PCS_GET_PROP_U32("pinctrl-single,register-width", &pcs->width,
905                          "register width not specified\n");
906
907         PCS_GET_PROP_U32("pinctrl-single,function-mask", &pcs->fmask,
908                          "function register mask not specified\n");
909         pcs->fshift = ffs(pcs->fmask) - 1;
910         pcs->fmax = pcs->fmask >> pcs->fshift;
911
912         ret = of_property_read_u32(np, "pinctrl-single,function-off",
913                                         &pcs->foff);
914         if (ret)
915                 pcs->foff = PCS_OFF_DISABLED;
916
917         pcs->bits_per_mux = of_property_read_bool(np,
918                                                   "pinctrl-single,bit-per-mux");
919
920         res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
921         if (!res) {
922                 dev_err(pcs->dev, "could not get resource\n");
923                 return -ENODEV;
924         }
925
926         pcs->res = devm_request_mem_region(pcs->dev, res->start,
927                         resource_size(res), DRIVER_NAME);
928         if (!pcs->res) {
929                 dev_err(pcs->dev, "could not get mem_region\n");
930                 return -EBUSY;
931         }
932
933         pcs->size = resource_size(pcs->res);
934         pcs->base = devm_ioremap(pcs->dev, pcs->res->start, pcs->size);
935         if (!pcs->base) {
936                 dev_err(pcs->dev, "could not ioremap\n");
937                 return -ENODEV;
938         }
939
940         INIT_RADIX_TREE(&pcs->pgtree, GFP_KERNEL);
941         INIT_RADIX_TREE(&pcs->ftree, GFP_KERNEL);
942         platform_set_drvdata(pdev, pcs);
943
944         switch (pcs->width) {
945         case 8:
946                 pcs->read = pcs_readb;
947                 pcs->write = pcs_writeb;
948                 break;
949         case 16:
950                 pcs->read = pcs_readw;
951                 pcs->write = pcs_writew;
952                 break;
953         case 32:
954                 pcs->read = pcs_readl;
955                 pcs->write = pcs_writel;
956                 break;
957         default:
958                 break;
959         }
960
961         pcs->desc.name = DRIVER_NAME;
962         pcs->desc.pctlops = &pcs_pinctrl_ops;
963         pcs->desc.pmxops = &pcs_pinmux_ops;
964         pcs->desc.confops = &pcs_pinconf_ops;
965         pcs->desc.owner = THIS_MODULE;
966
967         ret = pcs_allocate_pin_table(pcs);
968         if (ret < 0)
969                 goto free;
970
971         pcs->pctl = pinctrl_register(&pcs->desc, pcs->dev, pcs);
972         if (!pcs->pctl) {
973                 dev_err(pcs->dev, "could not register single pinctrl driver\n");
974                 ret = -EINVAL;
975                 goto free;
976         }
977
978         dev_info(pcs->dev, "%i pins at pa %p size %u\n",
979                  pcs->desc.npins, pcs->base, pcs->size);
980
981         return 0;
982
983 free:
984         pcs_free_resources(pcs);
985
986         return ret;
987 }
988
989 static int pcs_remove(struct platform_device *pdev)
990 {
991         struct pcs_device *pcs = platform_get_drvdata(pdev);
992
993         if (!pcs)
994                 return 0;
995
996         pcs_free_resources(pcs);
997
998         return 0;
999 }
1000
1001 static struct of_device_id pcs_of_match[] = {
1002         { .compatible = DRIVER_NAME, },
1003         { },
1004 };
1005 MODULE_DEVICE_TABLE(of, pcs_of_match);
1006
1007 static struct platform_driver pcs_driver = {
1008         .probe          = pcs_probe,
1009         .remove         = pcs_remove,
1010         .driver = {
1011                 .owner          = THIS_MODULE,
1012                 .name           = DRIVER_NAME,
1013                 .of_match_table = pcs_of_match,
1014         },
1015 };
1016
1017 module_platform_driver(pcs_driver);
1018
1019 MODULE_AUTHOR("Tony Lindgren <tony@atomide.com>");
1020 MODULE_DESCRIPTION("One-register-per-pin type device tree based pinctrl driver");
1021 MODULE_LICENSE("GPL v2");