@@ -434,7 +434,7 @@ static int i801_wait_intr(struct i801_priv *priv)
434
434
busy = status & SMBHSTSTS_HOST_BUSY ;
435
435
status &= STATUS_ERROR_FLAGS | SMBHSTSTS_INTR ;
436
436
if (!busy && status )
437
- return status ;
437
+ return status & STATUS_ERROR_FLAGS ;
438
438
} while (time_is_after_eq_jiffies (timeout ));
439
439
440
440
return - ETIMEDOUT ;
@@ -458,7 +458,6 @@ static int i801_wait_byte_done(struct i801_priv *priv)
458
458
459
459
static int i801_transaction (struct i801_priv * priv , int xact )
460
460
{
461
- int status ;
462
461
unsigned long result ;
463
462
const struct i2c_adapter * adap = & priv -> adapter ;
464
463
@@ -467,13 +466,12 @@ static int i801_transaction(struct i801_priv *priv, int xact)
467
466
outb_p (xact | SMBHSTCNT_INTREN | SMBHSTCNT_START ,
468
467
SMBHSTCNT (priv ));
469
468
result = wait_for_completion_timeout (& priv -> done , adap -> timeout );
470
- return i801_check_post ( priv , result ? priv -> status : - ETIMEDOUT ) ;
469
+ return result ? priv -> status : - ETIMEDOUT ;
471
470
}
472
471
473
472
outb_p (xact | SMBHSTCNT_START , SMBHSTCNT (priv ));
474
473
475
- status = i801_wait_intr (priv );
476
- return i801_check_post (priv , status );
474
+ return i801_wait_intr (priv );
477
475
}
478
476
479
477
static int i801_block_transaction_by_block (struct i801_priv * priv ,
@@ -624,7 +622,7 @@ static irqreturn_t i801_isr(int irq, void *dev_id)
624
622
625
623
status &= STATUS_ERROR_FLAGS | SMBHSTSTS_INTR ;
626
624
if (status ) {
627
- priv -> status = status ;
625
+ priv -> status = status & STATUS_ERROR_FLAGS ;
628
626
complete (& priv -> done );
629
627
}
630
628
@@ -674,7 +672,7 @@ static int i801_block_transaction_byte_by_byte(struct i801_priv *priv,
674
672
reinit_completion (& priv -> done );
675
673
outb_p (priv -> cmd | SMBHSTCNT_START , SMBHSTCNT (priv ));
676
674
result = wait_for_completion_timeout (& priv -> done , adap -> timeout );
677
- return i801_check_post ( priv , result ? priv -> status : - ETIMEDOUT ) ;
675
+ return result ? priv -> status : - ETIMEDOUT ;
678
676
}
679
677
680
678
for (i = 1 ; i <= len ; i ++ ) {
@@ -688,7 +686,7 @@ static int i801_block_transaction_byte_by_byte(struct i801_priv *priv,
688
686
689
687
status = i801_wait_byte_done (priv );
690
688
if (status )
691
- goto exit ;
689
+ return status ;
692
690
693
691
if (i == 1 && read_write == I2C_SMBUS_READ
694
692
&& command != I2C_SMBUS_I2C_BLOCK_DATA ) {
@@ -718,9 +716,7 @@ static int i801_block_transaction_byte_by_byte(struct i801_priv *priv,
718
716
outb_p (SMBHSTSTS_BYTE_DONE , SMBHSTSTS (priv ));
719
717
}
720
718
721
- status = i801_wait_intr (priv );
722
- exit :
723
- return i801_check_post (priv , status );
719
+ return i801_wait_intr (priv );
724
720
}
725
721
726
722
static void i801_set_hstadd (struct i801_priv * priv , u8 addr , char read_write )
@@ -904,6 +900,8 @@ static s32 i801_access(struct i2c_adapter *adap, u16 addr,
904
900
else
905
901
ret = i801_simple_transaction (priv , data , addr , command , read_write , size );
906
902
903
+ ret = i801_check_post (priv , ret );
904
+
907
905
/* Some BIOSes don't like it when PEC is enabled at reboot or resume
908
906
* time, so we forcibly disable it after every transaction.
909
907
*/
0 commit comments