This source file includes following definitions.
- pcs_readb
- pcs_readw
- pcs_readl
- pcs_writeb
- pcs_writew
- pcs_writel
- pcs_pin_dbg_show
- pcs_dt_free_map
- pcs_get_function
- pcs_set_mux
- pcs_request_gpio
- pcs_pinconf_clear_bias
- pcs_pinconf_bias_disable
- pcs_pinconf_get
- pcs_pinconf_set
- pcs_pinconf_group_get
- pcs_pinconf_group_set
- pcs_pinconf_dbg_show
- pcs_pinconf_group_dbg_show
- pcs_pinconf_config_dbg_show
- pcs_add_pin
- pcs_allocate_pin_table
- pcs_add_function
- pcs_get_pin_by_offset
- pcs_config_match
- add_config
- add_setting
- pcs_add_conf2
- pcs_add_conf4
- pcs_parse_pinconf
- pcs_parse_one_pinctrl_entry
- pcs_parse_bits_in_pinctrl_entry
- pcs_dt_node_to_map
- pcs_irq_free
- pcs_free_resources
- pcs_add_gpio_func
- pcs_irq_set
- pcs_irq_mask
- pcs_irq_unmask
- pcs_irq_set_wake
- pcs_irq_handle
- pcs_irq_handler
- pcs_irq_chain_handler
- pcs_irqdomain_map
- pcs_irq_init_chained_handler
- pcs_save_context
- pcs_restore_context
- pinctrl_single_suspend
- pinctrl_single_resume
- pcs_quirk_missing_pinctrl_cells
- pcs_probe
- pcs_remove
1
2
3
4
5
6
7
8
9
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 #include <linux/interrupt.h>
19
20 #include <linux/irqchip/chained_irq.h>
21
22 #include <linux/of.h>
23 #include <linux/of_device.h>
24 #include <linux/of_address.h>
25 #include <linux/of_irq.h>
26
27 #include <linux/pinctrl/pinctrl.h>
28 #include <linux/pinctrl/pinmux.h>
29 #include <linux/pinctrl/pinconf-generic.h>
30
31 #include <linux/platform_data/pinctrl-single.h>
32
33 #include "core.h"
34 #include "devicetree.h"
35 #include "pinconf.h"
36 #include "pinmux.h"
37
38 #define DRIVER_NAME "pinctrl-single"
39 #define PCS_OFF_DISABLED ~0U
40
41
42
43
44
45
46 struct pcs_func_vals {
47 void __iomem *reg;
48 unsigned val;
49 unsigned mask;
50 };
51
52
53
54
55
56
57
58
59
60
61 struct pcs_conf_vals {
62 enum pin_config_param param;
63 unsigned val;
64 unsigned enable;
65 unsigned disable;
66 unsigned mask;
67 };
68
69
70
71
72
73
74 struct pcs_conf_type {
75 const char *name;
76 enum pin_config_param param;
77 };
78
79
80
81
82
83
84
85
86
87
88 struct pcs_function {
89 const char *name;
90 struct pcs_func_vals *vals;
91 unsigned nvals;
92 const char **pgnames;
93 int npgnames;
94 struct pcs_conf_vals *conf;
95 int nconfs;
96 struct list_head node;
97 };
98
99
100
101
102
103
104
105
106 struct pcs_gpiofunc_range {
107 unsigned offset;
108 unsigned npins;
109 unsigned gpiofunc;
110 struct list_head node;
111 };
112
113
114
115
116
117
118
119
120
121
122 struct pcs_data {
123 struct pinctrl_pin_desc *pa;
124 int cur;
125 };
126
127
128
129
130
131
132
133
134
135 struct pcs_soc_data {
136 unsigned flags;
137 int irq;
138 unsigned irq_enable_mask;
139 unsigned irq_status_mask;
140 void (*rearm)(void);
141 };
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173 struct pcs_device {
174 struct resource *res;
175 void __iomem *base;
176 void *saved_vals;
177 unsigned size;
178 struct device *dev;
179 struct device_node *np;
180 struct pinctrl_dev *pctl;
181 unsigned flags;
182 #define PCS_CONTEXT_LOSS_OFF (1 << 3)
183 #define PCS_QUIRK_SHARED_IRQ (1 << 2)
184 #define PCS_FEAT_IRQ (1 << 1)
185 #define PCS_FEAT_PINCONF (1 << 0)
186 struct property *missing_nr_pinctrl_cells;
187 struct pcs_soc_data socdata;
188 raw_spinlock_t lock;
189 struct mutex mutex;
190 unsigned width;
191 unsigned fmask;
192 unsigned fshift;
193 unsigned foff;
194 unsigned fmax;
195 bool bits_per_mux;
196 unsigned bits_per_pin;
197 struct pcs_data pins;
198 struct list_head gpiofuncs;
199 struct list_head irqs;
200 struct irq_chip chip;
201 struct irq_domain *domain;
202 struct pinctrl_desc desc;
203 unsigned (*read)(void __iomem *reg);
204 void (*write)(unsigned val, void __iomem *reg);
205 };
206
207 #define PCS_QUIRK_HAS_SHARED_IRQ (pcs->flags & PCS_QUIRK_SHARED_IRQ)
208 #define PCS_HAS_IRQ (pcs->flags & PCS_FEAT_IRQ)
209 #define PCS_HAS_PINCONF (pcs->flags & PCS_FEAT_PINCONF)
210
211 static int pcs_pinconf_get(struct pinctrl_dev *pctldev, unsigned pin,
212 unsigned long *config);
213 static int pcs_pinconf_set(struct pinctrl_dev *pctldev, unsigned pin,
214 unsigned long *configs, unsigned num_configs);
215
216 static enum pin_config_param pcs_bias[] = {
217 PIN_CONFIG_BIAS_PULL_DOWN,
218 PIN_CONFIG_BIAS_PULL_UP,
219 };
220
221
222
223
224
225
226 static struct lock_class_key pcs_lock_class;
227
228
229 static struct lock_class_key pcs_request_class;
230
231
232
233
234
235
236
237
238
239
240 static unsigned __maybe_unused pcs_readb(void __iomem *reg)
241 {
242 return readb(reg);
243 }
244
245 static unsigned __maybe_unused pcs_readw(void __iomem *reg)
246 {
247 return readw(reg);
248 }
249
250 static unsigned __maybe_unused pcs_readl(void __iomem *reg)
251 {
252 return readl(reg);
253 }
254
255 static void __maybe_unused pcs_writeb(unsigned val, void __iomem *reg)
256 {
257 writeb(val, reg);
258 }
259
260 static void __maybe_unused pcs_writew(unsigned val, void __iomem *reg)
261 {
262 writew(val, reg);
263 }
264
265 static void __maybe_unused pcs_writel(unsigned val, void __iomem *reg)
266 {
267 writel(val, reg);
268 }
269
270 static void pcs_pin_dbg_show(struct pinctrl_dev *pctldev,
271 struct seq_file *s,
272 unsigned pin)
273 {
274 struct pcs_device *pcs;
275 unsigned val, mux_bytes;
276 unsigned long offset;
277 size_t pa;
278
279 pcs = pinctrl_dev_get_drvdata(pctldev);
280
281 mux_bytes = pcs->width / BITS_PER_BYTE;
282 offset = pin * mux_bytes;
283 val = pcs->read(pcs->base + offset);
284 pa = pcs->res->start + offset;
285
286 seq_printf(s, "%zx %08x %s ", pa, val, DRIVER_NAME);
287 }
288
289 static void pcs_dt_free_map(struct pinctrl_dev *pctldev,
290 struct pinctrl_map *map, unsigned num_maps)
291 {
292 struct pcs_device *pcs;
293
294 pcs = pinctrl_dev_get_drvdata(pctldev);
295 devm_kfree(pcs->dev, map);
296 }
297
298 static int pcs_dt_node_to_map(struct pinctrl_dev *pctldev,
299 struct device_node *np_config,
300 struct pinctrl_map **map, unsigned *num_maps);
301
302 static const struct pinctrl_ops pcs_pinctrl_ops = {
303 .get_groups_count = pinctrl_generic_get_group_count,
304 .get_group_name = pinctrl_generic_get_group_name,
305 .get_group_pins = pinctrl_generic_get_group_pins,
306 .pin_dbg_show = pcs_pin_dbg_show,
307 .dt_node_to_map = pcs_dt_node_to_map,
308 .dt_free_map = pcs_dt_free_map,
309 };
310
311 static int pcs_get_function(struct pinctrl_dev *pctldev, unsigned pin,
312 struct pcs_function **func)
313 {
314 struct pcs_device *pcs = pinctrl_dev_get_drvdata(pctldev);
315 struct pin_desc *pdesc = pin_desc_get(pctldev, pin);
316 const struct pinctrl_setting_mux *setting;
317 struct function_desc *function;
318 unsigned fselector;
319
320
321 setting = pdesc->mux_setting;
322 if (!setting)
323 return -ENOTSUPP;
324 fselector = setting->func;
325 function = pinmux_generic_get_function(pctldev, fselector);
326 *func = function->data;
327 if (!(*func)) {
328 dev_err(pcs->dev, "%s could not find function%i\n",
329 __func__, fselector);
330 return -ENOTSUPP;
331 }
332 return 0;
333 }
334
335 static int pcs_set_mux(struct pinctrl_dev *pctldev, unsigned fselector,
336 unsigned group)
337 {
338 struct pcs_device *pcs;
339 struct function_desc *function;
340 struct pcs_function *func;
341 int i;
342
343 pcs = pinctrl_dev_get_drvdata(pctldev);
344
345 if (!pcs->fmask)
346 return 0;
347 function = pinmux_generic_get_function(pctldev, fselector);
348 func = function->data;
349 if (!func)
350 return -EINVAL;
351
352 dev_dbg(pcs->dev, "enabling %s function%i\n",
353 func->name, fselector);
354
355 for (i = 0; i < func->nvals; i++) {
356 struct pcs_func_vals *vals;
357 unsigned long flags;
358 unsigned val, mask;
359
360 vals = &func->vals[i];
361 raw_spin_lock_irqsave(&pcs->lock, flags);
362 val = pcs->read(vals->reg);
363
364 if (pcs->bits_per_mux)
365 mask = vals->mask;
366 else
367 mask = pcs->fmask;
368
369 val &= ~mask;
370 val |= (vals->val & mask);
371 pcs->write(val, vals->reg);
372 raw_spin_unlock_irqrestore(&pcs->lock, flags);
373 }
374
375 return 0;
376 }
377
378 static int pcs_request_gpio(struct pinctrl_dev *pctldev,
379 struct pinctrl_gpio_range *range, unsigned pin)
380 {
381 struct pcs_device *pcs = pinctrl_dev_get_drvdata(pctldev);
382 struct pcs_gpiofunc_range *frange = NULL;
383 struct list_head *pos, *tmp;
384 int mux_bytes = 0;
385 unsigned data;
386
387
388 if (!pcs->fmask)
389 return -ENOTSUPP;
390
391 list_for_each_safe(pos, tmp, &pcs->gpiofuncs) {
392 frange = list_entry(pos, struct pcs_gpiofunc_range, node);
393 if (pin >= frange->offset + frange->npins
394 || pin < frange->offset)
395 continue;
396 mux_bytes = pcs->width / BITS_PER_BYTE;
397
398 if (pcs->bits_per_mux) {
399 int byte_num, offset, pin_shift;
400
401 byte_num = (pcs->bits_per_pin * pin) / BITS_PER_BYTE;
402 offset = (byte_num / mux_bytes) * mux_bytes;
403 pin_shift = pin % (pcs->width / pcs->bits_per_pin) *
404 pcs->bits_per_pin;
405
406 data = pcs->read(pcs->base + offset);
407 data &= ~(pcs->fmask << pin_shift);
408 data |= frange->gpiofunc << pin_shift;
409 pcs->write(data, pcs->base + offset);
410 } else {
411 data = pcs->read(pcs->base + pin * mux_bytes);
412 data &= ~pcs->fmask;
413 data |= frange->gpiofunc;
414 pcs->write(data, pcs->base + pin * mux_bytes);
415 }
416 break;
417 }
418 return 0;
419 }
420
421 static const struct pinmux_ops pcs_pinmux_ops = {
422 .get_functions_count = pinmux_generic_get_function_count,
423 .get_function_name = pinmux_generic_get_function_name,
424 .get_function_groups = pinmux_generic_get_function_groups,
425 .set_mux = pcs_set_mux,
426 .gpio_request_enable = pcs_request_gpio,
427 };
428
429
430 static void pcs_pinconf_clear_bias(struct pinctrl_dev *pctldev, unsigned pin)
431 {
432 unsigned long config;
433 int i;
434 for (i = 0; i < ARRAY_SIZE(pcs_bias); i++) {
435 config = pinconf_to_config_packed(pcs_bias[i], 0);
436 pcs_pinconf_set(pctldev, pin, &config, 1);
437 }
438 }
439
440
441
442
443
444 static bool pcs_pinconf_bias_disable(struct pinctrl_dev *pctldev, unsigned pin)
445 {
446 unsigned long config;
447 int i;
448
449 for (i = 0; i < ARRAY_SIZE(pcs_bias); i++) {
450 config = pinconf_to_config_packed(pcs_bias[i], 0);
451 if (!pcs_pinconf_get(pctldev, pin, &config))
452 goto out;
453 }
454 return true;
455 out:
456 return false;
457 }
458
459 static int pcs_pinconf_get(struct pinctrl_dev *pctldev,
460 unsigned pin, unsigned long *config)
461 {
462 struct pcs_device *pcs = pinctrl_dev_get_drvdata(pctldev);
463 struct pcs_function *func;
464 enum pin_config_param param;
465 unsigned offset = 0, data = 0, i, j, ret;
466
467 ret = pcs_get_function(pctldev, pin, &func);
468 if (ret)
469 return ret;
470
471 for (i = 0; i < func->nconfs; i++) {
472 param = pinconf_to_config_param(*config);
473 if (param == PIN_CONFIG_BIAS_DISABLE) {
474 if (pcs_pinconf_bias_disable(pctldev, pin)) {
475 *config = 0;
476 return 0;
477 } else {
478 return -ENOTSUPP;
479 }
480 } else if (param != func->conf[i].param) {
481 continue;
482 }
483
484 offset = pin * (pcs->width / BITS_PER_BYTE);
485 data = pcs->read(pcs->base + offset) & func->conf[i].mask;
486 switch (func->conf[i].param) {
487
488 case PIN_CONFIG_BIAS_PULL_DOWN:
489 case PIN_CONFIG_BIAS_PULL_UP:
490 case PIN_CONFIG_INPUT_SCHMITT_ENABLE:
491 if ((data != func->conf[i].enable) ||
492 (data == func->conf[i].disable))
493 return -ENOTSUPP;
494 *config = 0;
495 break;
496
497 case PIN_CONFIG_INPUT_SCHMITT:
498 for (j = 0; j < func->nconfs; j++) {
499 switch (func->conf[j].param) {
500 case PIN_CONFIG_INPUT_SCHMITT_ENABLE:
501 if (data != func->conf[j].enable)
502 return -ENOTSUPP;
503 break;
504 default:
505 break;
506 }
507 }
508 *config = data;
509 break;
510 case PIN_CONFIG_DRIVE_STRENGTH:
511 case PIN_CONFIG_SLEW_RATE:
512 case PIN_CONFIG_LOW_POWER_MODE:
513 default:
514 *config = data;
515 break;
516 }
517 return 0;
518 }
519 return -ENOTSUPP;
520 }
521
522 static int pcs_pinconf_set(struct pinctrl_dev *pctldev,
523 unsigned pin, unsigned long *configs,
524 unsigned num_configs)
525 {
526 struct pcs_device *pcs = pinctrl_dev_get_drvdata(pctldev);
527 struct pcs_function *func;
528 unsigned offset = 0, shift = 0, i, data, ret;
529 u32 arg;
530 int j;
531
532 ret = pcs_get_function(pctldev, pin, &func);
533 if (ret)
534 return ret;
535
536 for (j = 0; j < num_configs; j++) {
537 for (i = 0; i < func->nconfs; i++) {
538 if (pinconf_to_config_param(configs[j])
539 != func->conf[i].param)
540 continue;
541
542 offset = pin * (pcs->width / BITS_PER_BYTE);
543 data = pcs->read(pcs->base + offset);
544 arg = pinconf_to_config_argument(configs[j]);
545 switch (func->conf[i].param) {
546
547 case PIN_CONFIG_INPUT_SCHMITT:
548 case PIN_CONFIG_DRIVE_STRENGTH:
549 case PIN_CONFIG_SLEW_RATE:
550 case PIN_CONFIG_LOW_POWER_MODE:
551 shift = ffs(func->conf[i].mask) - 1;
552 data &= ~func->conf[i].mask;
553 data |= (arg << shift) & func->conf[i].mask;
554 break;
555
556 case PIN_CONFIG_BIAS_DISABLE:
557 pcs_pinconf_clear_bias(pctldev, pin);
558 break;
559 case PIN_CONFIG_BIAS_PULL_DOWN:
560 case PIN_CONFIG_BIAS_PULL_UP:
561 if (arg)
562 pcs_pinconf_clear_bias(pctldev, pin);
563
564 case PIN_CONFIG_INPUT_SCHMITT_ENABLE:
565 data &= ~func->conf[i].mask;
566 if (arg)
567 data |= func->conf[i].enable;
568 else
569 data |= func->conf[i].disable;
570 break;
571 default:
572 return -ENOTSUPP;
573 }
574 pcs->write(data, pcs->base + offset);
575
576 break;
577 }
578 if (i >= func->nconfs)
579 return -ENOTSUPP;
580 }
581
582 return 0;
583 }
584
585 static int pcs_pinconf_group_get(struct pinctrl_dev *pctldev,
586 unsigned group, unsigned long *config)
587 {
588 const unsigned *pins;
589 unsigned npins, old = 0;
590 int i, ret;
591
592 ret = pinctrl_generic_get_group_pins(pctldev, group, &pins, &npins);
593 if (ret)
594 return ret;
595 for (i = 0; i < npins; i++) {
596 if (pcs_pinconf_get(pctldev, pins[i], config))
597 return -ENOTSUPP;
598
599 if (i && (old != *config))
600 return -ENOTSUPP;
601 old = *config;
602 }
603 return 0;
604 }
605
606 static int pcs_pinconf_group_set(struct pinctrl_dev *pctldev,
607 unsigned group, unsigned long *configs,
608 unsigned num_configs)
609 {
610 const unsigned *pins;
611 unsigned npins;
612 int i, ret;
613
614 ret = pinctrl_generic_get_group_pins(pctldev, group, &pins, &npins);
615 if (ret)
616 return ret;
617 for (i = 0; i < npins; i++) {
618 if (pcs_pinconf_set(pctldev, pins[i], configs, num_configs))
619 return -ENOTSUPP;
620 }
621 return 0;
622 }
623
624 static void pcs_pinconf_dbg_show(struct pinctrl_dev *pctldev,
625 struct seq_file *s, unsigned pin)
626 {
627 }
628
629 static void pcs_pinconf_group_dbg_show(struct pinctrl_dev *pctldev,
630 struct seq_file *s, unsigned selector)
631 {
632 }
633
634 static void pcs_pinconf_config_dbg_show(struct pinctrl_dev *pctldev,
635 struct seq_file *s,
636 unsigned long config)
637 {
638 pinconf_generic_dump_config(pctldev, s, config);
639 }
640
641 static const struct pinconf_ops pcs_pinconf_ops = {
642 .pin_config_get = pcs_pinconf_get,
643 .pin_config_set = pcs_pinconf_set,
644 .pin_config_group_get = pcs_pinconf_group_get,
645 .pin_config_group_set = pcs_pinconf_group_set,
646 .pin_config_dbg_show = pcs_pinconf_dbg_show,
647 .pin_config_group_dbg_show = pcs_pinconf_group_dbg_show,
648 .pin_config_config_dbg_show = pcs_pinconf_config_dbg_show,
649 .is_generic = true,
650 };
651
652
653
654
655
656
657 static int pcs_add_pin(struct pcs_device *pcs, unsigned offset,
658 unsigned pin_pos)
659 {
660 struct pcs_soc_data *pcs_soc = &pcs->socdata;
661 struct pinctrl_pin_desc *pin;
662 int i;
663
664 i = pcs->pins.cur;
665 if (i >= pcs->desc.npins) {
666 dev_err(pcs->dev, "too many pins, max %i\n",
667 pcs->desc.npins);
668 return -ENOMEM;
669 }
670
671 if (pcs_soc->irq_enable_mask) {
672 unsigned val;
673
674 val = pcs->read(pcs->base + offset);
675 if (val & pcs_soc->irq_enable_mask) {
676 dev_dbg(pcs->dev, "irq enabled at boot for pin at %lx (%x), clearing\n",
677 (unsigned long)pcs->res->start + offset, val);
678 val &= ~pcs_soc->irq_enable_mask;
679 pcs->write(val, pcs->base + offset);
680 }
681 }
682
683 pin = &pcs->pins.pa[i];
684 pin->number = i;
685 pcs->pins.cur++;
686
687 return i;
688 }
689
690
691
692
693
694
695
696
697
698
699 static int pcs_allocate_pin_table(struct pcs_device *pcs)
700 {
701 int mux_bytes, nr_pins, i;
702 int num_pins_in_register = 0;
703
704 mux_bytes = pcs->width / BITS_PER_BYTE;
705
706 if (pcs->bits_per_mux) {
707 pcs->bits_per_pin = fls(pcs->fmask);
708 nr_pins = (pcs->size * BITS_PER_BYTE) / pcs->bits_per_pin;
709 num_pins_in_register = pcs->width / pcs->bits_per_pin;
710 } else {
711 nr_pins = pcs->size / mux_bytes;
712 }
713
714 dev_dbg(pcs->dev, "allocating %i pins\n", nr_pins);
715 pcs->pins.pa = devm_kcalloc(pcs->dev,
716 nr_pins, sizeof(*pcs->pins.pa),
717 GFP_KERNEL);
718 if (!pcs->pins.pa)
719 return -ENOMEM;
720
721 pcs->desc.pins = pcs->pins.pa;
722 pcs->desc.npins = nr_pins;
723
724 for (i = 0; i < pcs->desc.npins; i++) {
725 unsigned offset;
726 int res;
727 int byte_num;
728 int pin_pos = 0;
729
730 if (pcs->bits_per_mux) {
731 byte_num = (pcs->bits_per_pin * i) / BITS_PER_BYTE;
732 offset = (byte_num / mux_bytes) * mux_bytes;
733 pin_pos = i % num_pins_in_register;
734 } else {
735 offset = i * mux_bytes;
736 }
737 res = pcs_add_pin(pcs, offset, pin_pos);
738 if (res < 0) {
739 dev_err(pcs->dev, "error adding pins: %i\n", res);
740 return res;
741 }
742 }
743
744 return 0;
745 }
746
747
748
749
750
751
752
753
754
755
756
757
758
759 static int pcs_add_function(struct pcs_device *pcs,
760 struct pcs_function **fcn,
761 const char *name,
762 struct pcs_func_vals *vals,
763 unsigned int nvals,
764 const char **pgnames,
765 unsigned int npgnames)
766 {
767 struct pcs_function *function;
768 int selector;
769
770 function = devm_kzalloc(pcs->dev, sizeof(*function), GFP_KERNEL);
771 if (!function)
772 return -ENOMEM;
773
774 function->vals = vals;
775 function->nvals = nvals;
776
777 selector = pinmux_generic_add_function(pcs->pctl, name,
778 pgnames, npgnames,
779 function);
780 if (selector < 0) {
781 devm_kfree(pcs->dev, function);
782 *fcn = NULL;
783 } else {
784 *fcn = function;
785 }
786
787 return selector;
788 }
789
790
791
792
793
794
795
796
797 static int pcs_get_pin_by_offset(struct pcs_device *pcs, unsigned offset)
798 {
799 unsigned index;
800
801 if (offset >= pcs->size) {
802 dev_err(pcs->dev, "mux offset out of range: 0x%x (0x%x)\n",
803 offset, pcs->size);
804 return -EINVAL;
805 }
806
807 if (pcs->bits_per_mux)
808 index = (offset * BITS_PER_BYTE) / pcs->bits_per_pin;
809 else
810 index = offset / (pcs->width / BITS_PER_BYTE);
811
812 return index;
813 }
814
815
816
817
818
819
820 static int pcs_config_match(unsigned data, unsigned enable, unsigned disable)
821 {
822 int ret = -EINVAL;
823
824 if (data == enable)
825 ret = 1;
826 else if (data == disable)
827 ret = 0;
828 return ret;
829 }
830
831 static void add_config(struct pcs_conf_vals **conf, enum pin_config_param param,
832 unsigned value, unsigned enable, unsigned disable,
833 unsigned mask)
834 {
835 (*conf)->param = param;
836 (*conf)->val = value;
837 (*conf)->enable = enable;
838 (*conf)->disable = disable;
839 (*conf)->mask = mask;
840 (*conf)++;
841 }
842
843 static void add_setting(unsigned long **setting, enum pin_config_param param,
844 unsigned arg)
845 {
846 **setting = pinconf_to_config_packed(param, arg);
847 (*setting)++;
848 }
849
850
851 static void pcs_add_conf2(struct pcs_device *pcs, struct device_node *np,
852 const char *name, enum pin_config_param param,
853 struct pcs_conf_vals **conf, unsigned long **settings)
854 {
855 unsigned value[2], shift;
856 int ret;
857
858 ret = of_property_read_u32_array(np, name, value, 2);
859 if (ret)
860 return;
861
862 value[0] &= value[1];
863 shift = ffs(value[1]) - 1;
864
865 add_config(conf, param, value[0], 0, 0, value[1]);
866 add_setting(settings, param, value[0] >> shift);
867 }
868
869
870 static void pcs_add_conf4(struct pcs_device *pcs, struct device_node *np,
871 const char *name, enum pin_config_param param,
872 struct pcs_conf_vals **conf, unsigned long **settings)
873 {
874 unsigned value[4];
875 int ret;
876
877
878 ret = of_property_read_u32_array(np, name, value, 4);
879 if (ret)
880 return;
881 if (!value[3]) {
882 dev_err(pcs->dev, "mask field of the property can't be 0\n");
883 return;
884 }
885 value[0] &= value[3];
886 value[1] &= value[3];
887 value[2] &= value[3];
888 ret = pcs_config_match(value[0], value[1], value[2]);
889 if (ret < 0)
890 dev_dbg(pcs->dev, "failed to match enable or disable bits\n");
891 add_config(conf, param, value[0], value[1], value[2], value[3]);
892 add_setting(settings, param, ret);
893 }
894
895 static int pcs_parse_pinconf(struct pcs_device *pcs, struct device_node *np,
896 struct pcs_function *func,
897 struct pinctrl_map **map)
898
899 {
900 struct pinctrl_map *m = *map;
901 int i = 0, nconfs = 0;
902 unsigned long *settings = NULL, *s = NULL;
903 struct pcs_conf_vals *conf = NULL;
904 static const struct pcs_conf_type prop2[] = {
905 { "pinctrl-single,drive-strength", PIN_CONFIG_DRIVE_STRENGTH, },
906 { "pinctrl-single,slew-rate", PIN_CONFIG_SLEW_RATE, },
907 { "pinctrl-single,input-schmitt", PIN_CONFIG_INPUT_SCHMITT, },
908 { "pinctrl-single,low-power-mode", PIN_CONFIG_LOW_POWER_MODE, },
909 };
910 static const struct pcs_conf_type prop4[] = {
911 { "pinctrl-single,bias-pullup", PIN_CONFIG_BIAS_PULL_UP, },
912 { "pinctrl-single,bias-pulldown", PIN_CONFIG_BIAS_PULL_DOWN, },
913 { "pinctrl-single,input-schmitt-enable",
914 PIN_CONFIG_INPUT_SCHMITT_ENABLE, },
915 };
916
917
918 if (!PCS_HAS_PINCONF)
919 return 0;
920
921
922 for (i = 0; i < ARRAY_SIZE(prop2); i++) {
923 if (of_find_property(np, prop2[i].name, NULL))
924 nconfs++;
925 }
926 for (i = 0; i < ARRAY_SIZE(prop4); i++) {
927 if (of_find_property(np, prop4[i].name, NULL))
928 nconfs++;
929 }
930 if (!nconfs)
931 return 0;
932
933 func->conf = devm_kcalloc(pcs->dev,
934 nconfs, sizeof(struct pcs_conf_vals),
935 GFP_KERNEL);
936 if (!func->conf)
937 return -ENOMEM;
938 func->nconfs = nconfs;
939 conf = &(func->conf[0]);
940 m++;
941 settings = devm_kcalloc(pcs->dev, nconfs, sizeof(unsigned long),
942 GFP_KERNEL);
943 if (!settings)
944 return -ENOMEM;
945 s = &settings[0];
946
947 for (i = 0; i < ARRAY_SIZE(prop2); i++)
948 pcs_add_conf2(pcs, np, prop2[i].name, prop2[i].param,
949 &conf, &s);
950 for (i = 0; i < ARRAY_SIZE(prop4); i++)
951 pcs_add_conf4(pcs, np, prop4[i].name, prop4[i].param,
952 &conf, &s);
953 m->type = PIN_MAP_TYPE_CONFIGS_GROUP;
954 m->data.configs.group_or_pin = np->name;
955 m->data.configs.configs = settings;
956 m->data.configs.num_configs = nconfs;
957 return 0;
958 }
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980 static int pcs_parse_one_pinctrl_entry(struct pcs_device *pcs,
981 struct device_node *np,
982 struct pinctrl_map **map,
983 unsigned *num_maps,
984 const char **pgnames)
985 {
986 const char *name = "pinctrl-single,pins";
987 struct pcs_func_vals *vals;
988 int rows, *pins, found = 0, res = -ENOMEM, i, fsel, gsel;
989 struct pcs_function *function = NULL;
990
991 rows = pinctrl_count_index_with_args(np, name);
992 if (rows <= 0) {
993 dev_err(pcs->dev, "Invalid number of rows: %d\n", rows);
994 return -EINVAL;
995 }
996
997 vals = devm_kcalloc(pcs->dev, rows, sizeof(*vals), GFP_KERNEL);
998 if (!vals)
999 return -ENOMEM;
1000
1001 pins = devm_kcalloc(pcs->dev, rows, sizeof(*pins), GFP_KERNEL);
1002 if (!pins)
1003 goto free_vals;
1004
1005 for (i = 0; i < rows; i++) {
1006 struct of_phandle_args pinctrl_spec;
1007 unsigned int offset;
1008 int pin;
1009
1010 res = pinctrl_parse_index_with_args(np, name, i, &pinctrl_spec);
1011 if (res)
1012 return res;
1013
1014 if (pinctrl_spec.args_count < 2) {
1015 dev_err(pcs->dev, "invalid args_count for spec: %i\n",
1016 pinctrl_spec.args_count);
1017 break;
1018 }
1019
1020
1021 offset = pinctrl_spec.args[0];
1022 vals[found].reg = pcs->base + offset;
1023 vals[found].val = pinctrl_spec.args[1];
1024
1025 dev_dbg(pcs->dev, "%pOFn index: 0x%x value: 0x%x\n",
1026 pinctrl_spec.np, offset, pinctrl_spec.args[1]);
1027
1028 pin = pcs_get_pin_by_offset(pcs, offset);
1029 if (pin < 0) {
1030 dev_err(pcs->dev,
1031 "could not add functions for %pOFn %ux\n",
1032 np, offset);
1033 break;
1034 }
1035 pins[found++] = pin;
1036 }
1037
1038 pgnames[0] = np->name;
1039 mutex_lock(&pcs->mutex);
1040 fsel = pcs_add_function(pcs, &function, np->name, vals, found,
1041 pgnames, 1);
1042 if (fsel < 0) {
1043 res = fsel;
1044 goto free_pins;
1045 }
1046
1047 gsel = pinctrl_generic_add_group(pcs->pctl, np->name, pins, found, pcs);
1048 if (gsel < 0) {
1049 res = gsel;
1050 goto free_function;
1051 }
1052
1053 (*map)->type = PIN_MAP_TYPE_MUX_GROUP;
1054 (*map)->data.mux.group = np->name;
1055 (*map)->data.mux.function = np->name;
1056
1057 if (PCS_HAS_PINCONF && function) {
1058 res = pcs_parse_pinconf(pcs, np, function, map);
1059 if (res)
1060 goto free_pingroups;
1061 *num_maps = 2;
1062 } else {
1063 *num_maps = 1;
1064 }
1065 mutex_unlock(&pcs->mutex);
1066
1067 return 0;
1068
1069 free_pingroups:
1070 pinctrl_generic_remove_group(pcs->pctl, gsel);
1071 *num_maps = 1;
1072 free_function:
1073 pinmux_generic_remove_function(pcs->pctl, fsel);
1074 free_pins:
1075 mutex_unlock(&pcs->mutex);
1076 devm_kfree(pcs->dev, pins);
1077
1078 free_vals:
1079 devm_kfree(pcs->dev, vals);
1080
1081 return res;
1082 }
1083
1084 static int pcs_parse_bits_in_pinctrl_entry(struct pcs_device *pcs,
1085 struct device_node *np,
1086 struct pinctrl_map **map,
1087 unsigned *num_maps,
1088 const char **pgnames)
1089 {
1090 const char *name = "pinctrl-single,bits";
1091 struct pcs_func_vals *vals;
1092 int rows, *pins, found = 0, res = -ENOMEM, i, fsel, gsel;
1093 int npins_in_row;
1094 struct pcs_function *function = NULL;
1095
1096 rows = pinctrl_count_index_with_args(np, name);
1097 if (rows <= 0) {
1098 dev_err(pcs->dev, "Invalid number of rows: %d\n", rows);
1099 return -EINVAL;
1100 }
1101
1102 npins_in_row = pcs->width / pcs->bits_per_pin;
1103
1104 vals = devm_kzalloc(pcs->dev,
1105 array3_size(rows, npins_in_row, sizeof(*vals)),
1106 GFP_KERNEL);
1107 if (!vals)
1108 return -ENOMEM;
1109
1110 pins = devm_kzalloc(pcs->dev,
1111 array3_size(rows, npins_in_row, sizeof(*pins)),
1112 GFP_KERNEL);
1113 if (!pins)
1114 goto free_vals;
1115
1116 for (i = 0; i < rows; i++) {
1117 struct of_phandle_args pinctrl_spec;
1118 unsigned offset, val;
1119 unsigned mask, bit_pos, val_pos, mask_pos, submask;
1120 unsigned pin_num_from_lsb;
1121 int pin;
1122
1123 res = pinctrl_parse_index_with_args(np, name, i, &pinctrl_spec);
1124 if (res)
1125 return res;
1126
1127 if (pinctrl_spec.args_count < 3) {
1128 dev_err(pcs->dev, "invalid args_count for spec: %i\n",
1129 pinctrl_spec.args_count);
1130 break;
1131 }
1132
1133
1134 offset = pinctrl_spec.args[0];
1135 val = pinctrl_spec.args[1];
1136 mask = pinctrl_spec.args[2];
1137
1138 dev_dbg(pcs->dev, "%pOFn index: 0x%x value: 0x%x mask: 0x%x\n",
1139 pinctrl_spec.np, offset, val, mask);
1140
1141
1142 while (mask) {
1143 bit_pos = __ffs(mask);
1144 pin_num_from_lsb = bit_pos / pcs->bits_per_pin;
1145 mask_pos = ((pcs->fmask) << bit_pos);
1146 val_pos = val & mask_pos;
1147 submask = mask & mask_pos;
1148
1149 if ((mask & mask_pos) == 0) {
1150 dev_err(pcs->dev,
1151 "Invalid mask for %pOFn at 0x%x\n",
1152 np, offset);
1153 break;
1154 }
1155
1156 mask &= ~mask_pos;
1157
1158 if (submask != mask_pos) {
1159 dev_warn(pcs->dev,
1160 "Invalid submask 0x%x for %pOFn at 0x%x\n",
1161 submask, np, offset);
1162 continue;
1163 }
1164
1165 vals[found].mask = submask;
1166 vals[found].reg = pcs->base + offset;
1167 vals[found].val = val_pos;
1168
1169 pin = pcs_get_pin_by_offset(pcs, offset);
1170 if (pin < 0) {
1171 dev_err(pcs->dev,
1172 "could not add functions for %pOFn %ux\n",
1173 np, offset);
1174 break;
1175 }
1176 pins[found++] = pin + pin_num_from_lsb;
1177 }
1178 }
1179
1180 pgnames[0] = np->name;
1181 mutex_lock(&pcs->mutex);
1182 fsel = pcs_add_function(pcs, &function, np->name, vals, found,
1183 pgnames, 1);
1184 if (fsel < 0) {
1185 res = fsel;
1186 goto free_pins;
1187 }
1188
1189 gsel = pinctrl_generic_add_group(pcs->pctl, np->name, pins, found, pcs);
1190 if (gsel < 0) {
1191 res = gsel;
1192 goto free_function;
1193 }
1194
1195 (*map)->type = PIN_MAP_TYPE_MUX_GROUP;
1196 (*map)->data.mux.group = np->name;
1197 (*map)->data.mux.function = np->name;
1198
1199 if (PCS_HAS_PINCONF) {
1200 dev_err(pcs->dev, "pinconf not supported\n");
1201 goto free_pingroups;
1202 }
1203
1204 *num_maps = 1;
1205 mutex_unlock(&pcs->mutex);
1206
1207 return 0;
1208
1209 free_pingroups:
1210 pinctrl_generic_remove_group(pcs->pctl, gsel);
1211 *num_maps = 1;
1212 free_function:
1213 pinmux_generic_remove_function(pcs->pctl, fsel);
1214 free_pins:
1215 mutex_unlock(&pcs->mutex);
1216 devm_kfree(pcs->dev, pins);
1217
1218 free_vals:
1219 devm_kfree(pcs->dev, vals);
1220
1221 return res;
1222 }
1223
1224
1225
1226
1227
1228
1229
1230 static int pcs_dt_node_to_map(struct pinctrl_dev *pctldev,
1231 struct device_node *np_config,
1232 struct pinctrl_map **map, unsigned *num_maps)
1233 {
1234 struct pcs_device *pcs;
1235 const char **pgnames;
1236 int ret;
1237
1238 pcs = pinctrl_dev_get_drvdata(pctldev);
1239
1240
1241 *map = devm_kcalloc(pcs->dev, 2, sizeof(**map), GFP_KERNEL);
1242 if (!*map)
1243 return -ENOMEM;
1244
1245 *num_maps = 0;
1246
1247 pgnames = devm_kzalloc(pcs->dev, sizeof(*pgnames), GFP_KERNEL);
1248 if (!pgnames) {
1249 ret = -ENOMEM;
1250 goto free_map;
1251 }
1252
1253 if (pcs->bits_per_mux) {
1254 ret = pcs_parse_bits_in_pinctrl_entry(pcs, np_config, map,
1255 num_maps, pgnames);
1256 if (ret < 0) {
1257 dev_err(pcs->dev, "no pins entries for %pOFn\n",
1258 np_config);
1259 goto free_pgnames;
1260 }
1261 } else {
1262 ret = pcs_parse_one_pinctrl_entry(pcs, np_config, map,
1263 num_maps, pgnames);
1264 if (ret < 0) {
1265 dev_err(pcs->dev, "no pins entries for %pOFn\n",
1266 np_config);
1267 goto free_pgnames;
1268 }
1269 }
1270
1271 return 0;
1272
1273 free_pgnames:
1274 devm_kfree(pcs->dev, pgnames);
1275 free_map:
1276 devm_kfree(pcs->dev, *map);
1277
1278 return ret;
1279 }
1280
1281
1282
1283
1284
1285 static void pcs_irq_free(struct pcs_device *pcs)
1286 {
1287 struct pcs_soc_data *pcs_soc = &pcs->socdata;
1288
1289 if (pcs_soc->irq < 0)
1290 return;
1291
1292 if (pcs->domain)
1293 irq_domain_remove(pcs->domain);
1294
1295 if (PCS_QUIRK_HAS_SHARED_IRQ)
1296 free_irq(pcs_soc->irq, pcs_soc);
1297 else
1298 irq_set_chained_handler(pcs_soc->irq, NULL);
1299 }
1300
1301
1302
1303
1304
1305 static void pcs_free_resources(struct pcs_device *pcs)
1306 {
1307 pcs_irq_free(pcs);
1308 pinctrl_unregister(pcs->pctl);
1309
1310 #if IS_BUILTIN(CONFIG_PINCTRL_SINGLE)
1311 if (pcs->missing_nr_pinctrl_cells)
1312 of_remove_property(pcs->np, pcs->missing_nr_pinctrl_cells);
1313 #endif
1314 }
1315
1316 static int pcs_add_gpio_func(struct device_node *node, struct pcs_device *pcs)
1317 {
1318 const char *propname = "pinctrl-single,gpio-range";
1319 const char *cellname = "#pinctrl-single,gpio-range-cells";
1320 struct of_phandle_args gpiospec;
1321 struct pcs_gpiofunc_range *range;
1322 int ret, i;
1323
1324 for (i = 0; ; i++) {
1325 ret = of_parse_phandle_with_args(node, propname, cellname,
1326 i, &gpiospec);
1327
1328 if (ret) {
1329 ret = 0;
1330 break;
1331 }
1332 range = devm_kzalloc(pcs->dev, sizeof(*range), GFP_KERNEL);
1333 if (!range) {
1334 ret = -ENOMEM;
1335 break;
1336 }
1337 range->offset = gpiospec.args[0];
1338 range->npins = gpiospec.args[1];
1339 range->gpiofunc = gpiospec.args[2];
1340 mutex_lock(&pcs->mutex);
1341 list_add_tail(&range->node, &pcs->gpiofuncs);
1342 mutex_unlock(&pcs->mutex);
1343 }
1344 return ret;
1345 }
1346
1347
1348
1349
1350
1351
1352 struct pcs_interrupt {
1353 void __iomem *reg;
1354 irq_hw_number_t hwirq;
1355 unsigned int irq;
1356 struct list_head node;
1357 };
1358
1359
1360
1361
1362
1363
1364
1365 static inline void pcs_irq_set(struct pcs_soc_data *pcs_soc,
1366 int irq, const bool enable)
1367 {
1368 struct pcs_device *pcs;
1369 struct list_head *pos;
1370 unsigned mask;
1371
1372 pcs = container_of(pcs_soc, struct pcs_device, socdata);
1373 list_for_each(pos, &pcs->irqs) {
1374 struct pcs_interrupt *pcswi;
1375 unsigned soc_mask;
1376
1377 pcswi = list_entry(pos, struct pcs_interrupt, node);
1378 if (irq != pcswi->irq)
1379 continue;
1380
1381 soc_mask = pcs_soc->irq_enable_mask;
1382 raw_spin_lock(&pcs->lock);
1383 mask = pcs->read(pcswi->reg);
1384 if (enable)
1385 mask |= soc_mask;
1386 else
1387 mask &= ~soc_mask;
1388 pcs->write(mask, pcswi->reg);
1389
1390
1391 mask = pcs->read(pcswi->reg);
1392 raw_spin_unlock(&pcs->lock);
1393 }
1394
1395 if (pcs_soc->rearm)
1396 pcs_soc->rearm();
1397 }
1398
1399
1400
1401
1402
1403 static void pcs_irq_mask(struct irq_data *d)
1404 {
1405 struct pcs_soc_data *pcs_soc = irq_data_get_irq_chip_data(d);
1406
1407 pcs_irq_set(pcs_soc, d->irq, false);
1408 }
1409
1410
1411
1412
1413
1414 static void pcs_irq_unmask(struct irq_data *d)
1415 {
1416 struct pcs_soc_data *pcs_soc = irq_data_get_irq_chip_data(d);
1417
1418 pcs_irq_set(pcs_soc, d->irq, true);
1419 }
1420
1421
1422
1423
1424
1425
1426
1427
1428
1429 static int pcs_irq_set_wake(struct irq_data *d, unsigned int state)
1430 {
1431 if (state)
1432 pcs_irq_unmask(d);
1433 else
1434 pcs_irq_mask(d);
1435
1436 return 0;
1437 }
1438
1439
1440
1441
1442
1443
1444
1445
1446
1447 static int pcs_irq_handle(struct pcs_soc_data *pcs_soc)
1448 {
1449 struct pcs_device *pcs;
1450 struct list_head *pos;
1451 int count = 0;
1452
1453 pcs = container_of(pcs_soc, struct pcs_device, socdata);
1454 list_for_each(pos, &pcs->irqs) {
1455 struct pcs_interrupt *pcswi;
1456 unsigned mask;
1457
1458 pcswi = list_entry(pos, struct pcs_interrupt, node);
1459 raw_spin_lock(&pcs->lock);
1460 mask = pcs->read(pcswi->reg);
1461 raw_spin_unlock(&pcs->lock);
1462 if (mask & pcs_soc->irq_status_mask) {
1463 generic_handle_irq(irq_find_mapping(pcs->domain,
1464 pcswi->hwirq));
1465 count++;
1466 }
1467 }
1468
1469 return count;
1470 }
1471
1472
1473
1474
1475
1476
1477
1478
1479
1480 static irqreturn_t pcs_irq_handler(int irq, void *d)
1481 {
1482 struct pcs_soc_data *pcs_soc = d;
1483
1484 return pcs_irq_handle(pcs_soc) ? IRQ_HANDLED : IRQ_NONE;
1485 }
1486
1487
1488
1489
1490
1491
1492
1493
1494
1495 static void pcs_irq_chain_handler(struct irq_desc *desc)
1496 {
1497 struct pcs_soc_data *pcs_soc = irq_desc_get_handler_data(desc);
1498 struct irq_chip *chip;
1499
1500 chip = irq_desc_get_chip(desc);
1501 chained_irq_enter(chip, desc);
1502 pcs_irq_handle(pcs_soc);
1503
1504 chained_irq_exit(chip, desc);
1505 }
1506
1507 static int pcs_irqdomain_map(struct irq_domain *d, unsigned int irq,
1508 irq_hw_number_t hwirq)
1509 {
1510 struct pcs_soc_data *pcs_soc = d->host_data;
1511 struct pcs_device *pcs;
1512 struct pcs_interrupt *pcswi;
1513
1514 pcs = container_of(pcs_soc, struct pcs_device, socdata);
1515 pcswi = devm_kzalloc(pcs->dev, sizeof(*pcswi), GFP_KERNEL);
1516 if (!pcswi)
1517 return -ENOMEM;
1518
1519 pcswi->reg = pcs->base + hwirq;
1520 pcswi->hwirq = hwirq;
1521 pcswi->irq = irq;
1522
1523 mutex_lock(&pcs->mutex);
1524 list_add_tail(&pcswi->node, &pcs->irqs);
1525 mutex_unlock(&pcs->mutex);
1526
1527 irq_set_chip_data(irq, pcs_soc);
1528 irq_set_chip_and_handler(irq, &pcs->chip,
1529 handle_level_irq);
1530 irq_set_lockdep_class(irq, &pcs_lock_class, &pcs_request_class);
1531 irq_set_noprobe(irq);
1532
1533 return 0;
1534 }
1535
1536 static const struct irq_domain_ops pcs_irqdomain_ops = {
1537 .map = pcs_irqdomain_map,
1538 .xlate = irq_domain_xlate_onecell,
1539 };
1540
1541
1542
1543
1544
1545
1546 static int pcs_irq_init_chained_handler(struct pcs_device *pcs,
1547 struct device_node *np)
1548 {
1549 struct pcs_soc_data *pcs_soc = &pcs->socdata;
1550 const char *name = "pinctrl";
1551 int num_irqs;
1552
1553 if (!pcs_soc->irq_enable_mask ||
1554 !pcs_soc->irq_status_mask) {
1555 pcs_soc->irq = -1;
1556 return -EINVAL;
1557 }
1558
1559 INIT_LIST_HEAD(&pcs->irqs);
1560 pcs->chip.name = name;
1561 pcs->chip.irq_ack = pcs_irq_mask;
1562 pcs->chip.irq_mask = pcs_irq_mask;
1563 pcs->chip.irq_unmask = pcs_irq_unmask;
1564 pcs->chip.irq_set_wake = pcs_irq_set_wake;
1565
1566 if (PCS_QUIRK_HAS_SHARED_IRQ) {
1567 int res;
1568
1569 res = request_irq(pcs_soc->irq, pcs_irq_handler,
1570 IRQF_SHARED | IRQF_NO_SUSPEND |
1571 IRQF_NO_THREAD,
1572 name, pcs_soc);
1573 if (res) {
1574 pcs_soc->irq = -1;
1575 return res;
1576 }
1577 } else {
1578 irq_set_chained_handler_and_data(pcs_soc->irq,
1579 pcs_irq_chain_handler,
1580 pcs_soc);
1581 }
1582
1583
1584
1585
1586
1587
1588
1589 num_irqs = pcs->size;
1590
1591 pcs->domain = irq_domain_add_simple(np, num_irqs, 0,
1592 &pcs_irqdomain_ops,
1593 pcs_soc);
1594 if (!pcs->domain) {
1595 irq_set_chained_handler(pcs_soc->irq, NULL);
1596 return -EINVAL;
1597 }
1598
1599 return 0;
1600 }
1601
1602 #ifdef CONFIG_PM
1603 static int pcs_save_context(struct pcs_device *pcs)
1604 {
1605 int i, mux_bytes;
1606 u64 *regsl;
1607 u32 *regsw;
1608 u16 *regshw;
1609
1610 mux_bytes = pcs->width / BITS_PER_BYTE;
1611
1612 if (!pcs->saved_vals) {
1613 pcs->saved_vals = devm_kzalloc(pcs->dev, pcs->size, GFP_ATOMIC);
1614 if (!pcs->saved_vals)
1615 return -ENOMEM;
1616 }
1617
1618 switch (pcs->width) {
1619 case 64:
1620 regsl = pcs->saved_vals;
1621 for (i = 0; i < pcs->size; i += mux_bytes)
1622 *regsl++ = pcs->read(pcs->base + i);
1623 break;
1624 case 32:
1625 regsw = pcs->saved_vals;
1626 for (i = 0; i < pcs->size; i += mux_bytes)
1627 *regsw++ = pcs->read(pcs->base + i);
1628 break;
1629 case 16:
1630 regshw = pcs->saved_vals;
1631 for (i = 0; i < pcs->size; i += mux_bytes)
1632 *regshw++ = pcs->read(pcs->base + i);
1633 break;
1634 }
1635
1636 return 0;
1637 }
1638
1639 static void pcs_restore_context(struct pcs_device *pcs)
1640 {
1641 int i, mux_bytes;
1642 u64 *regsl;
1643 u32 *regsw;
1644 u16 *regshw;
1645
1646 mux_bytes = pcs->width / BITS_PER_BYTE;
1647
1648 switch (pcs->width) {
1649 case 64:
1650 regsl = pcs->saved_vals;
1651 for (i = 0; i < pcs->size; i += mux_bytes)
1652 pcs->write(*regsl++, pcs->base + i);
1653 break;
1654 case 32:
1655 regsw = pcs->saved_vals;
1656 for (i = 0; i < pcs->size; i += mux_bytes)
1657 pcs->write(*regsw++, pcs->base + i);
1658 break;
1659 case 16:
1660 regshw = pcs->saved_vals;
1661 for (i = 0; i < pcs->size; i += mux_bytes)
1662 pcs->write(*regshw++, pcs->base + i);
1663 break;
1664 }
1665 }
1666
1667 static int pinctrl_single_suspend(struct platform_device *pdev,
1668 pm_message_t state)
1669 {
1670 struct pcs_device *pcs;
1671
1672 pcs = platform_get_drvdata(pdev);
1673 if (!pcs)
1674 return -EINVAL;
1675
1676 if (pcs->flags & PCS_CONTEXT_LOSS_OFF) {
1677 int ret;
1678
1679 ret = pcs_save_context(pcs);
1680 if (ret < 0)
1681 return ret;
1682 }
1683
1684 return pinctrl_force_sleep(pcs->pctl);
1685 }
1686
1687 static int pinctrl_single_resume(struct platform_device *pdev)
1688 {
1689 struct pcs_device *pcs;
1690
1691 pcs = platform_get_drvdata(pdev);
1692 if (!pcs)
1693 return -EINVAL;
1694
1695 if (pcs->flags & PCS_CONTEXT_LOSS_OFF)
1696 pcs_restore_context(pcs);
1697
1698 return pinctrl_force_default(pcs->pctl);
1699 }
1700 #endif
1701
1702
1703
1704
1705
1706
1707
1708
1709
1710
1711
1712 static int pcs_quirk_missing_pinctrl_cells(struct pcs_device *pcs,
1713 struct device_node *np,
1714 int cells)
1715 {
1716 struct property *p;
1717 const char *name = "#pinctrl-cells";
1718 int error;
1719 u32 val;
1720
1721 error = of_property_read_u32(np, name, &val);
1722 if (!error)
1723 return 0;
1724
1725 dev_warn(pcs->dev, "please update dts to use %s = <%i>\n",
1726 name, cells);
1727
1728 p = devm_kzalloc(pcs->dev, sizeof(*p), GFP_KERNEL);
1729 if (!p)
1730 return -ENOMEM;
1731
1732 p->length = sizeof(__be32);
1733 p->value = devm_kzalloc(pcs->dev, sizeof(__be32), GFP_KERNEL);
1734 if (!p->value)
1735 return -ENOMEM;
1736 *(__be32 *)p->value = cpu_to_be32(cells);
1737
1738 p->name = devm_kstrdup(pcs->dev, name, GFP_KERNEL);
1739 if (!p->name)
1740 return -ENOMEM;
1741
1742 pcs->missing_nr_pinctrl_cells = p;
1743
1744 #if IS_BUILTIN(CONFIG_PINCTRL_SINGLE)
1745 error = of_add_property(np, pcs->missing_nr_pinctrl_cells);
1746 #endif
1747
1748 return error;
1749 }
1750
1751 static int pcs_probe(struct platform_device *pdev)
1752 {
1753 struct device_node *np = pdev->dev.of_node;
1754 struct pcs_pdata *pdata;
1755 struct resource *res;
1756 struct pcs_device *pcs;
1757 const struct pcs_soc_data *soc;
1758 int ret;
1759
1760 soc = of_device_get_match_data(&pdev->dev);
1761 if (WARN_ON(!soc))
1762 return -EINVAL;
1763
1764 pcs = devm_kzalloc(&pdev->dev, sizeof(*pcs), GFP_KERNEL);
1765 if (!pcs)
1766 return -ENOMEM;
1767
1768 pcs->dev = &pdev->dev;
1769 pcs->np = np;
1770 raw_spin_lock_init(&pcs->lock);
1771 mutex_init(&pcs->mutex);
1772 INIT_LIST_HEAD(&pcs->gpiofuncs);
1773 pcs->flags = soc->flags;
1774 memcpy(&pcs->socdata, soc, sizeof(*soc));
1775
1776 ret = of_property_read_u32(np, "pinctrl-single,register-width",
1777 &pcs->width);
1778 if (ret) {
1779 dev_err(pcs->dev, "register width not specified\n");
1780
1781 return ret;
1782 }
1783
1784 ret = of_property_read_u32(np, "pinctrl-single,function-mask",
1785 &pcs->fmask);
1786 if (!ret) {
1787 pcs->fshift = __ffs(pcs->fmask);
1788 pcs->fmax = pcs->fmask >> pcs->fshift;
1789 } else {
1790
1791 pcs->fmask = 0;
1792 pcs->fshift = 0;
1793 pcs->fmax = 0;
1794 }
1795
1796 ret = of_property_read_u32(np, "pinctrl-single,function-off",
1797 &pcs->foff);
1798 if (ret)
1799 pcs->foff = PCS_OFF_DISABLED;
1800
1801 pcs->bits_per_mux = of_property_read_bool(np,
1802 "pinctrl-single,bit-per-mux");
1803 ret = pcs_quirk_missing_pinctrl_cells(pcs, np,
1804 pcs->bits_per_mux ? 2 : 1);
1805 if (ret) {
1806 dev_err(&pdev->dev, "unable to patch #pinctrl-cells\n");
1807
1808 return ret;
1809 }
1810
1811 res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
1812 if (!res) {
1813 dev_err(pcs->dev, "could not get resource\n");
1814 return -ENODEV;
1815 }
1816
1817 pcs->res = devm_request_mem_region(pcs->dev, res->start,
1818 resource_size(res), DRIVER_NAME);
1819 if (!pcs->res) {
1820 dev_err(pcs->dev, "could not get mem_region\n");
1821 return -EBUSY;
1822 }
1823
1824 pcs->size = resource_size(pcs->res);
1825 pcs->base = devm_ioremap(pcs->dev, pcs->res->start, pcs->size);
1826 if (!pcs->base) {
1827 dev_err(pcs->dev, "could not ioremap\n");
1828 return -ENODEV;
1829 }
1830
1831 platform_set_drvdata(pdev, pcs);
1832
1833 switch (pcs->width) {
1834 case 8:
1835 pcs->read = pcs_readb;
1836 pcs->write = pcs_writeb;
1837 break;
1838 case 16:
1839 pcs->read = pcs_readw;
1840 pcs->write = pcs_writew;
1841 break;
1842 case 32:
1843 pcs->read = pcs_readl;
1844 pcs->write = pcs_writel;
1845 break;
1846 default:
1847 break;
1848 }
1849
1850 pcs->desc.name = DRIVER_NAME;
1851 pcs->desc.pctlops = &pcs_pinctrl_ops;
1852 pcs->desc.pmxops = &pcs_pinmux_ops;
1853 if (PCS_HAS_PINCONF)
1854 pcs->desc.confops = &pcs_pinconf_ops;
1855 pcs->desc.owner = THIS_MODULE;
1856
1857 ret = pcs_allocate_pin_table(pcs);
1858 if (ret < 0)
1859 goto free;
1860
1861 ret = pinctrl_register_and_init(&pcs->desc, pcs->dev, pcs, &pcs->pctl);
1862 if (ret) {
1863 dev_err(pcs->dev, "could not register single pinctrl driver\n");
1864 goto free;
1865 }
1866
1867 ret = pcs_add_gpio_func(np, pcs);
1868 if (ret < 0)
1869 goto free;
1870
1871 pcs->socdata.irq = irq_of_parse_and_map(np, 0);
1872 if (pcs->socdata.irq)
1873 pcs->flags |= PCS_FEAT_IRQ;
1874
1875
1876 pdata = dev_get_platdata(&pdev->dev);
1877 if (pdata) {
1878 if (pdata->rearm)
1879 pcs->socdata.rearm = pdata->rearm;
1880 if (pdata->irq) {
1881 pcs->socdata.irq = pdata->irq;
1882 pcs->flags |= PCS_FEAT_IRQ;
1883 }
1884 }
1885
1886 if (PCS_HAS_IRQ) {
1887 ret = pcs_irq_init_chained_handler(pcs, np);
1888 if (ret < 0)
1889 dev_warn(pcs->dev, "initialized with no interrupts\n");
1890 }
1891
1892 dev_info(pcs->dev, "%i pins, size %u\n", pcs->desc.npins, pcs->size);
1893
1894 return pinctrl_enable(pcs->pctl);
1895
1896 free:
1897 pcs_free_resources(pcs);
1898
1899 return ret;
1900 }
1901
1902 static int pcs_remove(struct platform_device *pdev)
1903 {
1904 struct pcs_device *pcs = platform_get_drvdata(pdev);
1905
1906 if (!pcs)
1907 return 0;
1908
1909 pcs_free_resources(pcs);
1910
1911 return 0;
1912 }
1913
1914 static const struct pcs_soc_data pinctrl_single_omap_wkup = {
1915 .flags = PCS_QUIRK_SHARED_IRQ,
1916 .irq_enable_mask = (1 << 14),
1917 .irq_status_mask = (1 << 15),
1918 };
1919
1920 static const struct pcs_soc_data pinctrl_single_dra7 = {
1921 .irq_enable_mask = (1 << 24),
1922 .irq_status_mask = (1 << 25),
1923 };
1924
1925 static const struct pcs_soc_data pinctrl_single_am437x = {
1926 .flags = PCS_QUIRK_SHARED_IRQ | PCS_CONTEXT_LOSS_OFF,
1927 .irq_enable_mask = (1 << 29),
1928 .irq_status_mask = (1 << 30),
1929 };
1930
1931 static const struct pcs_soc_data pinctrl_single = {
1932 };
1933
1934 static const struct pcs_soc_data pinconf_single = {
1935 .flags = PCS_FEAT_PINCONF,
1936 };
1937
1938 static const struct of_device_id pcs_of_match[] = {
1939 { .compatible = "ti,omap3-padconf", .data = &pinctrl_single_omap_wkup },
1940 { .compatible = "ti,omap4-padconf", .data = &pinctrl_single_omap_wkup },
1941 { .compatible = "ti,omap5-padconf", .data = &pinctrl_single_omap_wkup },
1942 { .compatible = "ti,dra7-padconf", .data = &pinctrl_single_dra7 },
1943 { .compatible = "ti,am437-padconf", .data = &pinctrl_single_am437x },
1944 { .compatible = "pinctrl-single", .data = &pinctrl_single },
1945 { .compatible = "pinconf-single", .data = &pinconf_single },
1946 { },
1947 };
1948 MODULE_DEVICE_TABLE(of, pcs_of_match);
1949
1950 static struct platform_driver pcs_driver = {
1951 .probe = pcs_probe,
1952 .remove = pcs_remove,
1953 .driver = {
1954 .name = DRIVER_NAME,
1955 .of_match_table = pcs_of_match,
1956 },
1957 #ifdef CONFIG_PM
1958 .suspend = pinctrl_single_suspend,
1959 .resume = pinctrl_single_resume,
1960 #endif
1961 };
1962
1963 module_platform_driver(pcs_driver);
1964
1965 MODULE_AUTHOR("Tony Lindgren <tony@atomide.com>");
1966 MODULE_DESCRIPTION("One-register-per-pin type device tree based pinctrl driver");
1967 MODULE_LICENSE("GPL v2");