Lines Matching refs:ipctl
179 static void rzn1_hw_set_lock(struct rzn1_pinctrl *ipctl, u8 lock, u8 value) in rzn1_hw_set_lock() argument
187 u32 val = ipctl->lev1_protect_phys | !(value & LOCK_LEVEL1); in rzn1_hw_set_lock()
189 writel(val, &ipctl->lev1->status_protect); in rzn1_hw_set_lock()
193 u32 val = ipctl->lev2_protect_phys | !(value & LOCK_LEVEL2); in rzn1_hw_set_lock()
195 writel(val, &ipctl->lev2->status_protect); in rzn1_hw_set_lock()
199 static void rzn1_pinctrl_mdio_select(struct rzn1_pinctrl *ipctl, int mdio, in rzn1_pinctrl_mdio_select() argument
202 if (ipctl->mdio_func[mdio] >= 0 && ipctl->mdio_func[mdio] != func) in rzn1_pinctrl_mdio_select()
203 dev_warn(ipctl->dev, "conflicting setting for mdio%d!\n", mdio); in rzn1_pinctrl_mdio_select()
204 ipctl->mdio_func[mdio] = func; in rzn1_pinctrl_mdio_select()
206 dev_dbg(ipctl->dev, "setting mdio%d to %u\n", mdio, func); in rzn1_pinctrl_mdio_select()
208 writel(func, &ipctl->lev2->l2_mdio[mdio]); in rzn1_pinctrl_mdio_select()
219 static int rzn1_set_hw_pin_func(struct rzn1_pinctrl *ipctl, unsigned int pin, in rzn1_set_hw_pin_func() argument
252 rzn1_pinctrl_mdio_select(ipctl, mdio_channel, mdio_func); in rzn1_set_hw_pin_func()
256 if (pin >= ARRAY_SIZE(ipctl->lev1->conf) || in rzn1_set_hw_pin_func()
260 l1 = readl(&ipctl->lev1->conf[pin]); in rzn1_set_hw_pin_func()
262 l2 = readl(&ipctl->lev2->conf[pin]); in rzn1_set_hw_pin_func()
265 dev_dbg(ipctl->dev, "setting func for pin %u to %u\n", pin, pin_config); in rzn1_set_hw_pin_func()
279 writel(l1, &ipctl->lev1->conf[pin]); in rzn1_set_hw_pin_func()
280 writel(l2, &ipctl->lev2->conf[pin]); in rzn1_set_hw_pin_func()
287 const struct rzn1_pinctrl *ipctl, const char *name) in rzn1_pinctrl_find_group_by_name() argument
291 for (i = 0; i < ipctl->ngroups; i++) { in rzn1_pinctrl_find_group_by_name()
292 if (!strcmp(ipctl->groups[i].name, name)) in rzn1_pinctrl_find_group_by_name()
293 return &ipctl->groups[i]; in rzn1_pinctrl_find_group_by_name()
301 struct rzn1_pinctrl *ipctl = pinctrl_dev_get_drvdata(pctldev); in rzn1_get_groups_count() local
303 return ipctl->ngroups; in rzn1_get_groups_count()
309 struct rzn1_pinctrl *ipctl = pinctrl_dev_get_drvdata(pctldev); in rzn1_get_group_name() local
311 return ipctl->groups[selector].name; in rzn1_get_group_name()
318 struct rzn1_pinctrl *ipctl = pinctrl_dev_get_drvdata(pctldev); in rzn1_get_group_pins() local
320 if (selector >= ipctl->ngroups) in rzn1_get_group_pins()
323 *pins = ipctl->groups[selector].pins; in rzn1_get_group_pins()
324 *npins = ipctl->groups[selector].npins; in rzn1_get_group_pins()
342 struct rzn1_pinctrl *ipctl = pinctrl_dev_get_drvdata(pctldev); in rzn1_dt_node_to_map_one() local
350 dev_dbg(ipctl->dev, "processing node %pOF\n", np); in rzn1_dt_node_to_map_one()
352 grp = rzn1_pinctrl_find_group_by_name(ipctl, np->name); in rzn1_dt_node_to_map_one()
354 dev_err(ipctl->dev, "unable to find group for node %pOF\n", np); in rzn1_dt_node_to_map_one()
363 dev_err(ipctl->dev, "%pOF: could not parse property\n", np); in rzn1_dt_node_to_map_one()
435 struct rzn1_pinctrl *ipctl = pinctrl_dev_get_drvdata(pctldev); in rzn1_pmx_get_funcs_count() local
437 return ipctl->nfunctions; in rzn1_pmx_get_funcs_count()
443 struct rzn1_pinctrl *ipctl = pinctrl_dev_get_drvdata(pctldev); in rzn1_pmx_get_func_name() local
445 return ipctl->functions[selector].name; in rzn1_pmx_get_func_name()
453 struct rzn1_pinctrl *ipctl = pinctrl_dev_get_drvdata(pctldev); in rzn1_pmx_get_groups() local
455 *groups = ipctl->functions[selector].groups; in rzn1_pmx_get_groups()
456 *num_groups = ipctl->functions[selector].num_groups; in rzn1_pmx_get_groups()
464 struct rzn1_pinctrl *ipctl = pinctrl_dev_get_drvdata(pctldev); in rzn1_set_mux() local
465 struct rzn1_pin_group *grp = &ipctl->groups[group]; in rzn1_set_mux()
468 dev_dbg(ipctl->dev, "set mux %s(%d) group %s(%d)\n", in rzn1_set_mux()
469 ipctl->functions[selector].name, selector, grp->name, group); in rzn1_set_mux()
471 rzn1_hw_set_lock(ipctl, LOCK_ALL, LOCK_ALL); in rzn1_set_mux()
473 rzn1_set_hw_pin_func(ipctl, grp->pins[i], grp->pin_ids[i], 0); in rzn1_set_mux()
474 rzn1_hw_set_lock(ipctl, LOCK_ALL, 0); in rzn1_set_mux()
489 struct rzn1_pinctrl *ipctl = pinctrl_dev_get_drvdata(pctldev); in rzn1_pinconf_get() local
495 if (pin >= ARRAY_SIZE(ipctl->lev1->conf)) in rzn1_pinconf_get()
498 l1 = readl(&ipctl->lev1->conf[pin]); in rzn1_pinconf_get()
521 l2 = readl(&ipctl->lev2->conf[pin]); in rzn1_pinconf_get()
541 struct rzn1_pinctrl *ipctl = pinctrl_dev_get_drvdata(pctldev); in rzn1_pinconf_set() local
548 if (pin >= ARRAY_SIZE(ipctl->lev1->conf)) in rzn1_pinconf_set()
551 l1 = readl(&ipctl->lev1->conf[pin]); in rzn1_pinconf_set()
560 dev_dbg(ipctl->dev, "set pin %d pull up\n", pin); in rzn1_pinconf_set()
565 dev_dbg(ipctl->dev, "set pin %d pull down\n", pin); in rzn1_pinconf_set()
570 dev_dbg(ipctl->dev, "set pin %d bias off\n", pin); in rzn1_pinconf_set()
575 dev_dbg(ipctl->dev, "set pin %d drv %umA\n", pin, arg); in rzn1_pinconf_set()
590 dev_err(ipctl->dev, in rzn1_pinconf_set()
602 dev_dbg(ipctl->dev, "set pin %d High-Z\n", pin); in rzn1_pinconf_set()
612 rzn1_hw_set_lock(ipctl, LOCK_LEVEL1, LOCK_LEVEL1); in rzn1_pinconf_set()
613 writel(l1, &ipctl->lev1->conf[pin]); in rzn1_pinconf_set()
614 rzn1_hw_set_lock(ipctl, LOCK_LEVEL1, 0); in rzn1_pinconf_set()
624 struct rzn1_pinctrl *ipctl = pinctrl_dev_get_drvdata(pctldev); in rzn1_pinconf_group_get() local
625 struct rzn1_pin_group *grp = &ipctl->groups[selector]; in rzn1_pinconf_group_get()
629 dev_dbg(ipctl->dev, "group get %s selector:%u\n", grp->name, selector); in rzn1_pinconf_group_get()
650 struct rzn1_pinctrl *ipctl = pinctrl_dev_get_drvdata(pctldev); in rzn1_pinconf_group_set() local
651 struct rzn1_pin_group *grp = &ipctl->groups[selector]; in rzn1_pinconf_group_set()
655 dev_dbg(ipctl->dev, "group set %s selector:%u configs:%p/%d\n", in rzn1_pinconf_group_set()
689 struct rzn1_pinctrl *ipctl) in rzn1_pinctrl_parse_groups() argument
695 dev_dbg(ipctl->dev, "%s: %s\n", __func__, np->name); in rzn1_pinctrl_parse_groups()
707 dev_err(ipctl->dev, in rzn1_pinctrl_parse_groups()
714 dev_err(ipctl->dev, "Invalid " RZN1_PINS_PROP " in node %pOF\n", in rzn1_pinctrl_parse_groups()
721 grp->pin_ids = devm_kmalloc_array(ipctl->dev, in rzn1_pinctrl_parse_groups()
724 grp->pins = devm_kmalloc_array(ipctl->dev, in rzn1_pinctrl_parse_groups()
756 struct rzn1_pinctrl *ipctl, in rzn1_pinctrl_parse_functions() argument
764 func = &ipctl->functions[index]; in rzn1_pinctrl_parse_functions()
770 dev_err(ipctl->dev, "no groups defined in %pOF\n", np); in rzn1_pinctrl_parse_functions()
773 dev_dbg(ipctl->dev, "function %s has %d groups\n", in rzn1_pinctrl_parse_functions()
776 func->groups = devm_kmalloc_array(ipctl->dev, in rzn1_pinctrl_parse_functions()
784 grp = &ipctl->groups[ipctl->ngroups]; in rzn1_pinctrl_parse_functions()
786 ret = rzn1_pinctrl_parse_groups(np, grp, ipctl); in rzn1_pinctrl_parse_functions()
790 ipctl->ngroups++; in rzn1_pinctrl_parse_functions()
795 grp = &ipctl->groups[ipctl->ngroups]; in rzn1_pinctrl_parse_functions()
797 ret = rzn1_pinctrl_parse_groups(child, grp, ipctl); in rzn1_pinctrl_parse_functions()
801 ipctl->ngroups++; in rzn1_pinctrl_parse_functions()
804 dev_dbg(ipctl->dev, "function %s parsed %u/%u groups\n", in rzn1_pinctrl_parse_functions()
811 struct rzn1_pinctrl *ipctl) in rzn1_pinctrl_probe_dt() argument
823 ipctl->nfunctions = nfuncs; in rzn1_pinctrl_probe_dt()
824 ipctl->functions = devm_kmalloc_array(&pdev->dev, nfuncs, in rzn1_pinctrl_probe_dt()
825 sizeof(*ipctl->functions), in rzn1_pinctrl_probe_dt()
827 if (!ipctl->functions) in rzn1_pinctrl_probe_dt()
830 ipctl->ngroups = 0; in rzn1_pinctrl_probe_dt()
834 ipctl->groups = devm_kmalloc_array(&pdev->dev, in rzn1_pinctrl_probe_dt()
836 sizeof(*ipctl->groups), in rzn1_pinctrl_probe_dt()
838 if (!ipctl->groups) in rzn1_pinctrl_probe_dt()
842 ret = rzn1_pinctrl_parse_functions(child, ipctl, i++); in rzn1_pinctrl_probe_dt()
852 struct rzn1_pinctrl *ipctl; in rzn1_pinctrl_probe() local
857 ipctl = devm_kzalloc(&pdev->dev, sizeof(*ipctl), GFP_KERNEL); in rzn1_pinctrl_probe()
858 if (!ipctl) in rzn1_pinctrl_probe()
861 ipctl->mdio_func[0] = -1; in rzn1_pinctrl_probe()
862 ipctl->mdio_func[1] = -1; in rzn1_pinctrl_probe()
864 ipctl->lev1 = devm_platform_get_and_ioremap_resource(pdev, 0, &res); in rzn1_pinctrl_probe()
865 if (IS_ERR(ipctl->lev1)) in rzn1_pinctrl_probe()
866 return PTR_ERR(ipctl->lev1); in rzn1_pinctrl_probe()
867 ipctl->lev1_protect_phys = (u32)res->start + 0x400; in rzn1_pinctrl_probe()
869 ipctl->lev2 = devm_platform_get_and_ioremap_resource(pdev, 1, &res); in rzn1_pinctrl_probe()
870 if (IS_ERR(ipctl->lev2)) in rzn1_pinctrl_probe()
871 return PTR_ERR(ipctl->lev2); in rzn1_pinctrl_probe()
872 ipctl->lev2_protect_phys = (u32)res->start + 0x400; in rzn1_pinctrl_probe()
874 ipctl->clk = devm_clk_get(&pdev->dev, NULL); in rzn1_pinctrl_probe()
875 if (IS_ERR(ipctl->clk)) in rzn1_pinctrl_probe()
876 return PTR_ERR(ipctl->clk); in rzn1_pinctrl_probe()
877 ret = clk_prepare_enable(ipctl->clk); in rzn1_pinctrl_probe()
881 ipctl->dev = &pdev->dev; in rzn1_pinctrl_probe()
884 ret = rzn1_pinctrl_probe_dt(pdev, ipctl); in rzn1_pinctrl_probe()
890 platform_set_drvdata(pdev, ipctl); in rzn1_pinctrl_probe()
893 ipctl, &ipctl->pctl); in rzn1_pinctrl_probe()
899 ret = pinctrl_enable(ipctl->pctl); in rzn1_pinctrl_probe()
908 clk_disable_unprepare(ipctl->clk); in rzn1_pinctrl_probe()
915 struct rzn1_pinctrl *ipctl = platform_get_drvdata(pdev); in rzn1_pinctrl_remove() local
917 clk_disable_unprepare(ipctl->clk); in rzn1_pinctrl_remove()