Lines Matching refs:thp
64 static void __iomem *th1520_padcfg(struct th1520_pinctrl *thp, in th1520_padcfg() argument
67 return thp->base + 4 * (pin / 2); in th1520_padcfg()
75 static void __iomem *th1520_muxcfg(struct th1520_pinctrl *thp, in th1520_muxcfg() argument
78 return thp->base + 0x400 + 4 * (pin / 8); in th1520_muxcfg()
359 struct th1520_pinctrl *thp = pinctrl_dev_get_drvdata(pctldev); in th1520_pinctrl_get_groups_count() local
361 return thp->desc.npins; in th1520_pinctrl_get_groups_count()
367 struct th1520_pinctrl *thp = pinctrl_dev_get_drvdata(pctldev); in th1520_pinctrl_get_group_name() local
369 return thp->desc.pins[gsel].name; in th1520_pinctrl_get_group_name()
377 struct th1520_pinctrl *thp = pinctrl_dev_get_drvdata(pctldev); in th1520_pinctrl_get_group_pins() local
379 *pins = &thp->desc.pins[gsel].number; in th1520_pinctrl_get_group_pins()
388 struct th1520_pinctrl *thp = pinctrl_dev_get_drvdata(pctldev); in th1520_pin_dbg_show() local
389 void __iomem *padcfg = th1520_padcfg(thp, pin); in th1520_pin_dbg_show()
390 void __iomem *muxcfg = th1520_muxcfg(thp, pin); in th1520_pin_dbg_show()
394 scoped_guard(raw_spinlock_irqsave, &thp->lock) { in th1520_pin_dbg_show()
429 struct th1520_pinctrl *thp = pinctrl_dev_get_drvdata(pctldev); in th1520_pinctrl_dt_node_to_map() local
441 dev_err(thp->pctl->dev, "no pins selected for %pOFn.%pOFn\n", in th1520_pinctrl_dt_node_to_map()
455 guard(mutex)(&thp->mutex); in th1520_pinctrl_dt_node_to_map()
467 dev_err(thp->pctl->dev, "%pOFn.%pOFn: error parsing pin config\n", in th1520_pinctrl_dt_node_to_map()
475 dev_err(thp->pctl->dev, "%pOFn.%pOFn: unknown function '%s'\n", in th1520_pinctrl_dt_node_to_map()
481 funcname = devm_kasprintf(thp->pctl->dev, GFP_KERNEL, "%pOFn.%pOFn", in th1520_pinctrl_dt_node_to_map()
489 pgnames = devm_kcalloc(thp->pctl->dev, npins, sizeof(*pgnames), GFP_KERNEL); in th1520_pinctrl_dt_node_to_map()
502 for (i = 0; i < thp->desc.npins; i++) { in th1520_pinctrl_dt_node_to_map()
503 if (!strcmp(pinname, thp->desc.pins[i].name)) in th1520_pinctrl_dt_node_to_map()
506 if (i == thp->desc.npins) { in th1520_pinctrl_dt_node_to_map()
508 dev_err(thp->pctl->dev, "%pOFn.%pOFn: unknown pin '%s'\n", in th1520_pinctrl_dt_node_to_map()
516 map[nmaps].data.configs.group_or_pin = thp->desc.pins[i].name; in th1520_pinctrl_dt_node_to_map()
522 pgnames[npins++] = thp->desc.pins[i].name; in th1520_pinctrl_dt_node_to_map()
525 map[nmaps].data.mux.group = thp->desc.pins[i].name; in th1520_pinctrl_dt_node_to_map()
534 dev_err(thp->pctl->dev, "error adding function %s\n", funcname); in th1520_pinctrl_dt_node_to_map()
575 static int th1520_padcfg_rmw(struct th1520_pinctrl *thp, unsigned int pin, in th1520_padcfg_rmw() argument
578 void __iomem *padcfg = th1520_padcfg(thp, pin); in th1520_padcfg_rmw()
585 scoped_guard(raw_spinlock_irqsave, &thp->lock) { in th1520_padcfg_rmw()
596 struct th1520_pinctrl *thp = pinctrl_dev_get_drvdata(pctldev); in th1520_pinconf_get() local
606 value = readl_relaxed(th1520_padcfg(thp, pin)); in th1520_pinconf_get()
659 struct th1520_pinctrl *thp = pinctrl_dev_get_drvdata(pctldev); in th1520_pinconf_group_get() local
660 unsigned int pin = thp->desc.pins[gsel].number; in th1520_pinconf_group_get()
668 struct th1520_pinctrl *thp = pinctrl_dev_get_drvdata(pctldev); in th1520_pinconf_set() local
735 return th1520_padcfg_rmw(thp, pin, mask, value); in th1520_pinconf_set()
743 struct th1520_pinctrl *thp = pinctrl_dev_get_drvdata(pctldev); in th1520_pinconf_group_set() local
744 unsigned int pin = thp->desc.pins[gsel].number; in th1520_pinconf_group_set()
753 struct th1520_pinctrl *thp = pinctrl_dev_get_drvdata(pctldev); in th1520_pinconf_dbg_show() local
754 u32 value = readl_relaxed(th1520_padcfg(thp, pin)); in th1520_pinconf_dbg_show()
773 static int th1520_pinmux_set(struct th1520_pinctrl *thp, unsigned int pin, in th1520_pinmux_set() argument
776 void __iomem *muxcfg = th1520_muxcfg(thp, pin); in th1520_pinmux_set()
785 dev_err(thp->pctl->dev, "invalid mux %s for pin %s\n", in th1520_pinmux_set()
786 th1520_muxtype_string[muxtype], pin_get_name(thp->pctl, pin)); in th1520_pinmux_set()
793 scoped_guard(raw_spinlock_irqsave, &thp->lock) { in th1520_pinmux_set()
804 struct th1520_pinctrl *thp = pinctrl_dev_get_drvdata(pctldev); in th1520_pinmux_set_mux() local
812 return th1520_pinmux_set(thp, thp->desc.pins[gsel].number, in th1520_pinmux_set_mux()
813 th1520_pad_muxdata(thp->desc.pins[gsel].drv_data), in th1520_pinmux_set_mux()
821 struct th1520_pinctrl *thp = pinctrl_dev_get_drvdata(pctldev); in th1520_gpio_request_enable() local
824 return th1520_pinmux_set(thp, offset, in th1520_gpio_request_enable()
833 struct th1520_pinctrl *thp = pinctrl_dev_get_drvdata(pctldev); in th1520_gpio_set_direction() local
835 return th1520_padcfg_rmw(thp, offset, TH1520_PADCFG_IE, in th1520_gpio_set_direction()
854 struct th1520_pinctrl *thp; in th1520_pinctrl_probe() local
859 thp = devm_kzalloc(dev, sizeof(*thp), GFP_KERNEL); in th1520_pinctrl_probe()
860 if (!thp) in th1520_pinctrl_probe()
863 thp->base = devm_platform_ioremap_resource(pdev, 0); in th1520_pinctrl_probe()
864 if (IS_ERR(thp->base)) in th1520_pinctrl_probe()
865 return PTR_ERR(thp->base); in th1520_pinctrl_probe()
884 thp->desc.name = group->name; in th1520_pinctrl_probe()
885 thp->desc.pins = group->pins; in th1520_pinctrl_probe()
886 thp->desc.npins = group->npins; in th1520_pinctrl_probe()
887 thp->desc.pctlops = &th1520_pinctrl_ops; in th1520_pinctrl_probe()
888 thp->desc.pmxops = &th1520_pinmux_ops; in th1520_pinctrl_probe()
889 thp->desc.confops = &th1520_pinconf_ops; in th1520_pinctrl_probe()
890 thp->desc.owner = THIS_MODULE; in th1520_pinctrl_probe()
891 mutex_init(&thp->mutex); in th1520_pinctrl_probe()
892 raw_spin_lock_init(&thp->lock); in th1520_pinctrl_probe()
894 ret = devm_pinctrl_register_and_init(dev, &thp->desc, thp, &thp->pctl); in th1520_pinctrl_probe()
898 return pinctrl_enable(thp->pctl); in th1520_pinctrl_probe()