aboutsummaryrefslogtreecommitdiff
path: root/drivers/base/regmap/regmap-irq.c
AgeCommit message (Collapse)AuthorFilesLines
2012-08-07regmap: irq: Enable devices for runtime PM while handling interruptsMark Brown1-0/+25
Some devices need to have a runtime PM reference while handling interrupts to ensure that the register I/O is available. Support this with a flag in the chip. Signed-off-by: Mark Brown <[email protected]>
2012-08-04regmap: irq: initialize all irqs to wake disabledStephen Warren1-0/+16
The kerneldoc for irq_set_irq_wake() says: Enable/disable power management wakeup mode, which is disabled by default. regmap_irq_set_wake() clears bits to enable wake for an interrupt, and sets bits to disable wake. Hence, we should set all bits in wake_buf initially, to mirror the expected disabled state. Signed-off-by: Stephen Warren <[email protected]> Signed-off-by: Mark Brown <[email protected]>
2012-08-04regmap: set MASK_ON_SUSPEND/SKIP_SET_WAKE if no wake_baseStephen Warren1-0/+5
If a regmap-irq chip has no wake base: * There's no point calling .irq_set_wake, hence IRQCHIP_SKIP_SET_WAKE. * If some IRQs in the chip are enabled for wake and some aren't, we should mask those interrupts that are not wake enabled, so that if they occur during suspend, the system is not awoken. Hence, IRQCHIP_MASK_ON_SUSPEND. Note that IRQCHIP_MASK_ON_SUSPEND is handled by check_wakeup_irqs(), which always iterates over every single interrupt in the system, irrespective of whether an interrupt is a child of a controller whose output interrupt has no wake-enabled inputs and hence is presumably masked itself. Hence this change might cause interrupt unnecessary masking operations and associated register I/O. Signed-off-by: Stephen Warren <[email protected]> Signed-off-by: Mark Brown <[email protected]>
2012-08-04regmap: name irq_chip based on regmap_irq_chip's nameStephen Warren1-1/+1
This is intended to give each irq_chip a useful name, rather than hard- coding them all as "regmap". Signed-off-by: Stephen Warren <[email protected]> Signed-off-by: Mark Brown <[email protected]>
2012-08-04regmap: store irq_chip inside regmap_irq_chip_dataStephen Warren1-2/+4
This will allow later patches to adjust portions of the irq_chip individually for each regmap_irq_chip that is created. Signed-off-by: Stephen Warren <[email protected]> Signed-off-by: Mark Brown <[email protected]>
2012-08-04regmap: irq: Only update mask bits when doing initial maskMark Brown1-1/+2
Don't write the full register, it's possible there's bits other than the masks in the same register which we shouldn't be changing. Signed-off-by: Mark Brown <[email protected]> Tested-by: Stephen Warren <[email protected]>
2012-08-04regmap: fix some error messages to take account of irq_reg_strideStephen Warren1-14/+15
A number of places in the code were printing error messages that included the address of a register, but were not calculating the register address in the same way as the access to the register. Use a temporary to solve this. Signed-off-by: Stephen Warren <[email protected]> Signed-off-by: Mark Brown <[email protected]>
2012-07-22Merge branches 'regmap-core', 'regmap-irq' and 'regmap-page' into regmap-nextMark Brown1-0/+51
Conflicts (trivial context stuff): drivers/base/regmap/regmap.c include/linux/regmap.h
2012-06-05regmap: Implement support for wake IRQsMark Brown1-0/+47
Allow chips to provide a bank of registers for controlling the wake state in a similar fashion to the masks and propagate the wake count to the parent interrupt controller. Signed-off-by: Mark Brown <[email protected]>
2012-06-05regmap: Don't try to map non-existant IRQsMark Brown1-0/+4
If the driver supplied an empty entry in the array of IRQs then return an error rather than trying to do the mapping. This is intended for use with handling chip variants and similar situations. Signed-off-by: Mark Brown <[email protected]>
2012-06-03regmap: Constify regmap_irq_chipMark Brown1-3/+3
We should never be modifying it and it lets drivers declare it const. Signed-off-by: Mark Brown <[email protected]>
2012-05-17regmap: Fix typo in IRQ register stridingMark Brown1-1/+1
Signed-off-by: Mark Brown <[email protected]>
2012-05-14regmap: add support for non contiguous status to regmap-irqGraeme Gregory1-33/+21
In some chips the IRQ status registers are not contiguous in the register map but spaced at even spaces. This is an easy case to handle with minor changes. It is assume for this purpose that the stride for status is equal to the stride for mask/ack registers as well. Signed-off-by: Graeme Gregory <[email protected]> Signed-off-by: Mark Brown <[email protected]>
2012-05-13regmap: Convert regmap_irq to use irq_domainMark Brown1-27/+70
This gets us up to date with the recommended current kernel infrastructure and should transparently give us device tree interrupt bindings for any devices using the framework. If an explicit IRQ mapping is passed in then a legacy interrupt range is created, otherwise a simple linear mapping is used. Previously a mapping was mandatory so existing drivers should not be affected. A function regmap_irq_get_virq() is provided to allow drivers to map individual IRQs which should be used in preference to the existing regmap_irq_chip_get_base() which is only valid if a legacy IRQ range is provided. Signed-off-by: Mark Brown <[email protected]>
2012-05-13Merge branches 'regmap-core', 'regmap-stride', 'regmap-mmio' and ↵Mark Brown1-11/+28
'regmap-irq' into regmap-next
2012-05-13regmap: Pass back the allocated regmap IRQ controller dataMark Brown1-0/+2
It's needed for freeing and for obtaining the IRQ base later on. Signed-off-by: Mark Brown <[email protected]>
2012-04-11regmap: fix compile errors in regmap-irq.c due to stride changesStephen Warren1-1/+4
Commit f01ee60fffa4 ("regmap: implement register striding") caused the compile errors below. Fix them. drivers/base/regmap/regmap-irq.c: In function 'regmap_irq_sync_unlock': drivers/base/regmap/regmap-irq.c:62:12: error: 'map' undeclared (first use in this function) drivers/base/regmap/regmap-irq.c:62:12: note: each undeclared identifier is reported only once for each function it appears in drivers/base/regmap/regmap-irq.c: In function 'regmap_irq_enable': drivers/base/regmap/regmap-irq.c:77:37: error: 'map' undeclared (first use in this function) drivers/base/regmap/regmap-irq.c: In function 'regmap_irq_disable': drivers/base/regmap/regmap-irq.c:85:37: error: 'map' undeclared (first use in this function) Signed-off-by: Stephen Warren <[email protected]> Signed-off-by: Mark Brown <[email protected]>
2012-04-10regmap: implement register stridingStephen Warren1-11/+23
regmap_config.reg_stride is introduced. All extant register addresses are a multiple of this value. Users of serial-oriented regmap busses will typically set this to 1. Users of the MMIO regmap bus will typically set this based on the value size of their registers, in bytes, so 4 for a 32-bit register. Throughout the regmap code, actual register addresses are used. Wherever the register address is used to index some array of values, the address is divided by the stride to determine the index, or vice-versa. Error- checking is added to all entry-points for register address data to ensure that register addresses actually satisfy the specified stride. The MMIO bus ensures that the specified stride is large enough for the register size. Signed-off-by: Stephen Warren <[email protected]> Signed-off-by: Mark Brown <[email protected]>
2012-03-11device.h: cleanup users outside of linux/include (C files)Paul Gortmaker1-0/+1
For files that are actively using linux/device.h, make sure that they call it out. This will allow us to clean up some of the implicit uses of linux/device.h within include/* without introducing build regressions. Yes, this was created by "cheating" -- i.e. the headers were cleaned up, and then the fallout was found and fixed, and then the two commits were reordered. This ensures we don't introduce build regressions into the git history. Signed-off-by: Paul Gortmaker <[email protected]>
2011-12-05regmap: Add irq_base accessor to regmap_irqMark Brown1-0/+13
Allows devices to discover their own interrupt without having to remember it themselves. Signed-off-by: Mark Brown <[email protected]>
2011-11-28regmap: Report if we actually handled an interrupt in regmap-irqMark Brown1-1/+6
While the IRQ core doesn't currently support shared threaded interrupts that's no reason for drivers not to do their bit and report IRQ_NONE when they don't get an interrupt. This allows the core spurious/wedget interrupt detection support to do its thing. Signed-off-by: Mark Brown <[email protected]>
2011-11-08regmap: Add a reusable irq_chip for regmap based interrupt controllersMark Brown1-0/+284
There seem to be lots of regmap-using devices with very similar interrupt controllers with a small bank of interrupt registers and mask registers with an interrupt per bit. This won't cover everything but it's a good start. Each chip supplies a base for the status registers, a base for the mask registers, an optional base for writing acknowledgements (which may be the same as the status registers) and an array of bits within each of these register banks which indicate the interrupt. There is an assumption that the bit for each interrupt will be the same in each of the register bank. Signed-off-by: Mark Brown <[email protected]>