/* Mappings are the same for all Madera codecs */ staticconststruct regmap_irq madera_irqs[MADERA_NUM_IRQ] = {
MADERA_IRQ(FLL1_LOCK, MADERA_IRQ1_STATUS_2),
MADERA_IRQ(FLL2_LOCK, MADERA_IRQ1_STATUS_2),
MADERA_IRQ(FLL3_LOCK, MADERA_IRQ1_STATUS_2),
MADERA_IRQ(FLLAO_LOCK, MADERA_IRQ1_STATUS_2),
/* * A runtime resume would be needed to access the chip interrupt * controller but runtime pm doesn't function during suspend. * Temporarily disable interrupts until we reach suspend_noirq state.
*/
disable_irq(madera->irq);
/* * Read the flags from the interrupt controller if not specified * by pdata
*/
irq_flags = madera->pdata.irq_flags; if (!irq_flags) {
irq_data = irq_get_irq_data(madera->irq); if (!irq_data) {
dev_err(&pdev->dev, "Invalid IRQ: %d\n", madera->irq); return -EINVAL;
}
irq_flags = irqd_get_trigger_type(irq_data);
/* Codec defaults to trigger low, use this if no flags given */ if (irq_flags == IRQ_TYPE_NONE)
irq_flags = IRQF_TRIGGER_LOW;
}
if (irq_flags & (IRQF_TRIGGER_RISING | IRQF_TRIGGER_FALLING)) {
dev_err(&pdev->dev, "Host interrupt not level-triggered\n"); return -EINVAL;
}
/* * The silicon always starts at active-low, check if we need to * switch to active-high.
*/ if (irq_flags & IRQF_TRIGGER_HIGH) {
ret = regmap_update_bits(madera->regmap, MADERA_IRQ1_CTRL,
MADERA_IRQ_POL_MASK, 0); if (ret) {
dev_err(&pdev->dev, "Failed to set IRQ polarity: %d\n", ret); return ret;
}
}
/* * NOTE: regmap registers this against the OF node of the parent of * the regmap - that is, against the mfd driver
*/
ret = regmap_add_irq_chip(madera->regmap, madera->irq, IRQF_ONESHOT, 0,
&madera_irq_chip, &madera->irq_data); if (ret) {
dev_err(&pdev->dev, "add_irq_chip failed: %d\n", ret); return ret;
}
/* Save dev in parent MFD struct so it is accessible to siblings */
madera->irq_dev = &pdev->dev;
/* * The IRQ is disabled by the parent MFD driver before * it starts cleaning up all child drivers
*/
madera->irq_dev = NULL;
regmap_del_irq_chip(madera->irq, madera->irq_data);
}
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.