hc
2024-12-19 9370bb92b2d16684ee45cf24e879c93c509162da
kernel/drivers/gpio/gpio-brcmstb.c
....@@ -603,6 +603,49 @@
603603 .resume_noirq = brcmstb_gpio_resume,
604604 };
605605
606
+static void brcmstb_gpio_set_names(struct device *dev,
607
+ struct brcmstb_gpio_bank *bank)
608
+{
609
+ struct device_node *np = dev->of_node;
610
+ const char **names;
611
+ int nstrings, base;
612
+ unsigned int i;
613
+
614
+ base = bank->id * MAX_GPIO_PER_BANK;
615
+
616
+ nstrings = of_property_count_strings(np, "gpio-line-names");
617
+ if (nstrings <= base)
618
+ /* Line names not present */
619
+ return;
620
+
621
+ names = devm_kcalloc(dev, MAX_GPIO_PER_BANK, sizeof(*names),
622
+ GFP_KERNEL);
623
+ if (!names)
624
+ return;
625
+
626
+ /*
627
+ * Make sure to not index beyond the end of the number of descriptors
628
+ * of the GPIO device.
629
+ */
630
+ for (i = 0; i < bank->width; i++) {
631
+ const char *name;
632
+ int ret;
633
+
634
+ ret = of_property_read_string_index(np, "gpio-line-names",
635
+ base + i, &name);
636
+ if (ret) {
637
+ if (ret != -ENODATA)
638
+ dev_err(dev, "unable to name line %d: %d\n",
639
+ base + i, ret);
640
+ break;
641
+ }
642
+ if (*name)
643
+ names[i] = name;
644
+ }
645
+
646
+ bank->gc.names = names;
647
+}
648
+
606649 static int brcmstb_gpio_probe(struct platform_device *pdev)
607650 {
608651 struct device *dev = &pdev->dev;
....@@ -636,10 +679,8 @@
636679
637680 if (of_property_read_bool(np, "interrupt-controller")) {
638681 priv->parent_irq = platform_get_irq(pdev, 0);
639
- if (priv->parent_irq <= 0) {
640
- dev_err(dev, "Couldn't get IRQ");
682
+ if (priv->parent_irq <= 0)
641683 return -ENOENT;
642
- }
643684 } else {
644685 priv->parent_irq = -ENOENT;
645686 }
....@@ -728,6 +769,7 @@
728769 need_wakeup_event |= !!__brcmstb_gpio_get_active_irqs(bank);
729770 gc->write_reg(reg_base + GIO_MASK(bank->id), 0);
730771
772
+ brcmstb_gpio_set_names(dev, bank);
731773 err = gpiochip_add_data(gc, bank);
732774 if (err) {
733775 dev_err(dev, "Could not add gpiochip for bank %d\n",