aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/gpio
Commit message (Collapse)AuthorAgeFilesLines
* Merge remote-tracking branch 'linux-stable/linux-3.0.y' into ↵Ziyan2015-10-252-5/+7
|\ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | p-android-omap-3.0-dev-espresso Conflicts: Makefile arch/arm/include/asm/hardware/cache-l2x0.h arch/arm/kernel/smp.c arch/arm/mach-omap2/board-4430sdp.c arch/arm/mach-omap2/board-omap4panda.c arch/arm/mach-omap2/opp.c arch/ia64/include/asm/futex.h drivers/bluetooth/ath3k.c drivers/bluetooth/btusb.c drivers/firmware/efivars.c drivers/gpu/drm/i915/intel_lvds.c drivers/gpu/drm/radeon/radeon_atombios.c drivers/gpu/drm/radeon/radeon_irq_kms.c drivers/hwmon/fam15h_power.c drivers/mfd/twl6030-irq.c drivers/mmc/core/sdio.c drivers/net/tun.c drivers/net/usb/ipheth.c drivers/net/usb/usbnet.c drivers/usb/core/hub.c drivers/usb/host/xhci-mem.c drivers/usb/host/xhci.h drivers/usb/musb/omap2430.c drivers/usb/serial/ftdi_sio.c drivers/usb/serial/ftdi_sio_ids.h drivers/usb/serial/option.c drivers/usb/serial/qcserial.c drivers/usb/serial/ti_usb_3410_5052.c drivers/usb/serial/ti_usb_3410_5052.h drivers/video/omap2/dss/hdmi.c fs/splice.c include/asm-generic/pgtable.h include/net/sch_generic.h kernel/cgroup.c kernel/futex.c kernel/time/timekeeping.c net/ipv4/route.c net/ipv4/syncookies.c net/ipv4/tcp_ipv4.c net/wireless/util.c security/commoncap.c sound/soc/soc-dapm.c
| * pch_gpio: Support new device LAPIS Semiconductor ML7831 IOHTomoya MORINAGA2012-05-212-5/+7
| | | | | | | | | | | | | | | | | | | | commit 868fea0507308b6548bba7debe5f5c2d5ca47fca upstream. ML7831 is companion chip for Intel Atom E6xx series. Signed-off-by: Grant Likely <grant.likely@secretlab.ca> Signed-off-by: Tomoya MORINAGA <tomoya.rohm@gmail.com> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
| * gpio/pca953x: Fix warning of enabled interrupts in handlerDavid Jander2012-02-201-3/+3
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | commit 6dd599f8af0166805951f4421a78ba716d78321a upstream. When using nested threaded irqs, use handle_nested_irq(). This function does not call the chip handler, so no handler is set. Signed-off-by: David Jander <david@protonic.nl> Signed-off-by: Grant Likely <grant.likely@secretlab.ca> Cc: Steven Rostedt <rostedt@goodmis.org> Cc: Yong Zhang <yong.zhang0@gmail.com> Cc: Manfred Gruber <m.gruber@unverspurt.at> Cc: Thomas Gleixner <tglx@linutronix.de> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
* | GPIO: OMAP: Fix the sequence to clear the IRQ statusGirish S G2012-10-251-6/+8
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | The recommended way to clear the GPIO IRQ status is to: - Enable the IRQ - clear the status If this above sequence is not followed, i.e., if the status is cleared after disabling the IRQ then sWAKEUP will not be cleared and gates the module transition. Change-Id: I8bd1b820ac8be70530cd6430f26ce541bfd3f9d9 Signed-off-by: Huzefa Kankroliwala <huzefank@ti.com> Signed-off-by: Girish S G <girishsg@ti.com> Signed-off-by: Andrii Anisov <andrii.anisov@ti.com>
* | gpio/omap: fix _set_gpio_irqenable implementationTarun Kanti DebBarma2012-10-051-1/+4
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This function should be capable of both enabling and disabling interrupts based upon the *enable* parameter. Right now the function only enables the interrupt and *enable* is not used at all. So add the interrupt disable capability also using the parameter. Change-Id: I9b902184cabe8990205c9d488d261d79a84b94d4 Signed-off-by: Tarun Kanti DebBarma <tarun.kanti@ti.com> Reviewed-by: Santosh Shilimkar <santosh.shilimkar@ti.com> Acked-by: Felipe Balbi <balbi@ti.com> Reviewed-by: Kevin Hilman <khilman@ti.com> Signed-off-by: Kevin Hilman <khilman@ti.com> Signed-off-by: Ruslan Bilovol <ruslan.bilovol@ti.com>
* | Merge latest changes from google kernel/common.gitRoman Shaposhnikov2012-06-131-3/+3
| | | | | | | | | | | | | | Kernel version updated to 3.0.31 Change-Id: Ifbd7150801f3beeec9cbaa566f249d8019ef9348 Signed-off-by: Roman Shaposhnikov <x0166637@ti.com>
* | GPIO: OMAP2+: On suspend don't wakeup on non-wakeupable interrupts.Ambresh K2012-02-011-4/+6
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | While in suspend, device should only be woken-up from those gpio pins, who has explicitly marked itself has wakeup capable through enable_irq_wake() functions from respective drivers. In current implementation, it address the issue where interrupts were lost when system had entered deeper c-state. So in CpuIdle path all the pins with interrupts enabled where marked has wakeup capable to get the system out of deeper c-states. With this approach, it is observed that lots of spurious interrupts are waking system from suspend, even though they not suppose wake the device. So based on, whether prepare idle is called from CpuIdle or suspend mark gpio wakeup capable. Change-Id: Ib3f9be6e56c0656f4b8736861740ed0b4394384f Signed-off-by: Ambresh K <ambresh@ti.com> Signed-off-by: Hema Kalliguddi <hemahk@ti.com>
* | Revert "OMAP GPIO: Fix to disable the I/O PAD wakeup capability for GPIO63"Ambresh K2012-02-011-6/+0
| | | | | | | | | | | | | | | | | | This reverts commit e1b152cd3bd5552b515ac3e73097e576725d9b99. Tablet2 specific hack in gpio fw. Change-Id: Ie46212a2974672eff0485cfb2962c554172c4340 Signed-off-by: Ambresh K <ambresh@ti.com>
* | Revert "OMAP GPIO: Fix to disable I/O PAD wakeup for GPIO 38"Ambresh K2012-02-011-4/+3
| | | | | | | | | | | | | | | | | | This reverts commit 057eb78f1f0467828574fe4134e410860d03cec2. Tablet2 specific hack in gpio fw. Change-Id: I858b97db9203ae3c38fc453a054936c389f45930 Signed-off-by: Ambresh K <ambresh@ti.com>
* | OMAP GPIO: Fix to disable I/O PAD wakeup for GPIO 38Huzefa N K2012-01-111-3/+4
| | | | | | | | | | | | | | | | | | On Tablet2 GPIO 38 is used for secondary sensor and PAD wakeup is not required for this pin as it is not intended to be wakeup capable Change-Id: I973cb8a131fa148e5205eaf5a35a63e6c88c2b9e Signed-off-by: Huzefa Kankroliwala <huzefank@ti.com>
* | OMAP GPIO: Fix to disable the I/O PAD wakeup capability for GPIO63Sunita Nadampalli2011-12-301-0/+6
| | | | | | | | | | | | | | | | | | | | | | On Tablet2 platform, GPIO63 is used for HDMI HPD detection. The I/O PAD wakeup is not required for this pin as it is not intended to be wakeup capable. By enabling it causes spurious wakeup events when system is in offmode. Change-Id: I8cbd4e81092d7e5bf149f364fb5874c2dba93a24 Signed-off-by: Sunita Nadampalli <sunitan@ti.com>
* | ARM: omap4: gpio: Use pad wakeupevent to detect pulses for edge triggered gpiosArve Hjønnevåg2011-12-151-0/+7
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | When the gpio controller is off we use the pad wakeup to wake up. The current code only detects edges if the state of the gpio when we wake up is different from the state we read before we turned the gpio controller off. This will miss short pulses. We now use the pad wakeupevent status to try to detect these pulses. If the interrupt is configured for dual edge triggering this will generate an interrupt for any pulse detected. If the interrupt is configured for single edge detect we only generate an interrupt if the old state matches the starting state for the enabled edge detect. This will still miss a pulse when the interrupt is configured for only the second edge in that pulse. We may also falsely generate an interrupt if an edge of the wrong polarity occured before reading the initial state (since the pad wakeup is enabled before then). Change-Id: Id9a68cd97b0281a7debb2f37d845979894b63bcc Signed-off-by: Arve Hjønnevåg <arve@android.com>
* | ARM: omap4: gpio: Fix omap2_gpio_set_wakeupenables to have an effectArve Hjønnevåg2011-12-151-0/+22
| | | | | | | | | | | | | | | | | | | | | | The wakeupenable bits set by this function do not take effect unless omap4_trigger_ioctrl is called. This function cannot be safely called after any gpio bank is disabled however, so enable the pad wakeup for all the gpio banks, call omap4_trigger_ioctrl, then disable the gpio banks. Change-Id: I4dd5aac70ebfebe9187fc4058d6470e03f89035b Signed-off-by: Arve Hjønnevåg <arve@android.com>
* | Revert "Revert "ARM: omap4: gpio: Fix lost gpio edge interrutps in low power ↵Arve Hjønnevåg2011-12-151-2/+2
| | | | | | | | | | | | idle modes."" This reverts commit 6e26e777467737a46f68ca33e25dd9c6e677e51b.
* | Revert "ARM: omap4: gpio: Fix lost gpio edge interrutps in low power idle ↵Simon Wilson2011-12-151-2/+2
| | | | | | | | | | | | | | | | | | | | modes." Causes issues with accelerometer interrupts. This reverts commit 72f0ac587209962b48ef6591449d29d5c6092aa0. Change-Id: I6f60b065f3437a62b0b4079db3e90bda49444ecc
* | Merge branch 'android-omap-3.0' into p-android-omap-3.0Dan Murphy2011-12-141-4/+10
|\ \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Conflicts: arch/arm/mach-omap2/pm44xx.c arch/arm/mach-omap2/smartreflex-class1p5.c arch/arm/mach-omap2/smartreflex.h arch/arm/mach-omap2/voltage.h drivers/remoteproc/remoteproc.c drivers/rpmsg/rpmsg_resmgr.c include/video/dsscomp.h Change-Id: I516310bbf02d4e6fc0d980e1755b2b35dfbc7ed4 Signed-off-by: Dan Murphy <dmurphy@ti.com>
| * | ARM: omap4: gpio: Fix wakeup for masked level triggered interruptsArve Hjønnevåg2011-12-061-2/+2
| | | | | | | | | | | | | | | | | | | | | | | | When converting level triggered interrupts to edge triggered for low power modes, only unmasked interrupts were set up. Change-Id: Ib8acfa47e9dfe992422a40bab423f0de64293476 Signed-off-by: Arve Hjønnevåg <arve@android.com>
| * | ARM: omap4: gpio: Fix lost gpio edge interrutps in low power idle modes.Arve Hjønnevåg2011-12-051-2/+2
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Use the same omap2_gpio_prepare_for_idle sequence for idle as for suspend. The existing suspend sequence will check if the gpio state has changed while in the low power mode and force an interrupt to be generated if needed. Change-Id: I274f38ebcaa811d6d43550912b7de82ffdb120e9 Signed-off-by: Arve Hjønnevåg <arve@android.com>
| * | ARM: omap: gpio: fix external abort when trying to read unclocked registerMike J. Chen2011-11-301-2/+8
| | | | | | | | | | | | | | | | | | | | | | | | omap2_gpio_prepare_for_idle() was calling omap2_gpio_set_wakeupenables() on banks that weren't in use and cause external aborts. Change-Id: Ifbb01f9d7d635a81cdd6798a582d22690d3a97cb Signed-off-by: Mike J. Chen <mjchen@google.com>
* | | ARM: OMAP4: Add put/get sync clocks in setwakeenableDan Murphy2011-11-151-0/+12
|/ / | | | | | | | | | | | | | | | | Need to add the clock calls to the setwakeupenable GPIO functions as on 4430 when going to idle the IRQ enable register is trying to be accessed with clocks off causing a kernel panic. Change-Id: Ia01ea21ff8674a4f48263addfc3bcc7b8475f17c Signed-off-by: Dan Murphy <dmurphy@ti.com>
* | ARM: omap4: gpio: abort suspend if a level wake interrupt is pendingColin Cross2011-11-141-5/+39
| | | | | | | | | | | | | | | | | | | | | | If a level wake interrupt arrives after disable_irq has been called but before suspend, the interrupt will be masked. The omap gpio driver erases all triggering information when masking an interrupt. Track the triggering state of gpio interrupts, and abort suspend if a masked wakeup interrupt is active when suspending. Change-Id: I117b592d21c455074796deaea8148edf0947eb35 Signed-off-by: Colin Cross <ccross@android.com>
* | gpio: omap: fix gpio transitions to off modeColin Cross2011-11-141-26/+27
| | | | | | | | | | | | | | | | | | | | | | | | | | | | When transitioning to off mode, it is possible that the powerdomain that contains the gpio block does not transition due to another clock domain being on. In this case, we must do the same configuration on the gpios as in the non-off mode case. Modify omap2_gpio_set_edge_wakeup to use different variables to save context vs. omap_save_context, and both set the edge wakeups and call pm_runtime_put_sync when going to off mode. Change-Id: I2890f7f3dd2c3dfe493cf748a523004a76e560c2 Signed-off-by: Colin Cross <ccross@android.com>
* | ARM: omap: gpio: set wakeupenable bits when entering idle modesColin Cross2011-11-031-0/+47
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | THe pad wakeupenable bits are required to wake through a gpio when in OFF or OSWR. If the wakeupenable bits are set when the controller is not in idle, a PRCM and a GPIO interrupt will occur for every interrupt. Set the wakeupenable bits for every active gpio interrupt when entering any gpio idle mode. Also sets the irq chip flag IRQCHIP_MASK_ON_SUSPEND to cause the irq pm code to mask all non-wake gpios in suspend, which will ensure the wakeupenable bit is not set on non-wake gpios. Change-Id: I03b8d954a65f8cc47388319e983decf03308448f Signed-off-by: Colin Cross <ccross@android.com>
* | gpio: omap: clear level bits when switching to edge detect in idleColin Cross2011-11-031-13/+42
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | The gpio controller in omap4 can only wake from idle on edge triggered lines. The level triggered interrupts are converted to edge triggered in idle. It appears that the edge triggered enable bits are ignored if the level triggered bit is also set, so clear the level trigger bit in idle and restore it later. If a level triggered interrupt is pending when the level detect register is cleared the edge detect setting will not detect it, and the interrupt will be lost. After clearing the level detect bits, manually check the datain register against the saved level detect values, and abort the transition if the interrupt is pending. Change-Id: I43fbee728cb6ebc407b8c4430a1cd37165354dc6 Signed-off-by: Colin Cross <ccross@android.com>
* | ARM: omap2+: gpio: simplify updating gpios in off vs. retentionColin Cross2011-11-031-61/+53
| | | | | | | | | | | | | | | | | | | | | | | | | | | | Call the same function to set up the gpio controllers for off mode and retention, and get rid of the external apis to set edge wakeups. Calling both omap2_gpio_prepare_for_idle and omap2_gpio_set_edge_wakeup, as was done when entering off mode, was never safe because both functions save their context in the same location. Change-Id: I159bdc1863aec9827d7fb1ec0525afd632be6fa6 Signed-off-by: Colin Cross <ccross@android.com>
* | omap: gpio: put_sync_suspend instead of put_sync in freeMiguel Vadillo2011-10-191-2/+2
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | put_sync might sleep and omap_gpio_free is calling it between spinlocks thus changing it to put_sync_suspend to avoid the following warning: [ 104.568847] BUG: sleeping function called from invalid context at drivers/base/power/runtime.c:735 [ 104.578460] in_atomic(): 1, irqs_disabled(): 128, pid: 297, name: kworker/0:3 [ 104.586090] Backtrace: [ 104.588775] [<c00531c4>] (dump_backtrace+0x0/0x110) from [<c0574ae8>] (dump_stack+0x18/0x1c) [ 104.597747] r6:60000013 r5:ffff9e48 r4:00000000 r3:60000093 [ 104.603759] [<c0574ad0>] (dump_stack+0x0/0x1c) from [<c008337c>] (__might_sleep+0x130/0x134) [ 104.612701] [<c008324c>] (__might_sleep+0x0/0x134) from [<c02cf1b0>] (__pm_runtime_idle+0x94/0x98) [ 104.622192] r5:00000004 r4:c787ac08 [ 104.626007] [<c02cf11c>] (__pm_runtime_idle+0x0/0x98) from [<c0236cc8>] (omap_gpio_free+0xa0/0xb0) [ 104.635467] r7:00000013 r6:60000013 r5:c7877268 r4:c7877200 [ 104.641510] [<c0236c28>] (omap_gpio_free+0x0/0xb0) from [<c0235438>] (gpio_free+0xa4/0x108) [ 104.650329] r7:000000f9 r6:c787727c r5:c07acfe0 r4:00000053 [ 104.656372] [<c0235394>] (gpio_free+0x0/0x108) from [<c0277e3c>] (_resource_free+0x170/0x274) [ 104.665405] [<c0277ccc>] (_resource_free+0x0/0x274) from [<c0278ddc>] (rprm_cb+0x56c/0x604) [ 104.674255] r7:00000066 r6:c7a1ac08 r5:c7a14cd0 r4:00200200 [ 104.680267] [<c0278870>] (rprm_cb+0x0/0x604) from [<c0275910>] (rpmsg_recv_done+0xbc/0x17c) [ 104.689117] [<c0275854>] (rpmsg_recv_done+0x0/0x17c) from [<c0274b54>] (vring_interrupt+0x44/0x54) [ 104.698608] r8:00000004 r7:00000000 r6:00000002 r5:00000002 r4:c074f918 [ 104.705718] [<c0274b10>] (vring_interrupt+0x0/0x54) from [<c007b1cc>] (omap_rpmsg_mbox_callback+0x6c/0) [ 104.715972] [<c007b160>] (omap_rpmsg_mbox_callback+0x0/0xb8) from [<c00b8088>] (notifier_call_chain+0x) [ 104.726562] r5:00000000 r4:fffffffe [ 104.730346] [<c00b803c>] (notifier_call_chain+0x0/0x8c) from [<c00b8480>] (__blocking_notifier_call_ch) [ 104.741485] r8:c0749a88 r7:00000004 r6:00000002 r5:00000000 r4:c0749a68 [ 104.748413] r3:ffffffff [ 104.751220] [<c00b842c>] (__blocking_notifier_call_chain+0x0/0x6c) from [<c00b84b8>] (blocking_notifie) [ 104.763183] r8:00000004 r7:00000000 r6:c63ab434 r5:c6fcbefc r4:c63ab420 [ 104.770294] [<c00b8498>] (blocking_notifier_call_chain+0x0/0x28) from [<c007fe54>] (mbox_rx_work+0x84/) [ 104.780639] [<c007fdd0>] (mbox_rx_work+0x0/0xe8) from [<c00aaf40>] (process_one_work+0x114/0x410) [ 104.790008] r8:c007fdd0 r7:00000000 r6:c1837500 r5:c18335c0 r4:c6f3b580 [ 104.797149] [<c00aae2c>] (process_one_work+0x0/0x410) from [<c00ab5e4>] (worker_thread+0x1a8/0x490) [ 104.806732] [<c00ab43c>] (worker_thread+0x0/0x490) from [<c00b2208>] (kthread+0x94/0x98) [ 104.815307] [<c00b2174>] (kthread+0x0/0x98) from [<c009860c>] (do_exit+0x0/0x720) [ 104.823211] r7:00000013 r6:c009860c r5:c00b2174 r4:c7909e94 Change-Id: I051f13d82d6b776641ebd65ff16f9ce0f02fdf57 Signed-off-by: Miguel Vadillo <vadillo@ti.com>
* | GPIO: OMAP: Remove IS_ERR_VALUE callsTodd Poynor2011-10-141-10/+10
| | | | | | | | | | Change-Id: If12733e5bb468e6ba67bd2618f3c0ca8afd7d766 Signed-off-by: Todd Poynor <toddpoynor@google.com>
* | OMAP4: Enable/Disable GPIO clocks before/after Regiter access.Rajeev Kulkarni2011-10-141-4/+27
| | | | | | | | | | | | | | | | | | | | On 4430 system was crashing in idle path while accessing GPIO regiters w/o its clocks enabled. In Many platforms some banks may not be used at all. Before acessing any GPIO bank register ensure that the clocks are active. Once accessing is done disable the clocks. Signed-off-by: Axel Haslem <axelhaslam@ti.com> Signed-off-by: Rajeev Kulkarni <rajeevk@ti.com>
* | gpio: omap: leave edge detect bits alone in idleColin Cross2011-10-111-2/+2
| | | | | | | | | | | | | | | | | | The edge detect bits should be left set if they were set entering idle, even if wkup_status was cleared for any reason. Apply wkup_status to the level detect bits only. Change-Id: I11b0ae629004a42a7fd8d7d5b2a32208586d7697 Signed-off-by: Colin Cross <ccross@android.com>
* | GPIO: OMAP: set edge trigger for wakeup gpioAxel Haslam2011-10-061-0/+47
| | | | | | | | | | | | | | | | | | | | Only edge trigger is supported for wakeup. if a gpio is set as wakeup, and level trigger, make sure we set the edge trigger so that we can wake up. Change-Id: Ibb61042be6ce053729ff20f3cb8d53899afe42b1 Signed-off-by: Axel Haslam <axelhaslam@ti.com>
* | GPIO: OMAP: Fix GPIO_IRQWAKEN_0 accessAxel Haslam2011-10-061-9/+26
| | | | | | | | | | | | | | | | | | | | | | The use of the new GPIO_IRQWAKEN_0 register cannot use the same logic as the GPIO_CLEARWKUPENA and GPIO_SETWKUENA. To set GPIO_IRQWAKEN_0 we need to read the register and OR the corresponding bit. to clear the wakeup we need clear the bit NOT set it. Change-Id: Iabbe553e3db283804f5b89dfba3f5fa35b88d9dc Signed-off-by: Axel Haslam <axelhaslam@ti.com>
* | OMAP: PM: replace omap_pm_get_dev_context_loss_count with ↵Axel Haslam2011-09-061-13/+3
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | omap_pm_was_context_lost Drivers just need to know if thier context was lost or not. There is not much point in maintaining a count This removes omap_pm_get_dev_context_loss_count and replaces it with omap_pm_was_context_lost Adapt drivers to use the omap_pm_was_context_lost API, which returns a bool value instead of relying on the incrementing context lost counter. This makes drivers a little more snappier as they do not need to restore contexts when not needed. WARNING: this changes the api set available to drivers to use from OMAP PM layer. Change-Id: I7fd9183d3e12982bb40651df9378637073121399 Signed-off-by: Axel Haslam <axelhaslam@ti.com>
* | GPIO: OMAP: use put_sync_suspend instead of put_syncNishanth Menon2011-08-291-1/+1
| | | | | | | | | | | | | | | | | | save is usually called by arch's suspend path where interrupts are disabled. we should use put_sync_suspend instead of put_sync to prevent sleepable calls to callbacks. Change-Id: I1194b23753d1ad94ffaa23bc9f36ead418d13974 Signed-off-by: Nishanth Menon <nm@ti.com>
* | GPIO: OMAP: setup irq enable only after configuring interrupt in restoreNishanth Menon2011-08-291-4/+4
| | | | | | | | | | | | | | | | | | Setup the interrupt enable registers only after we have configured the required edge and required configurations, not before, to prevent spurious events as part of restore routine. Change-Id: I3936d3b8f9b5c12052e2e388d79558b2e134fb35 Signed-off-by: Nishanth Menon <nm@ti.com>
* | GPIO: OMAP: restore OE only after setting the output levelNishanth Menon2011-08-291-1/+1
| | | | | | | | | | | | | | | | Setup the dataout register before setting the GPIO to output mode in restore path. Change-Id: I0d3ecd9eda97a466e73e1cd2e16b7b54be3c2139 Signed-off-by: Nishanth Menon <nm@ti.com>
* | GPIO: OMAP: handle set_dataout reg capable IP on restoreNishanth Menon2011-08-291-1/+6
| | | | | | | | | | | | | | | | | | | | GPIO IP revisions such as those used in OMAP4 have a set_dataout while the previous revisions used a single dataout register. Depending on what is available restore the dataout settings to the right register. Change-Id: I07c8c0d90f4fe115533711bd587ae0d92f9e0232 Signed-off-by: Nishanth Menon <nm@ti.com>
* | GPIO: OMAP: save and restore wakeup_set register not statusNishanth Menon2011-08-291-2/+2
| | | | | | | | | | | | | | | | Status register has no meaning for save and restore. We need to save and restore the wakeup_set register instead. Change-Id: I50fa813aa77391622845dcc012cf1ee74377dd67 Signed-off-by: Nishanth Menon <nm@ti.com>
* | GPIO: OMAP: save and restore debounce as wellNishanth Menon2011-08-291-3/+17
| | | | | | | | | | | | | | | | | | | | GPIO debounce needs to be saved and restored as well for proper restoration for driver expectation. To save the registers, we cannot cut the clock before the save, hence move the clk disable after the save. Change-Id: I902ca8a4ab9750c49413f20a5782eb31f9241f1c Signed-off-by: Nishanth Menon <nm@ti.com>
* | GPIO: OMAP: mark complete once restoredNishanth Menon2011-08-291-0/+1
| | | | | | | | | | | | | | Mark the GPIO bank as restored once restoration is complete. Change-Id: Id4dd1380fade04870beac1b5115f9d15325fbd49 Signed-off-by: Nishanth Menon <nm@ti.com>
* | Merge commit 'v3.0' into linux-omap-3.0Colin Cross2011-08-101-0/+1
|\ \ | |/
| * gpio: wm831x: add a missing break in wm831x_gpio_dbg_showAxel Lin2011-07-151-0/+1
| | | | | | | | | | | | Signed-off-by: Axel Lin <axel.lin@gmail.com> Acked-by: Mark Brown <broonie@opensource.wolfsonmicro.com> Signed-off-by: Grant Likely <grant.likely@secretlab.ca>
* | GPIO: OMAP: use put_sync_suspend instead of put_sync in irq handler.Colin Cross2011-07-291-1/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | GPIO uses put_sync in irq handler at the moment, this causes the following warning with a check patch such as https://patchwork.kernel.org/patch/1001572/: [ 4.036560] BUG: sleeping function called from invalid context at drivers/base/power/runtime.c:735 [ 4.046508] in_atomic(): 1, irqs_disabled(): 128, pid: 1, name: swapper [ 4.053863] Backtrace: [ 4.056762] [<c00508d0>] (dump_backtrace+0x0/0x10c) from [<c0533870>] (dump_stack+0x18/0x1c) [ 4.066131] r7:00000000 r6:ffff6c05 r5:c06ce080 r4:de43a000 [ 4.072784] [<c0533858>] (dump_stack+0x0/0x1c) from [<c0079744>] (__might_sleep+0x108/0x128) [ 4.082183] [<c007963c>] (__might_sleep+0x0/0x128) from [<c027b824>] (__pm_runtime_idle+0x90/0x98) [ 4.092132] r6:c06d0720 r5:00000004 r4:de486808 [ 4.097534] [<c027b794>] (__pm_runtime_idle+0x0/0x98) from [<c0204ce0>] (gpio_irq_handler+0x1e8/0x270) [ 4.107849] r7:00000000 r6:c06d0720 r5:c06e7220 r4:de474000 [ 4.114501] [<c0204af8>] (gpio_irq_handler+0x0/0x270) from [<c00cc570>] (generic_handle_irq+0x3c/0x48) [ 4.124847] [<c00cc534>] (generic_handle_irq+0x0/0x48) from [<c0046054>] (asm_do_IRQ+0x54/0xb4) [ 4.134521] [<c0046000>] (asm_do_IRQ+0x0/0xb4) from [<c004c448>] (__irq_svc+0x48/0xe0) Instead, use put_sync_suspend and since the gpio devices are already marked as used in irq enabled case, the change removes a potential invalid condition. Acked-by: Nishanth Menon <nm@ti.com> Signed-off-by: Colin Cross <ccross@google.com>
* | GPIO: OMAP2+: allow level/edge triggeringGirish S Ghongdemath2011-07-141-1/+2
| | | | | | | | | | | | | | | | The code does a wrong check and does not allow OMAP2+ to set level type. Acked-by: Santosh Shilimkar <santosh.shilimkar@ti.com> Signed-off-by: Girish S G <girishsg@ti.com>
* | GPIO: OMAP: restore context only if previously savedAxel Haslam2011-07-141-2/+5
| | | | | | | | | | | | | | | | | | | | On probe a call to runtime get sync will eventualy result in a context restore. We do not want to restore any context, if it was never saved on the first place. Acked-by: Santosh Shilimkar <santosh.shilimkar@ti.com> Signed-off-by: Axel Haslam <axelhaslam@ti.com>
* | GPIO: OMAP2+: Clean prepare_for_idle and resume_after_idleTarun Kanti DebBarma2011-07-141-147/+160
| | | | | | | | | | | | | | | | | | | | Simplify omap2_gpio_prepare_for_idle() and omap2_gpio_resume_after_idle() by moving most of the stuff to *_pm_runtime_suspend() and *_pm_runtime_resume(). Also, omap_gpio_suspend() and omap_gpio_resume() optimized to operate per GPIO bank instead of operating on entire list every time. Signed-off-by: Tarun Kanti DebBarma <tarun.kanti@ti.com> Signed-off-by: Charulatha V <charu@ti.com>
* | GPIO: OMAP: Use PM runtime frameworkCharulatha V2011-07-141-20/+80
| | | | | | | | | | | | | | | | | | | | | | Call runtime pm APIs pm_runtime_get_sync() and pm_runtime_put_sync() for enabling/disabling clocks appropriately. Remove syscore_ops and instead use dev_pm_ops now. [girishsg@ti.com: Fixed review comments] Signed-off-by: Girish S G <girishsg@ti.com> Signed-off-by: Charulatha V <charu@ti.com> Signed-off-by: Tarun Kanti DebBarma <tarun.kanti@ti.com>
* | GPIO: OMAP: Remove bank->method & METHOD_* macrosCharulatha V2011-07-141-12/+6
| | | | | | | | | | | | | | | | The only bank->type (method) used in the OMAP GPIO driver is MPUIO type as they need to be handled separately. Identify the same using a flag and remove all METHOD_* macros. Signed-off-by: Charulatha V <charu@ti.com>
* | GPIO: OMAP: Fix use of readl/readw to access isr_regCharulatha V2011-07-141-3/+5
| | | | | | | | | | | | | | | | In gpio_irq_handler, isr register is always accessed as 32 bit register and only for OMAP15xx the first 16 MSBs are masked. Correct this by using the appropriate readl/readw registers as per the bank width. Signed-off-by: Charulatha V <charu@ti.com>
* | GPIO: OMAP15xx: Use pinctrl offset instead of macroCharulatha V2011-07-141-5/+3
| | | | | | | | | | | | Use regs->pinctrl field instead of using the macro OMAP1510_GPIO_PIN_CONTROL Signed-off-by: Charulatha V <charu@ti.com>
* | GPIO: OMAP: Clean omap_gpio_mod_init functionCharulatha V2011-07-141-40/+81
| | | | | | | | | | | | | | | | | | With register offsets now defined for respective OMAP versions we can get rid of cpu_class_* checks. In addition, organized common initialization for the different OMAP silicon versions. Signed-off-by: Charulatha V <charu@ti.com> Signed-off-by: Tarun Kanti DebBarma <tarun.kanti@ti.com>