Lines Matching refs:pctrl
109 static struct intel_community *intel_get_community(struct intel_pinctrl *pctrl, in intel_get_community() argument
115 for (i = 0; i < pctrl->ncommunities; i++) { in intel_get_community()
116 community = &pctrl->communities[i]; in intel_get_community()
122 dev_warn(pctrl->dev, "failed to find community for pin %u\n", pin); in intel_get_community()
126 static void __iomem *intel_get_padcfg(struct intel_pinctrl *pctrl, unsigned pin, in intel_get_padcfg() argument
132 community = intel_get_community(pctrl, pin); in intel_get_padcfg()
140 static bool intel_pad_owned_by_host(struct intel_pinctrl *pctrl, unsigned pin) in intel_pad_owned_by_host() argument
146 community = intel_get_community(pctrl, pin); in intel_pad_owned_by_host()
161 static bool intel_pad_acpi_mode(struct intel_pinctrl *pctrl, unsigned pin) in intel_pad_acpi_mode() argument
167 community = intel_get_community(pctrl, pin); in intel_pad_acpi_mode()
181 static bool intel_pad_locked(struct intel_pinctrl *pctrl, unsigned pin) in intel_pad_locked() argument
187 community = intel_get_community(pctrl, pin); in intel_pad_locked()
214 static bool intel_pad_usable(struct intel_pinctrl *pctrl, unsigned pin) in intel_pad_usable() argument
216 return intel_pad_owned_by_host(pctrl, pin) && in intel_pad_usable()
217 !intel_pad_locked(pctrl, pin); in intel_pad_usable()
222 struct intel_pinctrl *pctrl = pinctrl_dev_get_drvdata(pctldev); in intel_get_groups_count() local
224 return pctrl->soc->ngroups; in intel_get_groups_count()
230 struct intel_pinctrl *pctrl = pinctrl_dev_get_drvdata(pctldev); in intel_get_group_name() local
232 return pctrl->soc->groups[group].name; in intel_get_group_name()
238 struct intel_pinctrl *pctrl = pinctrl_dev_get_drvdata(pctldev); in intel_get_group_pins() local
240 *pins = pctrl->soc->groups[group].pins; in intel_get_group_pins()
241 *npins = pctrl->soc->groups[group].npins; in intel_get_group_pins()
248 struct intel_pinctrl *pctrl = pinctrl_dev_get_drvdata(pctldev); in intel_pin_dbg_show() local
252 if (!intel_pad_owned_by_host(pctrl, pin)) { in intel_pin_dbg_show()
257 cfg0 = readl(intel_get_padcfg(pctrl, pin, PADCFG0)); in intel_pin_dbg_show()
258 cfg1 = readl(intel_get_padcfg(pctrl, pin, PADCFG1)); in intel_pin_dbg_show()
268 locked = intel_pad_locked(pctrl, pin); in intel_pin_dbg_show()
269 acpi = intel_pad_acpi_mode(pctrl, pin); in intel_pin_dbg_show()
293 struct intel_pinctrl *pctrl = pinctrl_dev_get_drvdata(pctldev); in intel_get_functions_count() local
295 return pctrl->soc->nfunctions; in intel_get_functions_count()
301 struct intel_pinctrl *pctrl = pinctrl_dev_get_drvdata(pctldev); in intel_get_function_name() local
303 return pctrl->soc->functions[function].name; in intel_get_function_name()
311 struct intel_pinctrl *pctrl = pinctrl_dev_get_drvdata(pctldev); in intel_get_function_groups() local
313 *groups = pctrl->soc->functions[function].groups; in intel_get_function_groups()
314 *ngroups = pctrl->soc->functions[function].ngroups; in intel_get_function_groups()
321 struct intel_pinctrl *pctrl = pinctrl_dev_get_drvdata(pctldev); in intel_pinmux_set_mux() local
322 const struct intel_pingroup *grp = &pctrl->soc->groups[group]; in intel_pinmux_set_mux()
326 spin_lock_irqsave(&pctrl->lock, flags); in intel_pinmux_set_mux()
333 if (!intel_pad_usable(pctrl, grp->pins[i])) { in intel_pinmux_set_mux()
334 spin_unlock_irqrestore(&pctrl->lock, flags); in intel_pinmux_set_mux()
344 padcfg0 = intel_get_padcfg(pctrl, grp->pins[i], PADCFG0); in intel_pinmux_set_mux()
353 spin_unlock_irqrestore(&pctrl->lock, flags); in intel_pinmux_set_mux()
362 struct intel_pinctrl *pctrl = pinctrl_dev_get_drvdata(pctldev); in intel_gpio_request_enable() local
367 spin_lock_irqsave(&pctrl->lock, flags); in intel_gpio_request_enable()
369 if (!intel_pad_usable(pctrl, pin)) { in intel_gpio_request_enable()
370 spin_unlock_irqrestore(&pctrl->lock, flags); in intel_gpio_request_enable()
374 padcfg0 = intel_get_padcfg(pctrl, pin, PADCFG0); in intel_gpio_request_enable()
385 spin_unlock_irqrestore(&pctrl->lock, flags); in intel_gpio_request_enable()
394 struct intel_pinctrl *pctrl = pinctrl_dev_get_drvdata(pctldev); in intel_gpio_set_direction() local
399 spin_lock_irqsave(&pctrl->lock, flags); in intel_gpio_set_direction()
401 padcfg0 = intel_get_padcfg(pctrl, pin, PADCFG0); in intel_gpio_set_direction()
410 spin_unlock_irqrestore(&pctrl->lock, flags); in intel_gpio_set_direction()
427 struct intel_pinctrl *pctrl = pinctrl_dev_get_drvdata(pctldev); in intel_config_get() local
432 if (!intel_pad_owned_by_host(pctrl, pin)) in intel_config_get()
435 value = readl(intel_get_padcfg(pctrl, pin, PADCFG1)); in intel_config_get()
488 static int intel_config_set_pull(struct intel_pinctrl *pctrl, unsigned pin, in intel_config_set_pull() argument
498 spin_lock_irqsave(&pctrl->lock, flags); in intel_config_set_pull()
500 padcfg1 = intel_get_padcfg(pctrl, pin, PADCFG1); in intel_config_set_pull()
552 spin_unlock_irqrestore(&pctrl->lock, flags); in intel_config_set_pull()
560 struct intel_pinctrl *pctrl = pinctrl_dev_get_drvdata(pctldev); in intel_config_set() local
563 if (!intel_pad_usable(pctrl, pin)) in intel_config_set()
571 ret = intel_config_set_pull(pctrl, pin, configs[i]); in intel_config_set()
599 struct intel_pinctrl *pctrl = gpiochip_to_pinctrl(chip); in intel_gpio_get() local
602 reg = intel_get_padcfg(pctrl, offset, PADCFG0); in intel_gpio_get()
611 struct intel_pinctrl *pctrl = gpiochip_to_pinctrl(chip); in intel_gpio_set() local
614 reg = intel_get_padcfg(pctrl, offset, PADCFG0); in intel_gpio_set()
619 spin_lock_irqsave(&pctrl->lock, flags); in intel_gpio_set()
626 spin_unlock_irqrestore(&pctrl->lock, flags); in intel_gpio_set()
655 struct intel_pinctrl *pctrl = gpiochip_to_pinctrl(gc); in intel_gpio_irq_ack() local
659 spin_lock(&pctrl->lock); in intel_gpio_irq_ack()
661 community = intel_get_community(pctrl, pin); in intel_gpio_irq_ack()
670 spin_unlock(&pctrl->lock); in intel_gpio_irq_ack()
676 struct intel_pinctrl *pctrl = gpiochip_to_pinctrl(gc); in intel_gpio_irq_mask_unmask() local
681 spin_lock_irqsave(&pctrl->lock, flags); in intel_gpio_irq_mask_unmask()
683 community = intel_get_community(pctrl, pin); in intel_gpio_irq_mask_unmask()
700 spin_unlock_irqrestore(&pctrl->lock, flags); in intel_gpio_irq_mask_unmask()
716 struct intel_pinctrl *pctrl = gpiochip_to_pinctrl(gc); in intel_gpio_irq_type() local
722 reg = intel_get_padcfg(pctrl, pin, PADCFG0); in intel_gpio_irq_type()
731 if (intel_pad_acpi_mode(pctrl, pin)) { in intel_gpio_irq_type()
732 dev_warn(pctrl->dev, "pin %u cannot be used as IRQ\n", pin); in intel_gpio_irq_type()
736 spin_lock_irqsave(&pctrl->lock, flags); in intel_gpio_irq_type()
762 spin_unlock_irqrestore(&pctrl->lock, flags); in intel_gpio_irq_type()
770 struct intel_pinctrl *pctrl = gpiochip_to_pinctrl(gc); in intel_gpio_irq_wake() local
776 community = intel_get_community(pctrl, pin); in intel_gpio_irq_wake()
799 dev_dbg(pctrl->dev, "%sable wake for pin %u\n", on ? "en" : "dis", pin); in intel_gpio_irq_wake()
803 static irqreturn_t intel_gpio_community_irq_handler(struct intel_pinctrl *pctrl, in intel_gpio_community_irq_handler() argument
806 struct gpio_chip *gc = &pctrl->chip; in intel_gpio_community_irq_handler()
845 struct intel_pinctrl *pctrl = data; in intel_gpio_irq() local
850 for (i = 0; i < pctrl->ncommunities; i++) { in intel_gpio_irq()
851 community = &pctrl->communities[i]; in intel_gpio_irq()
852 ret |= intel_gpio_community_irq_handler(pctrl, community); in intel_gpio_irq()
867 static int intel_gpio_probe(struct intel_pinctrl *pctrl, int irq) in intel_gpio_probe() argument
871 pctrl->chip = intel_gpio_chip; in intel_gpio_probe()
873 pctrl->chip.ngpio = pctrl->soc->npins; in intel_gpio_probe()
874 pctrl->chip.label = dev_name(pctrl->dev); in intel_gpio_probe()
875 pctrl->chip.dev = pctrl->dev; in intel_gpio_probe()
876 pctrl->chip.base = -1; in intel_gpio_probe()
878 ret = gpiochip_add(&pctrl->chip); in intel_gpio_probe()
880 dev_err(pctrl->dev, "failed to register gpiochip\n"); in intel_gpio_probe()
884 ret = gpiochip_add_pin_range(&pctrl->chip, dev_name(pctrl->dev), in intel_gpio_probe()
885 0, 0, pctrl->soc->npins); in intel_gpio_probe()
887 dev_err(pctrl->dev, "failed to add GPIO pin range\n"); in intel_gpio_probe()
896 ret = devm_request_irq(pctrl->dev, irq, intel_gpio_irq, IRQF_SHARED, in intel_gpio_probe()
897 dev_name(pctrl->dev), pctrl); in intel_gpio_probe()
899 dev_err(pctrl->dev, "failed to request interrupt\n"); in intel_gpio_probe()
903 ret = gpiochip_irqchip_add(&pctrl->chip, &intel_gpio_irqchip, 0, in intel_gpio_probe()
906 dev_err(pctrl->dev, "failed to add irqchip\n"); in intel_gpio_probe()
910 gpiochip_set_chained_irqchip(&pctrl->chip, &intel_gpio_irqchip, irq, in intel_gpio_probe()
915 gpiochip_remove(&pctrl->chip); in intel_gpio_probe()
920 static int intel_pinctrl_pm_init(struct intel_pinctrl *pctrl) in intel_pinctrl_pm_init() argument
923 const struct intel_pinctrl_soc_data *soc = pctrl->soc; in intel_pinctrl_pm_init()
928 pads = devm_kcalloc(pctrl->dev, soc->npins, sizeof(*pads), GFP_KERNEL); in intel_pinctrl_pm_init()
932 communities = devm_kcalloc(pctrl->dev, pctrl->ncommunities, in intel_pinctrl_pm_init()
938 for (i = 0; i < pctrl->ncommunities; i++) { in intel_pinctrl_pm_init()
939 struct intel_community *community = &pctrl->communities[i]; in intel_pinctrl_pm_init()
942 intmask = devm_kcalloc(pctrl->dev, community->ngpps, in intel_pinctrl_pm_init()
950 pctrl->context.pads = pads; in intel_pinctrl_pm_init()
951 pctrl->context.communities = communities; in intel_pinctrl_pm_init()
960 struct intel_pinctrl *pctrl; in intel_pinctrl_probe() local
966 pctrl = devm_kzalloc(&pdev->dev, sizeof(*pctrl), GFP_KERNEL); in intel_pinctrl_probe()
967 if (!pctrl) in intel_pinctrl_probe()
970 pctrl->dev = &pdev->dev; in intel_pinctrl_probe()
971 pctrl->soc = soc_data; in intel_pinctrl_probe()
972 spin_lock_init(&pctrl->lock); in intel_pinctrl_probe()
978 pctrl->ncommunities = pctrl->soc->ncommunities; in intel_pinctrl_probe()
979 pctrl->communities = devm_kcalloc(&pdev->dev, pctrl->ncommunities, in intel_pinctrl_probe()
980 sizeof(*pctrl->communities), GFP_KERNEL); in intel_pinctrl_probe()
981 if (!pctrl->communities) in intel_pinctrl_probe()
984 for (i = 0; i < pctrl->ncommunities; i++) { in intel_pinctrl_probe()
985 struct intel_community *community = &pctrl->communities[i]; in intel_pinctrl_probe()
990 *community = pctrl->soc->communities[i]; in intel_pinctrl_probe()
1013 ret = intel_pinctrl_pm_init(pctrl); in intel_pinctrl_probe()
1017 pctrl->pctldesc = intel_pinctrl_desc; in intel_pinctrl_probe()
1018 pctrl->pctldesc.name = dev_name(&pdev->dev); in intel_pinctrl_probe()
1019 pctrl->pctldesc.pins = pctrl->soc->pins; in intel_pinctrl_probe()
1020 pctrl->pctldesc.npins = pctrl->soc->npins; in intel_pinctrl_probe()
1022 pctrl->pctldev = pinctrl_register(&pctrl->pctldesc, &pdev->dev, pctrl); in intel_pinctrl_probe()
1023 if (IS_ERR(pctrl->pctldev)) { in intel_pinctrl_probe()
1025 return PTR_ERR(pctrl->pctldev); in intel_pinctrl_probe()
1028 ret = intel_gpio_probe(pctrl, irq); in intel_pinctrl_probe()
1030 pinctrl_unregister(pctrl->pctldev); in intel_pinctrl_probe()
1034 platform_set_drvdata(pdev, pctrl); in intel_pinctrl_probe()
1042 struct intel_pinctrl *pctrl = platform_get_drvdata(pdev); in intel_pinctrl_remove() local
1044 gpiochip_remove(&pctrl->chip); in intel_pinctrl_remove()
1045 pinctrl_unregister(pctrl->pctldev); in intel_pinctrl_remove()
1055 struct intel_pinctrl *pctrl = platform_get_drvdata(pdev); in intel_pinctrl_suspend() local
1060 pads = pctrl->context.pads; in intel_pinctrl_suspend()
1061 for (i = 0; i < pctrl->soc->npins; i++) { in intel_pinctrl_suspend()
1062 const struct pinctrl_pin_desc *desc = &pctrl->soc->pins[i]; in intel_pinctrl_suspend()
1065 if (!intel_pad_usable(pctrl, desc->number)) in intel_pinctrl_suspend()
1068 val = readl(intel_get_padcfg(pctrl, desc->number, PADCFG0)); in intel_pinctrl_suspend()
1070 val = readl(intel_get_padcfg(pctrl, desc->number, PADCFG1)); in intel_pinctrl_suspend()
1074 communities = pctrl->context.communities; in intel_pinctrl_suspend()
1075 for (i = 0; i < pctrl->ncommunities; i++) { in intel_pinctrl_suspend()
1076 struct intel_community *community = &pctrl->communities[i]; in intel_pinctrl_suspend()
1089 static void intel_gpio_irq_init(struct intel_pinctrl *pctrl) in intel_gpio_irq_init() argument
1093 for (i = 0; i < pctrl->ncommunities; i++) { in intel_gpio_irq_init()
1098 community = &pctrl->communities[i]; in intel_gpio_irq_init()
1112 struct intel_pinctrl *pctrl = platform_get_drvdata(pdev); in intel_pinctrl_resume() local
1118 intel_gpio_irq_init(pctrl); in intel_pinctrl_resume()
1120 pads = pctrl->context.pads; in intel_pinctrl_resume()
1121 for (i = 0; i < pctrl->soc->npins; i++) { in intel_pinctrl_resume()
1122 const struct pinctrl_pin_desc *desc = &pctrl->soc->pins[i]; in intel_pinctrl_resume()
1126 if (!intel_pad_usable(pctrl, desc->number)) in intel_pinctrl_resume()
1129 padcfg = intel_get_padcfg(pctrl, desc->number, PADCFG0); in intel_pinctrl_resume()
1137 padcfg = intel_get_padcfg(pctrl, desc->number, PADCFG1); in intel_pinctrl_resume()
1146 communities = pctrl->context.communities; in intel_pinctrl_resume()
1147 for (i = 0; i < pctrl->ncommunities; i++) { in intel_pinctrl_resume()
1148 struct intel_community *community = &pctrl->communities[i]; in intel_pinctrl_resume()