>>>> #endif >>>> + if (cpu_is_omap24xx() || cpu_is_omap34xx() || cpu_is_omap44xx()) { >>>> + if (!bank->>gpio_status) { >>>> + ctrl = __raw_readl(bank->>base + OMAP24XX_GPIO_CTRL); >>>> + /* Module is enabled, clocks are not gated */ >>>> + ctrl &= 0xFFFFFFFE; >>>> + __raw_writel(ctrl, bank->>base + OMAP24XX_GPIO_CTRL); >>>> + } >>>> + bank->>gpio_status |= 1 << offset; >>>> + } >>> why do this every time a gpio is enabled? why not do this iff gpio was >>> never used before.. how about the following: >> The module is enabled only when gpio_status indicates that no GPIO >> in that module is currently active and the GPIO being requested is the 1st one >> to be active in that module. >> Each module would be disabled in free() API when all GPIOs in a particular module >> becomes inactive. The module is re-enabled in request() API when a GPIO is >> requested from the module that was previously disabled. >Thanks. Welcome >>> if (!bank->>gpio_status && (cpu_is_omap24xx() || cpu_is_omap34xx() || >>> cpu_is_omap44xx())) { >>> u32 ctrl = __raw_readl(bank->>base + OMAP24XX_GPIO_CTRL); >>> /* Module is enabled, clocks are not gated */ >>> ctrl &= 0xFFFFFFFE; >>> __raw_writel(ctrl, bank->>base + OMAP24XX_GPIO_CTRL); >>> } >>> bank->>gpio_status |= 1 << offset; >> Why to touch gpio_status if not used (for other than 34xx/24xx/44xx cases)? >either the gpio_status should be under a #ifdef for 34xx when defining >or it should be usable by all. what it does now is do both. gpio_status is not used under #ifdef for 34xx. It is used only with cpu_is_omap (34xx/24xx/44xx). Should we use both #ifdef and cpu_is_omap together? Why? But I don't see that approach in LO. For eg., usage of dbck_enable_mask is used only with cpu_is_omap and is not declared under #ifdef. >my proposal is to allow gpio_status to be usable by ALL OMAPs -> maybe >OMAP1 also could also use it.. I cannot comment - but it does look to >have scope of usage beyond omap2/3/4 series? Even though OMAP1 supports the same feature, I am not including it as I cannot test it and I am not sure about it in OMAP1. For 24xx, 34xx & 44xx, the registers used and offsets are all the same. So the same code is reused. -- To unsubscribe from this list: send the line "unsubscribe linux-omap" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html