Lines Matching refs:pmx

28 static inline u32 pmx_readl(struct tegra_pmx *pmx, u32 bank, u32 reg)  in pmx_readl()  argument
30 return readl(pmx->regs[bank] + reg); in pmx_readl()
33 static inline void pmx_writel(struct tegra_pmx *pmx, u32 val, u32 bank, u32 reg) in pmx_writel() argument
35 writel_relaxed(val, pmx->regs[bank] + reg); in pmx_writel()
37 pmx_readl(pmx, bank, reg); in pmx_writel()
42 struct tegra_pmx *pmx = pinctrl_dev_get_drvdata(pctldev); in tegra_pinctrl_get_groups_count() local
44 return pmx->soc->ngroups; in tegra_pinctrl_get_groups_count()
50 struct tegra_pmx *pmx = pinctrl_dev_get_drvdata(pctldev); in tegra_pinctrl_get_group_name() local
52 return pmx->soc->groups[group].name; in tegra_pinctrl_get_group_name()
60 struct tegra_pmx *pmx = pinctrl_dev_get_drvdata(pctldev); in tegra_pinctrl_get_group_pins() local
62 *pins = pmx->soc->groups[group].pins; in tegra_pinctrl_get_group_pins()
63 *num_pins = pmx->soc->groups[group].npins; in tegra_pinctrl_get_group_pins()
223 struct tegra_pmx *pmx = pinctrl_dev_get_drvdata(pctldev); in tegra_pinctrl_get_funcs_count() local
225 return pmx->soc->nfunctions; in tegra_pinctrl_get_funcs_count()
231 struct tegra_pmx *pmx = pinctrl_dev_get_drvdata(pctldev); in tegra_pinctrl_get_func_name() local
233 return pmx->soc->functions[function].name; in tegra_pinctrl_get_func_name()
241 struct tegra_pmx *pmx = pinctrl_dev_get_drvdata(pctldev); in tegra_pinctrl_get_func_groups() local
243 *groups = pmx->soc->functions[function].groups; in tegra_pinctrl_get_func_groups()
244 *num_groups = pmx->soc->functions[function].ngroups; in tegra_pinctrl_get_func_groups()
253 struct tegra_pmx *pmx = pinctrl_dev_get_drvdata(pctldev); in tegra_pinctrl_set_mux() local
258 g = &pmx->soc->groups[group]; in tegra_pinctrl_set_mux()
270 val = pmx_readl(pmx, g->mux_bank, g->mux_reg); in tegra_pinctrl_set_mux()
273 pmx_writel(pmx, val, g->mux_bank, g->mux_reg); in tegra_pinctrl_set_mux()
282 struct tegra_pmx *pmx = pinctrl_dev_get_drvdata(pctldev); in tegra_pinctrl_gpio_request_enable() local
286 if (!pmx->soc->sfsel_in_mux) in tegra_pinctrl_gpio_request_enable()
289 group = &pmx->soc->groups[offset]; in tegra_pinctrl_gpio_request_enable()
294 value = pmx_readl(pmx, group->mux_bank, group->mux_reg); in tegra_pinctrl_gpio_request_enable()
296 pmx_writel(pmx, value, group->mux_bank, group->mux_reg); in tegra_pinctrl_gpio_request_enable()
305 struct tegra_pmx *pmx = pinctrl_dev_get_drvdata(pctldev); in tegra_pinctrl_gpio_disable_free() local
309 if (!pmx->soc->sfsel_in_mux) in tegra_pinctrl_gpio_disable_free()
312 group = &pmx->soc->groups[offset]; in tegra_pinctrl_gpio_disable_free()
317 value = pmx_readl(pmx, group->mux_bank, group->mux_reg); in tegra_pinctrl_gpio_disable_free()
319 pmx_writel(pmx, value, group->mux_bank, group->mux_reg); in tegra_pinctrl_gpio_disable_free()
331 static int tegra_pinconf_reg(struct tegra_pmx *pmx, in tegra_pinconf_reg() argument
381 if (pmx->soc->hsm_in_mux) { in tegra_pinconf_reg()
392 if (pmx->soc->schmitt_in_mux) { in tegra_pinconf_reg()
433 if (pmx->soc->drvtype_in_mux) { in tegra_pinconf_reg()
444 dev_err(pmx->dev, "Invalid config param %04x\n", param); in tegra_pinconf_reg()
460 dev_err(pmx->dev, in tegra_pinconf_reg()
488 struct tegra_pmx *pmx = pinctrl_dev_get_drvdata(pctldev); in tegra_pinconf_group_get() local
497 g = &pmx->soc->groups[group]; in tegra_pinconf_group_get()
499 ret = tegra_pinconf_reg(pmx, g, param, true, &bank, &reg, &bit, in tegra_pinconf_group_get()
504 val = pmx_readl(pmx, bank, reg); in tegra_pinconf_group_get()
517 struct tegra_pmx *pmx = pinctrl_dev_get_drvdata(pctldev); in tegra_pinconf_group_set() local
526 g = &pmx->soc->groups[group]; in tegra_pinconf_group_set()
532 ret = tegra_pinconf_reg(pmx, g, param, true, &bank, &reg, &bit, in tegra_pinconf_group_set()
537 val = pmx_readl(pmx, bank, reg); in tegra_pinconf_group_set()
563 pmx_writel(pmx, val, bank, reg); in tegra_pinconf_group_set()
587 struct tegra_pmx *pmx = pinctrl_dev_get_drvdata(pctldev); in tegra_pinconf_group_dbg_show() local
594 g = &pmx->soc->groups[group]; in tegra_pinconf_group_dbg_show()
597 ret = tegra_pinconf_reg(pmx, g, cfg_params[i].param, false, in tegra_pinconf_group_dbg_show()
602 val = pmx_readl(pmx, bank, reg); in tegra_pinconf_group_dbg_show()
656 static void tegra_pinctrl_clear_parked_bits(struct tegra_pmx *pmx) in tegra_pinctrl_clear_parked_bits() argument
662 for (i = 0; i < pmx->soc->ngroups; ++i) { in tegra_pinctrl_clear_parked_bits()
663 g = &pmx->soc->groups[i]; in tegra_pinctrl_clear_parked_bits()
675 val = pmx_readl(pmx, bank, reg); in tegra_pinctrl_clear_parked_bits()
677 pmx_writel(pmx, val, bank, reg); in tegra_pinctrl_clear_parked_bits()
695 struct tegra_pmx *pmx = dev_get_drvdata(dev); in tegra_pinctrl_suspend() local
696 u32 *backup_regs = pmx->backup_regs; in tegra_pinctrl_suspend()
701 for (i = 0; i < pmx->nbanks; i++) { in tegra_pinctrl_suspend()
703 regs = pmx->regs[i]; in tegra_pinctrl_suspend()
708 return pinctrl_force_sleep(pmx->pctl); in tegra_pinctrl_suspend()
713 struct tegra_pmx *pmx = dev_get_drvdata(dev); in tegra_pinctrl_resume() local
714 u32 *backup_regs = pmx->backup_regs; in tegra_pinctrl_resume()
719 for (i = 0; i < pmx->nbanks; i++) { in tegra_pinctrl_resume()
721 regs = pmx->regs[i]; in tegra_pinctrl_resume()
727 readl_relaxed(pmx->regs[0]); in tegra_pinctrl_resume()
738 static bool tegra_pinctrl_gpio_node_has_range(struct tegra_pmx *pmx) in tegra_pinctrl_gpio_node_has_range() argument
743 np = of_find_compatible_node(NULL, NULL, pmx->soc->gpio_compatible); in tegra_pinctrl_gpio_node_has_range()
757 struct tegra_pmx *pmx; in tegra_pinctrl_probe() local
764 pmx = devm_kzalloc(&pdev->dev, sizeof(*pmx), GFP_KERNEL); in tegra_pinctrl_probe()
765 if (!pmx) in tegra_pinctrl_probe()
768 pmx->dev = &pdev->dev; in tegra_pinctrl_probe()
769 pmx->soc = soc_data; in tegra_pinctrl_probe()
775 pmx->group_pins = devm_kcalloc(&pdev->dev, in tegra_pinctrl_probe()
776 soc_data->ngroups * 4, sizeof(*pmx->group_pins), in tegra_pinctrl_probe()
778 if (!pmx->group_pins) in tegra_pinctrl_probe()
781 group_pins = pmx->group_pins; in tegra_pinctrl_probe()
799 BUG_ON(group_pins - pmx->group_pins >= in tegra_pinctrl_probe()
806 tegra_pinctrl_gpio_range.npins = pmx->soc->ngpios; in tegra_pinctrl_probe()
808 tegra_pinctrl_desc.pins = pmx->soc->pins; in tegra_pinctrl_probe()
809 tegra_pinctrl_desc.npins = pmx->soc->npins; in tegra_pinctrl_probe()
817 pmx->nbanks = i; in tegra_pinctrl_probe()
819 pmx->regs = devm_kcalloc(&pdev->dev, pmx->nbanks, sizeof(*pmx->regs), in tegra_pinctrl_probe()
821 if (!pmx->regs) in tegra_pinctrl_probe()
824 pmx->backup_regs = devm_kzalloc(&pdev->dev, backup_regs_size, in tegra_pinctrl_probe()
826 if (!pmx->backup_regs) in tegra_pinctrl_probe()
829 for (i = 0; i < pmx->nbanks; i++) { in tegra_pinctrl_probe()
830 pmx->regs[i] = devm_platform_ioremap_resource(pdev, i); in tegra_pinctrl_probe()
831 if (IS_ERR(pmx->regs[i])) in tegra_pinctrl_probe()
832 return PTR_ERR(pmx->regs[i]); in tegra_pinctrl_probe()
835 pmx->pctl = devm_pinctrl_register(&pdev->dev, &tegra_pinctrl_desc, pmx); in tegra_pinctrl_probe()
836 if (IS_ERR(pmx->pctl)) { in tegra_pinctrl_probe()
838 return PTR_ERR(pmx->pctl); in tegra_pinctrl_probe()
841 tegra_pinctrl_clear_parked_bits(pmx); in tegra_pinctrl_probe()
843 if (pmx->soc->ngpios > 0 && !tegra_pinctrl_gpio_node_has_range(pmx)) in tegra_pinctrl_probe()
844 pinctrl_add_gpio_range(pmx->pctl, &tegra_pinctrl_gpio_range); in tegra_pinctrl_probe()
846 platform_set_drvdata(pdev, pmx); in tegra_pinctrl_probe()