diff options
author | Felix Fietkau <nbd@openwrt.org> | 2014-12-22 20:47:10 +0000 |
---|---|---|
committer | Felix Fietkau <nbd@openwrt.org> | 2014-12-22 20:47:10 +0000 |
commit | 93192e65e8724098b9dbf36a870a2b885cf2f17f (patch) | |
tree | 8b727c39a9e0ec4fda0746518752c8c9fdeac2c6 | |
parent | 74a9e1c1b002fc03f14a2814e9200c4273e21aa6 (diff) | |
download | upstream-93192e65e8724098b9dbf36a870a2b885cf2f17f.tar.gz upstream-93192e65e8724098b9dbf36a870a2b885cf2f17f.tar.bz2 upstream-93192e65e8724098b9dbf36a870a2b885cf2f17f.zip |
oxnas: sata_oxnas: make irq handler more readable
safed one level of indention by using 'continue' instead of a
lengthy if-clause.
Signed-off-by: Daniel Golle <daniel@makrotopia.org>
v2: use logic-AND instead of '?' operator when checking for hw bug 6320
SVN-Revision: 43768
-rw-r--r-- | target/linux/oxnas/files/drivers/ata/sata_oxnas.c | 25 |
1 files changed, 13 insertions, 12 deletions
diff --git a/target/linux/oxnas/files/drivers/ata/sata_oxnas.c b/target/linux/oxnas/files/drivers/ata/sata_oxnas.c index 30bcb23b1e..291a06f959 100644 --- a/target/linux/oxnas/files/drivers/ata/sata_oxnas.c +++ b/target/linux/oxnas/files/drivers/ata/sata_oxnas.c @@ -2041,7 +2041,7 @@ int sata_oxnas_init_controller(struct ata_host *host) * * @param port SATA port to check and if necessary, correct. */ -static int sata_oxnas_bug_6320_workaround(struct ata_port *ap) +static int sata_oxnas_bug_6320_detect(struct ata_port *ap) { struct sata_oxnas_port_priv *pd = ap->private_data; void __iomem *core_base = pd->core_base; @@ -2175,17 +2175,18 @@ static irqreturn_t sata_oxnas_interrupt(int irq, void *dev_instance) /* check the raw end of command interrupt to see if the * port is done */ mask = (COREINT_END << port_no); - if (int_status & mask) { - /* this port had an interrupt, clear it */ - iowrite32(mask, core_base + CORE_INT_CLEAR); - bug_present = - (hd->current_ucode == UNKNOWN_MODE) ? - sata_oxnas_bug_6320_workaround( - ah->ports[port_no]):0; - sata_oxnas_port_irq(ah->ports[port_no], - bug_present); - ret = IRQ_HANDLED; - } + if (!(int_status & mask)) + continue; + + /* this port had an interrupt, clear it */ + iowrite32(mask, core_base + CORE_INT_CLEAR); + /* check for bug 6320 only if no microcode was loaded */ + bug_present = (hd->current_ucode == UNKNOWN_MODE) && + sata_oxnas_bug_6320_detect(ah->ports[port_no]); + + sata_oxnas_port_irq(ah->ports[port_no], + bug_present); + ret = IRQ_HANDLED; } } |