Lines Matching refs:pctl
105 struct stmfx_pinctrl *pctl = gpiochip_get_data(gc); in stmfx_gpio_get() local
111 ret = regmap_read(pctl->stmfx->map, reg, &value); in stmfx_gpio_get()
118 struct stmfx_pinctrl *pctl = gpiochip_get_data(gc); in stmfx_gpio_set() local
122 regmap_write_bits(pctl->stmfx->map, reg + get_reg(offset), in stmfx_gpio_set()
128 struct stmfx_pinctrl *pctl = gpiochip_get_data(gc); in stmfx_gpio_get_direction() local
134 ret = regmap_read(pctl->stmfx->map, reg, &val); in stmfx_gpio_get_direction()
145 struct stmfx_pinctrl *pctl = gpiochip_get_data(gc); in stmfx_gpio_direction_input() local
149 return regmap_write_bits(pctl->stmfx->map, reg, mask, 0); in stmfx_gpio_direction_input()
155 struct stmfx_pinctrl *pctl = gpiochip_get_data(gc); in stmfx_gpio_direction_output() local
161 return regmap_write_bits(pctl->stmfx->map, reg, mask, mask); in stmfx_gpio_direction_output()
164 static int stmfx_pinconf_get_pupd(struct stmfx_pinctrl *pctl, in stmfx_pinconf_get_pupd() argument
171 ret = regmap_read(pctl->stmfx->map, reg, &pupd); in stmfx_pinconf_get_pupd()
178 static int stmfx_pinconf_set_pupd(struct stmfx_pinctrl *pctl, in stmfx_pinconf_set_pupd() argument
184 return regmap_write_bits(pctl->stmfx->map, reg, mask, pupd ? mask : 0); in stmfx_pinconf_set_pupd()
187 static int stmfx_pinconf_get_type(struct stmfx_pinctrl *pctl, in stmfx_pinconf_get_type() argument
194 ret = regmap_read(pctl->stmfx->map, reg, &type); in stmfx_pinconf_get_type()
201 static int stmfx_pinconf_set_type(struct stmfx_pinctrl *pctl, in stmfx_pinconf_set_type() argument
207 return regmap_write_bits(pctl->stmfx->map, reg, mask, type ? mask : 0); in stmfx_pinconf_set_type()
213 struct stmfx_pinctrl *pctl = pinctrl_dev_get_drvdata(pctldev); in stmfx_pinconf_get() local
223 dir = stmfx_gpio_get_direction(&pctl->gpio_chip, pin); in stmfx_pinconf_get()
226 type = stmfx_pinconf_get_type(pctl, pin); in stmfx_pinconf_get()
229 pupd = stmfx_pinconf_get_pupd(pctl, pin); in stmfx_pinconf_get()
258 ret = stmfx_gpio_get(&pctl->gpio_chip, pin); in stmfx_pinconf_get()
276 struct stmfx_pinctrl *pctl = pinctrl_dev_get_drvdata(pctldev); in stmfx_pinconf_set() local
288 dir = stmfx_gpio_get_direction(&pctl->gpio_chip, pin); in stmfx_pinconf_set()
300 ret = stmfx_pinconf_set_type(pctl, pin, 0); in stmfx_pinconf_set()
305 ret = stmfx_pinconf_set_type(pctl, pin, 1); in stmfx_pinconf_set()
308 ret = stmfx_pinconf_set_pupd(pctl, pin, 0); in stmfx_pinconf_set()
313 ret = stmfx_pinconf_set_type(pctl, pin, 1); in stmfx_pinconf_set()
316 ret = stmfx_pinconf_set_pupd(pctl, pin, 1); in stmfx_pinconf_set()
321 ret = stmfx_pinconf_set_type(pctl, pin, 1); in stmfx_pinconf_set()
326 ret = stmfx_gpio_direction_output(&pctl->gpio_chip, in stmfx_pinconf_set()
342 struct stmfx_pinctrl *pctl = pinctrl_dev_get_drvdata(pctldev); in stmfx_pinconf_dbg_show() local
350 dir = stmfx_gpio_get_direction(&pctl->gpio_chip, offset); in stmfx_pinconf_dbg_show()
353 type = stmfx_pinconf_get_type(pctl, offset); in stmfx_pinconf_dbg_show()
356 pupd = stmfx_pinconf_get_pupd(pctl, offset); in stmfx_pinconf_dbg_show()
359 val = stmfx_gpio_get(&pctl->gpio_chip, offset); in stmfx_pinconf_dbg_show()
416 struct stmfx_pinctrl *pctl = gpiochip_get_data(gpio_chip); in stmfx_pinctrl_irq_mask() local
420 pctl->irq_gpi_src[reg] &= ~mask; in stmfx_pinctrl_irq_mask()
426 struct stmfx_pinctrl *pctl = gpiochip_get_data(gpio_chip); in stmfx_pinctrl_irq_unmask() local
430 pctl->irq_gpi_src[reg] |= mask; in stmfx_pinctrl_irq_unmask()
436 struct stmfx_pinctrl *pctl = gpiochip_get_data(gpio_chip); in stmfx_pinctrl_irq_set_type() local
444 pctl->irq_gpi_evt[reg] |= mask; in stmfx_pinctrl_irq_set_type()
447 pctl->irq_gpi_evt[reg] &= ~mask; in stmfx_pinctrl_irq_set_type()
452 pctl->irq_gpi_type[reg] |= mask; in stmfx_pinctrl_irq_set_type()
454 pctl->irq_gpi_type[reg] &= ~mask; in stmfx_pinctrl_irq_set_type()
464 pctl->irq_toggle_edge[reg] |= mask; in stmfx_pinctrl_irq_set_type()
466 pctl->irq_toggle_edge[reg] &= mask; in stmfx_pinctrl_irq_set_type()
474 struct stmfx_pinctrl *pctl = gpiochip_get_data(gpio_chip); in stmfx_pinctrl_irq_bus_lock() local
476 mutex_lock(&pctl->lock); in stmfx_pinctrl_irq_bus_lock()
482 struct stmfx_pinctrl *pctl = gpiochip_get_data(gpio_chip); in stmfx_pinctrl_irq_bus_sync_unlock() local
491 if (pctl->irq_toggle_edge[reg] & mask) { in stmfx_pinctrl_irq_bus_sync_unlock()
493 pctl->irq_gpi_type[reg] &= ~mask; in stmfx_pinctrl_irq_bus_sync_unlock()
495 pctl->irq_gpi_type[reg] |= mask; in stmfx_pinctrl_irq_bus_sync_unlock()
498 regmap_bulk_write(pctl->stmfx->map, STMFX_REG_IRQ_GPI_EVT, in stmfx_pinctrl_irq_bus_sync_unlock()
499 pctl->irq_gpi_evt, NR_GPIO_REGS); in stmfx_pinctrl_irq_bus_sync_unlock()
500 regmap_bulk_write(pctl->stmfx->map, STMFX_REG_IRQ_GPI_TYPE, in stmfx_pinctrl_irq_bus_sync_unlock()
501 pctl->irq_gpi_type, NR_GPIO_REGS); in stmfx_pinctrl_irq_bus_sync_unlock()
502 regmap_bulk_write(pctl->stmfx->map, STMFX_REG_IRQ_GPI_SRC, in stmfx_pinctrl_irq_bus_sync_unlock()
503 pctl->irq_gpi_src, NR_GPIO_REGS); in stmfx_pinctrl_irq_bus_sync_unlock()
505 mutex_unlock(&pctl->lock); in stmfx_pinctrl_irq_bus_sync_unlock()
508 static void stmfx_pinctrl_irq_toggle_trigger(struct stmfx_pinctrl *pctl, in stmfx_pinctrl_irq_toggle_trigger() argument
515 if (!(pctl->irq_toggle_edge[reg] & mask)) in stmfx_pinctrl_irq_toggle_trigger()
518 val = stmfx_gpio_get(&pctl->gpio_chip, offset); in stmfx_pinctrl_irq_toggle_trigger()
523 pctl->irq_gpi_type[reg] &= mask; in stmfx_pinctrl_irq_toggle_trigger()
524 regmap_write_bits(pctl->stmfx->map, in stmfx_pinctrl_irq_toggle_trigger()
529 pctl->irq_gpi_type[reg] |= mask; in stmfx_pinctrl_irq_toggle_trigger()
530 regmap_write_bits(pctl->stmfx->map, in stmfx_pinctrl_irq_toggle_trigger()
538 struct stmfx_pinctrl *pctl = (struct stmfx_pinctrl *)dev_id; in stmfx_pinctrl_irq_thread_fn() local
539 struct gpio_chip *gc = &pctl->gpio_chip; in stmfx_pinctrl_irq_thread_fn()
545 ret = regmap_bulk_read(pctl->stmfx->map, STMFX_REG_IRQ_GPI_PENDING, in stmfx_pinctrl_irq_thread_fn()
550 regmap_bulk_write(pctl->stmfx->map, STMFX_REG_IRQ_GPI_SRC, in stmfx_pinctrl_irq_thread_fn()
556 stmfx_pinctrl_irq_toggle_trigger(pctl, n); in stmfx_pinctrl_irq_thread_fn()
559 regmap_bulk_write(pctl->stmfx->map, STMFX_REG_IRQ_GPI_SRC, in stmfx_pinctrl_irq_thread_fn()
560 pctl->irq_gpi_src, NR_GPIO_REGS); in stmfx_pinctrl_irq_thread_fn()
565 static int stmfx_pinctrl_gpio_function_enable(struct stmfx_pinctrl *pctl) in stmfx_pinctrl_gpio_function_enable() argument
568 struct pinctrl_dev *pctl_dev = pctl->pctl_dev; in stmfx_pinctrl_gpio_function_enable()
571 pctl->gpio_valid_mask = GENMASK(15, 0); in stmfx_pinctrl_gpio_function_enable()
576 pctl->gpio_valid_mask |= GENMASK(19, 16); in stmfx_pinctrl_gpio_function_enable()
582 pctl->gpio_valid_mask |= GENMASK(23, 20); in stmfx_pinctrl_gpio_function_enable()
585 return stmfx_function_enable(pctl->stmfx, func); in stmfx_pinctrl_gpio_function_enable()
592 struct stmfx_pinctrl *pctl; in stmfx_pinctrl_probe() local
595 pctl = devm_kzalloc(stmfx->dev, sizeof(*pctl), GFP_KERNEL); in stmfx_pinctrl_probe()
596 if (!pctl) in stmfx_pinctrl_probe()
599 platform_set_drvdata(pdev, pctl); in stmfx_pinctrl_probe()
601 pctl->dev = &pdev->dev; in stmfx_pinctrl_probe()
602 pctl->stmfx = stmfx; in stmfx_pinctrl_probe()
605 dev_err(pctl->dev, "missing required gpio-ranges property\n"); in stmfx_pinctrl_probe()
613 mutex_init(&pctl->lock); in stmfx_pinctrl_probe()
616 pctl->pctl_desc.name = "stmfx-pinctrl"; in stmfx_pinctrl_probe()
617 pctl->pctl_desc.pctlops = &stmfx_pinctrl_ops; in stmfx_pinctrl_probe()
618 pctl->pctl_desc.confops = &stmfx_pinconf_ops; in stmfx_pinctrl_probe()
619 pctl->pctl_desc.pins = stmfx_pins; in stmfx_pinctrl_probe()
620 pctl->pctl_desc.npins = ARRAY_SIZE(stmfx_pins); in stmfx_pinctrl_probe()
621 pctl->pctl_desc.owner = THIS_MODULE; in stmfx_pinctrl_probe()
622 pctl->pctl_desc.link_consumers = true; in stmfx_pinctrl_probe()
624 ret = devm_pinctrl_register_and_init(pctl->dev, &pctl->pctl_desc, in stmfx_pinctrl_probe()
625 pctl, &pctl->pctl_dev); in stmfx_pinctrl_probe()
627 dev_err(pctl->dev, "pinctrl registration failed\n"); in stmfx_pinctrl_probe()
631 ret = pinctrl_enable(pctl->pctl_dev); in stmfx_pinctrl_probe()
633 dev_err(pctl->dev, "pinctrl enable failed\n"); in stmfx_pinctrl_probe()
638 pctl->gpio_chip.label = "stmfx-gpio"; in stmfx_pinctrl_probe()
639 pctl->gpio_chip.parent = pctl->dev; in stmfx_pinctrl_probe()
640 pctl->gpio_chip.get_direction = stmfx_gpio_get_direction; in stmfx_pinctrl_probe()
641 pctl->gpio_chip.direction_input = stmfx_gpio_direction_input; in stmfx_pinctrl_probe()
642 pctl->gpio_chip.direction_output = stmfx_gpio_direction_output; in stmfx_pinctrl_probe()
643 pctl->gpio_chip.get = stmfx_gpio_get; in stmfx_pinctrl_probe()
644 pctl->gpio_chip.set = stmfx_gpio_set; in stmfx_pinctrl_probe()
645 pctl->gpio_chip.set_config = gpiochip_generic_config; in stmfx_pinctrl_probe()
646 pctl->gpio_chip.base = -1; in stmfx_pinctrl_probe()
647 pctl->gpio_chip.ngpio = pctl->pctl_desc.npins; in stmfx_pinctrl_probe()
648 pctl->gpio_chip.can_sleep = true; in stmfx_pinctrl_probe()
649 pctl->gpio_chip.of_node = np; in stmfx_pinctrl_probe()
651 ret = devm_gpiochip_add_data(pctl->dev, &pctl->gpio_chip, pctl); in stmfx_pinctrl_probe()
653 dev_err(pctl->dev, "gpio_chip registration failed\n"); in stmfx_pinctrl_probe()
657 ret = stmfx_pinctrl_gpio_function_enable(pctl); in stmfx_pinctrl_probe()
661 pctl->irq_chip.name = dev_name(pctl->dev); in stmfx_pinctrl_probe()
662 pctl->irq_chip.irq_mask = stmfx_pinctrl_irq_mask; in stmfx_pinctrl_probe()
663 pctl->irq_chip.irq_unmask = stmfx_pinctrl_irq_unmask; in stmfx_pinctrl_probe()
664 pctl->irq_chip.irq_set_type = stmfx_pinctrl_irq_set_type; in stmfx_pinctrl_probe()
665 pctl->irq_chip.irq_bus_lock = stmfx_pinctrl_irq_bus_lock; in stmfx_pinctrl_probe()
666 pctl->irq_chip.irq_bus_sync_unlock = stmfx_pinctrl_irq_bus_sync_unlock; in stmfx_pinctrl_probe()
668 ret = gpiochip_irqchip_add_nested(&pctl->gpio_chip, &pctl->irq_chip, in stmfx_pinctrl_probe()
671 dev_err(pctl->dev, "cannot add irqchip to gpiochip\n"); in stmfx_pinctrl_probe()
675 ret = devm_request_threaded_irq(pctl->dev, irq, NULL, in stmfx_pinctrl_probe()
678 pctl->irq_chip.name, pctl); in stmfx_pinctrl_probe()
680 dev_err(pctl->dev, "cannot request irq%d\n", irq); in stmfx_pinctrl_probe()
684 gpiochip_set_nested_irqchip(&pctl->gpio_chip, &pctl->irq_chip, irq); in stmfx_pinctrl_probe()
686 dev_info(pctl->dev, in stmfx_pinctrl_probe()
687 "%ld GPIOs available\n", hweight_long(pctl->gpio_valid_mask)); in stmfx_pinctrl_probe()
703 static int stmfx_pinctrl_backup_regs(struct stmfx_pinctrl *pctl) in stmfx_pinctrl_backup_regs() argument
707 ret = regmap_bulk_read(pctl->stmfx->map, STMFX_REG_GPIO_STATE, in stmfx_pinctrl_backup_regs()
708 &pctl->bkp_gpio_state, NR_GPIO_REGS); in stmfx_pinctrl_backup_regs()
711 ret = regmap_bulk_read(pctl->stmfx->map, STMFX_REG_GPIO_DIR, in stmfx_pinctrl_backup_regs()
712 &pctl->bkp_gpio_dir, NR_GPIO_REGS); in stmfx_pinctrl_backup_regs()
715 ret = regmap_bulk_read(pctl->stmfx->map, STMFX_REG_GPIO_TYPE, in stmfx_pinctrl_backup_regs()
716 &pctl->bkp_gpio_type, NR_GPIO_REGS); in stmfx_pinctrl_backup_regs()
719 ret = regmap_bulk_read(pctl->stmfx->map, STMFX_REG_GPIO_PUPD, in stmfx_pinctrl_backup_regs()
720 &pctl->bkp_gpio_pupd, NR_GPIO_REGS); in stmfx_pinctrl_backup_regs()
727 static int stmfx_pinctrl_restore_regs(struct stmfx_pinctrl *pctl) in stmfx_pinctrl_restore_regs() argument
731 ret = regmap_bulk_write(pctl->stmfx->map, STMFX_REG_GPIO_DIR, in stmfx_pinctrl_restore_regs()
732 pctl->bkp_gpio_dir, NR_GPIO_REGS); in stmfx_pinctrl_restore_regs()
735 ret = regmap_bulk_write(pctl->stmfx->map, STMFX_REG_GPIO_TYPE, in stmfx_pinctrl_restore_regs()
736 pctl->bkp_gpio_type, NR_GPIO_REGS); in stmfx_pinctrl_restore_regs()
739 ret = regmap_bulk_write(pctl->stmfx->map, STMFX_REG_GPIO_PUPD, in stmfx_pinctrl_restore_regs()
740 pctl->bkp_gpio_pupd, NR_GPIO_REGS); in stmfx_pinctrl_restore_regs()
743 ret = regmap_bulk_write(pctl->stmfx->map, STMFX_REG_GPO_SET, in stmfx_pinctrl_restore_regs()
744 pctl->bkp_gpio_state, NR_GPIO_REGS); in stmfx_pinctrl_restore_regs()
747 ret = regmap_bulk_write(pctl->stmfx->map, STMFX_REG_IRQ_GPI_EVT, in stmfx_pinctrl_restore_regs()
748 pctl->irq_gpi_evt, NR_GPIO_REGS); in stmfx_pinctrl_restore_regs()
751 ret = regmap_bulk_write(pctl->stmfx->map, STMFX_REG_IRQ_GPI_TYPE, in stmfx_pinctrl_restore_regs()
752 pctl->irq_gpi_type, NR_GPIO_REGS); in stmfx_pinctrl_restore_regs()
755 ret = regmap_bulk_write(pctl->stmfx->map, STMFX_REG_IRQ_GPI_SRC, in stmfx_pinctrl_restore_regs()
756 pctl->irq_gpi_src, NR_GPIO_REGS); in stmfx_pinctrl_restore_regs()
765 struct stmfx_pinctrl *pctl = dev_get_drvdata(dev); in stmfx_pinctrl_suspend() local
768 ret = stmfx_pinctrl_backup_regs(pctl); in stmfx_pinctrl_suspend()
770 dev_err(pctl->dev, "registers backup failure\n"); in stmfx_pinctrl_suspend()
779 struct stmfx_pinctrl *pctl = dev_get_drvdata(dev); in stmfx_pinctrl_resume() local
782 ret = stmfx_pinctrl_restore_regs(pctl); in stmfx_pinctrl_resume()
784 dev_err(pctl->dev, "registers restoration failure\n"); in stmfx_pinctrl_resume()