bif: qpnp-bsi: move BSI error and flag clearing to immediately before TX
Move functions calls which clear PMIC BSI hardware errors and reset IRQ flags to immediately before BIF transmit calls. This ensures that the BSI RX and TX blocks are in the correct state before errors are cleared. Change-Id: Id266f076968d48484a9366274d30e8ff6f47dc23 Signed-off-by: David Collins <collinsd@codeaurora.org>
This commit is contained in:
parent
9e7a15568c
commit
93599b9657
|
@ -544,12 +544,6 @@ static int qpnp_bsi_bus_transaction(struct bif_ctrl_dev *bdev, int transaction,
|
|||
struct qpnp_bsi_chip *chip = bdev_get_drvdata(bdev);
|
||||
int rc;
|
||||
|
||||
rc = qpnp_bsi_clear_bsi_error(chip);
|
||||
if (rc)
|
||||
return rc;
|
||||
|
||||
qpnp_bsi_clear_irq_flags(chip);
|
||||
|
||||
qpnp_bsi_set_com_mode(chip, QPNP_BSI_COM_MODE_IRQ);
|
||||
|
||||
rc = qpnp_bsi_set_bus_state(bdev, BIF_BUS_STATE_ACTIVE);
|
||||
|
@ -563,6 +557,12 @@ static int qpnp_bsi_bus_transaction(struct bif_ctrl_dev *bdev, int transaction,
|
|||
if (rc)
|
||||
return rc;
|
||||
|
||||
rc = qpnp_bsi_clear_bsi_error(chip);
|
||||
if (rc)
|
||||
return rc;
|
||||
|
||||
qpnp_bsi_clear_irq_flags(chip);
|
||||
|
||||
rc = qpnp_bsi_issue_transaction_wait_for_tx(chip, transaction, data);
|
||||
if (rc)
|
||||
return rc;
|
||||
|
@ -578,12 +578,6 @@ static int qpnp_bsi_bus_transaction_query(struct bif_ctrl_dev *bdev,
|
|||
struct qpnp_bsi_chip *chip = bdev_get_drvdata(bdev);
|
||||
int rc, timeout;
|
||||
|
||||
rc = qpnp_bsi_clear_bsi_error(chip);
|
||||
if (rc)
|
||||
return rc;
|
||||
|
||||
qpnp_bsi_clear_irq_flags(chip);
|
||||
|
||||
qpnp_bsi_set_com_mode(chip, QPNP_BSI_COM_MODE_IRQ);
|
||||
|
||||
rc = qpnp_bsi_set_bus_state(bdev, BIF_BUS_STATE_ACTIVE);
|
||||
|
@ -597,6 +591,12 @@ static int qpnp_bsi_bus_transaction_query(struct bif_ctrl_dev *bdev,
|
|||
if (rc)
|
||||
return rc;
|
||||
|
||||
rc = qpnp_bsi_clear_bsi_error(chip);
|
||||
if (rc)
|
||||
return rc;
|
||||
|
||||
qpnp_bsi_clear_irq_flags(chip);
|
||||
|
||||
rc = qpnp_bsi_issue_transaction_wait_for_tx(chip, transaction, data);
|
||||
if (rc)
|
||||
return rc;
|
||||
|
@ -624,12 +624,6 @@ static int qpnp_bsi_bus_transaction_read(struct bif_ctrl_dev *bdev,
|
|||
int rc, timeout;
|
||||
u8 buf[3];
|
||||
|
||||
rc = qpnp_bsi_clear_bsi_error(chip);
|
||||
if (rc)
|
||||
return rc;
|
||||
|
||||
qpnp_bsi_clear_irq_flags(chip);
|
||||
|
||||
qpnp_bsi_set_com_mode(chip, QPNP_BSI_COM_MODE_IRQ);
|
||||
|
||||
rc = qpnp_bsi_set_bus_state(bdev, BIF_BUS_STATE_ACTIVE);
|
||||
|
@ -643,6 +637,12 @@ static int qpnp_bsi_bus_transaction_read(struct bif_ctrl_dev *bdev,
|
|||
if (rc)
|
||||
return rc;
|
||||
|
||||
rc = qpnp_bsi_clear_bsi_error(chip);
|
||||
if (rc)
|
||||
return rc;
|
||||
|
||||
qpnp_bsi_clear_irq_flags(chip);
|
||||
|
||||
rc = qpnp_bsi_issue_transaction_wait_for_tx(chip, transaction, data);
|
||||
if (rc)
|
||||
return rc;
|
||||
|
@ -906,12 +906,6 @@ static int qpnp_bsi_read_slave_registers(struct bif_ctrl_dev *bdev, u16 addr,
|
|||
int rc, rc2, i, burst_len;
|
||||
u8 buf[3];
|
||||
|
||||
rc = qpnp_bsi_clear_bsi_error(chip);
|
||||
if (rc)
|
||||
return rc;
|
||||
|
||||
qpnp_bsi_clear_irq_flags(chip);
|
||||
|
||||
qpnp_bsi_set_com_mode(chip, QPNP_BSI_COM_MODE_POLL);
|
||||
|
||||
rc = qpnp_bsi_set_bus_state(bdev, BIF_BUS_STATE_ACTIVE);
|
||||
|
@ -925,6 +919,12 @@ static int qpnp_bsi_read_slave_registers(struct bif_ctrl_dev *bdev, u16 addr,
|
|||
if (rc)
|
||||
return rc;
|
||||
|
||||
rc = qpnp_bsi_clear_bsi_error(chip);
|
||||
if (rc)
|
||||
return rc;
|
||||
|
||||
qpnp_bsi_clear_irq_flags(chip);
|
||||
|
||||
while (len > 0) {
|
||||
burst_len = min(len, 256);
|
||||
|
||||
|
@ -1001,12 +1001,6 @@ static int qpnp_bsi_write_slave_registers(struct bif_ctrl_dev *bdev, u16 addr,
|
|||
unsigned long flags;
|
||||
int rc, rc2, i;
|
||||
|
||||
rc = qpnp_bsi_clear_bsi_error(chip);
|
||||
if (rc)
|
||||
return rc;
|
||||
|
||||
qpnp_bsi_clear_irq_flags(chip);
|
||||
|
||||
qpnp_bsi_set_com_mode(chip, QPNP_BSI_COM_MODE_POLL);
|
||||
|
||||
rc = qpnp_bsi_set_bus_state(bdev, BIF_BUS_STATE_ACTIVE);
|
||||
|
@ -1020,6 +1014,12 @@ static int qpnp_bsi_write_slave_registers(struct bif_ctrl_dev *bdev, u16 addr,
|
|||
if (rc)
|
||||
return rc;
|
||||
|
||||
rc = qpnp_bsi_clear_bsi_error(chip);
|
||||
if (rc)
|
||||
return rc;
|
||||
|
||||
qpnp_bsi_clear_irq_flags(chip);
|
||||
|
||||
rc = qpnp_bsi_issue_transaction(chip, BIF_TRANS_ERA, addr >> 8);
|
||||
if (rc)
|
||||
return rc;
|
||||
|
@ -1075,12 +1075,6 @@ static int qpnp_bsi_bus_set_interrupt_mode(struct bif_ctrl_dev *bdev)
|
|||
struct qpnp_bsi_chip *chip = bdev_get_drvdata(bdev);
|
||||
int rc;
|
||||
|
||||
rc = qpnp_bsi_clear_bsi_error(chip);
|
||||
if (rc)
|
||||
return rc;
|
||||
|
||||
qpnp_bsi_clear_irq_flags(chip);
|
||||
|
||||
qpnp_bsi_set_com_mode(chip, QPNP_BSI_COM_MODE_IRQ);
|
||||
|
||||
/*
|
||||
|
@ -1105,6 +1099,12 @@ static int qpnp_bsi_bus_set_interrupt_mode(struct bif_ctrl_dev *bdev)
|
|||
*/
|
||||
chip->state = BIF_BUS_STATE_INTERRUPT;
|
||||
|
||||
rc = qpnp_bsi_clear_bsi_error(chip);
|
||||
if (rc)
|
||||
return rc;
|
||||
|
||||
qpnp_bsi_clear_irq_flags(chip);
|
||||
|
||||
/* Send EINT bus command. */
|
||||
rc = qpnp_bsi_issue_transaction_wait_for_tx(chip, BIF_TRANS_BC,
|
||||
BIF_CMD_EINT);
|
||||
|
|
Loading…
Reference in New Issue