Lines Matching refs:pctrl
69 static u32 owl_read_field(struct owl_pinctrl *pctrl, u32 reg, in owl_read_field() argument
74 tmp = readl_relaxed(pctrl->base + reg); in owl_read_field()
80 static void owl_write_field(struct owl_pinctrl *pctrl, u32 reg, u32 arg, in owl_write_field() argument
88 owl_update_bits(pctrl->base + reg, mask, (arg << bit)); in owl_write_field()
93 struct owl_pinctrl *pctrl = pinctrl_dev_get_drvdata(pctrldev); in owl_get_groups_count() local
95 return pctrl->soc->ngroups; in owl_get_groups_count()
101 struct owl_pinctrl *pctrl = pinctrl_dev_get_drvdata(pctrldev); in owl_get_group_name() local
103 return pctrl->soc->groups[group].name; in owl_get_group_name()
111 struct owl_pinctrl *pctrl = pinctrl_dev_get_drvdata(pctrldev); in owl_get_group_pins() local
113 *pins = pctrl->soc->groups[group].pads; in owl_get_group_pins()
114 *num_pins = pctrl->soc->groups[group].npads; in owl_get_group_pins()
123 struct owl_pinctrl *pctrl = pinctrl_dev_get_drvdata(pctrldev); in owl_pin_dbg_show() local
125 seq_printf(s, "%s", dev_name(pctrl->dev)); in owl_pin_dbg_show()
139 struct owl_pinctrl *pctrl = pinctrl_dev_get_drvdata(pctrldev); in owl_get_funcs_count() local
141 return pctrl->soc->nfunctions; in owl_get_funcs_count()
147 struct owl_pinctrl *pctrl = pinctrl_dev_get_drvdata(pctrldev); in owl_get_func_name() local
149 return pctrl->soc->functions[function].name; in owl_get_func_name()
157 struct owl_pinctrl *pctrl = pinctrl_dev_get_drvdata(pctrldev); in owl_get_func_groups() local
159 *groups = pctrl->soc->functions[function].groups; in owl_get_func_groups()
160 *num_groups = pctrl->soc->functions[function].ngroups; in owl_get_func_groups()
196 struct owl_pinctrl *pctrl = pinctrl_dev_get_drvdata(pctrldev); in owl_set_mux() local
201 g = &pctrl->soc->groups[group]; in owl_set_mux()
206 raw_spin_lock_irqsave(&pctrl->lock, flags); in owl_set_mux()
208 owl_update_bits(pctrl->base + g->mfpctl_reg, mask, val); in owl_set_mux()
210 raw_spin_unlock_irqrestore(&pctrl->lock, flags); in owl_set_mux()
258 struct owl_pinctrl *pctrl = pinctrl_dev_get_drvdata(pctrldev); in owl_pin_config_get() local
263 info = &pctrl->soc->padinfo[pin]; in owl_pin_config_get()
269 arg = owl_read_field(pctrl, reg, bit, width); in owl_pin_config_get()
271 if (!pctrl->soc->padctl_val2arg) in owl_pin_config_get()
274 ret = pctrl->soc->padctl_val2arg(info, param, &arg); in owl_pin_config_get()
288 struct owl_pinctrl *pctrl = pinctrl_dev_get_drvdata(pctrldev); in owl_pin_config_set() local
295 info = &pctrl->soc->padinfo[pin]; in owl_pin_config_set()
305 if (!pctrl->soc->padctl_arg2val) in owl_pin_config_set()
308 ret = pctrl->soc->padctl_arg2val(info, param, &arg); in owl_pin_config_set()
312 raw_spin_lock_irqsave(&pctrl->lock, flags); in owl_pin_config_set()
314 owl_write_field(pctrl, reg, arg, bit, width); in owl_pin_config_set()
316 raw_spin_unlock_irqrestore(&pctrl->lock, flags); in owl_pin_config_set()
427 struct owl_pinctrl *pctrl = pinctrl_dev_get_drvdata(pctrldev); in owl_group_config_get() local
432 g = &pctrl->soc->groups[group]; in owl_group_config_get()
438 arg = owl_read_field(pctrl, reg, bit, width); in owl_group_config_get()
455 struct owl_pinctrl *pctrl = pinctrl_dev_get_drvdata(pctrldev); in owl_group_config_set() local
461 g = &pctrl->soc->groups[group]; in owl_group_config_set()
476 raw_spin_lock_irqsave(&pctrl->lock, flags); in owl_group_config_set()
478 owl_write_field(pctrl, reg, arg, bit, width); in owl_group_config_set()
480 raw_spin_unlock_irqrestore(&pctrl->lock, flags); in owl_group_config_set()
502 owl_gpio_get_port(struct owl_pinctrl *pctrl, unsigned int *pin) in owl_gpio_get_port() argument
506 for (i = 0; i < pctrl->soc->nports; i++) { in owl_gpio_get_port()
507 const struct owl_gpio_port *port = &pctrl->soc->ports[i]; in owl_gpio_get_port()
536 struct owl_pinctrl *pctrl = gpiochip_get_data(chip); in owl_gpio_request() local
541 port = owl_gpio_get_port(pctrl, &offset); in owl_gpio_request()
545 gpio_base = pctrl->base + port->offset; in owl_gpio_request()
551 raw_spin_lock_irqsave(&pctrl->lock, flags); in owl_gpio_request()
553 raw_spin_unlock_irqrestore(&pctrl->lock, flags); in owl_gpio_request()
560 struct owl_pinctrl *pctrl = gpiochip_get_data(chip); in owl_gpio_free() local
565 port = owl_gpio_get_port(pctrl, &offset); in owl_gpio_free()
569 gpio_base = pctrl->base + port->offset; in owl_gpio_free()
571 raw_spin_lock_irqsave(&pctrl->lock, flags); in owl_gpio_free()
577 raw_spin_unlock_irqrestore(&pctrl->lock, flags); in owl_gpio_free()
582 struct owl_pinctrl *pctrl = gpiochip_get_data(chip); in owl_gpio_get() local
588 port = owl_gpio_get_port(pctrl, &offset); in owl_gpio_get()
592 gpio_base = pctrl->base + port->offset; in owl_gpio_get()
594 raw_spin_lock_irqsave(&pctrl->lock, flags); in owl_gpio_get()
596 raw_spin_unlock_irqrestore(&pctrl->lock, flags); in owl_gpio_get()
603 struct owl_pinctrl *pctrl = gpiochip_get_data(chip); in owl_gpio_set() local
608 port = owl_gpio_get_port(pctrl, &offset); in owl_gpio_set()
612 gpio_base = pctrl->base + port->offset; in owl_gpio_set()
614 raw_spin_lock_irqsave(&pctrl->lock, flags); in owl_gpio_set()
616 raw_spin_unlock_irqrestore(&pctrl->lock, flags); in owl_gpio_set()
623 struct owl_pinctrl *pctrl = gpiochip_get_data(chip); in owl_gpio_direction_input() local
628 port = owl_gpio_get_port(pctrl, &offset); in owl_gpio_direction_input()
632 gpio_base = pctrl->base + port->offset; in owl_gpio_direction_input()
634 raw_spin_lock_irqsave(&pctrl->lock, flags); in owl_gpio_direction_input()
637 raw_spin_unlock_irqrestore(&pctrl->lock, flags); in owl_gpio_direction_input()
645 struct owl_pinctrl *pctrl = gpiochip_get_data(chip); in owl_gpio_direction_output() local
650 port = owl_gpio_get_port(pctrl, &offset); in owl_gpio_direction_output()
654 gpio_base = pctrl->base + port->offset; in owl_gpio_direction_output()
656 raw_spin_lock_irqsave(&pctrl->lock, flags); in owl_gpio_direction_output()
660 raw_spin_unlock_irqrestore(&pctrl->lock, flags); in owl_gpio_direction_output()
665 static void irq_set_type(struct owl_pinctrl *pctrl, int gpio, unsigned int type) in irq_set_type() argument
680 if (owl_gpio_get(&pctrl->chip, gpio)) in irq_set_type()
706 port = owl_gpio_get_port(pctrl, &gpio); in irq_set_type()
710 gpio_base = pctrl->base + port->offset; in irq_set_type()
712 raw_spin_lock_irqsave(&pctrl->lock, flags); in irq_set_type()
720 raw_spin_unlock_irqrestore(&pctrl->lock, flags); in irq_set_type()
726 struct owl_pinctrl *pctrl = gpiochip_get_data(gc); in owl_gpio_irq_mask() local
734 port = owl_gpio_get_port(pctrl, &gpio); in owl_gpio_irq_mask()
738 gpio_base = pctrl->base + port->offset; in owl_gpio_irq_mask()
740 raw_spin_lock_irqsave(&pctrl->lock, flags); in owl_gpio_irq_mask()
750 raw_spin_unlock_irqrestore(&pctrl->lock, flags); in owl_gpio_irq_mask()
758 struct owl_pinctrl *pctrl = gpiochip_get_data(gc); in owl_gpio_irq_unmask() local
766 port = owl_gpio_get_port(pctrl, &gpio); in owl_gpio_irq_unmask()
772 gpio_base = pctrl->base + port->offset; in owl_gpio_irq_unmask()
773 raw_spin_lock_irqsave(&pctrl->lock, flags); in owl_gpio_irq_unmask()
784 raw_spin_unlock_irqrestore(&pctrl->lock, flags); in owl_gpio_irq_unmask()
790 struct owl_pinctrl *pctrl = gpiochip_get_data(gc); in owl_gpio_irq_ack() local
803 irq_set_type(pctrl, hwirq, IRQ_TYPE_EDGE_FALLING); in owl_gpio_irq_ack()
805 irq_set_type(pctrl, hwirq, IRQ_TYPE_EDGE_RISING); in owl_gpio_irq_ack()
808 port = owl_gpio_get_port(pctrl, &gpio); in owl_gpio_irq_ack()
812 gpio_base = pctrl->base + port->offset; in owl_gpio_irq_ack()
814 raw_spin_lock_irqsave(&pctrl->lock, flags); in owl_gpio_irq_ack()
819 raw_spin_unlock_irqrestore(&pctrl->lock, flags); in owl_gpio_irq_ack()
825 struct owl_pinctrl *pctrl = gpiochip_get_data(gc); in owl_gpio_irq_set_type() local
832 irq_set_type(pctrl, data->hwirq, type); in owl_gpio_irq_set_type()
849 struct owl_pinctrl *pctrl = irq_desc_get_handler_data(desc); in owl_gpio_irq_handler() local
851 struct irq_domain *domain = pctrl->chip.irq.domain; in owl_gpio_irq_handler()
860 for (i = 0; i < pctrl->soc->nports; i++) { in owl_gpio_irq_handler()
861 port = &pctrl->soc->ports[i]; in owl_gpio_irq_handler()
862 base = pctrl->base + port->offset; in owl_gpio_irq_handler()
865 if (parent != pctrl->irq[i]) in owl_gpio_irq_handler()
884 static int owl_gpio_init(struct owl_pinctrl *pctrl) in owl_gpio_init() argument
890 chip = &pctrl->chip; in owl_gpio_init()
892 chip->ngpio = pctrl->soc->ngpios; in owl_gpio_init()
893 chip->label = dev_name(pctrl->dev); in owl_gpio_init()
894 chip->parent = pctrl->dev; in owl_gpio_init()
902 gpio_irq->parent_handler_data = pctrl; in owl_gpio_init()
903 gpio_irq->num_parents = pctrl->num_irq; in owl_gpio_init()
904 gpio_irq->parents = pctrl->irq; in owl_gpio_init()
906 gpio_irq->map = devm_kcalloc(pctrl->dev, chip->ngpio, in owl_gpio_init()
911 for (i = 0, offset = 0; i < pctrl->soc->nports; i++) { in owl_gpio_init()
912 const struct owl_gpio_port *port = &pctrl->soc->ports[i]; in owl_gpio_init()
920 ret = gpiochip_add_data(&pctrl->chip, pctrl); in owl_gpio_init()
922 dev_err(pctrl->dev, "failed to register gpiochip\n"); in owl_gpio_init()
932 struct owl_pinctrl *pctrl; in owl_pinctrl_probe() local
935 pctrl = devm_kzalloc(&pdev->dev, sizeof(*pctrl), GFP_KERNEL); in owl_pinctrl_probe()
936 if (!pctrl) in owl_pinctrl_probe()
939 pctrl->base = devm_platform_ioremap_resource(pdev, 0); in owl_pinctrl_probe()
940 if (IS_ERR(pctrl->base)) in owl_pinctrl_probe()
941 return PTR_ERR(pctrl->base); in owl_pinctrl_probe()
944 pctrl->clk = devm_clk_get(&pdev->dev, NULL); in owl_pinctrl_probe()
945 if (IS_ERR(pctrl->clk)) { in owl_pinctrl_probe()
947 return PTR_ERR(pctrl->clk); in owl_pinctrl_probe()
950 ret = clk_prepare_enable(pctrl->clk); in owl_pinctrl_probe()
956 raw_spin_lock_init(&pctrl->lock); in owl_pinctrl_probe()
962 pctrl->chip.direction_input = owl_gpio_direction_input; in owl_pinctrl_probe()
963 pctrl->chip.direction_output = owl_gpio_direction_output; in owl_pinctrl_probe()
964 pctrl->chip.get = owl_gpio_get; in owl_pinctrl_probe()
965 pctrl->chip.set = owl_gpio_set; in owl_pinctrl_probe()
966 pctrl->chip.request = owl_gpio_request; in owl_pinctrl_probe()
967 pctrl->chip.free = owl_gpio_free; in owl_pinctrl_probe()
969 pctrl->soc = soc_data; in owl_pinctrl_probe()
970 pctrl->dev = &pdev->dev; in owl_pinctrl_probe()
972 pctrl->pctrldev = devm_pinctrl_register(&pdev->dev, in owl_pinctrl_probe()
973 &owl_pinctrl_desc, pctrl); in owl_pinctrl_probe()
974 if (IS_ERR(pctrl->pctrldev)) { in owl_pinctrl_probe()
976 ret = PTR_ERR(pctrl->pctrldev); in owl_pinctrl_probe()
984 pctrl->num_irq = ret; in owl_pinctrl_probe()
986 pctrl->irq = devm_kcalloc(&pdev->dev, pctrl->num_irq, in owl_pinctrl_probe()
987 sizeof(*pctrl->irq), GFP_KERNEL); in owl_pinctrl_probe()
988 if (!pctrl->irq) { in owl_pinctrl_probe()
993 for (i = 0; i < pctrl->num_irq ; i++) { in owl_pinctrl_probe()
997 pctrl->irq[i] = ret; in owl_pinctrl_probe()
1000 ret = owl_gpio_init(pctrl); in owl_pinctrl_probe()
1004 platform_set_drvdata(pdev, pctrl); in owl_pinctrl_probe()
1009 clk_disable_unprepare(pctrl->clk); in owl_pinctrl_probe()