return -EIO;
 }
 
-static void hideep_nvm_unlock(struct hideep_ts *ts)
+static int hideep_nvm_unlock(struct hideep_ts *ts)
 {
        u32 unmask_code;
+       int error;
 
        hideep_pgm_w_reg(ts, HIDEEP_FLASH_CFG, HIDEEP_NVM_SFR_RPAGE);
-       hideep_pgm_r_reg(ts, 0x0000000C, &unmask_code);
+       error = hideep_pgm_r_reg(ts, 0x0000000C, &unmask_code);
        hideep_pgm_w_reg(ts, HIDEEP_FLASH_CFG, HIDEEP_NVM_DEFAULT_PAGE);
+       if (error)
+               return error;
 
        /* make it unprotected code */
        unmask_code &= ~HIDEEP_PROT_MODE;
        NVM_W_SFR(HIDEEP_NVM_MASK_OFS, ts->nvm_mask);
        SET_FLASH_HWCONTROL();
        hideep_pgm_w_reg(ts, HIDEEP_FLASH_CFG, HIDEEP_NVM_DEFAULT_PAGE);
+
+       return 0;
 }
 
 static int hideep_check_status(struct hideep_ts *ts)
        u32 addr = 0;
        int error;
 
-       hideep_nvm_unlock(ts);
+       error = hideep_nvm_unlock(ts);
+       if (error)
+               return error;
 
        while (ucode_len > 0) {
                xfer_len = min_t(size_t, ucode_len, HIDEEP_NVM_PAGE_SIZE);