Lines Matching refs:pctrl
124 static struct intel_community *intel_get_community(struct intel_pinctrl *pctrl, in intel_get_community() argument
130 for (i = 0; i < pctrl->ncommunities; i++) { in intel_get_community()
131 community = &pctrl->communities[i]; in intel_get_community()
137 dev_warn(pctrl->dev, "failed to find community for pin %u\n", pin); in intel_get_community()
157 static void __iomem *intel_get_padcfg(struct intel_pinctrl *pctrl, in intel_get_padcfg() argument
164 community = intel_get_community(pctrl, pin); in intel_get_padcfg()
177 static bool intel_pad_owned_by_host(struct intel_pinctrl *pctrl, unsigned int pin) in intel_pad_owned_by_host() argument
184 community = intel_get_community(pctrl, pin); in intel_pad_owned_by_host()
202 static bool intel_pad_acpi_mode(struct intel_pinctrl *pctrl, unsigned int pin) in intel_pad_acpi_mode() argument
209 community = intel_get_community(pctrl, pin); in intel_pad_acpi_mode()
245 static int intel_pad_locked(struct intel_pinctrl *pctrl, unsigned int pin) in intel_pad_locked() argument
253 community = intel_get_community(pctrl, pin); in intel_pad_locked()
283 static bool intel_pad_is_unlocked(struct intel_pinctrl *pctrl, unsigned int pin) in intel_pad_is_unlocked() argument
285 return (intel_pad_locked(pctrl, pin) & PAD_LOCKED) == PAD_UNLOCKED; in intel_pad_is_unlocked()
288 static bool intel_pad_usable(struct intel_pinctrl *pctrl, unsigned int pin) in intel_pad_usable() argument
290 return intel_pad_owned_by_host(pctrl, pin) && intel_pad_is_unlocked(pctrl, pin); in intel_pad_usable()
295 struct intel_pinctrl *pctrl = pinctrl_dev_get_drvdata(pctldev); in intel_get_groups_count() local
297 return pctrl->soc->ngroups; in intel_get_groups_count()
303 struct intel_pinctrl *pctrl = pinctrl_dev_get_drvdata(pctldev); in intel_get_group_name() local
305 return pctrl->soc->groups[group].name; in intel_get_group_name()
311 struct intel_pinctrl *pctrl = pinctrl_dev_get_drvdata(pctldev); in intel_get_group_pins() local
313 *pins = pctrl->soc->groups[group].pins; in intel_get_group_pins()
314 *npins = pctrl->soc->groups[group].npins; in intel_get_group_pins()
321 struct intel_pinctrl *pctrl = pinctrl_dev_get_drvdata(pctldev); in intel_pin_dbg_show() local
327 if (!intel_pad_owned_by_host(pctrl, pin)) { in intel_pin_dbg_show()
332 cfg0 = readl(intel_get_padcfg(pctrl, pin, PADCFG0)); in intel_pin_dbg_show()
333 cfg1 = readl(intel_get_padcfg(pctrl, pin, PADCFG1)); in intel_pin_dbg_show()
344 padcfg = intel_get_padcfg(pctrl, pin, PADCFG2); in intel_pin_dbg_show()
348 locked = intel_pad_locked(pctrl, pin); in intel_pin_dbg_show()
349 acpi = intel_pad_acpi_mode(pctrl, pin); in intel_pin_dbg_show()
378 struct intel_pinctrl *pctrl = pinctrl_dev_get_drvdata(pctldev); in intel_get_functions_count() local
380 return pctrl->soc->nfunctions; in intel_get_functions_count()
386 struct intel_pinctrl *pctrl = pinctrl_dev_get_drvdata(pctldev); in intel_get_function_name() local
388 return pctrl->soc->functions[function].name; in intel_get_function_name()
396 struct intel_pinctrl *pctrl = pinctrl_dev_get_drvdata(pctldev); in intel_get_function_groups() local
398 *groups = pctrl->soc->functions[function].groups; in intel_get_function_groups()
399 *ngroups = pctrl->soc->functions[function].ngroups; in intel_get_function_groups()
406 struct intel_pinctrl *pctrl = pinctrl_dev_get_drvdata(pctldev); in intel_pinmux_set_mux() local
407 const struct intel_pingroup *grp = &pctrl->soc->groups[group]; in intel_pinmux_set_mux()
411 raw_spin_lock_irqsave(&pctrl->lock, flags); in intel_pinmux_set_mux()
418 if (!intel_pad_usable(pctrl, grp->pins[i])) { in intel_pinmux_set_mux()
419 raw_spin_unlock_irqrestore(&pctrl->lock, flags); in intel_pinmux_set_mux()
429 padcfg0 = intel_get_padcfg(pctrl, grp->pins[i], PADCFG0); in intel_pinmux_set_mux()
442 raw_spin_unlock_irqrestore(&pctrl->lock, flags); in intel_pinmux_set_mux()
483 struct intel_pinctrl *pctrl = pinctrl_dev_get_drvdata(pctldev); in intel_gpio_request_enable() local
487 raw_spin_lock_irqsave(&pctrl->lock, flags); in intel_gpio_request_enable()
489 if (!intel_pad_owned_by_host(pctrl, pin)) { in intel_gpio_request_enable()
490 raw_spin_unlock_irqrestore(&pctrl->lock, flags); in intel_gpio_request_enable()
494 if (!intel_pad_is_unlocked(pctrl, pin)) { in intel_gpio_request_enable()
495 raw_spin_unlock_irqrestore(&pctrl->lock, flags); in intel_gpio_request_enable()
499 padcfg0 = intel_get_padcfg(pctrl, pin, PADCFG0); in intel_gpio_request_enable()
508 raw_spin_unlock_irqrestore(&pctrl->lock, flags); in intel_gpio_request_enable()
517 raw_spin_unlock_irqrestore(&pctrl->lock, flags); in intel_gpio_request_enable()
526 struct intel_pinctrl *pctrl = pinctrl_dev_get_drvdata(pctldev); in intel_gpio_set_direction() local
530 raw_spin_lock_irqsave(&pctrl->lock, flags); in intel_gpio_set_direction()
532 padcfg0 = intel_get_padcfg(pctrl, pin, PADCFG0); in intel_gpio_set_direction()
535 raw_spin_unlock_irqrestore(&pctrl->lock, flags); in intel_gpio_set_direction()
552 struct intel_pinctrl *pctrl = pinctrl_dev_get_drvdata(pctldev); in intel_config_get() local
558 if (!intel_pad_owned_by_host(pctrl, pin)) in intel_config_get()
561 community = intel_get_community(pctrl, pin); in intel_config_get()
562 value = readl(intel_get_padcfg(pctrl, pin, PADCFG1)); in intel_config_get()
616 padcfg2 = intel_get_padcfg(pctrl, pin, PADCFG2); in intel_config_get()
638 static int intel_config_set_pull(struct intel_pinctrl *pctrl, unsigned int pin, in intel_config_set_pull() argument
649 raw_spin_lock_irqsave(&pctrl->lock, flags); in intel_config_set_pull()
651 community = intel_get_community(pctrl, pin); in intel_config_set_pull()
652 padcfg1 = intel_get_padcfg(pctrl, pin, PADCFG1); in intel_config_set_pull()
711 raw_spin_unlock_irqrestore(&pctrl->lock, flags); in intel_config_set_pull()
716 static int intel_config_set_debounce(struct intel_pinctrl *pctrl, in intel_config_set_debounce() argument
724 padcfg2 = intel_get_padcfg(pctrl, pin, PADCFG2); in intel_config_set_debounce()
728 padcfg0 = intel_get_padcfg(pctrl, pin, PADCFG0); in intel_config_set_debounce()
730 raw_spin_lock_irqsave(&pctrl->lock, flags); in intel_config_set_debounce()
758 raw_spin_unlock_irqrestore(&pctrl->lock, flags); in intel_config_set_debounce()
766 struct intel_pinctrl *pctrl = pinctrl_dev_get_drvdata(pctldev); in intel_config_set() local
769 if (!intel_pad_usable(pctrl, pin)) in intel_config_set()
777 ret = intel_config_set_pull(pctrl, pin, configs[i]); in intel_config_set()
783 ret = intel_config_set_debounce(pctrl, pin, in intel_config_set()
821 static int intel_gpio_to_pin(struct intel_pinctrl *pctrl, unsigned int offset, in intel_gpio_to_pin() argument
827 for (i = 0; i < pctrl->ncommunities; i++) { in intel_gpio_to_pin()
828 const struct intel_community *comm = &pctrl->communities[i]; in intel_gpio_to_pin()
862 static __maybe_unused int intel_pin_to_gpio(struct intel_pinctrl *pctrl, int pin) in intel_pin_to_gpio() argument
867 community = intel_get_community(pctrl, pin); in intel_pin_to_gpio()
880 struct intel_pinctrl *pctrl = gpiochip_get_data(chip); in intel_gpio_get() local
885 pin = intel_gpio_to_pin(pctrl, offset, NULL, NULL); in intel_gpio_get()
889 reg = intel_get_padcfg(pctrl, pin, PADCFG0); in intel_gpio_get()
903 struct intel_pinctrl *pctrl = gpiochip_get_data(chip); in intel_gpio_set() local
909 pin = intel_gpio_to_pin(pctrl, offset, NULL, NULL); in intel_gpio_set()
913 reg = intel_get_padcfg(pctrl, pin, PADCFG0); in intel_gpio_set()
917 raw_spin_lock_irqsave(&pctrl->lock, flags); in intel_gpio_set()
924 raw_spin_unlock_irqrestore(&pctrl->lock, flags); in intel_gpio_set()
929 struct intel_pinctrl *pctrl = gpiochip_get_data(chip); in intel_gpio_get_direction() local
934 pin = intel_gpio_to_pin(pctrl, offset, NULL, NULL); in intel_gpio_get_direction()
938 reg = intel_get_padcfg(pctrl, pin, PADCFG0); in intel_gpio_get_direction()
977 struct intel_pinctrl *pctrl = gpiochip_get_data(gc); in intel_gpio_irq_ack() local
982 pin = intel_gpio_to_pin(pctrl, irqd_to_hwirq(d), &community, &padgrp); in intel_gpio_irq_ack()
990 raw_spin_lock(&pctrl->lock); in intel_gpio_irq_ack()
992 raw_spin_unlock(&pctrl->lock); in intel_gpio_irq_ack()
999 struct intel_pinctrl *pctrl = gpiochip_get_data(gc); in intel_gpio_irq_mask_unmask() local
1004 pin = intel_gpio_to_pin(pctrl, irqd_to_hwirq(d), &community, &padgrp); in intel_gpio_irq_mask_unmask()
1017 raw_spin_lock_irqsave(&pctrl->lock, flags); in intel_gpio_irq_mask_unmask()
1028 raw_spin_unlock_irqrestore(&pctrl->lock, flags); in intel_gpio_irq_mask_unmask()
1045 struct intel_pinctrl *pctrl = gpiochip_get_data(gc); in intel_gpio_irq_type() local
1046 unsigned int pin = intel_gpio_to_pin(pctrl, irqd_to_hwirq(d), NULL, NULL); in intel_gpio_irq_type()
1051 reg = intel_get_padcfg(pctrl, pin, PADCFG0); in intel_gpio_irq_type()
1060 if (intel_pad_acpi_mode(pctrl, pin)) { in intel_gpio_irq_type()
1061 dev_warn(pctrl->dev, "pin %u cannot be used as IRQ\n", pin); in intel_gpio_irq_type()
1065 raw_spin_lock_irqsave(&pctrl->lock, flags); in intel_gpio_irq_type()
1094 raw_spin_unlock_irqrestore(&pctrl->lock, flags); in intel_gpio_irq_type()
1102 struct intel_pinctrl *pctrl = gpiochip_get_data(gc); in intel_gpio_irq_wake() local
1103 unsigned int pin = intel_gpio_to_pin(pctrl, irqd_to_hwirq(d), NULL, NULL); in intel_gpio_irq_wake()
1106 enable_irq_wake(pctrl->irq); in intel_gpio_irq_wake()
1108 disable_irq_wake(pctrl->irq); in intel_gpio_irq_wake()
1110 dev_dbg(pctrl->dev, "%sable wake for pin %u\n", on ? "en" : "dis", pin); in intel_gpio_irq_wake()
1114 static irqreturn_t intel_gpio_community_irq_handler(struct intel_pinctrl *pctrl, in intel_gpio_community_irq_handler() argument
1117 struct gpio_chip *gc = &pctrl->chip; in intel_gpio_community_irq_handler()
1150 struct intel_pinctrl *pctrl = data; in intel_gpio_irq() local
1155 for (i = 0; i < pctrl->ncommunities; i++) { in intel_gpio_irq()
1156 community = &pctrl->communities[i]; in intel_gpio_irq()
1157 ret |= intel_gpio_community_irq_handler(pctrl, community); in intel_gpio_irq()
1163 static int intel_gpio_add_pin_ranges(struct intel_pinctrl *pctrl, in intel_gpio_add_pin_ranges() argument
1174 ret = gpiochip_add_pin_range(&pctrl->chip, dev_name(pctrl->dev), in intel_gpio_add_pin_ranges()
1184 static unsigned intel_gpio_ngpio(const struct intel_pinctrl *pctrl) in intel_gpio_ngpio() argument
1190 for (i = 0; i < pctrl->ncommunities; i++) { in intel_gpio_ngpio()
1191 community = &pctrl->communities[i]; in intel_gpio_ngpio()
1206 static int intel_gpio_probe(struct intel_pinctrl *pctrl, int irq) in intel_gpio_probe() argument
1210 pctrl->chip = intel_gpio_chip; in intel_gpio_probe()
1213 pctrl->chip.ngpio = intel_gpio_ngpio(pctrl); in intel_gpio_probe()
1214 pctrl->chip.label = dev_name(pctrl->dev); in intel_gpio_probe()
1215 pctrl->chip.parent = pctrl->dev; in intel_gpio_probe()
1216 pctrl->chip.base = -1; in intel_gpio_probe()
1217 pctrl->irq = irq; in intel_gpio_probe()
1220 pctrl->irqchip.name = dev_name(pctrl->dev); in intel_gpio_probe()
1221 pctrl->irqchip.irq_ack = intel_gpio_irq_ack; in intel_gpio_probe()
1222 pctrl->irqchip.irq_mask = intel_gpio_irq_mask; in intel_gpio_probe()
1223 pctrl->irqchip.irq_unmask = intel_gpio_irq_unmask; in intel_gpio_probe()
1224 pctrl->irqchip.irq_set_type = intel_gpio_irq_type; in intel_gpio_probe()
1225 pctrl->irqchip.irq_set_wake = intel_gpio_irq_wake; in intel_gpio_probe()
1226 pctrl->irqchip.flags = IRQCHIP_MASK_ON_SUSPEND; in intel_gpio_probe()
1228 ret = devm_gpiochip_add_data(pctrl->dev, &pctrl->chip, pctrl); in intel_gpio_probe()
1230 dev_err(pctrl->dev, "failed to register gpiochip\n"); in intel_gpio_probe()
1234 for (i = 0; i < pctrl->ncommunities; i++) { in intel_gpio_probe()
1235 struct intel_community *community = &pctrl->communities[i]; in intel_gpio_probe()
1237 ret = intel_gpio_add_pin_ranges(pctrl, community); in intel_gpio_probe()
1239 dev_err(pctrl->dev, "failed to add GPIO pin range\n"); in intel_gpio_probe()
1249 ret = devm_request_irq(pctrl->dev, irq, intel_gpio_irq, in intel_gpio_probe()
1251 dev_name(pctrl->dev), pctrl); in intel_gpio_probe()
1253 dev_err(pctrl->dev, "failed to request interrupt\n"); in intel_gpio_probe()
1257 ret = gpiochip_irqchip_add(&pctrl->chip, &pctrl->irqchip, 0, in intel_gpio_probe()
1260 dev_err(pctrl->dev, "failed to add irqchip\n"); in intel_gpio_probe()
1264 gpiochip_set_chained_irqchip(&pctrl->chip, &pctrl->irqchip, irq, NULL); in intel_gpio_probe()
1268 static int intel_pinctrl_add_padgroups(struct intel_pinctrl *pctrl, in intel_pinctrl_add_padgroups() argument
1281 gpps = devm_kcalloc(pctrl->dev, ngpps, sizeof(*gpps), GFP_KERNEL); in intel_pinctrl_add_padgroups()
1321 static int intel_pinctrl_pm_init(struct intel_pinctrl *pctrl) in intel_pinctrl_pm_init() argument
1324 const struct intel_pinctrl_soc_data *soc = pctrl->soc; in intel_pinctrl_pm_init()
1329 pads = devm_kcalloc(pctrl->dev, soc->npins, sizeof(*pads), GFP_KERNEL); in intel_pinctrl_pm_init()
1333 communities = devm_kcalloc(pctrl->dev, pctrl->ncommunities, in intel_pinctrl_pm_init()
1339 for (i = 0; i < pctrl->ncommunities; i++) { in intel_pinctrl_pm_init()
1340 struct intel_community *community = &pctrl->communities[i]; in intel_pinctrl_pm_init()
1343 intmask = devm_kcalloc(pctrl->dev, community->ngpps, in intel_pinctrl_pm_init()
1350 hostown = devm_kcalloc(pctrl->dev, community->ngpps, in intel_pinctrl_pm_init()
1358 pctrl->context.pads = pads; in intel_pinctrl_pm_init()
1359 pctrl->context.communities = communities; in intel_pinctrl_pm_init()
1368 struct intel_pinctrl *pctrl; in intel_pinctrl_probe() local
1374 pctrl = devm_kzalloc(&pdev->dev, sizeof(*pctrl), GFP_KERNEL); in intel_pinctrl_probe()
1375 if (!pctrl) in intel_pinctrl_probe()
1378 pctrl->dev = &pdev->dev; in intel_pinctrl_probe()
1379 pctrl->soc = soc_data; in intel_pinctrl_probe()
1380 raw_spin_lock_init(&pctrl->lock); in intel_pinctrl_probe()
1386 pctrl->ncommunities = pctrl->soc->ncommunities; in intel_pinctrl_probe()
1387 pctrl->communities = devm_kcalloc(&pdev->dev, pctrl->ncommunities, in intel_pinctrl_probe()
1388 sizeof(*pctrl->communities), GFP_KERNEL); in intel_pinctrl_probe()
1389 if (!pctrl->communities) in intel_pinctrl_probe()
1392 for (i = 0; i < pctrl->ncommunities; i++) { in intel_pinctrl_probe()
1393 struct intel_community *community = &pctrl->communities[i]; in intel_pinctrl_probe()
1397 *community = pctrl->soc->communities[i]; in intel_pinctrl_probe()
1423 ret = intel_pinctrl_add_padgroups(pctrl, community); in intel_pinctrl_probe()
1432 ret = intel_pinctrl_pm_init(pctrl); in intel_pinctrl_probe()
1436 pctrl->pctldesc = intel_pinctrl_desc; in intel_pinctrl_probe()
1437 pctrl->pctldesc.name = dev_name(&pdev->dev); in intel_pinctrl_probe()
1438 pctrl->pctldesc.pins = pctrl->soc->pins; in intel_pinctrl_probe()
1439 pctrl->pctldesc.npins = pctrl->soc->npins; in intel_pinctrl_probe()
1441 pctrl->pctldev = devm_pinctrl_register(&pdev->dev, &pctrl->pctldesc, in intel_pinctrl_probe()
1442 pctrl); in intel_pinctrl_probe()
1443 if (IS_ERR(pctrl->pctldev)) { in intel_pinctrl_probe()
1445 return PTR_ERR(pctrl->pctldev); in intel_pinctrl_probe()
1448 ret = intel_gpio_probe(pctrl, irq); in intel_pinctrl_probe()
1452 platform_set_drvdata(pdev, pctrl); in intel_pinctrl_probe()
1500 static bool intel_pinctrl_should_save(struct intel_pinctrl *pctrl, unsigned int pin) in intel_pinctrl_should_save() argument
1502 const struct pin_desc *pd = pin_desc_get(pctrl->pctldev, pin); in intel_pinctrl_should_save()
1504 if (!pd || !intel_pad_usable(pctrl, pin)) in intel_pinctrl_should_save()
1514 gpiochip_line_is_irq(&pctrl->chip, intel_pin_to_gpio(pctrl, pin))) in intel_pinctrl_should_save()
1522 struct intel_pinctrl *pctrl = dev_get_drvdata(dev); in intel_pinctrl_suspend_noirq() local
1527 pads = pctrl->context.pads; in intel_pinctrl_suspend_noirq()
1528 for (i = 0; i < pctrl->soc->npins; i++) { in intel_pinctrl_suspend_noirq()
1529 const struct pinctrl_pin_desc *desc = &pctrl->soc->pins[i]; in intel_pinctrl_suspend_noirq()
1533 if (!intel_pinctrl_should_save(pctrl, desc->number)) in intel_pinctrl_suspend_noirq()
1536 val = readl(intel_get_padcfg(pctrl, desc->number, PADCFG0)); in intel_pinctrl_suspend_noirq()
1538 val = readl(intel_get_padcfg(pctrl, desc->number, PADCFG1)); in intel_pinctrl_suspend_noirq()
1541 padcfg = intel_get_padcfg(pctrl, desc->number, PADCFG2); in intel_pinctrl_suspend_noirq()
1546 communities = pctrl->context.communities; in intel_pinctrl_suspend_noirq()
1547 for (i = 0; i < pctrl->ncommunities; i++) { in intel_pinctrl_suspend_noirq()
1548 struct intel_community *community = &pctrl->communities[i]; in intel_pinctrl_suspend_noirq()
1565 static void intel_gpio_irq_init(struct intel_pinctrl *pctrl) in intel_gpio_irq_init() argument
1569 for (i = 0; i < pctrl->ncommunities; i++) { in intel_gpio_irq_init()
1574 community = &pctrl->communities[i]; in intel_gpio_irq_init()
1612 struct intel_pinctrl *pctrl = dev_get_drvdata(dev); in intel_pinctrl_resume_noirq() local
1618 intel_gpio_irq_init(pctrl); in intel_pinctrl_resume_noirq()
1620 pads = pctrl->context.pads; in intel_pinctrl_resume_noirq()
1621 for (i = 0; i < pctrl->soc->npins; i++) { in intel_pinctrl_resume_noirq()
1622 const struct pinctrl_pin_desc *desc = &pctrl->soc->pins[i]; in intel_pinctrl_resume_noirq()
1626 if (!intel_pinctrl_should_save(pctrl, desc->number)) in intel_pinctrl_resume_noirq()
1629 padcfg = intel_get_padcfg(pctrl, desc->number, PADCFG0); in intel_pinctrl_resume_noirq()
1637 padcfg = intel_get_padcfg(pctrl, desc->number, PADCFG1); in intel_pinctrl_resume_noirq()
1645 padcfg = intel_get_padcfg(pctrl, desc->number, PADCFG2); in intel_pinctrl_resume_noirq()
1656 communities = pctrl->context.communities; in intel_pinctrl_resume_noirq()
1657 for (i = 0; i < pctrl->ncommunities; i++) { in intel_pinctrl_resume_noirq()
1658 struct intel_community *community = &pctrl->communities[i]; in intel_pinctrl_resume_noirq()
1678 requested = intel_gpio_is_requested(&pctrl->chip, in intel_pinctrl_resume_noirq()