On Wed, Feb 12, 2025 at 05:08:56PM +0100, Mathieu Dubois-Briand wrote: > On Wed Feb 12, 2025 at 4:14 PM CET, Andy Shevchenko wrote: > > On Wed, Feb 12, 2025 at 01:57:34PM +0100, Mathieu Dubois-Briand wrote: > > > On Mon Jan 27, 2025 at 2:07 PM CET, Andy Shevchenko wrote: > > > > On Mon, Jan 13, 2025 at 01:42:28PM +0100, Mathieu Dubois-Briand wrote: ... > > > > > + if (of_property_read_u32(pdev->dev.of_node, "ngpios", &ngpios)) { > > > > > + dev_err(&pdev->dev, "Missing ngpios OF property\n"); > > > > > + return -ENODEV; > > > > > + } > > > > > > > > This is not needed, it is already done in GPIOLIB core. > > > > > > I believe this is still needed: > > > - For gpos, we need the gpio count to correctly set the partition > > > between gpo and keypad columns in max7360_set_gpos_count(). > > > > Shouldn't be that done somewhere in the GPIO valid mask initialisation? > > > > > - For gpios, we need the gpio count to setup the IRQs. > > > > Doesn't GPIOLIB parse the property before initializing the IRQ valid mask > > and other init callbacks? > > No, I believe I have to register the IRQ before registering the GPIO, so > I can get the IRQ domain. > > Right now I have something like: > > irq_chip->num_irqs = ngpios; > devm_regmap_add_irq_chip_fwnode(dev, dev_fwnode(dev), max7360_gpio->regmap, > irq, flags, 0, irq_chip, &irq_chip_data); > gpio_config.irq_domain = regmap_irq_get_domain(irq_chip_data); > devm_gpio_regmap_register(dev, &gpio_config); > > Also, gpiolib will store ngpios in the gpio_chip structure, but while > using gpio-regmap, this structure is masked behind the opaque > gpio_regmap structure. So I believe there is no easy way to retrieve its > value. > > This part of the code changed a lot, maybe it would be easier if I push > a new version of the series and we continue the discussion there? So, what seems need to be added is some flag to GPIO regmap configuration data structure and a code that is called after gpiochip_add_data() in gpio_regmap_register() to create a domain. This will solve the above issue and helps other drivers to get rid of potential duplication of devm_regmap_add_irq_chip_fwnode() calls. Have you researched this path? -- With Best Regards, Andy Shevchenko