On Tue, Sep 13, 2011 at 6:32 PM, Tarun Kanti DebBarma <tarun.kanti@xxxxxx> wrote: > This series is continuation of cleanup of OMAP GPIO driver and fixes. > The cleanup include getting rid of cpu_is_* checks wherever possible, > use of gpio_bank list instead of static array, use of unique platform > specific value associated data member to OMAP platforms to avoid > cpu_is_* checks. The series also include PM runtime support.* > > Baseline: git://gitorious.org/khilman/linux-omap-pm.git > Branch: for_3.2/gpio-cleanup > Commit: 8323374 Thanks Tony for ack'ing the patches. Kevin, Since Tony's has acked the patches, can you please pull them? Thanks. -- Tarun > > Test Details: > - Compile tested for omap1_defconfig and omap2plus_defconfig. > - OMAP1710-H3: Bootup test. > - OMAP2430/SDP, OMAP3430/SDP, OMAP4430/SDP: Functional testing. > - PM Testing on OMAP3430-SDP: retention, off_mode, system_wide > suspend and gpio wakeup. > > v7: > - Use pm_runtime_put() instead of pm_runtime_put_sync_suspend() > > - Keep *_runtime_get/put*() outside spinlock > > - Remove additional checking of conditions in _restore_context() > From: > if (bank->regs->set_dataout && bank->regs->clear_dataout) > ... > To: > if (bank->regs->set_dataout) > ... > > - Use SET_RUNTIME_PM_OPS and SET_SYSTEM_SLEEP_PM_OPS macros > > - In [PATCH 19/25] gpio/omap: cleanup prepare_for_idle and resume_after_idle, > protect the bank data elements and register access using spinlock in > runtime_suspend/resume() callbacks. > This is because these callbacks run with interrupts enabled. > > - Add dbclk aliases for all GPIO modules. Without this, GPIO modules were not > getting the correct clock handle to enable/disable debounec clock. > > - Fix log comments on the following patches: > [PATCH 19/25] gpio/omap: cleanup prepare_for_idle and resume_after_idle > [PATCH 20/25] gpio/omap: skip operations in runtime callbacks > [PATCH 24/25] gpio/omap: restore OE only after setting the output level > > v6: > - Save and restore debounce registers for proper driver operation. > - Restore interrupt enable after all configuration to avoid spurious interrupts. > - Restore dataout register before oe register. > - Restore dataout into dataout_set or dataout based upon the OMAP version. > - Change register name from wkup_status to wkup_en. > - Remove wrapper around omap_pm_get_dev_context_loss_count(). Use it directly. > Also, changed the signature of get_context_loss_count in pdata and bank structure > from int to u32. > > - Use 'context' instead of 'ctx' for clarity wherever it is used. > - Merged two patches into one which are related to bank_is_mpuio() modification. > - Use shift operator instead of following: > + .irqctrl = OMAP_MPUIO_GPIO_INT_EDGE / 2, > > - Remove redundant check from the following > + if (bank_is_mpuio(bank)) { > + if (bank->regs->wkup_status) <--- redundant check > + mpuio_init(bank); > > - Change subject of following patch > [PATCH v5 15/22] gpio/omap: use readl in irq_handler for all access > into > [PATCH 14/25] gpio/omap: remove unnecessary bit-masking for read access > > - Fix multi-line comments in > [PATCH v5 20/22] gpio/omap: cleanup prepare_for_idle and resume_after_idle > > v5: > - Reduce runtime callback overhead when *_get/put_sync() called from probe() > and *_gpio_request/free(). > > - Dynamic context save within functions where context is modified instead of > saving all context within a common function. > > - Removed call to mpuio_init() from omap_gpio_mod_init(). Both the functions are > called once during initialization in *_gpio_probe(). > Call to omap_gpio_mod_init() has been removed from omap_gpio_request() on the > first access to gpio bank. One time initialization looks sufficient. > > - In *_gpio_irq_handler() use *_put_sync_suspend() instead of *_put_sync(). > > - Removed hardcoding of OMAP16xx sysconfig register value and instead defined an > associated constant. > > - Removed *_get_sync() call from *_gpio_suspend() and *_put_sync() call from > *_gpio_resume(). They got wrongly slipped into the code. > > - Removed following redundant zero allocated initialization from mach-omap2/gpio.c > + pdata->regs->irqctrl = 0; > + pdata->regs->edgectrl1 = 0; > + pdata->regs->edgectrl2 = 0; > > - Removed following redundant code in gpio-omap.c > -#define bank_is_mpuio(bank) ((bank)->method == METHOD_MPUIO) > > v4: > - since all accesses to registers are 4-byte aligned, removing special > checks and handling of 16 and 32-bit wide bank registers and instead > use 32-bit read/write access consistently. > > - redundant usage of MOD_REG_BIT has been corrected and replaced with > _gpio_rmw(). > > - omap_gpio_mod_init() function has been simplified further using _gpio_rmw(). > > - sysconfig register offset specific to omap16xx has been removed along > with its usage. > > - additional logic to skip from suspend/resume: > > if (!bank->regs->wkup_status || !bank->suspend_wakeup) > return 0; > > if (!bank->regs->wkup_status || !bank->saved_wakeup) > return 0; > > - separated mpuio related changes into a different patch from the patch where > wakeup status register related changes are done. > > - Incorrect replacement of !cpu_class_is_omap2() in gpio_irq_type() > corrected: > + if (!bank->regs->leveldetect0 && > + (type & (IRQ_TYPE_LEVEL_LOW|IRQ_TYPE_LEVEL_HIGH))) > return -EINVAL; > > v3: > - Avoid use of wkup_set and wkup_clear registers. Instead use wkup_status > register for all platforms. This is because on OMAP4 it is recommended > not to use them. > > - Remove duplicate code in omap_gpio_mod_init() for handling the same for > 32-bit and 16-bit GPIO bank widths. This is accomplished by having two > functions to handle each case while assiging a common function pointer > during initialization. > > - Remove OMAP16xx specific one time initialization from omap_gpio_mod_init(). > Move it inside omap16xx_gpio_init(). > > - Avoid usage of USHRT_MAX to indicate undefined values. Use 0 instead. > > - In omap_gpio_suspend()/resume() functions remove code that checks > if the feature is supported. Instead, assign these functions to > struct platform_driver's suspend & resume function pointers for those > OMAP platforms whcih support this feature. > > - Remove 'suspend_support' flag because it is redundant. Instead use > wkup_* registers to decode the same information. > > - Restore context also when we don't know if the context is lost. > > - Make omap_gpio_save_context() and omap_gpio_restore_context() > static. > > v2: > - Do special handling of non-wakeup GPIOs only on OMAP2420. Avoid this > handling on OMAP3430. > - Isolate cleanups and fixes into separate set of patches. Keep the cleanup > first followed by the fixes. > - Avoid calling omap_gpio_get_context_loss() directly and instead call it > through function pointer in pdata initialized during init. > - workaround_enabled flag is not longer needed and is removed. > - Call pwrdm_post_transition() before calling omap_gpio_resume_after_idle(). > - In omap2_gpio_resume_after_idle() do context restore before handling > workaround. > - Use PM runtime framework. > - Modify register offset names to : wkup_status, wkup_clear, wkup_set. > Also use 'base + offset' for readibility in all relevant places. > - Remove unwanted messages from commit section like TODO, etc. > > > Charulatha V (10): > gpio/omap: remove dependency on gpio_bank_count > gpio/omap: use flag to identify wakeup domain > gpio/omap: make gpio_context part of gpio_bank structure > gpio/omap: fix pwrdm_post_transition call sequence > gpio/omap: handle save/restore context in GPIO driver > gpio/omap: make non-wakeup GPIO part of pdata > gpio/omap: avoid cpu checks during module ena/disable > gpio/omap: use pinctrl offset instead of macro > gpio/omap: remove bank->method & METHOD_* macros > gpio/omap: fix bankwidth for OMAP7xx MPUIO > > Nishanth Menon (4): > gpio/omap: save and restore debounce registers > gpio/omap: enable irq at the end of all configuration in restore > gpio/omap: restore OE only after setting the output level > gpio/omap: handle set_dataout reg capable IP on restore > > Tarun Kanti DebBarma (12): > gpio/omap: further cleanup using wkup_en register > gpio/omap: use level/edge detect reg offsets > gpio/omap: remove hardcoded offsets in context save/restore > gpio/omap: cleanup set_gpio_triggering function > gpio/omap: cleanup omap_gpio_mod_init function > gpio/omap: remove unnecessary bit-masking for read access > gpio/omap: use pm-runtime framework > gpio/omap: optimize suspend and resume functions > gpio/omap: cleanup prepare_for_idle and resume_after_idle > gpio/omap: skip operations in runtime callbacks > gpio/omap: remove omap_gpio_save_context overhead > gpio/omap: add dbclk aliases for all gpio modules > > arch/arm/mach-omap1/gpio15xx.c | 7 +- > arch/arm/mach-omap1/gpio16xx.c | 47 ++- > arch/arm/mach-omap1/gpio7xx.c | 14 +- > arch/arm/mach-omap2/clock3xxx_data.c | 6 + > arch/arm/mach-omap2/clock44xx_data.c | 6 + > arch/arm/mach-omap2/gpio.c | 36 +- > arch/arm/mach-omap2/pm34xx.c | 21 +- > arch/arm/plat-omap/include/plat/gpio.h | 29 +- > drivers/gpio/gpio-omap.c | 1051 +++++++++++++------------------- > 9 files changed, 524 insertions(+), 693 deletions(-) > > -- 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