/* * The BD9576 has own IRQ 'blocks' for: * - I2C/thermal, * - Over voltage protection * - Short-circuit protection * - Over current protection * - Over voltage detection * - Under voltage detection * - Under voltage protection * - 'system interrupt'. * * Each of the blocks have a status register giving more accurate IRQ source * information - for example which of the regulators have over-voltage. * * On top of this, there is "main IRQ" status register where each bit indicates * which of sub-blocks have active IRQs. Fine. That would fit regmap-irq main * status handling. Except that: * - Only some sub-IRQs can be masked. * - The IRQ informs us about fault-condition, not when fault state changes. * The IRQ line it is kept asserted until the detected condition is acked * AND cleared in HW. This is annoying for IRQs like the one informing high * temperature because if IRQ is not disabled it keeps the CPU in IRQ * handling loop. * * For now we do just use the main-IRQ register as source for our IRQ * information and bind the regmap-irq to this. We leave fine-grained sub-IRQ * register handling to handlers in sub-devices. The regulator driver shall * read which regulators are source for problem - or if the detected error is * regulator temperature error. The sub-drivers do also handle masking of "sub- * IRQs" if this is supported/needed. * * To overcome the problem with HW keeping IRQ asserted we do call * disable_irq_nosync() from sub-device handler and add a delayed work to * re-enable IRQ roughly 1 second later. This should keep our CPU out of * busy-loop.
*/ #define IRQS_SILENT_MS 1000
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.