Lines Matching full:pctrl
118 static struct intel_community *intel_get_community(struct intel_pinctrl *pctrl, in intel_get_community() argument
124 for (i = 0; i < pctrl->ncommunities; i++) { in intel_get_community()
125 community = &pctrl->communities[i]; in intel_get_community()
131 dev_warn(pctrl->dev, "failed to find community for pin %u\n", pin); in intel_get_community()
151 static void __iomem *intel_get_padcfg(struct intel_pinctrl *pctrl, unsigned pin, in intel_get_padcfg() argument
158 community = intel_get_community(pctrl, pin); in intel_get_padcfg()
171 static bool intel_pad_owned_by_host(struct intel_pinctrl *pctrl, unsigned pin) in intel_pad_owned_by_host() argument
178 community = intel_get_community(pctrl, pin); in intel_pad_owned_by_host()
196 static bool intel_pad_acpi_mode(struct intel_pinctrl *pctrl, unsigned pin) in intel_pad_acpi_mode() argument
203 community = intel_get_community(pctrl, pin); in intel_pad_acpi_mode()
220 static bool intel_pad_locked(struct intel_pinctrl *pctrl, unsigned pin) in intel_pad_locked() argument
227 community = intel_get_community(pctrl, pin); in intel_pad_locked()
257 static bool intel_pad_usable(struct intel_pinctrl *pctrl, unsigned pin) in intel_pad_usable() argument
259 return intel_pad_owned_by_host(pctrl, pin) && in intel_pad_usable()
260 !intel_pad_locked(pctrl, pin); in intel_pad_usable()
265 struct intel_pinctrl *pctrl = pinctrl_dev_get_drvdata(pctldev); in intel_get_groups_count() local
267 return pctrl->soc->ngroups; in intel_get_groups_count()
273 struct intel_pinctrl *pctrl = pinctrl_dev_get_drvdata(pctldev); in intel_get_group_name() local
275 return pctrl->soc->groups[group].name; in intel_get_group_name()
281 struct intel_pinctrl *pctrl = pinctrl_dev_get_drvdata(pctldev); in intel_get_group_pins() local
283 *pins = pctrl->soc->groups[group].pins; in intel_get_group_pins()
284 *npins = pctrl->soc->groups[group].npins; in intel_get_group_pins()
291 struct intel_pinctrl *pctrl = pinctrl_dev_get_drvdata(pctldev); in intel_pin_dbg_show() local
296 if (!intel_pad_owned_by_host(pctrl, pin)) { in intel_pin_dbg_show()
301 cfg0 = readl(intel_get_padcfg(pctrl, pin, PADCFG0)); in intel_pin_dbg_show()
302 cfg1 = readl(intel_get_padcfg(pctrl, pin, PADCFG1)); in intel_pin_dbg_show()
313 padcfg = intel_get_padcfg(pctrl, pin, PADCFG2); in intel_pin_dbg_show()
317 locked = intel_pad_locked(pctrl, pin); in intel_pin_dbg_show()
318 acpi = intel_pad_acpi_mode(pctrl, pin); in intel_pin_dbg_show()
342 struct intel_pinctrl *pctrl = pinctrl_dev_get_drvdata(pctldev); in intel_get_functions_count() local
344 return pctrl->soc->nfunctions; in intel_get_functions_count()
350 struct intel_pinctrl *pctrl = pinctrl_dev_get_drvdata(pctldev); in intel_get_function_name() local
352 return pctrl->soc->functions[function].name; in intel_get_function_name()
360 struct intel_pinctrl *pctrl = pinctrl_dev_get_drvdata(pctldev); in intel_get_function_groups() local
362 *groups = pctrl->soc->functions[function].groups; in intel_get_function_groups()
363 *ngroups = pctrl->soc->functions[function].ngroups; in intel_get_function_groups()
370 struct intel_pinctrl *pctrl = pinctrl_dev_get_drvdata(pctldev); in intel_pinmux_set_mux() local
371 const struct intel_pingroup *grp = &pctrl->soc->groups[group]; in intel_pinmux_set_mux()
375 raw_spin_lock_irqsave(&pctrl->lock, flags); in intel_pinmux_set_mux()
382 if (!intel_pad_usable(pctrl, grp->pins[i])) { in intel_pinmux_set_mux()
383 raw_spin_unlock_irqrestore(&pctrl->lock, flags); in intel_pinmux_set_mux()
393 padcfg0 = intel_get_padcfg(pctrl, grp->pins[i], PADCFG0); in intel_pinmux_set_mux()
406 raw_spin_unlock_irqrestore(&pctrl->lock, flags); in intel_pinmux_set_mux()
447 struct intel_pinctrl *pctrl = pinctrl_dev_get_drvdata(pctldev); in intel_gpio_request_enable() local
451 raw_spin_lock_irqsave(&pctrl->lock, flags); in intel_gpio_request_enable()
453 if (!intel_pad_usable(pctrl, pin)) { in intel_gpio_request_enable()
454 raw_spin_unlock_irqrestore(&pctrl->lock, flags); in intel_gpio_request_enable()
458 padcfg0 = intel_get_padcfg(pctrl, pin, PADCFG0); in intel_gpio_request_enable()
467 raw_spin_unlock_irqrestore(&pctrl->lock, flags); in intel_gpio_request_enable()
476 raw_spin_unlock_irqrestore(&pctrl->lock, flags); in intel_gpio_request_enable()
485 struct intel_pinctrl *pctrl = pinctrl_dev_get_drvdata(pctldev); in intel_gpio_set_direction() local
489 raw_spin_lock_irqsave(&pctrl->lock, flags); in intel_gpio_set_direction()
491 padcfg0 = intel_get_padcfg(pctrl, pin, PADCFG0); in intel_gpio_set_direction()
494 raw_spin_unlock_irqrestore(&pctrl->lock, flags); in intel_gpio_set_direction()
511 struct intel_pinctrl *pctrl = pinctrl_dev_get_drvdata(pctldev); in intel_config_get() local
517 if (!intel_pad_owned_by_host(pctrl, pin)) in intel_config_get()
520 community = intel_get_community(pctrl, pin); in intel_config_get()
521 value = readl(intel_get_padcfg(pctrl, pin, PADCFG1)); in intel_config_get()
575 padcfg2 = intel_get_padcfg(pctrl, pin, PADCFG2); in intel_config_get()
597 static int intel_config_set_pull(struct intel_pinctrl *pctrl, unsigned pin, in intel_config_set_pull() argument
608 raw_spin_lock_irqsave(&pctrl->lock, flags); in intel_config_set_pull()
610 community = intel_get_community(pctrl, pin); in intel_config_set_pull()
611 padcfg1 = intel_get_padcfg(pctrl, pin, PADCFG1); in intel_config_set_pull()
670 raw_spin_unlock_irqrestore(&pctrl->lock, flags); in intel_config_set_pull()
675 static int intel_config_set_debounce(struct intel_pinctrl *pctrl, unsigned pin, in intel_config_set_debounce() argument
683 padcfg2 = intel_get_padcfg(pctrl, pin, PADCFG2); in intel_config_set_debounce()
687 padcfg0 = intel_get_padcfg(pctrl, pin, PADCFG0); in intel_config_set_debounce()
689 raw_spin_lock_irqsave(&pctrl->lock, flags); in intel_config_set_debounce()
717 raw_spin_unlock_irqrestore(&pctrl->lock, flags); in intel_config_set_debounce()
725 struct intel_pinctrl *pctrl = pinctrl_dev_get_drvdata(pctldev); in intel_config_set() local
728 if (!intel_pad_usable(pctrl, pin)) in intel_config_set()
736 ret = intel_config_set_pull(pctrl, pin, configs[i]); in intel_config_set()
742 ret = intel_config_set_debounce(pctrl, pin, in intel_config_set()
771 * @pctrl: Pinctrl structure
780 static int intel_gpio_to_pin(struct intel_pinctrl *pctrl, unsigned offset, in intel_gpio_to_pin() argument
786 for (i = 0; i < pctrl->ncommunities; i++) { in intel_gpio_to_pin()
787 const struct intel_community *comm = &pctrl->communities[i]; in intel_gpio_to_pin()
816 struct intel_pinctrl *pctrl = gpiochip_get_data(chip); in intel_gpio_get() local
821 pin = intel_gpio_to_pin(pctrl, offset, NULL, NULL); in intel_gpio_get()
825 reg = intel_get_padcfg(pctrl, pin, PADCFG0); in intel_gpio_get()
838 struct intel_pinctrl *pctrl = gpiochip_get_data(chip); in intel_gpio_set() local
844 pin = intel_gpio_to_pin(pctrl, offset, NULL, NULL); in intel_gpio_set()
848 reg = intel_get_padcfg(pctrl, pin, PADCFG0); in intel_gpio_set()
852 raw_spin_lock_irqsave(&pctrl->lock, flags); in intel_gpio_set()
859 raw_spin_unlock_irqrestore(&pctrl->lock, flags); in intel_gpio_set()
864 struct intel_pinctrl *pctrl = gpiochip_get_data(chip); in intel_gpio_get_direction() local
869 pin = intel_gpio_to_pin(pctrl, offset, NULL, NULL); in intel_gpio_get_direction()
873 reg = intel_get_padcfg(pctrl, pin, PADCFG0); in intel_gpio_get_direction()
912 struct intel_pinctrl *pctrl = gpiochip_get_data(gc); in intel_gpio_irq_ack() local
917 pin = intel_gpio_to_pin(pctrl, irqd_to_hwirq(d), &community, &padgrp); in intel_gpio_irq_ack()
925 raw_spin_lock(&pctrl->lock); in intel_gpio_irq_ack()
927 raw_spin_unlock(&pctrl->lock); in intel_gpio_irq_ack()
934 struct intel_pinctrl *pctrl = gpiochip_get_data(gc); in intel_gpio_irq_enable() local
939 pin = intel_gpio_to_pin(pctrl, irqd_to_hwirq(d), &community, &padgrp); in intel_gpio_irq_enable()
949 raw_spin_lock_irqsave(&pctrl->lock, flags); in intel_gpio_irq_enable()
956 raw_spin_unlock_irqrestore(&pctrl->lock, flags); in intel_gpio_irq_enable()
963 struct intel_pinctrl *pctrl = gpiochip_get_data(gc); in intel_gpio_irq_mask_unmask() local
968 pin = intel_gpio_to_pin(pctrl, irqd_to_hwirq(d), &community, &padgrp); in intel_gpio_irq_mask_unmask()
980 raw_spin_lock_irqsave(&pctrl->lock, flags); in intel_gpio_irq_mask_unmask()
987 raw_spin_unlock_irqrestore(&pctrl->lock, flags); in intel_gpio_irq_mask_unmask()
1004 struct intel_pinctrl *pctrl = gpiochip_get_data(gc); in intel_gpio_irq_type() local
1005 unsigned pin = intel_gpio_to_pin(pctrl, irqd_to_hwirq(d), NULL, NULL); in intel_gpio_irq_type()
1010 reg = intel_get_padcfg(pctrl, pin, PADCFG0); in intel_gpio_irq_type()
1019 if (intel_pad_acpi_mode(pctrl, pin)) { in intel_gpio_irq_type()
1020 dev_warn(pctrl->dev, "pin %u cannot be used as IRQ\n", pin); in intel_gpio_irq_type()
1024 raw_spin_lock_irqsave(&pctrl->lock, flags); in intel_gpio_irq_type()
1053 raw_spin_unlock_irqrestore(&pctrl->lock, flags); in intel_gpio_irq_type()
1061 struct intel_pinctrl *pctrl = gpiochip_get_data(gc); in intel_gpio_irq_wake() local
1062 unsigned pin = intel_gpio_to_pin(pctrl, irqd_to_hwirq(d), NULL, NULL); in intel_gpio_irq_wake()
1065 enable_irq_wake(pctrl->irq); in intel_gpio_irq_wake()
1067 disable_irq_wake(pctrl->irq); in intel_gpio_irq_wake()
1069 dev_dbg(pctrl->dev, "%sable wake for pin %u\n", on ? "en" : "dis", pin); in intel_gpio_irq_wake()
1073 static irqreturn_t intel_gpio_community_irq_handler(struct intel_pinctrl *pctrl, in intel_gpio_community_irq_handler() argument
1076 struct gpio_chip *gc = &pctrl->chip; in intel_gpio_community_irq_handler()
1109 struct intel_pinctrl *pctrl = data; in intel_gpio_irq() local
1114 for (i = 0; i < pctrl->ncommunities; i++) { in intel_gpio_irq()
1115 community = &pctrl->communities[i]; in intel_gpio_irq()
1116 ret |= intel_gpio_community_irq_handler(pctrl, community); in intel_gpio_irq()
1133 static int intel_gpio_add_pin_ranges(struct intel_pinctrl *pctrl, in intel_gpio_add_pin_ranges() argument
1144 ret = gpiochip_add_pin_range(&pctrl->chip, dev_name(pctrl->dev), in intel_gpio_add_pin_ranges()
1154 static unsigned intel_gpio_ngpio(const struct intel_pinctrl *pctrl) in intel_gpio_ngpio() argument
1160 for (i = 0; i < pctrl->ncommunities; i++) { in intel_gpio_ngpio()
1161 community = &pctrl->communities[i]; in intel_gpio_ngpio()
1176 static int intel_gpio_probe(struct intel_pinctrl *pctrl, int irq) in intel_gpio_probe() argument
1180 pctrl->chip = intel_gpio_chip; in intel_gpio_probe()
1182 pctrl->chip.ngpio = intel_gpio_ngpio(pctrl); in intel_gpio_probe()
1183 pctrl->chip.label = dev_name(pctrl->dev); in intel_gpio_probe()
1184 pctrl->chip.parent = pctrl->dev; in intel_gpio_probe()
1185 pctrl->chip.base = -1; in intel_gpio_probe()
1186 pctrl->irq = irq; in intel_gpio_probe()
1188 ret = devm_gpiochip_add_data(pctrl->dev, &pctrl->chip, pctrl); in intel_gpio_probe()
1190 dev_err(pctrl->dev, "failed to register gpiochip\n"); in intel_gpio_probe()
1194 for (i = 0; i < pctrl->ncommunities; i++) { in intel_gpio_probe()
1195 struct intel_community *community = &pctrl->communities[i]; in intel_gpio_probe()
1197 ret = intel_gpio_add_pin_ranges(pctrl, community); in intel_gpio_probe()
1199 dev_err(pctrl->dev, "failed to add GPIO pin range\n"); in intel_gpio_probe()
1209 ret = devm_request_irq(pctrl->dev, irq, intel_gpio_irq, in intel_gpio_probe()
1211 dev_name(pctrl->dev), pctrl); in intel_gpio_probe()
1213 dev_err(pctrl->dev, "failed to request interrupt\n"); in intel_gpio_probe()
1217 ret = gpiochip_irqchip_add(&pctrl->chip, &intel_gpio_irqchip, 0, in intel_gpio_probe()
1220 dev_err(pctrl->dev, "failed to add irqchip\n"); in intel_gpio_probe()
1224 gpiochip_set_chained_irqchip(&pctrl->chip, &intel_gpio_irqchip, irq, in intel_gpio_probe()
1229 static int intel_pinctrl_add_padgroups(struct intel_pinctrl *pctrl, in intel_pinctrl_add_padgroups() argument
1242 gpps = devm_kcalloc(pctrl->dev, ngpps, sizeof(*gpps), GFP_KERNEL); in intel_pinctrl_add_padgroups()
1282 static int intel_pinctrl_pm_init(struct intel_pinctrl *pctrl) in intel_pinctrl_pm_init() argument
1285 const struct intel_pinctrl_soc_data *soc = pctrl->soc; in intel_pinctrl_pm_init()
1290 pads = devm_kcalloc(pctrl->dev, soc->npins, sizeof(*pads), GFP_KERNEL); in intel_pinctrl_pm_init()
1294 communities = devm_kcalloc(pctrl->dev, pctrl->ncommunities, in intel_pinctrl_pm_init()
1300 for (i = 0; i < pctrl->ncommunities; i++) { in intel_pinctrl_pm_init()
1301 struct intel_community *community = &pctrl->communities[i]; in intel_pinctrl_pm_init()
1304 intmask = devm_kcalloc(pctrl->dev, community->ngpps, in intel_pinctrl_pm_init()
1312 pctrl->context.pads = pads; in intel_pinctrl_pm_init()
1313 pctrl->context.communities = communities; in intel_pinctrl_pm_init()
1322 struct intel_pinctrl *pctrl; in intel_pinctrl_probe() local
1328 pctrl = devm_kzalloc(&pdev->dev, sizeof(*pctrl), GFP_KERNEL); in intel_pinctrl_probe()
1329 if (!pctrl) in intel_pinctrl_probe()
1332 pctrl->dev = &pdev->dev; in intel_pinctrl_probe()
1333 pctrl->soc = soc_data; in intel_pinctrl_probe()
1334 raw_spin_lock_init(&pctrl->lock); in intel_pinctrl_probe()
1340 pctrl->ncommunities = pctrl->soc->ncommunities; in intel_pinctrl_probe()
1341 pctrl->communities = devm_kcalloc(&pdev->dev, pctrl->ncommunities, in intel_pinctrl_probe()
1342 sizeof(*pctrl->communities), GFP_KERNEL); in intel_pinctrl_probe()
1343 if (!pctrl->communities) in intel_pinctrl_probe()
1346 for (i = 0; i < pctrl->ncommunities; i++) { in intel_pinctrl_probe()
1347 struct intel_community *community = &pctrl->communities[i]; in intel_pinctrl_probe()
1352 *community = pctrl->soc->communities[i]; in intel_pinctrl_probe()
1383 ret = intel_pinctrl_add_padgroups(pctrl, community); in intel_pinctrl_probe()
1394 ret = intel_pinctrl_pm_init(pctrl); in intel_pinctrl_probe()
1398 pctrl->pctldesc = intel_pinctrl_desc; in intel_pinctrl_probe()
1399 pctrl->pctldesc.name = dev_name(&pdev->dev); in intel_pinctrl_probe()
1400 pctrl->pctldesc.pins = pctrl->soc->pins; in intel_pinctrl_probe()
1401 pctrl->pctldesc.npins = pctrl->soc->npins; in intel_pinctrl_probe()
1403 pctrl->pctldev = devm_pinctrl_register(&pdev->dev, &pctrl->pctldesc, in intel_pinctrl_probe()
1404 pctrl); in intel_pinctrl_probe()
1405 if (IS_ERR(pctrl->pctldev)) { in intel_pinctrl_probe()
1407 return PTR_ERR(pctrl->pctldev); in intel_pinctrl_probe()
1410 ret = intel_gpio_probe(pctrl, irq); in intel_pinctrl_probe()
1414 platform_set_drvdata(pdev, pctrl); in intel_pinctrl_probe()
1421 static bool intel_pinctrl_should_save(struct intel_pinctrl *pctrl, unsigned pin) in intel_pinctrl_should_save() argument
1423 const struct pin_desc *pd = pin_desc_get(pctrl->pctldev, pin); in intel_pinctrl_should_save()
1425 if (!pd || !intel_pad_usable(pctrl, pin)) in intel_pinctrl_should_save()
1435 gpiochip_line_is_irq(&pctrl->chip, pin)) in intel_pinctrl_should_save()
1444 struct intel_pinctrl *pctrl = platform_get_drvdata(pdev); in intel_pinctrl_suspend() local
1449 pads = pctrl->context.pads; in intel_pinctrl_suspend()
1450 for (i = 0; i < pctrl->soc->npins; i++) { in intel_pinctrl_suspend()
1451 const struct pinctrl_pin_desc *desc = &pctrl->soc->pins[i]; in intel_pinctrl_suspend()
1455 if (!intel_pinctrl_should_save(pctrl, desc->number)) in intel_pinctrl_suspend()
1458 val = readl(intel_get_padcfg(pctrl, desc->number, PADCFG0)); in intel_pinctrl_suspend()
1460 val = readl(intel_get_padcfg(pctrl, desc->number, PADCFG1)); in intel_pinctrl_suspend()
1463 padcfg = intel_get_padcfg(pctrl, desc->number, PADCFG2); in intel_pinctrl_suspend()
1468 communities = pctrl->context.communities; in intel_pinctrl_suspend()
1469 for (i = 0; i < pctrl->ncommunities; i++) { in intel_pinctrl_suspend()
1470 struct intel_community *community = &pctrl->communities[i]; in intel_pinctrl_suspend()
1483 static void intel_gpio_irq_init(struct intel_pinctrl *pctrl) in intel_gpio_irq_init() argument
1487 for (i = 0; i < pctrl->ncommunities; i++) { in intel_gpio_irq_init()
1492 community = &pctrl->communities[i]; in intel_gpio_irq_init()
1506 struct intel_pinctrl *pctrl = platform_get_drvdata(pdev); in intel_pinctrl_resume() local
1512 intel_gpio_irq_init(pctrl); in intel_pinctrl_resume()
1514 pads = pctrl->context.pads; in intel_pinctrl_resume()
1515 for (i = 0; i < pctrl->soc->npins; i++) { in intel_pinctrl_resume()
1516 const struct pinctrl_pin_desc *desc = &pctrl->soc->pins[i]; in intel_pinctrl_resume()
1520 if (!intel_pinctrl_should_save(pctrl, desc->number)) in intel_pinctrl_resume()
1523 padcfg = intel_get_padcfg(pctrl, desc->number, PADCFG0); in intel_pinctrl_resume()
1531 padcfg = intel_get_padcfg(pctrl, desc->number, PADCFG1); in intel_pinctrl_resume()
1539 padcfg = intel_get_padcfg(pctrl, desc->number, PADCFG2); in intel_pinctrl_resume()
1550 communities = pctrl->context.communities; in intel_pinctrl_resume()
1551 for (i = 0; i < pctrl->ncommunities; i++) { in intel_pinctrl_resume()
1552 struct intel_community *community = &pctrl->communities[i]; in intel_pinctrl_resume()