Lines Matching full:pctrl
142 static void rzv2m_pinctrl_set_pfc_mode(struct rzv2m_pinctrl *pctrl,
148 rzv2m_writel_we(pctrl->base + DI_MSK(port), pin, 1);
149 rzv2m_writel_we(pctrl->base + EN_MSK(port), pin, 1);
152 addr = pctrl->base + PFSEL(port) + (pin / 4) * 4;
156 rzv2m_writel_we(pctrl->base + EN_MSK(port), pin, 0);
157 rzv2m_writel_we(pctrl->base + DI_MSK(port), pin, 0);
164 struct rzv2m_pinctrl *pctrl = pinctrl_dev_get_drvdata(pctldev);
181 dev_dbg(pctrl->dev, "port:%u pin: %u PSEL:%u\n",
184 rzv2m_pinctrl_set_pfc_mode(pctrl, RZV2M_PIN_ID_TO_PORT(pins[i]),
218 struct rzv2m_pinctrl *pctrl = pinctrl_dev_get_drvdata(pctldev);
242 dev_err(pctrl->dev, "Invalid pins list in DT\n");
252 dev_err(pctrl->dev,
262 dev_err(pctrl->dev, "DT node must contain a config\n");
295 pins = devm_kcalloc(pctrl->dev, num_pinmux, sizeof(*pins), GFP_KERNEL);
296 psel_val = devm_kcalloc(pctrl->dev, num_pinmux, sizeof(*psel_val),
298 pin_fn = devm_kzalloc(pctrl->dev, sizeof(*pin_fn), GFP_KERNEL);
316 name = devm_kasprintf(pctrl->dev, GFP_KERNEL, "%pOFn.%pOFn",
326 mutex_lock(&pctrl->mutex);
346 mutex_unlock(&pctrl->mutex);
353 dev_dbg(pctrl->dev, "Parsed %pOF with %d pins\n", np, num_pinmux);
360 mutex_unlock(&pctrl->mutex);
389 struct rzv2m_pinctrl *pctrl = pinctrl_dev_get_drvdata(pctldev);
414 dev_err(pctrl->dev, "no mapping found in node %pOF\n", np);
423 static int rzv2m_validate_gpio_pin(struct rzv2m_pinctrl *pctrl,
430 if (bit >= pincount || port >= pctrl->data->n_port_pins)
433 data = pctrl->data->port_pin_configs[port];
440 static void rzv2m_rmw_pin_config(struct rzv2m_pinctrl *pctrl, u32 offset,
443 void __iomem *addr = pctrl->base + offset;
447 spin_lock_irqsave(&pctrl->lock, flags);
450 spin_unlock_irqrestore(&pctrl->lock, flags);
457 struct rzv2m_pinctrl *pctrl = pinctrl_dev_get_drvdata(pctldev);
459 const struct pinctrl_pin_desc *pin = &pctrl->desc.pins[_pin];
479 if (rzv2m_validate_gpio_pin(pctrl, *pin_data, RZV2M_PIN_ID_TO_PORT(_pin), bit))
495 switch ((readl(pctrl->base + PUPD(port)) >> bit) & PUPD_MASK) {
518 val = (readl(pctrl->base + DRV(port)) >> bit) & DRV_MASK;
544 arg = readl(pctrl->base + SR(port)) & BIT(bit);
561 struct rzv2m_pinctrl *pctrl = pinctrl_dev_get_drvdata(pctldev);
562 const struct pinctrl_pin_desc *pin = &pctrl->desc.pins[_pin];
583 if (rzv2m_validate_gpio_pin(pctrl, *pin_data, RZV2M_PIN_ID_TO_PORT(_pin), bit))
610 rzv2m_rmw_pin_config(pctrl, PUPD(port), bit, PUPD_MASK, val);
649 rzv2m_rmw_pin_config(pctrl, DRV(port), bit, DRV_MASK, index);
659 rzv2m_writel_we(pctrl->base + SR(port), bit, !arg);
748 struct rzv2m_pinctrl *pctrl = gpiochip_get_data(chip);
757 rzv2m_pinctrl_set_pfc_mode(pctrl, port, bit, 0);
762 static void rzv2m_gpio_set_direction(struct rzv2m_pinctrl *pctrl, u32 port,
765 rzv2m_writel_we(pctrl->base + OE(port), bit, output);
766 rzv2m_writel_we(pctrl->base + IE(port), bit, !output);
771 struct rzv2m_pinctrl *pctrl = gpiochip_get_data(chip);
775 if (!(readl(pctrl->base + IE(port)) & BIT(bit)))
784 struct rzv2m_pinctrl *pctrl = gpiochip_get_data(chip);
788 rzv2m_gpio_set_direction(pctrl, port, bit, false);
796 struct rzv2m_pinctrl *pctrl = gpiochip_get_data(chip);
800 rzv2m_writel_we(pctrl->base + DO(port), bit, !!value);
806 struct rzv2m_pinctrl *pctrl = gpiochip_get_data(chip);
811 rzv2m_gpio_set_direction(pctrl, port, bit, true);
818 struct rzv2m_pinctrl *pctrl = gpiochip_get_data(chip);
824 return !!(readl(pctrl->base + DI(port)) & BIT(bit));
826 return !!(readl(pctrl->base + DO(port)) & BIT(bit));
929 static int rzv2m_gpio_register(struct rzv2m_pinctrl *pctrl)
931 struct device_node *np = pctrl->dev->of_node;
932 struct gpio_chip *chip = &pctrl->gpio_chip;
933 const char *name = dev_name(pctrl->dev);
939 dev_err(pctrl->dev, "Unable to parse gpio-ranges\n");
946 of_args.args[2] != pctrl->data->n_port_pins) {
947 dev_err(pctrl->dev, "gpio-ranges does not match selected SOC\n");
951 chip->names = pctrl->data->port_pins;
960 chip->parent = pctrl->dev;
965 pctrl->gpio_range.id = 0;
966 pctrl->gpio_range.pin_base = 0;
967 pctrl->gpio_range.base = 0;
968 pctrl->gpio_range.npins = chip->ngpio;
969 pctrl->gpio_range.name = chip->label;
970 pctrl->gpio_range.gc = chip;
971 ret = devm_gpiochip_add_data(pctrl->dev, chip, pctrl);
973 dev_err(pctrl->dev, "failed to add GPIO controller\n");
977 dev_dbg(pctrl->dev, "Registered gpio controller\n");
982 static int rzv2m_pinctrl_register(struct rzv2m_pinctrl *pctrl)
989 pctrl->desc.name = DRV_NAME;
990 pctrl->desc.npins = pctrl->data->n_port_pins + pctrl->data->n_dedicated_pins;
991 pctrl->desc.pctlops = &rzv2m_pinctrl_pctlops;
992 pctrl->desc.pmxops = &rzv2m_pinctrl_pmxops;
993 pctrl->desc.confops = &rzv2m_pinctrl_confops;
994 pctrl->desc.owner = THIS_MODULE;
996 pins = devm_kcalloc(pctrl->dev, pctrl->desc.npins, sizeof(*pins), GFP_KERNEL);
1000 pin_data = devm_kcalloc(pctrl->dev, pctrl->desc.npins,
1005 pctrl->pins = pins;
1006 pctrl->desc.pins = pins;
1008 for (i = 0, j = 0; i < pctrl->data->n_port_pins; i++) {
1010 pins[i].name = pctrl->data->port_pins[i];
1013 pin_data[i] = pctrl->data->port_pin_configs[j];
1017 for (i = 0; i < pctrl->data->n_dedicated_pins; i++) {
1018 unsigned int index = pctrl->data->n_port_pins + i;
1021 pins[index].name = pctrl->data->dedicated_pins[i].name;
1022 pin_data[index] = pctrl->data->dedicated_pins[i].config;
1026 ret = devm_pinctrl_register_and_init(pctrl->dev, &pctrl->desc, pctrl,
1027 &pctrl->pctl);
1029 dev_err(pctrl->dev, "pinctrl registration failed\n");
1033 ret = pinctrl_enable(pctrl->pctl);
1035 dev_err(pctrl->dev, "pinctrl enable failed\n");
1039 ret = rzv2m_gpio_register(pctrl);
1041 dev_err(pctrl->dev, "failed to add GPIO chip: %i\n", ret);
1050 struct rzv2m_pinctrl *pctrl;
1054 pctrl = devm_kzalloc(&pdev->dev, sizeof(*pctrl), GFP_KERNEL);
1055 if (!pctrl)
1058 pctrl->dev = &pdev->dev;
1060 pctrl->data = of_device_get_match_data(&pdev->dev);
1061 if (!pctrl->data)
1064 pctrl->base = devm_platform_ioremap_resource(pdev, 0);
1065 if (IS_ERR(pctrl->base))
1066 return PTR_ERR(pctrl->base);
1068 clk = devm_clk_get_enabled(pctrl->dev, NULL);
1070 return dev_err_probe(pctrl->dev, PTR_ERR(clk),
1073 spin_lock_init(&pctrl->lock);
1074 mutex_init(&pctrl->mutex);
1076 platform_set_drvdata(pdev, pctrl);
1078 ret = rzv2m_pinctrl_register(pctrl);
1082 dev_info(pctrl->dev, "%s support registered\n", DRV_NAME);