diff options
author | Nitin Dhingra <nitin.dhingra@stericsson.com> | 2011-12-27 13:56:47 +0530 |
---|---|---|
committer | Philippe Langlais <philippe.langlais@linaro.org> | 2012-03-19 09:01:20 +0100 |
commit | 9be7107e23bb5b8d23af07c34d33726826c48ef0 (patch) | |
tree | e3c740a2d849082f4ded4ffd18c7bbc6f94a9682 /drivers | |
parent | 6c078124e37bf1d00b55fd1a413a0d04d703178b (diff) |
cg2900: Wrong sequence number from CG2910/05
After hardware reset, firmware patch download fails with error 0xF1
(Wrong Seq Number). Resending the first patch solves the problem.
Clearquest ticket for this hardware bug is: CM0032866
ST-Ericsson Linux next: Not Tested, ER 373024
ST-Ericsson ID: 373024
ST-Ericsson FOSS-OUT ID: STETL-FOSS-OUT-10019
Change-Id: I05a193c52efa9fd080691f22722c0660d509f401
Depends-On: 09e279e3710a122eccd1ebd4929f79c244c78c9e
Signed-off-by: Nitin Dhingra <nitin.dhingra@stericsson.com>
Reviewed-on: http://gerrit.lud.stericsson.com/gerrit/43860
Reviewed-by: QATOOLS
Reviewed-by: QABUILD
Reviewed-by: Hemant GUPTA <hemant.gupta@stericsson.com>
Reviewed-by: Jonas ABERG <jonas.aberg@stericsson.com>
Diffstat (limited to 'drivers')
-rw-r--r-- | drivers/staging/cg2900/mfd/cg2900_chip.c | 17 |
1 files changed, 17 insertions, 0 deletions
diff --git a/drivers/staging/cg2900/mfd/cg2900_chip.c b/drivers/staging/cg2900/mfd/cg2900_chip.c index 3c8ea1e08e5..5e1a337ed03 100644 --- a/drivers/staging/cg2900/mfd/cg2900_chip.c +++ b/drivers/staging/cg2900/mfd/cg2900_chip.c @@ -1535,6 +1535,23 @@ static bool handle_vs_write_file_block_cmd_complete(struct cg2900_chip_dev *dev, info->download_state != DOWNLOAD_PENDING) return false; + if (HCI_BT_WRONG_SEQ_ERROR == status && info->file_info.chunk_id == 1 && + (CG2905_PG1_1_REV == dev->chip.hci_revision || + CG2910_PG1_REV == dev->chip.hci_revision)) { + /* + * Because of bug in CG2905/CG2910 PG1 H/W, the first chunk + * will return an error of wrong sequence number. As a + * workaround the first chunk needs to be sent again. + */ + info->file_info.chunk_id = 0; + info->file_info.file_offset = 0; + /* + * Set the status back to success so that it continues on the + * success path rather than failure. + */ + status = HCI_BT_ERROR_NO_ERROR; + } + if (HCI_BT_ERROR_NO_ERROR == status) cg2900_create_work_item(info->wq, work_cont_file_download, dev); else { |