Lines Matching defs:ipctl
179 static void rzn1_hw_set_lock(struct rzn1_pinctrl *ipctl, u8 lock, u8 value)
187 u32 val = ipctl->lev1_protect_phys | !(value & LOCK_LEVEL1);
189 writel(val, &ipctl->lev1->status_protect);
193 u32 val = ipctl->lev2_protect_phys | !(value & LOCK_LEVEL2);
195 writel(val, &ipctl->lev2->status_protect);
199 static void rzn1_pinctrl_mdio_select(struct rzn1_pinctrl *ipctl, int mdio,
202 if (ipctl->mdio_func[mdio] >= 0 && ipctl->mdio_func[mdio] != func)
203 dev_warn(ipctl->dev, "conflicting setting for mdio%d!\n", mdio);
204 ipctl->mdio_func[mdio] = func;
206 dev_dbg(ipctl->dev, "setting mdio%d to %u\n", mdio, func);
208 writel(func, &ipctl->lev2->l2_mdio[mdio]);
219 static int rzn1_set_hw_pin_func(struct rzn1_pinctrl *ipctl, unsigned int pin,
252 rzn1_pinctrl_mdio_select(ipctl, mdio_channel, mdio_func);
256 if (pin >= ARRAY_SIZE(ipctl->lev1->conf) ||
260 l1 = readl(&ipctl->lev1->conf[pin]);
262 l2 = readl(&ipctl->lev2->conf[pin]);
265 dev_dbg(ipctl->dev, "setting func for pin %u to %u\n", pin, pin_config);
279 writel(l1, &ipctl->lev1->conf[pin]);
280 writel(l2, &ipctl->lev2->conf[pin]);
287 const struct rzn1_pinctrl *ipctl, const char *name)
291 for (i = 0; i < ipctl->ngroups; i++) {
292 if (!strcmp(ipctl->groups[i].name, name))
293 return &ipctl->groups[i];
301 struct rzn1_pinctrl *ipctl = pinctrl_dev_get_drvdata(pctldev);
303 return ipctl->ngroups;
309 struct rzn1_pinctrl *ipctl = pinctrl_dev_get_drvdata(pctldev);
311 return ipctl->groups[selector].name;
318 struct rzn1_pinctrl *ipctl = pinctrl_dev_get_drvdata(pctldev);
320 if (selector >= ipctl->ngroups)
323 *pins = ipctl->groups[selector].pins;
324 *npins = ipctl->groups[selector].npins;
342 struct rzn1_pinctrl *ipctl = pinctrl_dev_get_drvdata(pctldev);
350 dev_dbg(ipctl->dev, "processing node %pOF\n", np);
352 grp = rzn1_pinctrl_find_group_by_name(ipctl, np->name);
354 dev_err(ipctl->dev, "unable to find group for node %pOF\n", np);
363 dev_err(ipctl->dev, "%pOF: could not parse property\n", np);
438 struct rzn1_pinctrl *ipctl = pinctrl_dev_get_drvdata(pctldev);
440 return ipctl->nfunctions;
446 struct rzn1_pinctrl *ipctl = pinctrl_dev_get_drvdata(pctldev);
448 return ipctl->functions[selector].name;
456 struct rzn1_pinctrl *ipctl = pinctrl_dev_get_drvdata(pctldev);
458 *groups = ipctl->functions[selector].groups;
459 *num_groups = ipctl->functions[selector].num_groups;
467 struct rzn1_pinctrl *ipctl = pinctrl_dev_get_drvdata(pctldev);
468 struct rzn1_pin_group *grp = &ipctl->groups[group];
471 dev_dbg(ipctl->dev, "set mux %s(%d) group %s(%d)\n",
472 ipctl->functions[selector].name, selector, grp->name, group);
474 rzn1_hw_set_lock(ipctl, LOCK_ALL, LOCK_ALL);
476 rzn1_set_hw_pin_func(ipctl, grp->pins[i], grp->pin_ids[i], 0);
477 rzn1_hw_set_lock(ipctl, LOCK_ALL, 0);
492 struct rzn1_pinctrl *ipctl = pinctrl_dev_get_drvdata(pctldev);
498 if (pin >= ARRAY_SIZE(ipctl->lev1->conf))
501 l1 = readl(&ipctl->lev1->conf[pin]);
524 l2 = readl(&ipctl->lev2->conf[pin]);
544 struct rzn1_pinctrl *ipctl = pinctrl_dev_get_drvdata(pctldev);
551 if (pin >= ARRAY_SIZE(ipctl->lev1->conf))
554 l1 = readl(&ipctl->lev1->conf[pin]);
563 dev_dbg(ipctl->dev, "set pin %d pull up\n", pin);
568 dev_dbg(ipctl->dev, "set pin %d pull down\n", pin);
573 dev_dbg(ipctl->dev, "set pin %d bias off\n", pin);
578 dev_dbg(ipctl->dev, "set pin %d drv %umA\n", pin, arg);
593 dev_err(ipctl->dev,
605 dev_dbg(ipctl->dev, "set pin %d High-Z\n", pin);
615 rzn1_hw_set_lock(ipctl, LOCK_LEVEL1, LOCK_LEVEL1);
616 writel(l1, &ipctl->lev1->conf[pin]);
617 rzn1_hw_set_lock(ipctl, LOCK_LEVEL1, 0);
627 struct rzn1_pinctrl *ipctl = pinctrl_dev_get_drvdata(pctldev);
628 struct rzn1_pin_group *grp = &ipctl->groups[selector];
632 dev_dbg(ipctl->dev, "group get %s selector:%u\n", grp->name, selector);
653 struct rzn1_pinctrl *ipctl = pinctrl_dev_get_drvdata(pctldev);
654 struct rzn1_pin_group *grp = &ipctl->groups[selector];
658 dev_dbg(ipctl->dev, "group set %s selector:%u configs:%p/%d\n",
690 struct rzn1_pinctrl *ipctl)
696 dev_dbg(ipctl->dev, "%s: %s\n", __func__, np->name);
708 dev_err(ipctl->dev,
715 dev_err(ipctl->dev, "Invalid " RZN1_PINS_PROP " in node %pOF\n",
722 grp->pin_ids = devm_kmalloc_array(ipctl->dev,
725 grp->pins = devm_kmalloc_array(ipctl->dev,
758 struct rzn1_pinctrl *ipctl,
767 func = &ipctl->functions[index];
773 dev_err(ipctl->dev, "no groups defined in %pOF\n", np);
776 dev_dbg(ipctl->dev, "function %s has %d groups\n",
779 func->groups = devm_kmalloc_array(ipctl->dev,
787 grp = &ipctl->groups[ipctl->ngroups];
789 ret = rzn1_pinctrl_parse_groups(np, grp, ipctl);
793 ipctl->ngroups++;
798 grp = &ipctl->groups[ipctl->ngroups];
800 ret = rzn1_pinctrl_parse_groups(child, grp, ipctl);
806 ipctl->ngroups++;
809 dev_dbg(ipctl->dev, "function %s parsed %u/%u groups\n",
816 struct rzn1_pinctrl *ipctl)
829 ipctl->nfunctions = nfuncs;
830 ipctl->functions = devm_kmalloc_array(&pdev->dev, nfuncs,
831 sizeof(*ipctl->functions),
833 if (!ipctl->functions)
836 ipctl->ngroups = 0;
840 ipctl->groups = devm_kmalloc_array(&pdev->dev,
842 sizeof(*ipctl->groups),
844 if (!ipctl->groups)
848 ret = rzn1_pinctrl_parse_functions(child, ipctl, i++);
860 struct rzn1_pinctrl *ipctl;
865 ipctl = devm_kzalloc(&pdev->dev, sizeof(*ipctl), GFP_KERNEL);
866 if (!ipctl)
869 ipctl->mdio_func[0] = -1;
870 ipctl->mdio_func[1] = -1;
872 ipctl->lev1 = devm_platform_get_and_ioremap_resource(pdev, 0, &res);
873 if (IS_ERR(ipctl->lev1))
874 return PTR_ERR(ipctl->lev1);
875 ipctl->lev1_protect_phys = (u32)res->start + 0x400;
877 ipctl->lev2 = devm_platform_get_and_ioremap_resource(pdev, 1, &res);
878 if (IS_ERR(ipctl->lev2))
879 return PTR_ERR(ipctl->lev2);
880 ipctl->lev2_protect_phys = (u32)res->start + 0x400;
882 ipctl->clk = devm_clk_get(&pdev->dev, NULL);
883 if (IS_ERR(ipctl->clk))
884 return PTR_ERR(ipctl->clk);
885 ret = clk_prepare_enable(ipctl->clk);
889 ipctl->dev = &pdev->dev;
894 ret = rzn1_pinctrl_probe_dt(pdev, ipctl);
900 platform_set_drvdata(pdev, ipctl);
903 ipctl, &ipctl->pctl);
909 ret = pinctrl_enable(ipctl->pctl);
918 clk_disable_unprepare(ipctl->clk);
925 struct rzn1_pinctrl *ipctl = platform_get_drvdata(pdev);
927 clk_disable_unprepare(ipctl->clk);