Lines Matching +full:soc +full:- +full:s
1 // SPDX-License-Identifier: GPL-2.0+
17 #include "pinctrl-mxs.h"
25 struct mxs_pinctrl_soc_data *soc; member
32 return d->soc->ngroups; in mxs_get_groups_count()
40 return d->soc->groups[group].name; in mxs_get_group_name()
48 *pins = d->soc->groups[group].pins; in mxs_get_group_pins()
49 *num_pins = d->soc->groups[group].npins; in mxs_get_group_pins()
54 static void mxs_pin_dbg_show(struct pinctrl_dev *pctldev, struct seq_file *s, in mxs_pin_dbg_show() argument
57 seq_printf(s, " %s", dev_name(pctldev->dev)); in mxs_pin_dbg_show()
69 int length = strlen(np->name) + SUFFIX_LEN; in mxs_dt_node_to_map()
78 ret = of_property_read_u32(np, "fsl,drive-strength", &val); in mxs_dt_node_to_map()
84 ret = of_property_read_u32(np, "fsl,pull-up", &val); in mxs_dt_node_to_map()
94 return -ENOMEM; in mxs_dt_node_to_map()
98 new_map[i].data.mux.function = np->name; in mxs_dt_node_to_map()
103 ret = -ENOMEM; in mxs_dt_node_to_map()
106 snprintf(group, length, "%s.%d", np->name, reg); in mxs_dt_node_to_map()
114 ret = -ENOMEM; in mxs_dt_node_to_map()
119 new_map[i].data.configs.group_or_pin = purecfg ? np->name : in mxs_dt_node_to_map()
166 return d->soc->nfunctions; in mxs_pinctrl_get_funcs_count()
174 return d->soc->functions[function].name; in mxs_pinctrl_get_func_name()
184 *groups = d->soc->functions[group].groups; in mxs_pinctrl_get_func_groups()
185 *num_groups = d->soc->functions[group].ngroups; in mxs_pinctrl_get_func_groups()
204 struct mxs_group *g = &d->soc->groups[group]; in mxs_pinctrl_set_mux()
210 for (i = 0; i < g->npins; i++) { in mxs_pinctrl_set_mux()
211 bank = PINID_TO_BANK(g->pins[i]); in mxs_pinctrl_set_mux()
212 pin = PINID_TO_PIN(g->pins[i]); in mxs_pinctrl_set_mux()
213 reg = d->base + d->soc->regs->muxsel; in mxs_pinctrl_set_mux()
217 mxs_pinctrl_rmwl(g->muxsel[i], 0x3, shift, reg); in mxs_pinctrl_set_mux()
233 return -ENOTSUPP; in mxs_pinconf_get()
240 return -ENOTSUPP; in mxs_pinconf_set()
248 *config = d->soc->groups[group].config; in mxs_pinconf_group_get()
258 struct mxs_group *g = &d->soc->groups[group]; in mxs_pinconf_group_set()
273 for (i = 0; i < g->npins; i++) { in mxs_pinconf_group_set()
274 bank = PINID_TO_BANK(g->pins[i]); in mxs_pinconf_group_set()
275 pin = PINID_TO_PIN(g->pins[i]); in mxs_pinconf_group_set()
278 reg = d->base + d->soc->regs->drive; in mxs_pinconf_group_set()
298 reg = d->base + d->soc->regs->pull; in mxs_pinconf_group_set()
309 g->config = config; in mxs_pinconf_group_set()
317 struct seq_file *s, unsigned pin) in mxs_pinconf_dbg_show() argument
323 struct seq_file *s, unsigned group) in mxs_pinconf_group_dbg_show() argument
328 seq_printf(s, "0x%lx", config); in mxs_pinconf_group_dbg_show()
352 struct mxs_group *g = &d->soc->groups[idx]; in mxs_pinctrl_parse_group()
354 const char *propname = "fsl,pinmux-ids"; in mxs_pinctrl_parse_group()
356 int length = strlen(np->name) + SUFFIX_LEN; in mxs_pinctrl_parse_group()
359 group = devm_kzalloc(&pdev->dev, length, GFP_KERNEL); in mxs_pinctrl_parse_group()
361 return -ENOMEM; in mxs_pinctrl_parse_group()
363 snprintf(group, length, "%s", np->name); in mxs_pinctrl_parse_group()
365 snprintf(group, length, "%s.%d", np->name, val); in mxs_pinctrl_parse_group()
366 g->name = group; in mxs_pinctrl_parse_group()
370 return -EINVAL; in mxs_pinctrl_parse_group()
371 g->npins = length / sizeof(u32); in mxs_pinctrl_parse_group()
373 g->pins = devm_kcalloc(&pdev->dev, g->npins, sizeof(*g->pins), in mxs_pinctrl_parse_group()
375 if (!g->pins) in mxs_pinctrl_parse_group()
376 return -ENOMEM; in mxs_pinctrl_parse_group()
378 g->muxsel = devm_kcalloc(&pdev->dev, g->npins, sizeof(*g->muxsel), in mxs_pinctrl_parse_group()
380 if (!g->muxsel) in mxs_pinctrl_parse_group()
381 return -ENOMEM; in mxs_pinctrl_parse_group()
383 of_property_read_u32_array(np, propname, g->pins, g->npins); in mxs_pinctrl_parse_group()
384 for (i = 0; i < g->npins; i++) { in mxs_pinctrl_parse_group()
385 g->muxsel[i] = MUXID_TO_MUXSEL(g->pins[i]); in mxs_pinctrl_parse_group()
386 g->pins[i] = MUXID_TO_PINID(g->pins[i]); in mxs_pinctrl_parse_group()
390 *out_name = g->name; in mxs_pinctrl_parse_group()
398 struct mxs_pinctrl_soc_data *soc = d->soc; in mxs_pinctrl_probe_dt() local
399 struct device_node *np = pdev->dev.of_node; in mxs_pinctrl_probe_dt()
402 const char *gpio_compat = "fsl,mxs-gpio"; in mxs_pinctrl_probe_dt()
410 dev_err(&pdev->dev, "no group is defined\n"); in mxs_pinctrl_probe_dt()
411 return -ENOENT; in mxs_pinctrl_probe_dt()
419 soc->ngroups++; in mxs_pinctrl_probe_dt()
423 if (strcmp(fn, child->name)) { in mxs_pinctrl_probe_dt()
424 fn = child->name; in mxs_pinctrl_probe_dt()
425 soc->nfunctions++; in mxs_pinctrl_probe_dt()
429 soc->functions = devm_kcalloc(&pdev->dev, in mxs_pinctrl_probe_dt()
430 soc->nfunctions, in mxs_pinctrl_probe_dt()
431 sizeof(*soc->functions), in mxs_pinctrl_probe_dt()
433 if (!soc->functions) in mxs_pinctrl_probe_dt()
434 return -ENOMEM; in mxs_pinctrl_probe_dt()
436 soc->groups = devm_kcalloc(&pdev->dev, in mxs_pinctrl_probe_dt()
437 soc->ngroups, sizeof(*soc->groups), in mxs_pinctrl_probe_dt()
439 if (!soc->groups) in mxs_pinctrl_probe_dt()
440 return -ENOMEM; in mxs_pinctrl_probe_dt()
444 f = &soc->functions[idxf]; in mxs_pinctrl_probe_dt()
450 if (strcmp(fn, child->name)) { in mxs_pinctrl_probe_dt()
470 if (!strcmp(child2->name, fn)) in mxs_pinctrl_probe_dt()
471 dev_warn(&pdev->dev, in mxs_pinctrl_probe_dt()
472 "function nodes must be grouped by name (failed for: %s)", in mxs_pinctrl_probe_dt()
476 f = &soc->functions[idxf++]; in mxs_pinctrl_probe_dt()
477 f->name = fn = child->name; in mxs_pinctrl_probe_dt()
479 f->ngroups++; in mxs_pinctrl_probe_dt()
498 if (strcmp(fn, child->name)) { in mxs_pinctrl_probe_dt()
499 f = &soc->functions[idxf++]; in mxs_pinctrl_probe_dt()
500 f->groups = devm_kcalloc(&pdev->dev, in mxs_pinctrl_probe_dt()
501 f->ngroups, in mxs_pinctrl_probe_dt()
502 sizeof(*f->groups), in mxs_pinctrl_probe_dt()
504 if (!f->groups) { in mxs_pinctrl_probe_dt()
506 return -ENOMEM; in mxs_pinctrl_probe_dt()
508 fn = child->name; in mxs_pinctrl_probe_dt()
512 &f->groups[i++]); in mxs_pinctrl_probe_dt()
523 struct mxs_pinctrl_soc_data *soc) in mxs_pinctrl_probe() argument
525 struct device_node *np = pdev->dev.of_node; in mxs_pinctrl_probe()
529 d = devm_kzalloc(&pdev->dev, sizeof(*d), GFP_KERNEL); in mxs_pinctrl_probe()
531 return -ENOMEM; in mxs_pinctrl_probe()
533 d->dev = &pdev->dev; in mxs_pinctrl_probe()
534 d->soc = soc; in mxs_pinctrl_probe()
536 d->base = of_iomap(np, 0); in mxs_pinctrl_probe()
537 if (!d->base) in mxs_pinctrl_probe()
538 return -EADDRNOTAVAIL; in mxs_pinctrl_probe()
540 mxs_pinctrl_desc.pins = d->soc->pins; in mxs_pinctrl_probe()
541 mxs_pinctrl_desc.npins = d->soc->npins; in mxs_pinctrl_probe()
542 mxs_pinctrl_desc.name = dev_name(&pdev->dev); in mxs_pinctrl_probe()
548 dev_err(&pdev->dev, "dt probe failed: %d\n", ret); in mxs_pinctrl_probe()
552 d->pctl = pinctrl_register(&mxs_pinctrl_desc, &pdev->dev, d); in mxs_pinctrl_probe()
553 if (IS_ERR(d->pctl)) { in mxs_pinctrl_probe()
554 dev_err(&pdev->dev, "Couldn't register MXS pinctrl driver\n"); in mxs_pinctrl_probe()
555 ret = PTR_ERR(d->pctl); in mxs_pinctrl_probe()
562 iounmap(d->base); in mxs_pinctrl_probe()