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:
David Collins 2013-05-03 17:08:30 -07:00
parent 9e7a15568c
commit 93599b9657
1 changed files with 36 additions and 36 deletions

View File

@ -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);