Lines Matching defs:pctl
53 static struct regmap *mtk_get_regmap(struct mtk_pinctrl *pctl,
56 if (pin >= pctl->devdata->type1_start && pin < pctl->devdata->type1_end)
57 return pctl->regmap2;
58 return pctl->regmap1;
61 static unsigned int mtk_get_port(struct mtk_pinctrl *pctl, unsigned long pin)
64 return ((pin >> 4) & pctl->devdata->port_mask)
65 << pctl->devdata->port_shf;
74 struct mtk_pinctrl *pctl = pinctrl_dev_get_drvdata(pctldev);
76 reg_addr = mtk_get_port(pctl, offset) + pctl->devdata->dir_offset;
79 if (pctl->devdata->spec_dir_set)
80 pctl->devdata->spec_dir_set(®_addr, offset);
84 reg_addr = CLR_ADDR(reg_addr, pctl);
86 reg_addr = SET_ADDR(reg_addr, pctl);
88 regmap_write(mtk_get_regmap(pctl, offset), reg_addr, bit);
96 struct mtk_pinctrl *pctl = gpiochip_get_data(chip);
98 reg_addr = mtk_get_port(pctl, offset) + pctl->devdata->dout_offset;
102 reg_addr = SET_ADDR(reg_addr, pctl);
104 reg_addr = CLR_ADDR(reg_addr, pctl);
106 regmap_write(mtk_get_regmap(pctl, offset), reg_addr, bit);
109 static int mtk_pconf_set_ies_smt(struct mtk_pinctrl *pctl, unsigned pin,
119 if (!pctl->devdata->spec_ies_smt_set &&
120 pctl->devdata->ies_offset == MTK_PINCTRL_NOT_SUPPORT &&
124 if (!pctl->devdata->spec_ies_smt_set &&
125 pctl->devdata->smt_offset == MTK_PINCTRL_NOT_SUPPORT &&
133 if (pctl->devdata->spec_ies_smt_set) {
134 return pctl->devdata->spec_ies_smt_set(mtk_get_regmap(pctl, pin),
135 pin, pctl->devdata->port_align, value, arg);
141 offset = pctl->devdata->ies_offset;
143 offset = pctl->devdata->smt_offset;
146 reg_addr = SET_ADDR(mtk_get_port(pctl, pin) + offset, pctl);
148 reg_addr = CLR_ADDR(mtk_get_port(pctl, pin) + offset, pctl);
150 regmap_write(mtk_get_regmap(pctl, pin), reg_addr, bit);
181 struct mtk_pinctrl *pctl, unsigned long pin) {
184 for (i = 0; i < pctl->devdata->n_pin_drv_grps; i++) {
186 pctl->devdata->pin_drv_grp + i;
194 static int mtk_pconf_set_driving(struct mtk_pinctrl *pctl,
202 if (pin >= pctl->devdata->npins)
205 pin_drv = mtk_find_pin_drv_grp_by_pin(pctl, pin);
206 if (!pin_drv || pin_drv->grp > pctl->devdata->n_grp_cls)
209 drv_grp = pctl->devdata->grp_desc + pin_drv->grp;
218 return regmap_update_bits(mtk_get_regmap(pctl, pin),
285 static int mtk_pconf_set_pull_select(struct mtk_pinctrl *pctl,
296 if (pctl->devdata->spec_pull_set) {
301 ret = pctl->devdata->spec_pull_set(mtk_get_regmap(pctl, pin),
302 pin, pctl->devdata->port_align, isup, r1r0);
309 dev_err(pctl->dev, "invalid pull-up argument %d on pin %d .\n",
316 reg_pullen = SET_ADDR(mtk_get_port(pctl, pin) +
317 pctl->devdata->pullen_offset, pctl);
319 reg_pullen = CLR_ADDR(mtk_get_port(pctl, pin) +
320 pctl->devdata->pullen_offset, pctl);
323 reg_pullsel = SET_ADDR(mtk_get_port(pctl, pin) +
324 pctl->devdata->pullsel_offset, pctl);
326 reg_pullsel = CLR_ADDR(mtk_get_port(pctl, pin) +
327 pctl->devdata->pullsel_offset, pctl);
329 regmap_write(mtk_get_regmap(pctl, pin), reg_pullen, bit);
330 regmap_write(mtk_get_regmap(pctl, pin), reg_pullsel, bit);
339 struct mtk_pinctrl *pctl = pinctrl_dev_get_drvdata(pctldev);
343 ret = mtk_pconf_set_pull_select(pctl, pin, false, false, arg);
346 ret = mtk_pconf_set_pull_select(pctl, pin, true, true, arg);
349 ret = mtk_pconf_set_pull_select(pctl, pin, true, false, arg);
353 ret = mtk_pconf_set_ies_smt(pctl, pin, arg, param);
356 mtk_gpio_set(pctl->chip, pin, arg);
361 ret = mtk_pconf_set_ies_smt(pctl, pin, arg, param);
364 ret = mtk_pconf_set_driving(pctl, pin, arg);
377 struct mtk_pinctrl *pctl = pinctrl_dev_get_drvdata(pctldev);
379 *config = pctl->groups[group].config;
387 struct mtk_pinctrl *pctl = pinctrl_dev_get_drvdata(pctldev);
388 struct mtk_pinctrl_group *g = &pctl->groups[group];
410 mtk_pctrl_find_group_by_pin(struct mtk_pinctrl *pctl, u32 pin)
414 for (i = 0; i < pctl->ngroups; i++) {
415 struct mtk_pinctrl_group *grp = pctl->groups + i;
425 struct mtk_pinctrl *pctl, u32 pin_num, u32 fnum)
427 const struct mtk_desc_pin *pin = pctl->devdata->pins + pin_num;
439 static bool mtk_pctrl_is_function_valid(struct mtk_pinctrl *pctl,
444 for (i = 0; i < pctl->devdata->npins; i++) {
445 const struct mtk_desc_pin *pin = pctl->devdata->pins + i;
464 static int mtk_pctrl_dt_node_to_map_func(struct mtk_pinctrl *pctl,
477 ret = mtk_pctrl_is_function_valid(pctl, pin, fnum);
479 dev_err(pctl->dev, "invalid function %d on pin %d .\n",
505 struct mtk_pinctrl *pctl = pinctrl_dev_get_drvdata(pctldev);
509 dev_err(pctl->dev, "missing pins property in node %pOFn .\n",
551 if (pin >= pctl->devdata->npins ||
553 dev_err(pctl->dev, "invalid pins value.\n");
558 grp = mtk_pctrl_find_group_by_pin(pctl, pin);
560 dev_err(pctl->dev, "unable to match pin %d to group\n",
566 err = mtk_pctrl_dt_node_to_map_func(pctl, pin, func, grp, map,
615 struct mtk_pinctrl *pctl = pinctrl_dev_get_drvdata(pctldev);
617 return pctl->ngroups;
623 struct mtk_pinctrl *pctl = pinctrl_dev_get_drvdata(pctldev);
625 return pctl->groups[group].name;
633 struct mtk_pinctrl *pctl = pinctrl_dev_get_drvdata(pctldev);
635 *pins = (unsigned *)&pctl->groups[group].pin;
665 struct mtk_pinctrl *pctl = pinctrl_dev_get_drvdata(pctldev);
667 *groups = pctl->grp_names;
668 *num_groups = pctl->ngroups;
680 struct mtk_pinctrl *pctl = pinctrl_dev_get_drvdata(pctldev);
682 if (pctl->devdata->spec_pinmux_set)
683 pctl->devdata->spec_pinmux_set(mtk_get_regmap(pctl, pin),
686 reg_addr = ((pin / MAX_GPIO_MODE_PER_REG) << pctl->devdata->port_shf)
687 + pctl->devdata->pinmux_offset;
693 return regmap_update_bits(mtk_get_regmap(pctl, pin),
698 mtk_find_pin_by_eint_num(struct mtk_pinctrl *pctl, unsigned int eint_num)
703 for (i = 0; i < pctl->devdata->npins; i++) {
704 pin = pctl->devdata->pins + i;
718 struct mtk_pinctrl *pctl = pinctrl_dev_get_drvdata(pctldev);
719 struct mtk_pinctrl_group *g = pctl->groups + group;
721 ret = mtk_pctrl_is_function_valid(pctl, g->pin, function);
723 dev_err(pctl->dev, "invalid function %d on group %d .\n",
728 desc = mtk_pctrl_find_function_by_pin(pctl, g->pin, function);
735 static int mtk_pmx_find_gpio_mode(struct mtk_pinctrl *pctl,
738 const struct mtk_desc_pin *pin = pctl->devdata->pins + offset;
755 struct mtk_pinctrl *pctl = pinctrl_dev_get_drvdata(pctldev);
757 muxval = mtk_pmx_find_gpio_mode(pctl, offset);
760 dev_err(pctl->dev, "invalid gpio pin %d.\n", offset);
765 mtk_pconf_set_ies_smt(pctl, offset, 1, PIN_CONFIG_INPUT_ENABLE);
798 struct mtk_pinctrl *pctl = gpiochip_get_data(chip);
800 reg_addr = mtk_get_port(pctl, offset) + pctl->devdata->dir_offset;
803 if (pctl->devdata->spec_dir_set)
804 pctl->devdata->spec_dir_set(®_addr, offset);
806 regmap_read(pctl->regmap1, reg_addr, &read_val);
818 struct mtk_pinctrl *pctl = gpiochip_get_data(chip);
820 reg_addr = mtk_get_port(pctl, offset) +
821 pctl->devdata->din_offset;
824 regmap_read(pctl->regmap1, reg_addr, &read_val);
830 struct mtk_pinctrl *pctl = gpiochip_get_data(chip);
834 pin = pctl->devdata->pins + offset;
840 return mtk_eint_find_irq(pctl->eint, eint_n);
846 struct mtk_pinctrl *pctl = gpiochip_get_data(chip);
854 pin = pctl->devdata->pins + offset;
861 return mtk_eint_set_debounce(pctl->eint, eint_n, debounce);
880 struct mtk_pinctrl *pctl = dev_get_drvdata(device);
882 return mtk_eint_do_suspend(pctl->eint);
887 struct mtk_pinctrl *pctl = dev_get_drvdata(device);
889 return mtk_eint_do_resume(pctl->eint);
899 struct mtk_pinctrl *pctl = platform_get_drvdata(pdev);
902 pctl->ngroups = pctl->devdata->npins;
905 pctl->groups = devm_kcalloc(&pdev->dev, pctl->ngroups,
906 sizeof(*pctl->groups), GFP_KERNEL);
907 if (!pctl->groups)
911 pctl->grp_names = devm_kcalloc(&pdev->dev, pctl->ngroups,
912 sizeof(*pctl->grp_names), GFP_KERNEL);
913 if (!pctl->grp_names)
916 for (i = 0; i < pctl->devdata->npins; i++) {
917 const struct mtk_desc_pin *pin = pctl->devdata->pins + i;
918 struct mtk_pinctrl_group *group = pctl->groups + i;
923 pctl->grp_names[i] = pin->pin.name;
933 struct mtk_pinctrl *pctl = (struct mtk_pinctrl *)data;
936 pin = mtk_find_pin_by_eint_num(pctl, eint_n);
940 *gpio_chip = pctl->chip;
948 struct mtk_pinctrl *pctl = (struct mtk_pinctrl *)data;
951 pin = mtk_find_pin_by_eint_num(pctl, eint_n);
955 return mtk_gpio_get(pctl->chip, pin->pin.number);
960 struct mtk_pinctrl *pctl = (struct mtk_pinctrl *)data;
963 pin = mtk_find_pin_by_eint_num(pctl, eint_n);
968 mtk_pmx_set_mode(pctl->pctl_dev, pin->pin.number, pin->eint.eintmux);
970 mtk_pmx_gpio_set_direction(pctl->pctl_dev, NULL, pin->pin.number,
973 mtk_pconf_set_ies_smt(pctl, pin->pin.number, 1,
985 static int mtk_eint_init(struct mtk_pinctrl *pctl, struct platform_device *pdev)
992 pctl->eint = devm_kzalloc(pctl->dev, sizeof(*pctl->eint), GFP_KERNEL);
993 if (!pctl->eint)
996 pctl->eint->base = devm_platform_ioremap_resource(pdev, 0);
997 if (IS_ERR(pctl->eint->base))
998 return PTR_ERR(pctl->eint->base);
1000 pctl->eint->irq = irq_of_parse_and_map(np, 0);
1001 if (!pctl->eint->irq)
1004 pctl->eint->dev = &pdev->dev;
1006 * If pctl->eint->regs == NULL, it would fall back into using a generic
1009 pctl->eint->regs = pctl->devdata->eint_regs;
1010 pctl->eint->hw = &pctl->devdata->eint_hw;
1011 pctl->eint->pctl = pctl;
1012 pctl->eint->gpio_xlate = &mtk_eint_xt;
1014 return mtk_eint_do_init(pctl->eint);
1022 struct mtk_pinctrl *pctl;
1027 pctl = devm_kzalloc(&pdev->dev, sizeof(*pctl), GFP_KERNEL);
1028 if (!pctl)
1031 platform_set_drvdata(pdev, pctl);
1039 node = of_parse_phandle(np, "mediatek,pctl-regmap", 0);
1041 pctl->regmap1 = syscon_node_to_regmap(node);
1043 if (IS_ERR(pctl->regmap1))
1044 return PTR_ERR(pctl->regmap1);
1046 pctl->regmap1 = regmap;
1053 node = of_parse_phandle(np, "mediatek,pctl-regmap", 1);
1055 pctl->regmap2 = syscon_node_to_regmap(node);
1057 if (IS_ERR(pctl->regmap2))
1058 return PTR_ERR(pctl->regmap2);
1061 pctl->devdata = data;
1068 pins = devm_kcalloc(&pdev->dev, pctl->devdata->npins, sizeof(*pins),
1073 for (i = 0; i < pctl->devdata->npins; i++)
1074 pins[i] = pctl->devdata->pins[i].pin;
1076 pctl->pctl_desc.name = dev_name(&pdev->dev);
1077 pctl->pctl_desc.owner = THIS_MODULE;
1078 pctl->pctl_desc.pins = pins;
1079 pctl->pctl_desc.npins = pctl->devdata->npins;
1080 pctl->pctl_desc.confops = &mtk_pconf_ops;
1081 pctl->pctl_desc.pctlops = &mtk_pctrl_ops;
1082 pctl->pctl_desc.pmxops = &mtk_pmx_ops;
1083 pctl->dev = &pdev->dev;
1085 pctl->pctl_dev = devm_pinctrl_register(&pdev->dev, &pctl->pctl_desc,
1086 pctl);
1087 if (IS_ERR(pctl->pctl_dev)) {
1089 return PTR_ERR(pctl->pctl_dev);
1092 pctl->chip = devm_kzalloc(&pdev->dev, sizeof(*pctl->chip), GFP_KERNEL);
1093 if (!pctl->chip)
1096 *pctl->chip = mtk_gpio_chip;
1097 pctl->chip->ngpio = pctl->devdata->npins;
1098 pctl->chip->label = dev_name(&pdev->dev);
1099 pctl->chip->parent = &pdev->dev;
1100 pctl->chip->base = -1;
1102 ret = gpiochip_add_data(pctl->chip, pctl);
1107 ret = gpiochip_add_pin_range(pctl->chip, dev_name(&pdev->dev),
1108 0, 0, pctl->devdata->npins);
1114 ret = mtk_eint_init(pctl, pdev);
1121 gpiochip_remove(pctl->chip);