0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012 #include <linux/init.h>
0013 #include <linux/module.h>
0014 #include <linux/io.h>
0015 #include <linux/slab.h>
0016 #include <linux/err.h>
0017 #include <linux/list.h>
0018 #include <linux/interrupt.h>
0019
0020 #include <linux/irqchip/chained_irq.h>
0021
0022 #include <linux/of.h>
0023 #include <linux/of_device.h>
0024 #include <linux/of_address.h>
0025 #include <linux/of_irq.h>
0026
0027 #include <linux/pinctrl/pinctrl.h>
0028 #include <linux/pinctrl/pinmux.h>
0029 #include <linux/pinctrl/pinconf-generic.h>
0030
0031 #include <linux/platform_data/pinctrl-single.h>
0032
0033 #include "core.h"
0034 #include "devicetree.h"
0035 #include "pinconf.h"
0036 #include "pinmux.h"
0037
0038 #define DRIVER_NAME "pinctrl-single"
0039 #define PCS_OFF_DISABLED ~0U
0040
0041
0042
0043
0044
0045
0046
0047 struct pcs_func_vals {
0048 void __iomem *reg;
0049 unsigned val;
0050 unsigned mask;
0051 };
0052
0053
0054
0055
0056
0057
0058
0059
0060
0061
0062 struct pcs_conf_vals {
0063 enum pin_config_param param;
0064 unsigned val;
0065 unsigned enable;
0066 unsigned disable;
0067 unsigned mask;
0068 };
0069
0070
0071
0072
0073
0074
0075 struct pcs_conf_type {
0076 const char *name;
0077 enum pin_config_param param;
0078 };
0079
0080
0081
0082
0083
0084
0085
0086
0087
0088
0089
0090
0091 struct pcs_function {
0092 const char *name;
0093 struct pcs_func_vals *vals;
0094 unsigned nvals;
0095 const char **pgnames;
0096 int npgnames;
0097 struct pcs_conf_vals *conf;
0098 int nconfs;
0099 struct list_head node;
0100 };
0101
0102
0103
0104
0105
0106
0107
0108
0109 struct pcs_gpiofunc_range {
0110 unsigned offset;
0111 unsigned npins;
0112 unsigned gpiofunc;
0113 struct list_head node;
0114 };
0115
0116
0117
0118
0119
0120
0121
0122
0123
0124
0125 struct pcs_data {
0126 struct pinctrl_pin_desc *pa;
0127 int cur;
0128 };
0129
0130
0131
0132
0133
0134
0135
0136
0137
0138 struct pcs_soc_data {
0139 unsigned flags;
0140 int irq;
0141 unsigned irq_enable_mask;
0142 unsigned irq_status_mask;
0143 void (*rearm)(void);
0144 };
0145
0146
0147
0148
0149
0150
0151
0152
0153
0154
0155
0156
0157
0158
0159
0160
0161
0162
0163
0164
0165
0166
0167
0168
0169
0170
0171
0172
0173
0174
0175
0176 struct pcs_device {
0177 struct resource *res;
0178 void __iomem *base;
0179 void *saved_vals;
0180 unsigned size;
0181 struct device *dev;
0182 struct device_node *np;
0183 struct pinctrl_dev *pctl;
0184 unsigned flags;
0185 #define PCS_CONTEXT_LOSS_OFF (1 << 3)
0186 #define PCS_QUIRK_SHARED_IRQ (1 << 2)
0187 #define PCS_FEAT_IRQ (1 << 1)
0188 #define PCS_FEAT_PINCONF (1 << 0)
0189 struct property *missing_nr_pinctrl_cells;
0190 struct pcs_soc_data socdata;
0191 raw_spinlock_t lock;
0192 struct mutex mutex;
0193 unsigned width;
0194 unsigned fmask;
0195 unsigned fshift;
0196 unsigned foff;
0197 unsigned fmax;
0198 bool bits_per_mux;
0199 unsigned bits_per_pin;
0200 struct pcs_data pins;
0201 struct list_head gpiofuncs;
0202 struct list_head irqs;
0203 struct irq_chip chip;
0204 struct irq_domain *domain;
0205 struct pinctrl_desc desc;
0206 unsigned (*read)(void __iomem *reg);
0207 void (*write)(unsigned val, void __iomem *reg);
0208 };
0209
0210 #define PCS_QUIRK_HAS_SHARED_IRQ (pcs->flags & PCS_QUIRK_SHARED_IRQ)
0211 #define PCS_HAS_IRQ (pcs->flags & PCS_FEAT_IRQ)
0212 #define PCS_HAS_PINCONF (pcs->flags & PCS_FEAT_PINCONF)
0213
0214 static int pcs_pinconf_get(struct pinctrl_dev *pctldev, unsigned pin,
0215 unsigned long *config);
0216 static int pcs_pinconf_set(struct pinctrl_dev *pctldev, unsigned pin,
0217 unsigned long *configs, unsigned num_configs);
0218
0219 static enum pin_config_param pcs_bias[] = {
0220 PIN_CONFIG_BIAS_PULL_DOWN,
0221 PIN_CONFIG_BIAS_PULL_UP,
0222 };
0223
0224
0225
0226
0227
0228
0229 static struct lock_class_key pcs_lock_class;
0230
0231
0232 static struct lock_class_key pcs_request_class;
0233
0234
0235
0236
0237
0238
0239
0240
0241
0242
0243 static unsigned __maybe_unused pcs_readb(void __iomem *reg)
0244 {
0245 return readb(reg);
0246 }
0247
0248 static unsigned __maybe_unused pcs_readw(void __iomem *reg)
0249 {
0250 return readw(reg);
0251 }
0252
0253 static unsigned __maybe_unused pcs_readl(void __iomem *reg)
0254 {
0255 return readl(reg);
0256 }
0257
0258 static void __maybe_unused pcs_writeb(unsigned val, void __iomem *reg)
0259 {
0260 writeb(val, reg);
0261 }
0262
0263 static void __maybe_unused pcs_writew(unsigned val, void __iomem *reg)
0264 {
0265 writew(val, reg);
0266 }
0267
0268 static void __maybe_unused pcs_writel(unsigned val, void __iomem *reg)
0269 {
0270 writel(val, reg);
0271 }
0272
0273 static unsigned int pcs_pin_reg_offset_get(struct pcs_device *pcs,
0274 unsigned int pin)
0275 {
0276 unsigned int mux_bytes = pcs->width / BITS_PER_BYTE;
0277
0278 if (pcs->bits_per_mux) {
0279 unsigned int pin_offset_bytes;
0280
0281 pin_offset_bytes = (pcs->bits_per_pin * pin) / BITS_PER_BYTE;
0282 return (pin_offset_bytes / mux_bytes) * mux_bytes;
0283 }
0284
0285 return pin * mux_bytes;
0286 }
0287
0288 static unsigned int pcs_pin_shift_reg_get(struct pcs_device *pcs,
0289 unsigned int pin)
0290 {
0291 return (pin % (pcs->width / pcs->bits_per_pin)) * pcs->bits_per_pin;
0292 }
0293
0294 static void pcs_pin_dbg_show(struct pinctrl_dev *pctldev,
0295 struct seq_file *s,
0296 unsigned pin)
0297 {
0298 struct pcs_device *pcs;
0299 unsigned int val;
0300 unsigned long offset;
0301 size_t pa;
0302
0303 pcs = pinctrl_dev_get_drvdata(pctldev);
0304
0305 offset = pcs_pin_reg_offset_get(pcs, pin);
0306 val = pcs->read(pcs->base + offset);
0307
0308 if (pcs->bits_per_mux)
0309 val &= pcs->fmask << pcs_pin_shift_reg_get(pcs, pin);
0310
0311 pa = pcs->res->start + offset;
0312
0313 seq_printf(s, "%zx %08x %s ", pa, val, DRIVER_NAME);
0314 }
0315
0316 static void pcs_dt_free_map(struct pinctrl_dev *pctldev,
0317 struct pinctrl_map *map, unsigned num_maps)
0318 {
0319 struct pcs_device *pcs;
0320
0321 pcs = pinctrl_dev_get_drvdata(pctldev);
0322 devm_kfree(pcs->dev, map);
0323 }
0324
0325 static int pcs_dt_node_to_map(struct pinctrl_dev *pctldev,
0326 struct device_node *np_config,
0327 struct pinctrl_map **map, unsigned *num_maps);
0328
0329 static const struct pinctrl_ops pcs_pinctrl_ops = {
0330 .get_groups_count = pinctrl_generic_get_group_count,
0331 .get_group_name = pinctrl_generic_get_group_name,
0332 .get_group_pins = pinctrl_generic_get_group_pins,
0333 .pin_dbg_show = pcs_pin_dbg_show,
0334 .dt_node_to_map = pcs_dt_node_to_map,
0335 .dt_free_map = pcs_dt_free_map,
0336 };
0337
0338 static int pcs_get_function(struct pinctrl_dev *pctldev, unsigned pin,
0339 struct pcs_function **func)
0340 {
0341 struct pcs_device *pcs = pinctrl_dev_get_drvdata(pctldev);
0342 struct pin_desc *pdesc = pin_desc_get(pctldev, pin);
0343 const struct pinctrl_setting_mux *setting;
0344 struct function_desc *function;
0345 unsigned fselector;
0346
0347
0348 setting = pdesc->mux_setting;
0349 if (!setting)
0350 return -ENOTSUPP;
0351 fselector = setting->func;
0352 function = pinmux_generic_get_function(pctldev, fselector);
0353 *func = function->data;
0354 if (!(*func)) {
0355 dev_err(pcs->dev, "%s could not find function%i\n",
0356 __func__, fselector);
0357 return -ENOTSUPP;
0358 }
0359 return 0;
0360 }
0361
0362 static int pcs_set_mux(struct pinctrl_dev *pctldev, unsigned fselector,
0363 unsigned group)
0364 {
0365 struct pcs_device *pcs;
0366 struct function_desc *function;
0367 struct pcs_function *func;
0368 int i;
0369
0370 pcs = pinctrl_dev_get_drvdata(pctldev);
0371
0372 if (!pcs->fmask)
0373 return 0;
0374 function = pinmux_generic_get_function(pctldev, fselector);
0375 func = function->data;
0376 if (!func)
0377 return -EINVAL;
0378
0379 dev_dbg(pcs->dev, "enabling %s function%i\n",
0380 func->name, fselector);
0381
0382 for (i = 0; i < func->nvals; i++) {
0383 struct pcs_func_vals *vals;
0384 unsigned long flags;
0385 unsigned val, mask;
0386
0387 vals = &func->vals[i];
0388 raw_spin_lock_irqsave(&pcs->lock, flags);
0389 val = pcs->read(vals->reg);
0390
0391 if (pcs->bits_per_mux)
0392 mask = vals->mask;
0393 else
0394 mask = pcs->fmask;
0395
0396 val &= ~mask;
0397 val |= (vals->val & mask);
0398 pcs->write(val, vals->reg);
0399 raw_spin_unlock_irqrestore(&pcs->lock, flags);
0400 }
0401
0402 return 0;
0403 }
0404
0405 static int pcs_request_gpio(struct pinctrl_dev *pctldev,
0406 struct pinctrl_gpio_range *range, unsigned pin)
0407 {
0408 struct pcs_device *pcs = pinctrl_dev_get_drvdata(pctldev);
0409 struct pcs_gpiofunc_range *frange = NULL;
0410 struct list_head *pos, *tmp;
0411 unsigned data;
0412
0413
0414 if (!pcs->fmask)
0415 return -ENOTSUPP;
0416
0417 list_for_each_safe(pos, tmp, &pcs->gpiofuncs) {
0418 u32 offset;
0419
0420 frange = list_entry(pos, struct pcs_gpiofunc_range, node);
0421 if (pin >= frange->offset + frange->npins
0422 || pin < frange->offset)
0423 continue;
0424
0425 offset = pcs_pin_reg_offset_get(pcs, pin);
0426
0427 if (pcs->bits_per_mux) {
0428 int pin_shift = pcs_pin_shift_reg_get(pcs, pin);
0429
0430 data = pcs->read(pcs->base + offset);
0431 data &= ~(pcs->fmask << pin_shift);
0432 data |= frange->gpiofunc << pin_shift;
0433 pcs->write(data, pcs->base + offset);
0434 } else {
0435 data = pcs->read(pcs->base + offset);
0436 data &= ~pcs->fmask;
0437 data |= frange->gpiofunc;
0438 pcs->write(data, pcs->base + offset);
0439 }
0440 break;
0441 }
0442 return 0;
0443 }
0444
0445 static const struct pinmux_ops pcs_pinmux_ops = {
0446 .get_functions_count = pinmux_generic_get_function_count,
0447 .get_function_name = pinmux_generic_get_function_name,
0448 .get_function_groups = pinmux_generic_get_function_groups,
0449 .set_mux = pcs_set_mux,
0450 .gpio_request_enable = pcs_request_gpio,
0451 };
0452
0453
0454 static void pcs_pinconf_clear_bias(struct pinctrl_dev *pctldev, unsigned pin)
0455 {
0456 unsigned long config;
0457 int i;
0458 for (i = 0; i < ARRAY_SIZE(pcs_bias); i++) {
0459 config = pinconf_to_config_packed(pcs_bias[i], 0);
0460 pcs_pinconf_set(pctldev, pin, &config, 1);
0461 }
0462 }
0463
0464
0465
0466
0467
0468 static bool pcs_pinconf_bias_disable(struct pinctrl_dev *pctldev, unsigned pin)
0469 {
0470 unsigned long config;
0471 int i;
0472
0473 for (i = 0; i < ARRAY_SIZE(pcs_bias); i++) {
0474 config = pinconf_to_config_packed(pcs_bias[i], 0);
0475 if (!pcs_pinconf_get(pctldev, pin, &config))
0476 goto out;
0477 }
0478 return true;
0479 out:
0480 return false;
0481 }
0482
0483 static int pcs_pinconf_get(struct pinctrl_dev *pctldev,
0484 unsigned pin, unsigned long *config)
0485 {
0486 struct pcs_device *pcs = pinctrl_dev_get_drvdata(pctldev);
0487 struct pcs_function *func;
0488 enum pin_config_param param;
0489 unsigned offset = 0, data = 0, i, j, ret;
0490
0491 ret = pcs_get_function(pctldev, pin, &func);
0492 if (ret)
0493 return ret;
0494
0495 for (i = 0; i < func->nconfs; i++) {
0496 param = pinconf_to_config_param(*config);
0497 if (param == PIN_CONFIG_BIAS_DISABLE) {
0498 if (pcs_pinconf_bias_disable(pctldev, pin)) {
0499 *config = 0;
0500 return 0;
0501 } else {
0502 return -ENOTSUPP;
0503 }
0504 } else if (param != func->conf[i].param) {
0505 continue;
0506 }
0507
0508 offset = pin * (pcs->width / BITS_PER_BYTE);
0509 data = pcs->read(pcs->base + offset) & func->conf[i].mask;
0510 switch (func->conf[i].param) {
0511
0512 case PIN_CONFIG_BIAS_PULL_DOWN:
0513 case PIN_CONFIG_BIAS_PULL_UP:
0514 case PIN_CONFIG_INPUT_SCHMITT_ENABLE:
0515 if ((data != func->conf[i].enable) ||
0516 (data == func->conf[i].disable))
0517 return -ENOTSUPP;
0518 *config = 0;
0519 break;
0520
0521 case PIN_CONFIG_INPUT_SCHMITT:
0522 for (j = 0; j < func->nconfs; j++) {
0523 switch (func->conf[j].param) {
0524 case PIN_CONFIG_INPUT_SCHMITT_ENABLE:
0525 if (data != func->conf[j].enable)
0526 return -ENOTSUPP;
0527 break;
0528 default:
0529 break;
0530 }
0531 }
0532 *config = data;
0533 break;
0534 case PIN_CONFIG_DRIVE_STRENGTH:
0535 case PIN_CONFIG_SLEW_RATE:
0536 case PIN_CONFIG_MODE_LOW_POWER:
0537 case PIN_CONFIG_INPUT_ENABLE:
0538 default:
0539 *config = data;
0540 break;
0541 }
0542 return 0;
0543 }
0544 return -ENOTSUPP;
0545 }
0546
0547 static int pcs_pinconf_set(struct pinctrl_dev *pctldev,
0548 unsigned pin, unsigned long *configs,
0549 unsigned num_configs)
0550 {
0551 struct pcs_device *pcs = pinctrl_dev_get_drvdata(pctldev);
0552 struct pcs_function *func;
0553 unsigned offset = 0, shift = 0, i, data, ret;
0554 u32 arg;
0555 int j;
0556
0557 ret = pcs_get_function(pctldev, pin, &func);
0558 if (ret)
0559 return ret;
0560
0561 for (j = 0; j < num_configs; j++) {
0562 for (i = 0; i < func->nconfs; i++) {
0563 if (pinconf_to_config_param(configs[j])
0564 != func->conf[i].param)
0565 continue;
0566
0567 offset = pin * (pcs->width / BITS_PER_BYTE);
0568 data = pcs->read(pcs->base + offset);
0569 arg = pinconf_to_config_argument(configs[j]);
0570 switch (func->conf[i].param) {
0571
0572 case PIN_CONFIG_INPUT_SCHMITT:
0573 case PIN_CONFIG_DRIVE_STRENGTH:
0574 case PIN_CONFIG_SLEW_RATE:
0575 case PIN_CONFIG_MODE_LOW_POWER:
0576 case PIN_CONFIG_INPUT_ENABLE:
0577 shift = ffs(func->conf[i].mask) - 1;
0578 data &= ~func->conf[i].mask;
0579 data |= (arg << shift) & func->conf[i].mask;
0580 break;
0581
0582 case PIN_CONFIG_BIAS_DISABLE:
0583 pcs_pinconf_clear_bias(pctldev, pin);
0584 break;
0585 case PIN_CONFIG_BIAS_PULL_DOWN:
0586 case PIN_CONFIG_BIAS_PULL_UP:
0587 if (arg)
0588 pcs_pinconf_clear_bias(pctldev, pin);
0589 fallthrough;
0590 case PIN_CONFIG_INPUT_SCHMITT_ENABLE:
0591 data &= ~func->conf[i].mask;
0592 if (arg)
0593 data |= func->conf[i].enable;
0594 else
0595 data |= func->conf[i].disable;
0596 break;
0597 default:
0598 return -ENOTSUPP;
0599 }
0600 pcs->write(data, pcs->base + offset);
0601
0602 break;
0603 }
0604 if (i >= func->nconfs)
0605 return -ENOTSUPP;
0606 }
0607
0608 return 0;
0609 }
0610
0611 static int pcs_pinconf_group_get(struct pinctrl_dev *pctldev,
0612 unsigned group, unsigned long *config)
0613 {
0614 const unsigned *pins;
0615 unsigned npins, old = 0;
0616 int i, ret;
0617
0618 ret = pinctrl_generic_get_group_pins(pctldev, group, &pins, &npins);
0619 if (ret)
0620 return ret;
0621 for (i = 0; i < npins; i++) {
0622 if (pcs_pinconf_get(pctldev, pins[i], config))
0623 return -ENOTSUPP;
0624
0625 if (i && (old != *config))
0626 return -ENOTSUPP;
0627 old = *config;
0628 }
0629 return 0;
0630 }
0631
0632 static int pcs_pinconf_group_set(struct pinctrl_dev *pctldev,
0633 unsigned group, unsigned long *configs,
0634 unsigned num_configs)
0635 {
0636 const unsigned *pins;
0637 unsigned npins;
0638 int i, ret;
0639
0640 ret = pinctrl_generic_get_group_pins(pctldev, group, &pins, &npins);
0641 if (ret)
0642 return ret;
0643 for (i = 0; i < npins; i++) {
0644 if (pcs_pinconf_set(pctldev, pins[i], configs, num_configs))
0645 return -ENOTSUPP;
0646 }
0647 return 0;
0648 }
0649
0650 static void pcs_pinconf_dbg_show(struct pinctrl_dev *pctldev,
0651 struct seq_file *s, unsigned pin)
0652 {
0653 }
0654
0655 static void pcs_pinconf_group_dbg_show(struct pinctrl_dev *pctldev,
0656 struct seq_file *s, unsigned selector)
0657 {
0658 }
0659
0660 static void pcs_pinconf_config_dbg_show(struct pinctrl_dev *pctldev,
0661 struct seq_file *s,
0662 unsigned long config)
0663 {
0664 pinconf_generic_dump_config(pctldev, s, config);
0665 }
0666
0667 static const struct pinconf_ops pcs_pinconf_ops = {
0668 .pin_config_get = pcs_pinconf_get,
0669 .pin_config_set = pcs_pinconf_set,
0670 .pin_config_group_get = pcs_pinconf_group_get,
0671 .pin_config_group_set = pcs_pinconf_group_set,
0672 .pin_config_dbg_show = pcs_pinconf_dbg_show,
0673 .pin_config_group_dbg_show = pcs_pinconf_group_dbg_show,
0674 .pin_config_config_dbg_show = pcs_pinconf_config_dbg_show,
0675 .is_generic = true,
0676 };
0677
0678
0679
0680
0681
0682
0683 static int pcs_add_pin(struct pcs_device *pcs, unsigned int offset)
0684 {
0685 struct pcs_soc_data *pcs_soc = &pcs->socdata;
0686 struct pinctrl_pin_desc *pin;
0687 int i;
0688
0689 i = pcs->pins.cur;
0690 if (i >= pcs->desc.npins) {
0691 dev_err(pcs->dev, "too many pins, max %i\n",
0692 pcs->desc.npins);
0693 return -ENOMEM;
0694 }
0695
0696 if (pcs_soc->irq_enable_mask) {
0697 unsigned val;
0698
0699 val = pcs->read(pcs->base + offset);
0700 if (val & pcs_soc->irq_enable_mask) {
0701 dev_dbg(pcs->dev, "irq enabled at boot for pin at %lx (%x), clearing\n",
0702 (unsigned long)pcs->res->start + offset, val);
0703 val &= ~pcs_soc->irq_enable_mask;
0704 pcs->write(val, pcs->base + offset);
0705 }
0706 }
0707
0708 pin = &pcs->pins.pa[i];
0709 pin->number = i;
0710 pcs->pins.cur++;
0711
0712 return i;
0713 }
0714
0715
0716
0717
0718
0719
0720
0721
0722
0723
0724 static int pcs_allocate_pin_table(struct pcs_device *pcs)
0725 {
0726 int mux_bytes, nr_pins, i;
0727
0728 mux_bytes = pcs->width / BITS_PER_BYTE;
0729
0730 if (pcs->bits_per_mux) {
0731 pcs->bits_per_pin = fls(pcs->fmask);
0732 nr_pins = (pcs->size * BITS_PER_BYTE) / pcs->bits_per_pin;
0733 } else {
0734 nr_pins = pcs->size / mux_bytes;
0735 }
0736
0737 dev_dbg(pcs->dev, "allocating %i pins\n", nr_pins);
0738 pcs->pins.pa = devm_kcalloc(pcs->dev,
0739 nr_pins, sizeof(*pcs->pins.pa),
0740 GFP_KERNEL);
0741 if (!pcs->pins.pa)
0742 return -ENOMEM;
0743
0744 pcs->desc.pins = pcs->pins.pa;
0745 pcs->desc.npins = nr_pins;
0746
0747 for (i = 0; i < pcs->desc.npins; i++) {
0748 unsigned offset;
0749 int res;
0750
0751 offset = pcs_pin_reg_offset_get(pcs, i);
0752 res = pcs_add_pin(pcs, offset);
0753 if (res < 0) {
0754 dev_err(pcs->dev, "error adding pins: %i\n", res);
0755 return res;
0756 }
0757 }
0758
0759 return 0;
0760 }
0761
0762
0763
0764
0765
0766
0767
0768
0769
0770
0771
0772
0773
0774 static int pcs_add_function(struct pcs_device *pcs,
0775 struct pcs_function **fcn,
0776 const char *name,
0777 struct pcs_func_vals *vals,
0778 unsigned int nvals,
0779 const char **pgnames,
0780 unsigned int npgnames)
0781 {
0782 struct pcs_function *function;
0783 int selector;
0784
0785 function = devm_kzalloc(pcs->dev, sizeof(*function), GFP_KERNEL);
0786 if (!function)
0787 return -ENOMEM;
0788
0789 function->vals = vals;
0790 function->nvals = nvals;
0791 function->name = name;
0792
0793 selector = pinmux_generic_add_function(pcs->pctl, name,
0794 pgnames, npgnames,
0795 function);
0796 if (selector < 0) {
0797 devm_kfree(pcs->dev, function);
0798 *fcn = NULL;
0799 } else {
0800 *fcn = function;
0801 }
0802
0803 return selector;
0804 }
0805
0806
0807
0808
0809
0810
0811
0812
0813 static int pcs_get_pin_by_offset(struct pcs_device *pcs, unsigned offset)
0814 {
0815 unsigned index;
0816
0817 if (offset >= pcs->size) {
0818 dev_err(pcs->dev, "mux offset out of range: 0x%x (0x%x)\n",
0819 offset, pcs->size);
0820 return -EINVAL;
0821 }
0822
0823 if (pcs->bits_per_mux)
0824 index = (offset * BITS_PER_BYTE) / pcs->bits_per_pin;
0825 else
0826 index = offset / (pcs->width / BITS_PER_BYTE);
0827
0828 return index;
0829 }
0830
0831
0832
0833
0834
0835
0836 static int pcs_config_match(unsigned data, unsigned enable, unsigned disable)
0837 {
0838 int ret = -EINVAL;
0839
0840 if (data == enable)
0841 ret = 1;
0842 else if (data == disable)
0843 ret = 0;
0844 return ret;
0845 }
0846
0847 static void add_config(struct pcs_conf_vals **conf, enum pin_config_param param,
0848 unsigned value, unsigned enable, unsigned disable,
0849 unsigned mask)
0850 {
0851 (*conf)->param = param;
0852 (*conf)->val = value;
0853 (*conf)->enable = enable;
0854 (*conf)->disable = disable;
0855 (*conf)->mask = mask;
0856 (*conf)++;
0857 }
0858
0859 static void add_setting(unsigned long **setting, enum pin_config_param param,
0860 unsigned arg)
0861 {
0862 **setting = pinconf_to_config_packed(param, arg);
0863 (*setting)++;
0864 }
0865
0866
0867 static void pcs_add_conf2(struct pcs_device *pcs, struct device_node *np,
0868 const char *name, enum pin_config_param param,
0869 struct pcs_conf_vals **conf, unsigned long **settings)
0870 {
0871 unsigned value[2], shift;
0872 int ret;
0873
0874 ret = of_property_read_u32_array(np, name, value, 2);
0875 if (ret)
0876 return;
0877
0878 value[0] &= value[1];
0879 shift = ffs(value[1]) - 1;
0880
0881 add_config(conf, param, value[0], 0, 0, value[1]);
0882 add_setting(settings, param, value[0] >> shift);
0883 }
0884
0885
0886 static void pcs_add_conf4(struct pcs_device *pcs, struct device_node *np,
0887 const char *name, enum pin_config_param param,
0888 struct pcs_conf_vals **conf, unsigned long **settings)
0889 {
0890 unsigned value[4];
0891 int ret;
0892
0893
0894 ret = of_property_read_u32_array(np, name, value, 4);
0895 if (ret)
0896 return;
0897 if (!value[3]) {
0898 dev_err(pcs->dev, "mask field of the property can't be 0\n");
0899 return;
0900 }
0901 value[0] &= value[3];
0902 value[1] &= value[3];
0903 value[2] &= value[3];
0904 ret = pcs_config_match(value[0], value[1], value[2]);
0905 if (ret < 0)
0906 dev_dbg(pcs->dev, "failed to match enable or disable bits\n");
0907 add_config(conf, param, value[0], value[1], value[2], value[3]);
0908 add_setting(settings, param, ret);
0909 }
0910
0911 static int pcs_parse_pinconf(struct pcs_device *pcs, struct device_node *np,
0912 struct pcs_function *func,
0913 struct pinctrl_map **map)
0914
0915 {
0916 struct pinctrl_map *m = *map;
0917 int i = 0, nconfs = 0;
0918 unsigned long *settings = NULL, *s = NULL;
0919 struct pcs_conf_vals *conf = NULL;
0920 static const struct pcs_conf_type prop2[] = {
0921 { "pinctrl-single,drive-strength", PIN_CONFIG_DRIVE_STRENGTH, },
0922 { "pinctrl-single,slew-rate", PIN_CONFIG_SLEW_RATE, },
0923 { "pinctrl-single,input-enable", PIN_CONFIG_INPUT_ENABLE, },
0924 { "pinctrl-single,input-schmitt", PIN_CONFIG_INPUT_SCHMITT, },
0925 { "pinctrl-single,low-power-mode", PIN_CONFIG_MODE_LOW_POWER, },
0926 };
0927 static const struct pcs_conf_type prop4[] = {
0928 { "pinctrl-single,bias-pullup", PIN_CONFIG_BIAS_PULL_UP, },
0929 { "pinctrl-single,bias-pulldown", PIN_CONFIG_BIAS_PULL_DOWN, },
0930 { "pinctrl-single,input-schmitt-enable",
0931 PIN_CONFIG_INPUT_SCHMITT_ENABLE, },
0932 };
0933
0934
0935 if (!PCS_HAS_PINCONF)
0936 return -ENOTSUPP;
0937
0938
0939 for (i = 0; i < ARRAY_SIZE(prop2); i++) {
0940 if (of_find_property(np, prop2[i].name, NULL))
0941 nconfs++;
0942 }
0943 for (i = 0; i < ARRAY_SIZE(prop4); i++) {
0944 if (of_find_property(np, prop4[i].name, NULL))
0945 nconfs++;
0946 }
0947 if (!nconfs)
0948 return -ENOTSUPP;
0949
0950 func->conf = devm_kcalloc(pcs->dev,
0951 nconfs, sizeof(struct pcs_conf_vals),
0952 GFP_KERNEL);
0953 if (!func->conf)
0954 return -ENOMEM;
0955 func->nconfs = nconfs;
0956 conf = &(func->conf[0]);
0957 m++;
0958 settings = devm_kcalloc(pcs->dev, nconfs, sizeof(unsigned long),
0959 GFP_KERNEL);
0960 if (!settings)
0961 return -ENOMEM;
0962 s = &settings[0];
0963
0964 for (i = 0; i < ARRAY_SIZE(prop2); i++)
0965 pcs_add_conf2(pcs, np, prop2[i].name, prop2[i].param,
0966 &conf, &s);
0967 for (i = 0; i < ARRAY_SIZE(prop4); i++)
0968 pcs_add_conf4(pcs, np, prop4[i].name, prop4[i].param,
0969 &conf, &s);
0970 m->type = PIN_MAP_TYPE_CONFIGS_GROUP;
0971 m->data.configs.group_or_pin = np->name;
0972 m->data.configs.configs = settings;
0973 m->data.configs.num_configs = nconfs;
0974 return 0;
0975 }
0976
0977
0978
0979
0980
0981
0982
0983
0984
0985
0986
0987
0988
0989
0990
0991
0992
0993
0994
0995
0996 static int pcs_parse_one_pinctrl_entry(struct pcs_device *pcs,
0997 struct device_node *np,
0998 struct pinctrl_map **map,
0999 unsigned *num_maps,
1000 const char **pgnames)
1001 {
1002 const char *name = "pinctrl-single,pins";
1003 struct pcs_func_vals *vals;
1004 int rows, *pins, found = 0, res = -ENOMEM, i, fsel, gsel;
1005 struct pcs_function *function = NULL;
1006
1007 rows = pinctrl_count_index_with_args(np, name);
1008 if (rows <= 0) {
1009 dev_err(pcs->dev, "Invalid number of rows: %d\n", rows);
1010 return -EINVAL;
1011 }
1012
1013 vals = devm_kcalloc(pcs->dev, rows, sizeof(*vals), GFP_KERNEL);
1014 if (!vals)
1015 return -ENOMEM;
1016
1017 pins = devm_kcalloc(pcs->dev, rows, sizeof(*pins), GFP_KERNEL);
1018 if (!pins)
1019 goto free_vals;
1020
1021 for (i = 0; i < rows; i++) {
1022 struct of_phandle_args pinctrl_spec;
1023 unsigned int offset;
1024 int pin;
1025
1026 res = pinctrl_parse_index_with_args(np, name, i, &pinctrl_spec);
1027 if (res)
1028 return res;
1029
1030 if (pinctrl_spec.args_count < 2 || pinctrl_spec.args_count > 3) {
1031 dev_err(pcs->dev, "invalid args_count for spec: %i\n",
1032 pinctrl_spec.args_count);
1033 break;
1034 }
1035
1036 offset = pinctrl_spec.args[0];
1037 vals[found].reg = pcs->base + offset;
1038
1039 switch (pinctrl_spec.args_count) {
1040 case 2:
1041 vals[found].val = pinctrl_spec.args[1];
1042 break;
1043 case 3:
1044 vals[found].val = (pinctrl_spec.args[1] | pinctrl_spec.args[2]);
1045 break;
1046 }
1047
1048 dev_dbg(pcs->dev, "%pOFn index: 0x%x value: 0x%x\n",
1049 pinctrl_spec.np, offset, vals[found].val);
1050
1051 pin = pcs_get_pin_by_offset(pcs, offset);
1052 if (pin < 0) {
1053 dev_err(pcs->dev,
1054 "could not add functions for %pOFn %ux\n",
1055 np, offset);
1056 break;
1057 }
1058 pins[found++] = pin;
1059 }
1060
1061 pgnames[0] = np->name;
1062 mutex_lock(&pcs->mutex);
1063 fsel = pcs_add_function(pcs, &function, np->name, vals, found,
1064 pgnames, 1);
1065 if (fsel < 0) {
1066 res = fsel;
1067 goto free_pins;
1068 }
1069
1070 gsel = pinctrl_generic_add_group(pcs->pctl, np->name, pins, found, pcs);
1071 if (gsel < 0) {
1072 res = gsel;
1073 goto free_function;
1074 }
1075
1076 (*map)->type = PIN_MAP_TYPE_MUX_GROUP;
1077 (*map)->data.mux.group = np->name;
1078 (*map)->data.mux.function = np->name;
1079
1080 if (PCS_HAS_PINCONF && function) {
1081 res = pcs_parse_pinconf(pcs, np, function, map);
1082 if (res == 0)
1083 *num_maps = 2;
1084 else if (res == -ENOTSUPP)
1085 *num_maps = 1;
1086 else
1087 goto free_pingroups;
1088 } else {
1089 *num_maps = 1;
1090 }
1091 mutex_unlock(&pcs->mutex);
1092
1093 return 0;
1094
1095 free_pingroups:
1096 pinctrl_generic_remove_group(pcs->pctl, gsel);
1097 *num_maps = 1;
1098 free_function:
1099 pinmux_generic_remove_function(pcs->pctl, fsel);
1100 free_pins:
1101 mutex_unlock(&pcs->mutex);
1102 devm_kfree(pcs->dev, pins);
1103
1104 free_vals:
1105 devm_kfree(pcs->dev, vals);
1106
1107 return res;
1108 }
1109
1110 static int pcs_parse_bits_in_pinctrl_entry(struct pcs_device *pcs,
1111 struct device_node *np,
1112 struct pinctrl_map **map,
1113 unsigned *num_maps,
1114 const char **pgnames)
1115 {
1116 const char *name = "pinctrl-single,bits";
1117 struct pcs_func_vals *vals;
1118 int rows, *pins, found = 0, res = -ENOMEM, i, fsel;
1119 int npins_in_row;
1120 struct pcs_function *function = NULL;
1121
1122 rows = pinctrl_count_index_with_args(np, name);
1123 if (rows <= 0) {
1124 dev_err(pcs->dev, "Invalid number of rows: %d\n", rows);
1125 return -EINVAL;
1126 }
1127
1128 if (PCS_HAS_PINCONF) {
1129 dev_err(pcs->dev, "pinconf not supported\n");
1130 return -ENOTSUPP;
1131 }
1132
1133 npins_in_row = pcs->width / pcs->bits_per_pin;
1134
1135 vals = devm_kzalloc(pcs->dev,
1136 array3_size(rows, npins_in_row, sizeof(*vals)),
1137 GFP_KERNEL);
1138 if (!vals)
1139 return -ENOMEM;
1140
1141 pins = devm_kzalloc(pcs->dev,
1142 array3_size(rows, npins_in_row, sizeof(*pins)),
1143 GFP_KERNEL);
1144 if (!pins)
1145 goto free_vals;
1146
1147 for (i = 0; i < rows; i++) {
1148 struct of_phandle_args pinctrl_spec;
1149 unsigned offset, val;
1150 unsigned mask, bit_pos, val_pos, mask_pos, submask;
1151 unsigned pin_num_from_lsb;
1152 int pin;
1153
1154 res = pinctrl_parse_index_with_args(np, name, i, &pinctrl_spec);
1155 if (res)
1156 return res;
1157
1158 if (pinctrl_spec.args_count < 3) {
1159 dev_err(pcs->dev, "invalid args_count for spec: %i\n",
1160 pinctrl_spec.args_count);
1161 break;
1162 }
1163
1164
1165 offset = pinctrl_spec.args[0];
1166 val = pinctrl_spec.args[1];
1167 mask = pinctrl_spec.args[2];
1168
1169 dev_dbg(pcs->dev, "%pOFn index: 0x%x value: 0x%x mask: 0x%x\n",
1170 pinctrl_spec.np, offset, val, mask);
1171
1172
1173 while (mask) {
1174 bit_pos = __ffs(mask);
1175 pin_num_from_lsb = bit_pos / pcs->bits_per_pin;
1176 mask_pos = ((pcs->fmask) << bit_pos);
1177 val_pos = val & mask_pos;
1178 submask = mask & mask_pos;
1179
1180 if ((mask & mask_pos) == 0) {
1181 dev_err(pcs->dev,
1182 "Invalid mask for %pOFn at 0x%x\n",
1183 np, offset);
1184 break;
1185 }
1186
1187 mask &= ~mask_pos;
1188
1189 if (submask != mask_pos) {
1190 dev_warn(pcs->dev,
1191 "Invalid submask 0x%x for %pOFn at 0x%x\n",
1192 submask, np, offset);
1193 continue;
1194 }
1195
1196 vals[found].mask = submask;
1197 vals[found].reg = pcs->base + offset;
1198 vals[found].val = val_pos;
1199
1200 pin = pcs_get_pin_by_offset(pcs, offset);
1201 if (pin < 0) {
1202 dev_err(pcs->dev,
1203 "could not add functions for %pOFn %ux\n",
1204 np, offset);
1205 break;
1206 }
1207 pins[found++] = pin + pin_num_from_lsb;
1208 }
1209 }
1210
1211 pgnames[0] = np->name;
1212 mutex_lock(&pcs->mutex);
1213 fsel = pcs_add_function(pcs, &function, np->name, vals, found,
1214 pgnames, 1);
1215 if (fsel < 0) {
1216 res = fsel;
1217 goto free_pins;
1218 }
1219
1220 res = pinctrl_generic_add_group(pcs->pctl, np->name, pins, found, pcs);
1221 if (res < 0)
1222 goto free_function;
1223
1224 (*map)->type = PIN_MAP_TYPE_MUX_GROUP;
1225 (*map)->data.mux.group = np->name;
1226 (*map)->data.mux.function = np->name;
1227
1228 *num_maps = 1;
1229 mutex_unlock(&pcs->mutex);
1230
1231 return 0;
1232
1233 free_function:
1234 pinmux_generic_remove_function(pcs->pctl, fsel);
1235 free_pins:
1236 mutex_unlock(&pcs->mutex);
1237 devm_kfree(pcs->dev, pins);
1238
1239 free_vals:
1240 devm_kfree(pcs->dev, vals);
1241
1242 return res;
1243 }
1244
1245
1246
1247
1248
1249
1250
1251 static int pcs_dt_node_to_map(struct pinctrl_dev *pctldev,
1252 struct device_node *np_config,
1253 struct pinctrl_map **map, unsigned *num_maps)
1254 {
1255 struct pcs_device *pcs;
1256 const char **pgnames;
1257 int ret;
1258
1259 pcs = pinctrl_dev_get_drvdata(pctldev);
1260
1261
1262 *map = devm_kcalloc(pcs->dev, 2, sizeof(**map), GFP_KERNEL);
1263 if (!*map)
1264 return -ENOMEM;
1265
1266 *num_maps = 0;
1267
1268 pgnames = devm_kzalloc(pcs->dev, sizeof(*pgnames), GFP_KERNEL);
1269 if (!pgnames) {
1270 ret = -ENOMEM;
1271 goto free_map;
1272 }
1273
1274 if (pcs->bits_per_mux) {
1275 ret = pcs_parse_bits_in_pinctrl_entry(pcs, np_config, map,
1276 num_maps, pgnames);
1277 if (ret < 0) {
1278 dev_err(pcs->dev, "no pins entries for %pOFn\n",
1279 np_config);
1280 goto free_pgnames;
1281 }
1282 } else {
1283 ret = pcs_parse_one_pinctrl_entry(pcs, np_config, map,
1284 num_maps, pgnames);
1285 if (ret < 0) {
1286 dev_err(pcs->dev, "no pins entries for %pOFn\n",
1287 np_config);
1288 goto free_pgnames;
1289 }
1290 }
1291
1292 return 0;
1293
1294 free_pgnames:
1295 devm_kfree(pcs->dev, pgnames);
1296 free_map:
1297 devm_kfree(pcs->dev, *map);
1298
1299 return ret;
1300 }
1301
1302
1303
1304
1305
1306 static void pcs_irq_free(struct pcs_device *pcs)
1307 {
1308 struct pcs_soc_data *pcs_soc = &pcs->socdata;
1309
1310 if (pcs_soc->irq < 0)
1311 return;
1312
1313 if (pcs->domain)
1314 irq_domain_remove(pcs->domain);
1315
1316 if (PCS_QUIRK_HAS_SHARED_IRQ)
1317 free_irq(pcs_soc->irq, pcs_soc);
1318 else
1319 irq_set_chained_handler(pcs_soc->irq, NULL);
1320 }
1321
1322
1323
1324
1325
1326 static void pcs_free_resources(struct pcs_device *pcs)
1327 {
1328 pcs_irq_free(pcs);
1329 pinctrl_unregister(pcs->pctl);
1330
1331 #if IS_BUILTIN(CONFIG_PINCTRL_SINGLE)
1332 if (pcs->missing_nr_pinctrl_cells)
1333 of_remove_property(pcs->np, pcs->missing_nr_pinctrl_cells);
1334 #endif
1335 }
1336
1337 static int pcs_add_gpio_func(struct device_node *node, struct pcs_device *pcs)
1338 {
1339 const char *propname = "pinctrl-single,gpio-range";
1340 const char *cellname = "#pinctrl-single,gpio-range-cells";
1341 struct of_phandle_args gpiospec;
1342 struct pcs_gpiofunc_range *range;
1343 int ret, i;
1344
1345 for (i = 0; ; i++) {
1346 ret = of_parse_phandle_with_args(node, propname, cellname,
1347 i, &gpiospec);
1348
1349 if (ret) {
1350 ret = 0;
1351 break;
1352 }
1353 range = devm_kzalloc(pcs->dev, sizeof(*range), GFP_KERNEL);
1354 if (!range) {
1355 ret = -ENOMEM;
1356 break;
1357 }
1358 range->offset = gpiospec.args[0];
1359 range->npins = gpiospec.args[1];
1360 range->gpiofunc = gpiospec.args[2];
1361 mutex_lock(&pcs->mutex);
1362 list_add_tail(&range->node, &pcs->gpiofuncs);
1363 mutex_unlock(&pcs->mutex);
1364 }
1365 return ret;
1366 }
1367
1368
1369
1370
1371
1372
1373
1374
1375 struct pcs_interrupt {
1376 void __iomem *reg;
1377 irq_hw_number_t hwirq;
1378 unsigned int irq;
1379 struct list_head node;
1380 };
1381
1382
1383
1384
1385
1386
1387
1388
1389
1390
1391 static inline void pcs_irq_set(struct pcs_soc_data *pcs_soc,
1392 int irq, const bool enable)
1393 {
1394 struct pcs_device *pcs;
1395 struct list_head *pos;
1396 unsigned mask;
1397
1398 pcs = container_of(pcs_soc, struct pcs_device, socdata);
1399 list_for_each(pos, &pcs->irqs) {
1400 struct pcs_interrupt *pcswi;
1401 unsigned soc_mask;
1402
1403 pcswi = list_entry(pos, struct pcs_interrupt, node);
1404 if (irq != pcswi->irq)
1405 continue;
1406
1407 soc_mask = pcs_soc->irq_enable_mask;
1408 raw_spin_lock(&pcs->lock);
1409 mask = pcs->read(pcswi->reg);
1410 if (enable)
1411 mask |= soc_mask;
1412 else
1413 mask &= ~soc_mask;
1414 pcs->write(mask, pcswi->reg);
1415
1416
1417 mask = pcs->read(pcswi->reg);
1418 raw_spin_unlock(&pcs->lock);
1419 }
1420
1421 if (pcs_soc->rearm)
1422 pcs_soc->rearm();
1423 }
1424
1425
1426
1427
1428
1429 static void pcs_irq_mask(struct irq_data *d)
1430 {
1431 struct pcs_soc_data *pcs_soc = irq_data_get_irq_chip_data(d);
1432
1433 pcs_irq_set(pcs_soc, d->irq, false);
1434 }
1435
1436
1437
1438
1439
1440 static void pcs_irq_unmask(struct irq_data *d)
1441 {
1442 struct pcs_soc_data *pcs_soc = irq_data_get_irq_chip_data(d);
1443
1444 pcs_irq_set(pcs_soc, d->irq, true);
1445 }
1446
1447
1448
1449
1450
1451
1452
1453
1454
1455 static int pcs_irq_set_wake(struct irq_data *d, unsigned int state)
1456 {
1457 if (state)
1458 pcs_irq_unmask(d);
1459 else
1460 pcs_irq_mask(d);
1461
1462 return 0;
1463 }
1464
1465
1466
1467
1468
1469
1470
1471
1472
1473 static int pcs_irq_handle(struct pcs_soc_data *pcs_soc)
1474 {
1475 struct pcs_device *pcs;
1476 struct list_head *pos;
1477 int count = 0;
1478
1479 pcs = container_of(pcs_soc, struct pcs_device, socdata);
1480 list_for_each(pos, &pcs->irqs) {
1481 struct pcs_interrupt *pcswi;
1482 unsigned mask;
1483
1484 pcswi = list_entry(pos, struct pcs_interrupt, node);
1485 raw_spin_lock(&pcs->lock);
1486 mask = pcs->read(pcswi->reg);
1487 raw_spin_unlock(&pcs->lock);
1488 if (mask & pcs_soc->irq_status_mask) {
1489 generic_handle_domain_irq(pcs->domain,
1490 pcswi->hwirq);
1491 count++;
1492 }
1493 }
1494
1495 return count;
1496 }
1497
1498
1499
1500
1501
1502
1503
1504
1505
1506 static irqreturn_t pcs_irq_handler(int irq, void *d)
1507 {
1508 struct pcs_soc_data *pcs_soc = d;
1509
1510 return pcs_irq_handle(pcs_soc) ? IRQ_HANDLED : IRQ_NONE;
1511 }
1512
1513
1514
1515
1516
1517
1518
1519
1520 static void pcs_irq_chain_handler(struct irq_desc *desc)
1521 {
1522 struct pcs_soc_data *pcs_soc = irq_desc_get_handler_data(desc);
1523 struct irq_chip *chip;
1524
1525 chip = irq_desc_get_chip(desc);
1526 chained_irq_enter(chip, desc);
1527 pcs_irq_handle(pcs_soc);
1528
1529 chained_irq_exit(chip, desc);
1530 }
1531
1532 static int pcs_irqdomain_map(struct irq_domain *d, unsigned int irq,
1533 irq_hw_number_t hwirq)
1534 {
1535 struct pcs_soc_data *pcs_soc = d->host_data;
1536 struct pcs_device *pcs;
1537 struct pcs_interrupt *pcswi;
1538
1539 pcs = container_of(pcs_soc, struct pcs_device, socdata);
1540 pcswi = devm_kzalloc(pcs->dev, sizeof(*pcswi), GFP_KERNEL);
1541 if (!pcswi)
1542 return -ENOMEM;
1543
1544 pcswi->reg = pcs->base + hwirq;
1545 pcswi->hwirq = hwirq;
1546 pcswi->irq = irq;
1547
1548 mutex_lock(&pcs->mutex);
1549 list_add_tail(&pcswi->node, &pcs->irqs);
1550 mutex_unlock(&pcs->mutex);
1551
1552 irq_set_chip_data(irq, pcs_soc);
1553 irq_set_chip_and_handler(irq, &pcs->chip,
1554 handle_level_irq);
1555 irq_set_lockdep_class(irq, &pcs_lock_class, &pcs_request_class);
1556 irq_set_noprobe(irq);
1557
1558 return 0;
1559 }
1560
1561 static const struct irq_domain_ops pcs_irqdomain_ops = {
1562 .map = pcs_irqdomain_map,
1563 .xlate = irq_domain_xlate_onecell,
1564 };
1565
1566
1567
1568
1569
1570
1571 static int pcs_irq_init_chained_handler(struct pcs_device *pcs,
1572 struct device_node *np)
1573 {
1574 struct pcs_soc_data *pcs_soc = &pcs->socdata;
1575 const char *name = "pinctrl";
1576 int num_irqs;
1577
1578 if (!pcs_soc->irq_enable_mask ||
1579 !pcs_soc->irq_status_mask) {
1580 pcs_soc->irq = -1;
1581 return -EINVAL;
1582 }
1583
1584 INIT_LIST_HEAD(&pcs->irqs);
1585 pcs->chip.name = name;
1586 pcs->chip.irq_ack = pcs_irq_mask;
1587 pcs->chip.irq_mask = pcs_irq_mask;
1588 pcs->chip.irq_unmask = pcs_irq_unmask;
1589 pcs->chip.irq_set_wake = pcs_irq_set_wake;
1590
1591 if (PCS_QUIRK_HAS_SHARED_IRQ) {
1592 int res;
1593
1594 res = request_irq(pcs_soc->irq, pcs_irq_handler,
1595 IRQF_SHARED | IRQF_NO_SUSPEND |
1596 IRQF_NO_THREAD,
1597 name, pcs_soc);
1598 if (res) {
1599 pcs_soc->irq = -1;
1600 return res;
1601 }
1602 } else {
1603 irq_set_chained_handler_and_data(pcs_soc->irq,
1604 pcs_irq_chain_handler,
1605 pcs_soc);
1606 }
1607
1608
1609
1610
1611
1612
1613
1614 num_irqs = pcs->size;
1615
1616 pcs->domain = irq_domain_add_simple(np, num_irqs, 0,
1617 &pcs_irqdomain_ops,
1618 pcs_soc);
1619 if (!pcs->domain) {
1620 irq_set_chained_handler(pcs_soc->irq, NULL);
1621 return -EINVAL;
1622 }
1623
1624 return 0;
1625 }
1626
1627 #ifdef CONFIG_PM
1628 static int pcs_save_context(struct pcs_device *pcs)
1629 {
1630 int i, mux_bytes;
1631 u64 *regsl;
1632 u32 *regsw;
1633 u16 *regshw;
1634
1635 mux_bytes = pcs->width / BITS_PER_BYTE;
1636
1637 if (!pcs->saved_vals) {
1638 pcs->saved_vals = devm_kzalloc(pcs->dev, pcs->size, GFP_ATOMIC);
1639 if (!pcs->saved_vals)
1640 return -ENOMEM;
1641 }
1642
1643 switch (pcs->width) {
1644 case 64:
1645 regsl = pcs->saved_vals;
1646 for (i = 0; i < pcs->size; i += mux_bytes)
1647 *regsl++ = pcs->read(pcs->base + i);
1648 break;
1649 case 32:
1650 regsw = pcs->saved_vals;
1651 for (i = 0; i < pcs->size; i += mux_bytes)
1652 *regsw++ = pcs->read(pcs->base + i);
1653 break;
1654 case 16:
1655 regshw = pcs->saved_vals;
1656 for (i = 0; i < pcs->size; i += mux_bytes)
1657 *regshw++ = pcs->read(pcs->base + i);
1658 break;
1659 }
1660
1661 return 0;
1662 }
1663
1664 static void pcs_restore_context(struct pcs_device *pcs)
1665 {
1666 int i, mux_bytes;
1667 u64 *regsl;
1668 u32 *regsw;
1669 u16 *regshw;
1670
1671 mux_bytes = pcs->width / BITS_PER_BYTE;
1672
1673 switch (pcs->width) {
1674 case 64:
1675 regsl = pcs->saved_vals;
1676 for (i = 0; i < pcs->size; i += mux_bytes)
1677 pcs->write(*regsl++, pcs->base + i);
1678 break;
1679 case 32:
1680 regsw = pcs->saved_vals;
1681 for (i = 0; i < pcs->size; i += mux_bytes)
1682 pcs->write(*regsw++, pcs->base + i);
1683 break;
1684 case 16:
1685 regshw = pcs->saved_vals;
1686 for (i = 0; i < pcs->size; i += mux_bytes)
1687 pcs->write(*regshw++, pcs->base + i);
1688 break;
1689 }
1690 }
1691
1692 static int pinctrl_single_suspend(struct platform_device *pdev,
1693 pm_message_t state)
1694 {
1695 struct pcs_device *pcs;
1696
1697 pcs = platform_get_drvdata(pdev);
1698 if (!pcs)
1699 return -EINVAL;
1700
1701 if (pcs->flags & PCS_CONTEXT_LOSS_OFF) {
1702 int ret;
1703
1704 ret = pcs_save_context(pcs);
1705 if (ret < 0)
1706 return ret;
1707 }
1708
1709 return pinctrl_force_sleep(pcs->pctl);
1710 }
1711
1712 static int pinctrl_single_resume(struct platform_device *pdev)
1713 {
1714 struct pcs_device *pcs;
1715
1716 pcs = platform_get_drvdata(pdev);
1717 if (!pcs)
1718 return -EINVAL;
1719
1720 if (pcs->flags & PCS_CONTEXT_LOSS_OFF)
1721 pcs_restore_context(pcs);
1722
1723 return pinctrl_force_default(pcs->pctl);
1724 }
1725 #endif
1726
1727
1728
1729
1730
1731
1732
1733
1734
1735
1736
1737 static int pcs_quirk_missing_pinctrl_cells(struct pcs_device *pcs,
1738 struct device_node *np,
1739 int cells)
1740 {
1741 struct property *p;
1742 const char *name = "#pinctrl-cells";
1743 int error;
1744 u32 val;
1745
1746 error = of_property_read_u32(np, name, &val);
1747 if (!error)
1748 return 0;
1749
1750 dev_warn(pcs->dev, "please update dts to use %s = <%i>\n",
1751 name, cells);
1752
1753 p = devm_kzalloc(pcs->dev, sizeof(*p), GFP_KERNEL);
1754 if (!p)
1755 return -ENOMEM;
1756
1757 p->length = sizeof(__be32);
1758 p->value = devm_kzalloc(pcs->dev, sizeof(__be32), GFP_KERNEL);
1759 if (!p->value)
1760 return -ENOMEM;
1761 *(__be32 *)p->value = cpu_to_be32(cells);
1762
1763 p->name = devm_kstrdup(pcs->dev, name, GFP_KERNEL);
1764 if (!p->name)
1765 return -ENOMEM;
1766
1767 pcs->missing_nr_pinctrl_cells = p;
1768
1769 #if IS_BUILTIN(CONFIG_PINCTRL_SINGLE)
1770 error = of_add_property(np, pcs->missing_nr_pinctrl_cells);
1771 #endif
1772
1773 return error;
1774 }
1775
1776 static int pcs_probe(struct platform_device *pdev)
1777 {
1778 struct device_node *np = pdev->dev.of_node;
1779 struct pcs_pdata *pdata;
1780 struct resource *res;
1781 struct pcs_device *pcs;
1782 const struct pcs_soc_data *soc;
1783 int ret;
1784
1785 soc = of_device_get_match_data(&pdev->dev);
1786 if (WARN_ON(!soc))
1787 return -EINVAL;
1788
1789 pcs = devm_kzalloc(&pdev->dev, sizeof(*pcs), GFP_KERNEL);
1790 if (!pcs)
1791 return -ENOMEM;
1792
1793 pcs->dev = &pdev->dev;
1794 pcs->np = np;
1795 raw_spin_lock_init(&pcs->lock);
1796 mutex_init(&pcs->mutex);
1797 INIT_LIST_HEAD(&pcs->gpiofuncs);
1798 pcs->flags = soc->flags;
1799 memcpy(&pcs->socdata, soc, sizeof(*soc));
1800
1801 ret = of_property_read_u32(np, "pinctrl-single,register-width",
1802 &pcs->width);
1803 if (ret) {
1804 dev_err(pcs->dev, "register width not specified\n");
1805
1806 return ret;
1807 }
1808
1809 ret = of_property_read_u32(np, "pinctrl-single,function-mask",
1810 &pcs->fmask);
1811 if (!ret) {
1812 pcs->fshift = __ffs(pcs->fmask);
1813 pcs->fmax = pcs->fmask >> pcs->fshift;
1814 } else {
1815
1816 pcs->fmask = 0;
1817 pcs->fshift = 0;
1818 pcs->fmax = 0;
1819 }
1820
1821 ret = of_property_read_u32(np, "pinctrl-single,function-off",
1822 &pcs->foff);
1823 if (ret)
1824 pcs->foff = PCS_OFF_DISABLED;
1825
1826 pcs->bits_per_mux = of_property_read_bool(np,
1827 "pinctrl-single,bit-per-mux");
1828 ret = pcs_quirk_missing_pinctrl_cells(pcs, np,
1829 pcs->bits_per_mux ? 2 : 1);
1830 if (ret) {
1831 dev_err(&pdev->dev, "unable to patch #pinctrl-cells\n");
1832
1833 return ret;
1834 }
1835
1836 res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
1837 if (!res) {
1838 dev_err(pcs->dev, "could not get resource\n");
1839 return -ENODEV;
1840 }
1841
1842 pcs->res = devm_request_mem_region(pcs->dev, res->start,
1843 resource_size(res), DRIVER_NAME);
1844 if (!pcs->res) {
1845 dev_err(pcs->dev, "could not get mem_region\n");
1846 return -EBUSY;
1847 }
1848
1849 pcs->size = resource_size(pcs->res);
1850 pcs->base = devm_ioremap(pcs->dev, pcs->res->start, pcs->size);
1851 if (!pcs->base) {
1852 dev_err(pcs->dev, "could not ioremap\n");
1853 return -ENODEV;
1854 }
1855
1856 platform_set_drvdata(pdev, pcs);
1857
1858 switch (pcs->width) {
1859 case 8:
1860 pcs->read = pcs_readb;
1861 pcs->write = pcs_writeb;
1862 break;
1863 case 16:
1864 pcs->read = pcs_readw;
1865 pcs->write = pcs_writew;
1866 break;
1867 case 32:
1868 pcs->read = pcs_readl;
1869 pcs->write = pcs_writel;
1870 break;
1871 default:
1872 break;
1873 }
1874
1875 pcs->desc.name = DRIVER_NAME;
1876 pcs->desc.pctlops = &pcs_pinctrl_ops;
1877 pcs->desc.pmxops = &pcs_pinmux_ops;
1878 if (PCS_HAS_PINCONF)
1879 pcs->desc.confops = &pcs_pinconf_ops;
1880 pcs->desc.owner = THIS_MODULE;
1881
1882 ret = pcs_allocate_pin_table(pcs);
1883 if (ret < 0)
1884 goto free;
1885
1886 ret = pinctrl_register_and_init(&pcs->desc, pcs->dev, pcs, &pcs->pctl);
1887 if (ret) {
1888 dev_err(pcs->dev, "could not register single pinctrl driver\n");
1889 goto free;
1890 }
1891
1892 ret = pcs_add_gpio_func(np, pcs);
1893 if (ret < 0)
1894 goto free;
1895
1896 pcs->socdata.irq = irq_of_parse_and_map(np, 0);
1897 if (pcs->socdata.irq)
1898 pcs->flags |= PCS_FEAT_IRQ;
1899
1900
1901 pdata = dev_get_platdata(&pdev->dev);
1902 if (pdata) {
1903 if (pdata->rearm)
1904 pcs->socdata.rearm = pdata->rearm;
1905 if (pdata->irq) {
1906 pcs->socdata.irq = pdata->irq;
1907 pcs->flags |= PCS_FEAT_IRQ;
1908 }
1909 }
1910
1911 if (PCS_HAS_IRQ) {
1912 ret = pcs_irq_init_chained_handler(pcs, np);
1913 if (ret < 0)
1914 dev_warn(pcs->dev, "initialized with no interrupts\n");
1915 }
1916
1917 dev_info(pcs->dev, "%i pins, size %u\n", pcs->desc.npins, pcs->size);
1918
1919 return pinctrl_enable(pcs->pctl);
1920
1921 free:
1922 pcs_free_resources(pcs);
1923
1924 return ret;
1925 }
1926
1927 static int pcs_remove(struct platform_device *pdev)
1928 {
1929 struct pcs_device *pcs = platform_get_drvdata(pdev);
1930
1931 if (!pcs)
1932 return 0;
1933
1934 pcs_free_resources(pcs);
1935
1936 return 0;
1937 }
1938
1939 static const struct pcs_soc_data pinctrl_single_omap_wkup = {
1940 .flags = PCS_QUIRK_SHARED_IRQ,
1941 .irq_enable_mask = (1 << 14),
1942 .irq_status_mask = (1 << 15),
1943 };
1944
1945 static const struct pcs_soc_data pinctrl_single_dra7 = {
1946 .irq_enable_mask = (1 << 24),
1947 .irq_status_mask = (1 << 25),
1948 };
1949
1950 static const struct pcs_soc_data pinctrl_single_am437x = {
1951 .flags = PCS_QUIRK_SHARED_IRQ | PCS_CONTEXT_LOSS_OFF,
1952 .irq_enable_mask = (1 << 29),
1953 .irq_status_mask = (1 << 30),
1954 };
1955
1956 static const struct pcs_soc_data pinctrl_single = {
1957 };
1958
1959 static const struct pcs_soc_data pinconf_single = {
1960 .flags = PCS_FEAT_PINCONF,
1961 };
1962
1963 static const struct of_device_id pcs_of_match[] = {
1964 { .compatible = "ti,omap3-padconf", .data = &pinctrl_single_omap_wkup },
1965 { .compatible = "ti,omap4-padconf", .data = &pinctrl_single_omap_wkup },
1966 { .compatible = "ti,omap5-padconf", .data = &pinctrl_single_omap_wkup },
1967 { .compatible = "ti,dra7-padconf", .data = &pinctrl_single_dra7 },
1968 { .compatible = "ti,am437-padconf", .data = &pinctrl_single_am437x },
1969 { .compatible = "pinctrl-single", .data = &pinctrl_single },
1970 { .compatible = "pinconf-single", .data = &pinconf_single },
1971 { },
1972 };
1973 MODULE_DEVICE_TABLE(of, pcs_of_match);
1974
1975 static struct platform_driver pcs_driver = {
1976 .probe = pcs_probe,
1977 .remove = pcs_remove,
1978 .driver = {
1979 .name = DRIVER_NAME,
1980 .of_match_table = pcs_of_match,
1981 },
1982 #ifdef CONFIG_PM
1983 .suspend = pinctrl_single_suspend,
1984 .resume = pinctrl_single_resume,
1985 #endif
1986 };
1987
1988 module_platform_driver(pcs_driver);
1989
1990 MODULE_AUTHOR("Tony Lindgren <tony@atomide.com>");
1991 MODULE_DESCRIPTION("One-register-per-pin type device tree based pinctrl driver");
1992 MODULE_LICENSE("GPL v2");