Lines Matching +full:soc +full:- +full:s

1 // SPDX-License-Identifier: GPL-2.0+
20 #include "pinctrl-mxs.h"
28 struct mxs_pinctrl_soc_data *soc; member
35 return d->soc->ngroups; in mxs_get_groups_count()
43 return d->soc->groups[group].name; in mxs_get_group_name()
51 *pins = d->soc->groups[group].pins; in mxs_get_group_pins()
52 *num_pins = d->soc->groups[group].npins; in mxs_get_group_pins()
57 static void mxs_pin_dbg_show(struct pinctrl_dev *pctldev, struct seq_file *s, in mxs_pin_dbg_show() argument
60 seq_printf(s, " %s", dev_name(pctldev->dev)); in mxs_pin_dbg_show()
72 int length = strlen(np->name) + SUFFIX_LEN; in mxs_dt_node_to_map()
81 ret = of_property_read_u32(np, "fsl,drive-strength", &val); in mxs_dt_node_to_map()
87 ret = of_property_read_u32(np, "fsl,pull-up", &val); in mxs_dt_node_to_map()
97 return -ENOMEM; in mxs_dt_node_to_map()
101 new_map[i].data.mux.function = np->name; in mxs_dt_node_to_map()
106 ret = -ENOMEM; in mxs_dt_node_to_map()
109 snprintf(group, length, "%s.%d", np->name, reg); in mxs_dt_node_to_map()
117 ret = -ENOMEM; in mxs_dt_node_to_map()
122 new_map[i].data.configs.group_or_pin = purecfg ? np->name : in mxs_dt_node_to_map()
169 return d->soc->nfunctions; in mxs_pinctrl_get_funcs_count()
177 return d->soc->functions[function].name; in mxs_pinctrl_get_func_name()
187 *groups = d->soc->functions[group].groups; in mxs_pinctrl_get_func_groups()
188 *num_groups = d->soc->functions[group].ngroups; in mxs_pinctrl_get_func_groups()
207 struct mxs_group *g = &d->soc->groups[group]; in mxs_pinctrl_set_mux()
213 for (i = 0; i < g->npins; i++) { in mxs_pinctrl_set_mux()
214 bank = PINID_TO_BANK(g->pins[i]); in mxs_pinctrl_set_mux()
215 pin = PINID_TO_PIN(g->pins[i]); in mxs_pinctrl_set_mux()
216 reg = d->base + d->soc->regs->muxsel; in mxs_pinctrl_set_mux()
220 mxs_pinctrl_rmwl(g->muxsel[i], 0x3, shift, reg); in mxs_pinctrl_set_mux()
236 return -ENOTSUPP; in mxs_pinconf_get()
243 return -ENOTSUPP; in mxs_pinconf_set()
251 *config = d->soc->groups[group].config; in mxs_pinconf_group_get()
261 struct mxs_group *g = &d->soc->groups[group]; in mxs_pinconf_group_set()
276 for (i = 0; i < g->npins; i++) { in mxs_pinconf_group_set()
277 bank = PINID_TO_BANK(g->pins[i]); in mxs_pinconf_group_set()
278 pin = PINID_TO_PIN(g->pins[i]); in mxs_pinconf_group_set()
281 reg = d->base + d->soc->regs->drive; in mxs_pinconf_group_set()
301 reg = d->base + d->soc->regs->pull; in mxs_pinconf_group_set()
312 g->config = config; in mxs_pinconf_group_set()
320 struct seq_file *s, unsigned pin) in mxs_pinconf_dbg_show() argument
326 struct seq_file *s, unsigned group) in mxs_pinconf_group_dbg_show() argument
331 seq_printf(s, "0x%lx", config); in mxs_pinconf_group_dbg_show()
355 struct mxs_group *g = &d->soc->groups[idx]; in mxs_pinctrl_parse_group()
357 const char *propname = "fsl,pinmux-ids"; in mxs_pinctrl_parse_group()
359 int length = strlen(np->name) + SUFFIX_LEN; in mxs_pinctrl_parse_group()
362 group = devm_kzalloc(&pdev->dev, length, GFP_KERNEL); in mxs_pinctrl_parse_group()
364 return -ENOMEM; in mxs_pinctrl_parse_group()
366 snprintf(group, length, "%s", np->name); in mxs_pinctrl_parse_group()
368 snprintf(group, length, "%s.%d", np->name, val); in mxs_pinctrl_parse_group()
369 g->name = group; in mxs_pinctrl_parse_group()
373 return -EINVAL; in mxs_pinctrl_parse_group()
374 g->npins = length / sizeof(u32); in mxs_pinctrl_parse_group()
376 g->pins = devm_kcalloc(&pdev->dev, g->npins, sizeof(*g->pins), in mxs_pinctrl_parse_group()
378 if (!g->pins) in mxs_pinctrl_parse_group()
379 return -ENOMEM; in mxs_pinctrl_parse_group()
381 g->muxsel = devm_kcalloc(&pdev->dev, g->npins, sizeof(*g->muxsel), in mxs_pinctrl_parse_group()
383 if (!g->muxsel) in mxs_pinctrl_parse_group()
384 return -ENOMEM; in mxs_pinctrl_parse_group()
386 of_property_read_u32_array(np, propname, g->pins, g->npins); in mxs_pinctrl_parse_group()
387 for (i = 0; i < g->npins; i++) { in mxs_pinctrl_parse_group()
388 g->muxsel[i] = MUXID_TO_MUXSEL(g->pins[i]); in mxs_pinctrl_parse_group()
389 g->pins[i] = MUXID_TO_PINID(g->pins[i]); in mxs_pinctrl_parse_group()
393 *out_name = g->name; in mxs_pinctrl_parse_group()
400 return of_device_is_compatible(child, "fsl,imx23-gpio") || in is_mxs_gpio()
401 of_device_is_compatible(child, "fsl,imx28-gpio"); in is_mxs_gpio()
407 struct mxs_pinctrl_soc_data *soc = d->soc; in mxs_pinctrl_probe_dt() local
408 struct device_node *np = pdev->dev.of_node; in mxs_pinctrl_probe_dt()
418 dev_err(&pdev->dev, "no group is defined\n"); in mxs_pinctrl_probe_dt()
419 return -ENOENT; in mxs_pinctrl_probe_dt()
427 soc->ngroups++; in mxs_pinctrl_probe_dt()
431 if (strcmp(fn, child->name)) { in mxs_pinctrl_probe_dt()
432 fn = child->name; in mxs_pinctrl_probe_dt()
433 soc->nfunctions++; in mxs_pinctrl_probe_dt()
437 soc->functions = devm_kcalloc(&pdev->dev, in mxs_pinctrl_probe_dt()
438 soc->nfunctions, in mxs_pinctrl_probe_dt()
439 sizeof(*soc->functions), in mxs_pinctrl_probe_dt()
441 if (!soc->functions) in mxs_pinctrl_probe_dt()
442 return -ENOMEM; in mxs_pinctrl_probe_dt()
444 soc->groups = devm_kcalloc(&pdev->dev, in mxs_pinctrl_probe_dt()
445 soc->ngroups, sizeof(*soc->groups), in mxs_pinctrl_probe_dt()
447 if (!soc->groups) in mxs_pinctrl_probe_dt()
448 return -ENOMEM; in mxs_pinctrl_probe_dt()
452 f = &soc->functions[idxf]; in mxs_pinctrl_probe_dt()
458 if (strcmp(fn, child->name)) { in mxs_pinctrl_probe_dt()
478 if (!strcmp(child2->name, fn)) in mxs_pinctrl_probe_dt()
479 dev_warn(&pdev->dev, in mxs_pinctrl_probe_dt()
480 "function nodes must be grouped by name (failed for: %s)", in mxs_pinctrl_probe_dt()
484 f = &soc->functions[idxf++]; in mxs_pinctrl_probe_dt()
485 f->name = fn = child->name; in mxs_pinctrl_probe_dt()
487 f->ngroups++; in mxs_pinctrl_probe_dt()
504 if (strcmp(fn, child->name)) { in mxs_pinctrl_probe_dt()
505 f = &soc->functions[idxf++]; in mxs_pinctrl_probe_dt()
506 f->groups = devm_kcalloc(&pdev->dev, in mxs_pinctrl_probe_dt()
507 f->ngroups, in mxs_pinctrl_probe_dt()
508 sizeof(*f->groups), in mxs_pinctrl_probe_dt()
510 if (!f->groups) in mxs_pinctrl_probe_dt()
511 return -ENOMEM; in mxs_pinctrl_probe_dt()
512 fn = child->name; in mxs_pinctrl_probe_dt()
516 &f->groups[i++]); in mxs_pinctrl_probe_dt()
525 struct mxs_pinctrl_soc_data *soc) in mxs_pinctrl_probe() argument
527 struct device_node *np = pdev->dev.of_node; in mxs_pinctrl_probe()
531 d = devm_kzalloc(&pdev->dev, sizeof(*d), GFP_KERNEL); in mxs_pinctrl_probe()
533 return -ENOMEM; in mxs_pinctrl_probe()
535 d->dev = &pdev->dev; in mxs_pinctrl_probe()
536 d->soc = soc; in mxs_pinctrl_probe()
538 d->base = of_iomap(np, 0); in mxs_pinctrl_probe()
539 if (!d->base) in mxs_pinctrl_probe()
540 return -EADDRNOTAVAIL; in mxs_pinctrl_probe()
542 mxs_pinctrl_desc.pins = d->soc->pins; in mxs_pinctrl_probe()
543 mxs_pinctrl_desc.npins = d->soc->npins; in mxs_pinctrl_probe()
544 mxs_pinctrl_desc.name = dev_name(&pdev->dev); in mxs_pinctrl_probe()
550 dev_err(&pdev->dev, "dt probe failed: %d\n", ret); in mxs_pinctrl_probe()
554 d->pctl = pinctrl_register(&mxs_pinctrl_desc, &pdev->dev, d); in mxs_pinctrl_probe()
555 if (IS_ERR(d->pctl)) { in mxs_pinctrl_probe()
556 dev_err(&pdev->dev, "Couldn't register MXS pinctrl driver\n"); in mxs_pinctrl_probe()
557 ret = PTR_ERR(d->pctl); in mxs_pinctrl_probe()
564 iounmap(d->base); in mxs_pinctrl_probe()