Lines Matching refs:ipctl
59 struct imx_pinctrl *ipctl = pinctrl_dev_get_drvdata(pctldev); in imx_dt_node_to_map() local
60 const struct imx_pinctrl_soc_info *info = ipctl->info; in imx_dt_node_to_map()
74 dev_err(ipctl->dev, "unable to find group for node %pOFn\n", np); in imx_dt_node_to_map()
162 static int imx_pmx_set_one_pin_mmio(struct imx_pinctrl *ipctl, in imx_pmx_set_one_pin_mmio() argument
165 const struct imx_pinctrl_soc_info *info = ipctl->info; in imx_pmx_set_one_pin_mmio()
171 pin_reg = &ipctl->pin_regs[pin_id]; in imx_pmx_set_one_pin_mmio()
174 dev_dbg(ipctl->dev, "Pin(%s) does not support mux function\n", in imx_pmx_set_one_pin_mmio()
182 reg = readl(ipctl->base + pin_reg->mux_reg); in imx_pmx_set_one_pin_mmio()
185 writel(reg, ipctl->base + pin_reg->mux_reg); in imx_pmx_set_one_pin_mmio()
186 dev_dbg(ipctl->dev, "write: offset 0x%x val 0x%x\n", in imx_pmx_set_one_pin_mmio()
189 writel(pin_mmio->mux_mode, ipctl->base + pin_reg->mux_reg); in imx_pmx_set_one_pin_mmio()
190 dev_dbg(ipctl->dev, "write: offset 0x%x val 0x%x\n", in imx_pmx_set_one_pin_mmio()
217 val = readl(ipctl->base + pin_mmio->input_reg); in imx_pmx_set_one_pin_mmio()
220 writel(val, ipctl->base + pin_mmio->input_reg); in imx_pmx_set_one_pin_mmio()
226 if (ipctl->input_sel_base) in imx_pmx_set_one_pin_mmio()
227 writel(pin_mmio->input_val, ipctl->input_sel_base + in imx_pmx_set_one_pin_mmio()
230 writel(pin_mmio->input_val, ipctl->base + in imx_pmx_set_one_pin_mmio()
232 dev_dbg(ipctl->dev, in imx_pmx_set_one_pin_mmio()
243 struct imx_pinctrl *ipctl = pinctrl_dev_get_drvdata(pctldev); in imx_pmx_set() local
244 const struct imx_pinctrl_soc_info *info = ipctl->info; in imx_pmx_set()
265 dev_dbg(ipctl->dev, "enable function %s group %s\n", in imx_pmx_set()
276 err = imx_pmx_set_one_pin_mmio(ipctl, pin); in imx_pmx_set()
293 static u32 imx_pinconf_decode_generic_config(struct imx_pinctrl *ipctl, in imx_pinconf_decode_generic_config() argument
297 const struct imx_pinctrl_soc_info *info = ipctl->info; in imx_pinconf_decode_generic_config()
329 struct imx_pinctrl *ipctl) in imx_pinconf_parse_generic_config() argument
331 const struct imx_pinctrl_soc_info *info = ipctl->info; in imx_pinconf_parse_generic_config()
332 struct pinctrl_dev *pctl = ipctl->pctl; in imx_pinconf_parse_generic_config()
345 return imx_pinconf_decode_generic_config(ipctl, configs, num_configs); in imx_pinconf_parse_generic_config()
351 struct imx_pinctrl *ipctl = pinctrl_dev_get_drvdata(pctldev); in imx_pinconf_get_mmio() local
352 const struct imx_pinctrl_soc_info *info = ipctl->info; in imx_pinconf_get_mmio()
353 const struct imx_pin_reg *pin_reg = &ipctl->pin_regs[pin_id]; in imx_pinconf_get_mmio()
356 dev_err(ipctl->dev, "Pin(%s) does not support config function\n", in imx_pinconf_get_mmio()
361 *config = readl(ipctl->base + pin_reg->conf_reg); in imx_pinconf_get_mmio()
372 struct imx_pinctrl *ipctl = pinctrl_dev_get_drvdata(pctldev); in imx_pinconf_get() local
373 const struct imx_pinctrl_soc_info *info = ipctl->info; in imx_pinconf_get()
385 struct imx_pinctrl *ipctl = pinctrl_dev_get_drvdata(pctldev); in imx_pinconf_set_mmio() local
386 const struct imx_pinctrl_soc_info *info = ipctl->info; in imx_pinconf_set_mmio()
387 const struct imx_pin_reg *pin_reg = &ipctl->pin_regs[pin_id]; in imx_pinconf_set_mmio()
391 dev_err(ipctl->dev, "Pin(%s) does not support config function\n", in imx_pinconf_set_mmio()
396 dev_dbg(ipctl->dev, "pinconf set pin %s\n", in imx_pinconf_set_mmio()
402 reg = readl(ipctl->base + pin_reg->conf_reg); in imx_pinconf_set_mmio()
405 writel(reg, ipctl->base + pin_reg->conf_reg); in imx_pinconf_set_mmio()
406 dev_dbg(ipctl->dev, "write: offset 0x%x val 0x%x\n", in imx_pinconf_set_mmio()
409 writel(configs[i], ipctl->base + pin_reg->conf_reg); in imx_pinconf_set_mmio()
410 dev_dbg(ipctl->dev, "write: offset 0x%x val 0x%lx\n", in imx_pinconf_set_mmio()
422 struct imx_pinctrl *ipctl = pinctrl_dev_get_drvdata(pctldev); in imx_pinconf_set() local
423 const struct imx_pinctrl_soc_info *info = ipctl->info; in imx_pinconf_set()
436 struct imx_pinctrl *ipctl = pinctrl_dev_get_drvdata(pctldev); in imx_pinconf_dbg_show() local
437 const struct imx_pinctrl_soc_info *info = ipctl->info; in imx_pinconf_dbg_show()
445 dev_err(ipctl->dev, "failed to get %s pinconf\n", in imx_pinconf_dbg_show()
451 pin_reg = &ipctl->pin_regs[pin_id]; in imx_pinconf_dbg_show()
457 config = readl(ipctl->base + pin_reg->conf_reg); in imx_pinconf_dbg_show()
514 static void imx_pinctrl_parse_pin_mmio(struct imx_pinctrl *ipctl, in imx_pinctrl_parse_pin_mmio() argument
519 const struct imx_pinctrl_soc_info *info = ipctl->info; in imx_pinctrl_parse_pin_mmio()
540 pin_reg = &ipctl->pin_regs[*pin_id]; in imx_pinctrl_parse_pin_mmio()
550 pin_mmio->config = imx_pinconf_parse_generic_config(np, ipctl); in imx_pinctrl_parse_pin_mmio()
563 dev_dbg(ipctl->dev, "%s: 0x%x 0x%08lx", info->pins[*pin_id].name, in imx_pinctrl_parse_pin_mmio()
569 struct imx_pinctrl *ipctl, in imx_pinctrl_parse_groups() argument
572 const struct imx_pinctrl_soc_info *info = ipctl->info; in imx_pinctrl_parse_groups()
578 dev_dbg(ipctl->dev, "group(%d): %pOFn\n", index, np); in imx_pinctrl_parse_groups()
607 dev_err(ipctl->dev, in imx_pinctrl_parse_groups()
615 dev_err(ipctl->dev, "Invalid fsl,pins or pins property in node %pOF\n", np); in imx_pinctrl_parse_groups()
620 grp->data = devm_kcalloc(ipctl->dev, in imx_pinctrl_parse_groups()
623 grp->pins = devm_kcalloc(ipctl->dev, in imx_pinctrl_parse_groups()
632 imx_pinctrl_parse_pin_scu(ipctl, &grp->pins[i], in imx_pinctrl_parse_groups()
635 imx_pinctrl_parse_pin_mmio(ipctl, &grp->pins[i], in imx_pinctrl_parse_groups()
643 struct imx_pinctrl *ipctl, in imx_pinctrl_parse_functions() argument
646 struct pinctrl_dev *pctl = ipctl->pctl; in imx_pinctrl_parse_functions()
662 dev_err(ipctl->dev, "no groups defined in %pOF\n", np); in imx_pinctrl_parse_functions()
665 func->group_names = devm_kcalloc(ipctl->dev, func->num_group_names, in imx_pinctrl_parse_functions()
673 grp = devm_kzalloc(ipctl->dev, sizeof(struct group_desc), in imx_pinctrl_parse_functions()
680 mutex_lock(&ipctl->mutex); in imx_pinctrl_parse_functions()
682 ipctl->group_index++, grp); in imx_pinctrl_parse_functions()
683 mutex_unlock(&ipctl->mutex); in imx_pinctrl_parse_functions()
685 imx_pinctrl_parse_groups(child, grp, ipctl, i++); in imx_pinctrl_parse_functions()
720 struct imx_pinctrl *ipctl) in imx_pinctrl_probe_dt() argument
724 struct pinctrl_dev *pctl = ipctl->pctl; in imx_pinctrl_probe_dt()
751 mutex_lock(&ipctl->mutex); in imx_pinctrl_probe_dt()
753 mutex_unlock(&ipctl->mutex); in imx_pinctrl_probe_dt()
757 ipctl->group_index = 0; in imx_pinctrl_probe_dt()
767 imx_pinctrl_parse_functions(np, ipctl, 0); in imx_pinctrl_probe_dt()
771 imx_pinctrl_parse_functions(child, ipctl, i++); in imx_pinctrl_probe_dt()
781 static void imx_free_resources(struct imx_pinctrl *ipctl) in imx_free_resources() argument
783 if (ipctl->pctl) in imx_free_resources()
784 pinctrl_unregister(ipctl->pctl); in imx_free_resources()
794 struct imx_pinctrl *ipctl; in imx_pinctrl_probe() local
810 ipctl = devm_kzalloc(&pdev->dev, sizeof(*ipctl), GFP_KERNEL); in imx_pinctrl_probe()
811 if (!ipctl) in imx_pinctrl_probe()
815 ipctl->pin_regs = devm_kmalloc_array(&pdev->dev, info->npins, in imx_pinctrl_probe()
816 sizeof(*ipctl->pin_regs), in imx_pinctrl_probe()
818 if (!ipctl->pin_regs) in imx_pinctrl_probe()
822 ipctl->pin_regs[i].mux_reg = -1; in imx_pinctrl_probe()
823 ipctl->pin_regs[i].conf_reg = -1; in imx_pinctrl_probe()
826 ipctl->base = devm_platform_ioremap_resource(pdev, 0); in imx_pinctrl_probe()
827 if (IS_ERR(ipctl->base)) in imx_pinctrl_probe()
828 return PTR_ERR(ipctl->base); in imx_pinctrl_probe()
837 ipctl->input_sel_base = of_iomap(np, 0); in imx_pinctrl_probe()
839 if (!ipctl->input_sel_base) { in imx_pinctrl_probe()
867 mutex_init(&ipctl->mutex); in imx_pinctrl_probe()
869 ipctl->info = info; in imx_pinctrl_probe()
870 ipctl->dev = &pdev->dev; in imx_pinctrl_probe()
871 platform_set_drvdata(pdev, ipctl); in imx_pinctrl_probe()
873 imx_pinctrl_desc, ipctl, in imx_pinctrl_probe()
874 &ipctl->pctl); in imx_pinctrl_probe()
880 ret = imx_pinctrl_probe_dt(pdev, ipctl); in imx_pinctrl_probe()
888 return pinctrl_enable(ipctl->pctl); in imx_pinctrl_probe()
891 imx_free_resources(ipctl); in imx_pinctrl_probe()
898 struct imx_pinctrl *ipctl = dev_get_drvdata(dev); in imx_pinctrl_suspend() local
900 return pinctrl_force_sleep(ipctl->pctl); in imx_pinctrl_suspend()
905 struct imx_pinctrl *ipctl = dev_get_drvdata(dev); in imx_pinctrl_resume() local
907 return pinctrl_force_default(ipctl->pctl); in imx_pinctrl_resume()