Lines Matching refs:pctrl

65 static u32 owl_read_field(struct owl_pinctrl *pctrl, u32 reg,  in owl_read_field()  argument
70 tmp = readl_relaxed(pctrl->base + reg); in owl_read_field()
76 static void owl_write_field(struct owl_pinctrl *pctrl, u32 reg, u32 arg, in owl_write_field() argument
84 owl_update_bits(pctrl->base + reg, mask, (arg << bit)); in owl_write_field()
89 struct owl_pinctrl *pctrl = pinctrl_dev_get_drvdata(pctrldev); in owl_get_groups_count() local
91 return pctrl->soc->ngroups; in owl_get_groups_count()
97 struct owl_pinctrl *pctrl = pinctrl_dev_get_drvdata(pctrldev); in owl_get_group_name() local
99 return pctrl->soc->groups[group].name; in owl_get_group_name()
107 struct owl_pinctrl *pctrl = pinctrl_dev_get_drvdata(pctrldev); in owl_get_group_pins() local
109 *pins = pctrl->soc->groups[group].pads; in owl_get_group_pins()
110 *num_pins = pctrl->soc->groups[group].npads; in owl_get_group_pins()
119 struct owl_pinctrl *pctrl = pinctrl_dev_get_drvdata(pctrldev); in owl_pin_dbg_show() local
121 seq_printf(s, "%s", dev_name(pctrl->dev)); in owl_pin_dbg_show()
135 struct owl_pinctrl *pctrl = pinctrl_dev_get_drvdata(pctrldev); in owl_get_funcs_count() local
137 return pctrl->soc->nfunctions; in owl_get_funcs_count()
143 struct owl_pinctrl *pctrl = pinctrl_dev_get_drvdata(pctrldev); in owl_get_func_name() local
145 return pctrl->soc->functions[function].name; in owl_get_func_name()
153 struct owl_pinctrl *pctrl = pinctrl_dev_get_drvdata(pctrldev); in owl_get_func_groups() local
155 *groups = pctrl->soc->functions[function].groups; in owl_get_func_groups()
156 *num_groups = pctrl->soc->functions[function].ngroups; in owl_get_func_groups()
192 struct owl_pinctrl *pctrl = pinctrl_dev_get_drvdata(pctrldev); in owl_set_mux() local
197 g = &pctrl->soc->groups[group]; in owl_set_mux()
202 raw_spin_lock_irqsave(&pctrl->lock, flags); in owl_set_mux()
204 owl_update_bits(pctrl->base + g->mfpctl_reg, mask, val); in owl_set_mux()
206 raw_spin_unlock_irqrestore(&pctrl->lock, flags); in owl_set_mux()
254 struct owl_pinctrl *pctrl = pinctrl_dev_get_drvdata(pctrldev); in owl_pin_config_get() local
259 info = &pctrl->soc->padinfo[pin]; in owl_pin_config_get()
265 arg = owl_read_field(pctrl, reg, bit, width); in owl_pin_config_get()
267 if (!pctrl->soc->padctl_val2arg) in owl_pin_config_get()
270 ret = pctrl->soc->padctl_val2arg(info, param, &arg); in owl_pin_config_get()
284 struct owl_pinctrl *pctrl = pinctrl_dev_get_drvdata(pctrldev); in owl_pin_config_set() local
291 info = &pctrl->soc->padinfo[pin]; in owl_pin_config_set()
301 if (!pctrl->soc->padctl_arg2val) in owl_pin_config_set()
304 ret = pctrl->soc->padctl_arg2val(info, param, &arg); in owl_pin_config_set()
308 raw_spin_lock_irqsave(&pctrl->lock, flags); in owl_pin_config_set()
310 owl_write_field(pctrl, reg, arg, bit, width); in owl_pin_config_set()
312 raw_spin_unlock_irqrestore(&pctrl->lock, flags); in owl_pin_config_set()
423 struct owl_pinctrl *pctrl = pinctrl_dev_get_drvdata(pctrldev); in owl_group_config_get() local
428 g = &pctrl->soc->groups[group]; in owl_group_config_get()
434 arg = owl_read_field(pctrl, reg, bit, width); in owl_group_config_get()
452 struct owl_pinctrl *pctrl = pinctrl_dev_get_drvdata(pctrldev); in owl_group_config_set() local
458 g = &pctrl->soc->groups[group]; in owl_group_config_set()
473 raw_spin_lock_irqsave(&pctrl->lock, flags); in owl_group_config_set()
475 owl_write_field(pctrl, reg, arg, bit, width); in owl_group_config_set()
477 raw_spin_unlock_irqrestore(&pctrl->lock, flags); in owl_group_config_set()
499 owl_gpio_get_port(struct owl_pinctrl *pctrl, unsigned int *pin) in owl_gpio_get_port() argument
503 for (i = 0; i < pctrl->soc->nports; i++) { in owl_gpio_get_port()
504 const struct owl_gpio_port *port = &pctrl->soc->ports[i]; in owl_gpio_get_port()
533 struct owl_pinctrl *pctrl = gpiochip_get_data(chip); in owl_gpio_request() local
538 port = owl_gpio_get_port(pctrl, &offset); in owl_gpio_request()
542 gpio_base = pctrl->base + port->offset; in owl_gpio_request()
548 raw_spin_lock_irqsave(&pctrl->lock, flags); in owl_gpio_request()
550 raw_spin_unlock_irqrestore(&pctrl->lock, flags); in owl_gpio_request()
557 struct owl_pinctrl *pctrl = gpiochip_get_data(chip); in owl_gpio_free() local
562 port = owl_gpio_get_port(pctrl, &offset); in owl_gpio_free()
566 gpio_base = pctrl->base + port->offset; in owl_gpio_free()
568 raw_spin_lock_irqsave(&pctrl->lock, flags); in owl_gpio_free()
574 raw_spin_unlock_irqrestore(&pctrl->lock, flags); in owl_gpio_free()
579 struct owl_pinctrl *pctrl = gpiochip_get_data(chip); in owl_gpio_get() local
585 port = owl_gpio_get_port(pctrl, &offset); in owl_gpio_get()
589 gpio_base = pctrl->base + port->offset; in owl_gpio_get()
591 raw_spin_lock_irqsave(&pctrl->lock, flags); in owl_gpio_get()
593 raw_spin_unlock_irqrestore(&pctrl->lock, flags); in owl_gpio_get()
600 struct owl_pinctrl *pctrl = gpiochip_get_data(chip); in owl_gpio_set() local
605 port = owl_gpio_get_port(pctrl, &offset); in owl_gpio_set()
609 gpio_base = pctrl->base + port->offset; in owl_gpio_set()
611 raw_spin_lock_irqsave(&pctrl->lock, flags); in owl_gpio_set()
613 raw_spin_unlock_irqrestore(&pctrl->lock, flags); in owl_gpio_set()
618 struct owl_pinctrl *pctrl = gpiochip_get_data(chip); in owl_gpio_direction_input() local
623 port = owl_gpio_get_port(pctrl, &offset); in owl_gpio_direction_input()
627 gpio_base = pctrl->base + port->offset; in owl_gpio_direction_input()
629 raw_spin_lock_irqsave(&pctrl->lock, flags); in owl_gpio_direction_input()
632 raw_spin_unlock_irqrestore(&pctrl->lock, flags); in owl_gpio_direction_input()
640 struct owl_pinctrl *pctrl = gpiochip_get_data(chip); in owl_gpio_direction_output() local
645 port = owl_gpio_get_port(pctrl, &offset); in owl_gpio_direction_output()
649 gpio_base = pctrl->base + port->offset; in owl_gpio_direction_output()
651 raw_spin_lock_irqsave(&pctrl->lock, flags); in owl_gpio_direction_output()
655 raw_spin_unlock_irqrestore(&pctrl->lock, flags); in owl_gpio_direction_output()
660 static void irq_set_type(struct owl_pinctrl *pctrl, int gpio, unsigned int type) in irq_set_type() argument
675 if (owl_gpio_get(&pctrl->chip, gpio)) in irq_set_type()
701 port = owl_gpio_get_port(pctrl, &gpio); in irq_set_type()
705 gpio_base = pctrl->base + port->offset; in irq_set_type()
707 raw_spin_lock_irqsave(&pctrl->lock, flags); in irq_set_type()
715 raw_spin_unlock_irqrestore(&pctrl->lock, flags); in irq_set_type()
721 struct owl_pinctrl *pctrl = gpiochip_get_data(gc); in owl_gpio_irq_mask() local
728 port = owl_gpio_get_port(pctrl, &gpio); in owl_gpio_irq_mask()
732 gpio_base = pctrl->base + port->offset; in owl_gpio_irq_mask()
734 raw_spin_lock_irqsave(&pctrl->lock, flags); in owl_gpio_irq_mask()
744 raw_spin_unlock_irqrestore(&pctrl->lock, flags); in owl_gpio_irq_mask()
750 struct owl_pinctrl *pctrl = gpiochip_get_data(gc); in owl_gpio_irq_unmask() local
757 port = owl_gpio_get_port(pctrl, &gpio); in owl_gpio_irq_unmask()
761 gpio_base = pctrl->base + port->offset; in owl_gpio_irq_unmask()
762 raw_spin_lock_irqsave(&pctrl->lock, flags); in owl_gpio_irq_unmask()
773 raw_spin_unlock_irqrestore(&pctrl->lock, flags); in owl_gpio_irq_unmask()
779 struct owl_pinctrl *pctrl = gpiochip_get_data(gc); in owl_gpio_irq_ack() local
791 irq_set_type(pctrl, gpio, IRQ_TYPE_EDGE_FALLING); in owl_gpio_irq_ack()
793 irq_set_type(pctrl, gpio, IRQ_TYPE_EDGE_RISING); in owl_gpio_irq_ack()
796 port = owl_gpio_get_port(pctrl, &gpio); in owl_gpio_irq_ack()
800 gpio_base = pctrl->base + port->offset; in owl_gpio_irq_ack()
802 raw_spin_lock_irqsave(&pctrl->lock, flags); in owl_gpio_irq_ack()
807 raw_spin_unlock_irqrestore(&pctrl->lock, flags); in owl_gpio_irq_ack()
813 struct owl_pinctrl *pctrl = gpiochip_get_data(gc); in owl_gpio_irq_set_type() local
820 irq_set_type(pctrl, data->hwirq, type); in owl_gpio_irq_set_type()
827 struct owl_pinctrl *pctrl = irq_desc_get_handler_data(desc); in owl_gpio_irq_handler() local
829 struct irq_domain *domain = pctrl->chip.irq.domain; in owl_gpio_irq_handler()
838 for (i = 0; i < pctrl->soc->nports; i++) { in owl_gpio_irq_handler()
839 port = &pctrl->soc->ports[i]; in owl_gpio_irq_handler()
840 base = pctrl->base + port->offset; in owl_gpio_irq_handler()
843 if (parent != pctrl->irq[i]) in owl_gpio_irq_handler()
863 static int owl_gpio_init(struct owl_pinctrl *pctrl) in owl_gpio_init() argument
869 chip = &pctrl->chip; in owl_gpio_init()
871 chip->ngpio = pctrl->soc->ngpios; in owl_gpio_init()
872 chip->label = dev_name(pctrl->dev); in owl_gpio_init()
873 chip->parent = pctrl->dev; in owl_gpio_init()
875 chip->of_node = pctrl->dev->of_node; in owl_gpio_init()
877 pctrl->irq_chip.name = chip->of_node->name; in owl_gpio_init()
878 pctrl->irq_chip.irq_ack = owl_gpio_irq_ack; in owl_gpio_init()
879 pctrl->irq_chip.irq_mask = owl_gpio_irq_mask; in owl_gpio_init()
880 pctrl->irq_chip.irq_unmask = owl_gpio_irq_unmask; in owl_gpio_init()
881 pctrl->irq_chip.irq_set_type = owl_gpio_irq_set_type; in owl_gpio_init()
884 gpio_irq->chip = &pctrl->irq_chip; in owl_gpio_init()
888 gpio_irq->parent_handler_data = pctrl; in owl_gpio_init()
889 gpio_irq->num_parents = pctrl->num_irq; in owl_gpio_init()
890 gpio_irq->parents = pctrl->irq; in owl_gpio_init()
892 gpio_irq->map = devm_kcalloc(pctrl->dev, chip->ngpio, in owl_gpio_init()
897 for (i = 0, offset = 0; i < pctrl->soc->nports; i++) { in owl_gpio_init()
898 const struct owl_gpio_port *port = &pctrl->soc->ports[i]; in owl_gpio_init()
906 ret = gpiochip_add_data(&pctrl->chip, pctrl); in owl_gpio_init()
908 dev_err(pctrl->dev, "failed to register gpiochip\n"); in owl_gpio_init()
919 struct owl_pinctrl *pctrl; in owl_pinctrl_probe() local
922 pctrl = devm_kzalloc(&pdev->dev, sizeof(*pctrl), GFP_KERNEL); in owl_pinctrl_probe()
923 if (!pctrl) in owl_pinctrl_probe()
927 pctrl->base = devm_ioremap_resource(&pdev->dev, res); in owl_pinctrl_probe()
928 if (IS_ERR(pctrl->base)) in owl_pinctrl_probe()
929 return PTR_ERR(pctrl->base); in owl_pinctrl_probe()
932 pctrl->clk = devm_clk_get(&pdev->dev, NULL); in owl_pinctrl_probe()
933 if (IS_ERR(pctrl->clk)) { in owl_pinctrl_probe()
935 return PTR_ERR(pctrl->clk); in owl_pinctrl_probe()
938 ret = clk_prepare_enable(pctrl->clk); in owl_pinctrl_probe()
944 raw_spin_lock_init(&pctrl->lock); in owl_pinctrl_probe()
950 pctrl->chip.direction_input = owl_gpio_direction_input; in owl_pinctrl_probe()
951 pctrl->chip.direction_output = owl_gpio_direction_output; in owl_pinctrl_probe()
952 pctrl->chip.get = owl_gpio_get; in owl_pinctrl_probe()
953 pctrl->chip.set = owl_gpio_set; in owl_pinctrl_probe()
954 pctrl->chip.request = owl_gpio_request; in owl_pinctrl_probe()
955 pctrl->chip.free = owl_gpio_free; in owl_pinctrl_probe()
957 pctrl->soc = soc_data; in owl_pinctrl_probe()
958 pctrl->dev = &pdev->dev; in owl_pinctrl_probe()
960 pctrl->pctrldev = devm_pinctrl_register(&pdev->dev, in owl_pinctrl_probe()
961 &owl_pinctrl_desc, pctrl); in owl_pinctrl_probe()
962 if (IS_ERR(pctrl->pctrldev)) { in owl_pinctrl_probe()
964 ret = PTR_ERR(pctrl->pctrldev); in owl_pinctrl_probe()
972 pctrl->num_irq = ret; in owl_pinctrl_probe()
974 pctrl->irq = devm_kcalloc(&pdev->dev, pctrl->num_irq, in owl_pinctrl_probe()
975 sizeof(*pctrl->irq), GFP_KERNEL); in owl_pinctrl_probe()
976 if (!pctrl->irq) { in owl_pinctrl_probe()
981 for (i = 0; i < pctrl->num_irq ; i++) { in owl_pinctrl_probe()
985 pctrl->irq[i] = ret; in owl_pinctrl_probe()
988 ret = owl_gpio_init(pctrl); in owl_pinctrl_probe()
992 platform_set_drvdata(pdev, pctrl); in owl_pinctrl_probe()
997 clk_disable_unprepare(pctrl->clk); in owl_pinctrl_probe()