NFC: trf7970a: Return error code when turning on RF fails
authorMark A. Greer <mgreer@animalcreek.com>
Tue, 2 Sep 2014 22:12:33 +0000 (15:12 -0700)
committerSamuel Ortiz <sameo@linux.intel.com>
Sun, 7 Sep 2014 21:13:44 +0000 (23:13 +0200)
trf7970a_switch_rf_on() is currently a void function
but turning on the RF could fail so it should return
a return code.  That return code should also be
propagated back to the entity that initiated the
action.

Signed-off-by: Mark A. Greer <mgreer@animalcreek.com>
Signed-off-by: Samuel Ortiz <sameo@linux.intel.com>
drivers/nfc/trf7970a.c

index 2b1573fb6e9f0f48e9438c9676997c8eca1847a5..8c2fb62982c42f8c0c7f004413cbaec0b18ec7fe 100644 (file)
@@ -869,7 +869,7 @@ static void trf7970a_switch_rf_off(struct trf7970a *trf)
        pm_runtime_put_autosuspend(trf->dev);
 }
 
-static void trf7970a_switch_rf_on(struct trf7970a *trf)
+static int trf7970a_switch_rf_on(struct trf7970a *trf)
 {
        int ret;
 
@@ -880,15 +880,18 @@ static void trf7970a_switch_rf_on(struct trf7970a *trf)
        ret = trf7970a_init(trf);
        if (ret) {
                dev_err(trf->dev, "%s - Can't initialize: %d\n", __func__, ret);
-               return;
+               return ret;
        }
 
        trf->state = TRF7970A_ST_IDLE;
+
+       return 0;
 }
 
 static int trf7970a_switch_rf(struct nfc_digital_dev *ddev, bool on)
 {
        struct trf7970a *trf = nfc_digital_get_drvdata(ddev);
+       int ret = 0;
 
        dev_dbg(trf->dev, "Switching RF - state: %d, on: %d\n", trf->state, on);
 
@@ -897,7 +900,7 @@ static int trf7970a_switch_rf(struct nfc_digital_dev *ddev, bool on)
        if (on) {
                switch (trf->state) {
                case TRF7970A_ST_OFF:
-                       trf7970a_switch_rf_on(trf);
+                       ret = trf7970a_switch_rf_on(trf);
                        break;
                case TRF7970A_ST_IDLE:
                case TRF7970A_ST_IDLE_RX_BLOCKED:
@@ -906,6 +909,7 @@ static int trf7970a_switch_rf(struct nfc_digital_dev *ddev, bool on)
                        dev_err(trf->dev, "%s - Invalid request: %d %d\n",
                                        __func__, trf->state, on);
                        trf7970a_switch_rf_off(trf);
+                       ret = -EINVAL;
                }
        } else {
                switch (trf->state) {
@@ -914,6 +918,7 @@ static int trf7970a_switch_rf(struct nfc_digital_dev *ddev, bool on)
                default:
                        dev_err(trf->dev, "%s - Invalid request: %d %d\n",
                                        __func__, trf->state, on);
+                       ret = -EINVAL;
                        /* FALLTHROUGH */
                case TRF7970A_ST_IDLE:
                case TRF7970A_ST_IDLE_RX_BLOCKED:
@@ -922,7 +927,7 @@ static int trf7970a_switch_rf(struct nfc_digital_dev *ddev, bool on)
        }
 
        mutex_unlock(&trf->lock);
-       return 0;
+       return ret;
 }
 
 static int trf7970a_config_rf_tech(struct trf7970a *trf, int tech)
@@ -1040,8 +1045,11 @@ static int trf7970a_in_configure_hw(struct nfc_digital_dev *ddev, int type,
 
        mutex_lock(&trf->lock);
 
-       if (trf->state == TRF7970A_ST_OFF)
-               trf7970a_switch_rf_on(trf);
+       if (trf->state == TRF7970A_ST_OFF) {
+               ret = trf7970a_switch_rf_on(trf);
+               if (ret)
+                       goto err_unlock;
+       }
 
        switch (type) {
        case NFC_DIGITAL_CONFIG_RF_TECH:
@@ -1055,6 +1063,7 @@ static int trf7970a_in_configure_hw(struct nfc_digital_dev *ddev, int type,
                ret = -EINVAL;
        }
 
+err_unlock:
        mutex_unlock(&trf->lock);
        return ret;
 }