Lines Matching refs:pctrl

110 static struct intel_community *intel_get_community(struct intel_pinctrl *pctrl,  in intel_get_community()  argument
116 for (i = 0; i < pctrl->ncommunities; i++) { in intel_get_community()
117 community = &pctrl->communities[i]; in intel_get_community()
123 dev_warn(pctrl->dev, "failed to find community for pin %u\n", pin); in intel_get_community()
127 static void __iomem *intel_get_padcfg(struct intel_pinctrl *pctrl, unsigned pin, in intel_get_padcfg() argument
133 community = intel_get_community(pctrl, pin); in intel_get_padcfg()
141 static bool intel_pad_owned_by_host(struct intel_pinctrl *pctrl, unsigned pin) in intel_pad_owned_by_host() argument
147 community = intel_get_community(pctrl, pin); in intel_pad_owned_by_host()
162 static bool intel_pad_reserved_for_acpi(struct intel_pinctrl *pctrl, in intel_pad_reserved_for_acpi() argument
169 community = intel_get_community(pctrl, pin); in intel_pad_reserved_for_acpi()
183 static bool intel_pad_locked(struct intel_pinctrl *pctrl, unsigned pin) in intel_pad_locked() argument
189 community = intel_get_community(pctrl, pin); in intel_pad_locked()
216 static bool intel_pad_usable(struct intel_pinctrl *pctrl, unsigned pin) in intel_pad_usable() argument
218 return intel_pad_owned_by_host(pctrl, pin) && in intel_pad_usable()
219 !intel_pad_reserved_for_acpi(pctrl, pin) && in intel_pad_usable()
220 !intel_pad_locked(pctrl, pin); in intel_pad_usable()
225 struct intel_pinctrl *pctrl = pinctrl_dev_get_drvdata(pctldev); in intel_get_groups_count() local
227 return pctrl->soc->ngroups; in intel_get_groups_count()
233 struct intel_pinctrl *pctrl = pinctrl_dev_get_drvdata(pctldev); in intel_get_group_name() local
235 return pctrl->soc->groups[group].name; in intel_get_group_name()
241 struct intel_pinctrl *pctrl = pinctrl_dev_get_drvdata(pctldev); in intel_get_group_pins() local
243 *pins = pctrl->soc->groups[group].pins; in intel_get_group_pins()
244 *npins = pctrl->soc->groups[group].npins; in intel_get_group_pins()
251 struct intel_pinctrl *pctrl = pinctrl_dev_get_drvdata(pctldev); in intel_pin_dbg_show() local
255 if (!intel_pad_owned_by_host(pctrl, pin)) { in intel_pin_dbg_show()
260 cfg0 = readl(intel_get_padcfg(pctrl, pin, PADCFG0)); in intel_pin_dbg_show()
261 cfg1 = readl(intel_get_padcfg(pctrl, pin, PADCFG1)); in intel_pin_dbg_show()
271 locked = intel_pad_locked(pctrl, pin); in intel_pin_dbg_show()
272 acpi = intel_pad_reserved_for_acpi(pctrl, pin); in intel_pin_dbg_show()
296 struct intel_pinctrl *pctrl = pinctrl_dev_get_drvdata(pctldev); in intel_get_functions_count() local
298 return pctrl->soc->nfunctions; in intel_get_functions_count()
304 struct intel_pinctrl *pctrl = pinctrl_dev_get_drvdata(pctldev); in intel_get_function_name() local
306 return pctrl->soc->functions[function].name; in intel_get_function_name()
314 struct intel_pinctrl *pctrl = pinctrl_dev_get_drvdata(pctldev); in intel_get_function_groups() local
316 *groups = pctrl->soc->functions[function].groups; in intel_get_function_groups()
317 *ngroups = pctrl->soc->functions[function].ngroups; in intel_get_function_groups()
324 struct intel_pinctrl *pctrl = pinctrl_dev_get_drvdata(pctldev); in intel_pinmux_set_mux() local
325 const struct intel_pingroup *grp = &pctrl->soc->groups[group]; in intel_pinmux_set_mux()
329 spin_lock_irqsave(&pctrl->lock, flags); in intel_pinmux_set_mux()
336 if (!intel_pad_usable(pctrl, grp->pins[i])) { in intel_pinmux_set_mux()
337 spin_unlock_irqrestore(&pctrl->lock, flags); in intel_pinmux_set_mux()
347 padcfg0 = intel_get_padcfg(pctrl, grp->pins[i], PADCFG0); in intel_pinmux_set_mux()
356 spin_unlock_irqrestore(&pctrl->lock, flags); in intel_pinmux_set_mux()
365 struct intel_pinctrl *pctrl = pinctrl_dev_get_drvdata(pctldev); in intel_gpio_request_enable() local
370 spin_lock_irqsave(&pctrl->lock, flags); in intel_gpio_request_enable()
372 if (!intel_pad_usable(pctrl, pin)) { in intel_gpio_request_enable()
373 spin_unlock_irqrestore(&pctrl->lock, flags); in intel_gpio_request_enable()
377 padcfg0 = intel_get_padcfg(pctrl, pin, PADCFG0); in intel_gpio_request_enable()
388 spin_unlock_irqrestore(&pctrl->lock, flags); in intel_gpio_request_enable()
397 struct intel_pinctrl *pctrl = pinctrl_dev_get_drvdata(pctldev); in intel_gpio_set_direction() local
402 spin_lock_irqsave(&pctrl->lock, flags); in intel_gpio_set_direction()
404 padcfg0 = intel_get_padcfg(pctrl, pin, PADCFG0); in intel_gpio_set_direction()
413 spin_unlock_irqrestore(&pctrl->lock, flags); in intel_gpio_set_direction()
430 struct intel_pinctrl *pctrl = pinctrl_dev_get_drvdata(pctldev); in intel_config_get() local
435 if (!intel_pad_owned_by_host(pctrl, pin)) in intel_config_get()
438 value = readl(intel_get_padcfg(pctrl, pin, PADCFG1)); in intel_config_get()
491 static int intel_config_set_pull(struct intel_pinctrl *pctrl, unsigned pin, in intel_config_set_pull() argument
501 spin_lock_irqsave(&pctrl->lock, flags); in intel_config_set_pull()
503 padcfg1 = intel_get_padcfg(pctrl, pin, PADCFG1); in intel_config_set_pull()
555 spin_unlock_irqrestore(&pctrl->lock, flags); in intel_config_set_pull()
563 struct intel_pinctrl *pctrl = pinctrl_dev_get_drvdata(pctldev); in intel_config_set() local
566 if (!intel_pad_usable(pctrl, pin)) in intel_config_set()
574 ret = intel_config_set_pull(pctrl, pin, configs[i]); in intel_config_set()
612 struct intel_pinctrl *pctrl = gpiochip_to_pinctrl(chip); in intel_gpio_get() local
615 reg = intel_get_padcfg(pctrl, offset, PADCFG0); in intel_gpio_get()
624 struct intel_pinctrl *pctrl = gpiochip_to_pinctrl(chip); in intel_gpio_set() local
627 reg = intel_get_padcfg(pctrl, offset, PADCFG0); in intel_gpio_set()
632 spin_lock_irqsave(&pctrl->lock, flags); in intel_gpio_set()
639 spin_unlock_irqrestore(&pctrl->lock, flags); in intel_gpio_set()
668 struct intel_pinctrl *pctrl = gpiochip_to_pinctrl(gc); in intel_gpio_irq_ack() local
672 spin_lock(&pctrl->lock); in intel_gpio_irq_ack()
674 community = intel_get_community(pctrl, pin); in intel_gpio_irq_ack()
683 spin_unlock(&pctrl->lock); in intel_gpio_irq_ack()
689 struct intel_pinctrl *pctrl = gpiochip_to_pinctrl(gc); in intel_gpio_irq_mask_unmask() local
694 spin_lock_irqsave(&pctrl->lock, flags); in intel_gpio_irq_mask_unmask()
696 community = intel_get_community(pctrl, pin); in intel_gpio_irq_mask_unmask()
713 spin_unlock_irqrestore(&pctrl->lock, flags); in intel_gpio_irq_mask_unmask()
729 struct intel_pinctrl *pctrl = gpiochip_to_pinctrl(gc); in intel_gpio_irq_type() local
735 reg = intel_get_padcfg(pctrl, pin, PADCFG0); in intel_gpio_irq_type()
739 spin_lock_irqsave(&pctrl->lock, flags); in intel_gpio_irq_type()
765 spin_unlock_irqrestore(&pctrl->lock, flags); in intel_gpio_irq_type()
773 struct intel_pinctrl *pctrl = gpiochip_to_pinctrl(gc); in intel_gpio_irq_wake() local
779 community = intel_get_community(pctrl, pin); in intel_gpio_irq_wake()
802 dev_dbg(pctrl->dev, "%sable wake for pin %u\n", on ? "en" : "dis", pin); in intel_gpio_irq_wake()
842 struct intel_pinctrl *pctrl = gpiochip_to_pinctrl(gc); in intel_gpio_irq_handler() local
849 for (i = 0; i < pctrl->ncommunities; i++) in intel_gpio_irq_handler()
850 intel_gpio_community_irq_handler(gc, &pctrl->communities[i]); in intel_gpio_irq_handler()
864 static void intel_gpio_irq_init(struct intel_pinctrl *pctrl) in intel_gpio_irq_init() argument
868 for (i = 0; i < pctrl->ncommunities; i++) { in intel_gpio_irq_init()
873 community = &pctrl->communities[i]; in intel_gpio_irq_init()
884 static int intel_gpio_probe(struct intel_pinctrl *pctrl, int irq) in intel_gpio_probe() argument
888 pctrl->chip = intel_gpio_chip; in intel_gpio_probe()
890 pctrl->chip.ngpio = pctrl->soc->npins; in intel_gpio_probe()
891 pctrl->chip.label = dev_name(pctrl->dev); in intel_gpio_probe()
892 pctrl->chip.dev = pctrl->dev; in intel_gpio_probe()
893 pctrl->chip.base = -1; in intel_gpio_probe()
895 ret = gpiochip_add(&pctrl->chip); in intel_gpio_probe()
897 dev_err(pctrl->dev, "failed to register gpiochip\n"); in intel_gpio_probe()
901 ret = gpiochip_add_pin_range(&pctrl->chip, dev_name(pctrl->dev), in intel_gpio_probe()
902 0, 0, pctrl->soc->npins); in intel_gpio_probe()
904 dev_err(pctrl->dev, "failed to add GPIO pin range\n"); in intel_gpio_probe()
905 gpiochip_remove(&pctrl->chip); in intel_gpio_probe()
909 ret = gpiochip_irqchip_add(&pctrl->chip, &intel_gpio_irqchip, 0, in intel_gpio_probe()
912 dev_err(pctrl->dev, "failed to add irqchip\n"); in intel_gpio_probe()
913 gpiochip_remove(&pctrl->chip); in intel_gpio_probe()
917 gpiochip_set_chained_irqchip(&pctrl->chip, &intel_gpio_irqchip, irq, in intel_gpio_probe()
922 static int intel_pinctrl_pm_init(struct intel_pinctrl *pctrl) in intel_pinctrl_pm_init() argument
925 const struct intel_pinctrl_soc_data *soc = pctrl->soc; in intel_pinctrl_pm_init()
930 pads = devm_kcalloc(pctrl->dev, soc->npins, sizeof(*pads), GFP_KERNEL); in intel_pinctrl_pm_init()
934 communities = devm_kcalloc(pctrl->dev, pctrl->ncommunities, in intel_pinctrl_pm_init()
940 for (i = 0; i < pctrl->ncommunities; i++) { in intel_pinctrl_pm_init()
941 struct intel_community *community = &pctrl->communities[i]; in intel_pinctrl_pm_init()
944 intmask = devm_kcalloc(pctrl->dev, community->ngpps, in intel_pinctrl_pm_init()
952 pctrl->context.pads = pads; in intel_pinctrl_pm_init()
953 pctrl->context.communities = communities; in intel_pinctrl_pm_init()
962 struct intel_pinctrl *pctrl; in intel_pinctrl_probe() local
968 pctrl = devm_kzalloc(&pdev->dev, sizeof(*pctrl), GFP_KERNEL); in intel_pinctrl_probe()
969 if (!pctrl) in intel_pinctrl_probe()
972 pctrl->dev = &pdev->dev; in intel_pinctrl_probe()
973 pctrl->soc = soc_data; in intel_pinctrl_probe()
974 spin_lock_init(&pctrl->lock); in intel_pinctrl_probe()
980 pctrl->ncommunities = pctrl->soc->ncommunities; in intel_pinctrl_probe()
981 pctrl->communities = devm_kcalloc(&pdev->dev, pctrl->ncommunities, in intel_pinctrl_probe()
982 sizeof(*pctrl->communities), GFP_KERNEL); in intel_pinctrl_probe()
983 if (!pctrl->communities) in intel_pinctrl_probe()
986 for (i = 0; i < pctrl->ncommunities; i++) { in intel_pinctrl_probe()
987 struct intel_community *community = &pctrl->communities[i]; in intel_pinctrl_probe()
992 *community = pctrl->soc->communities[i]; in intel_pinctrl_probe()
1014 ret = intel_pinctrl_pm_init(pctrl); in intel_pinctrl_probe()
1018 pctrl->pctldesc = intel_pinctrl_desc; in intel_pinctrl_probe()
1019 pctrl->pctldesc.name = dev_name(&pdev->dev); in intel_pinctrl_probe()
1020 pctrl->pctldesc.pins = pctrl->soc->pins; in intel_pinctrl_probe()
1021 pctrl->pctldesc.npins = pctrl->soc->npins; in intel_pinctrl_probe()
1023 pctrl->pctldev = pinctrl_register(&pctrl->pctldesc, &pdev->dev, pctrl); in intel_pinctrl_probe()
1024 if (!pctrl->pctldev) { in intel_pinctrl_probe()
1029 ret = intel_gpio_probe(pctrl, irq); in intel_pinctrl_probe()
1031 pinctrl_unregister(pctrl->pctldev); in intel_pinctrl_probe()
1035 platform_set_drvdata(pdev, pctrl); in intel_pinctrl_probe()
1043 struct intel_pinctrl *pctrl = platform_get_drvdata(pdev); in intel_pinctrl_remove() local
1045 gpiochip_remove(&pctrl->chip); in intel_pinctrl_remove()
1046 pinctrl_unregister(pctrl->pctldev); in intel_pinctrl_remove()
1056 struct intel_pinctrl *pctrl = platform_get_drvdata(pdev); in intel_pinctrl_suspend() local
1061 pads = pctrl->context.pads; in intel_pinctrl_suspend()
1062 for (i = 0; i < pctrl->soc->npins; i++) { in intel_pinctrl_suspend()
1063 const struct pinctrl_pin_desc *desc = &pctrl->soc->pins[i]; in intel_pinctrl_suspend()
1066 if (!intel_pad_usable(pctrl, desc->number)) in intel_pinctrl_suspend()
1069 val = readl(intel_get_padcfg(pctrl, desc->number, PADCFG0)); in intel_pinctrl_suspend()
1071 val = readl(intel_get_padcfg(pctrl, desc->number, PADCFG1)); in intel_pinctrl_suspend()
1075 communities = pctrl->context.communities; in intel_pinctrl_suspend()
1076 for (i = 0; i < pctrl->ncommunities; i++) { in intel_pinctrl_suspend()
1077 struct intel_community *community = &pctrl->communities[i]; in intel_pinctrl_suspend()
1093 struct intel_pinctrl *pctrl = platform_get_drvdata(pdev); in intel_pinctrl_resume() local
1099 intel_gpio_irq_init(pctrl); in intel_pinctrl_resume()
1101 pads = pctrl->context.pads; in intel_pinctrl_resume()
1102 for (i = 0; i < pctrl->soc->npins; i++) { in intel_pinctrl_resume()
1103 const struct pinctrl_pin_desc *desc = &pctrl->soc->pins[i]; in intel_pinctrl_resume()
1107 if (!intel_pad_usable(pctrl, desc->number)) in intel_pinctrl_resume()
1110 padcfg = intel_get_padcfg(pctrl, desc->number, PADCFG0); in intel_pinctrl_resume()
1118 padcfg = intel_get_padcfg(pctrl, desc->number, PADCFG1); in intel_pinctrl_resume()
1127 communities = pctrl->context.communities; in intel_pinctrl_resume()
1128 for (i = 0; i < pctrl->ncommunities; i++) { in intel_pinctrl_resume()
1129 struct intel_community *community = &pctrl->communities[i]; in intel_pinctrl_resume()