From 2b021ec54b368daae36cbc7a056b9e578c25fd25 Mon Sep 17 00:00:00 2001 From: Martin Stein Date: Thu, 22 Oct 2015 16:57:03 +0200 Subject: [PATCH] sd_card & imx53: simplify IRQ handler Less switch cases. Ref #1497 --- .../src/drivers/sd_card/spec/imx53/esdhcv2.h | 24 ++++++++----------- 1 file changed, 10 insertions(+), 14 deletions(-) diff --git a/repos/os/src/drivers/sd_card/spec/imx53/esdhcv2.h b/repos/os/src/drivers/sd_card/spec/imx53/esdhcv2.h index c16cb40c4..a50959549 100644 --- a/repos/os/src/drivers/sd_card/spec/imx53/esdhcv2.h +++ b/repos/os/src/drivers/sd_card/spec/imx53/esdhcv2.h @@ -665,21 +665,19 @@ struct Esdhcv2_controller : private Esdhcv2, public Sd_card::Host_controller * therefore not wait for a second IRQ when we've received a * single signal the first time. */ - Irqstat::access_t constexpr irq_cc_tc = + Irqstat::access_t constexpr irq_goal = Irq::Cc::reg_mask() | Irq::Tc::reg_mask(); - switch (irq) { - case Irq::Cc::reg_mask(): - case Irq::Tc::reg_mask(): - /* poll for the missing signal */ - if (!wait_for(irq_cc_tc, _delayer)) { + /* poll for the missing signal */ + if (irq != irq_goal) { + if (!wait_for(irq_goal, _delayer)) { PERR("completion host signal timed out"); return false; } - case irq_cc_tc: - - /* acknowledge both completion signals */ - write(irq_cc_tc); + } + /* acknowledge both completion signals */ + write(irq_goal); + if (!r) { /* * The "Auto Command 12" feature of the ESDHC seems to be @@ -687,11 +685,9 @@ struct Esdhcv2_controller : private Esdhcv2, public Sd_card::Host_controller * timeout errors sometimes. Thus, we end such transfers * manually. */ - return r ? true : _abort_transmission(); - default: - PERR("received unexpected host signal"); - return false; + if (!_abort_transmission()) { return false; } } + return true; } /**