summaryrefslogtreecommitdiff
path: root/drivers/platform
diff options
context:
space:
mode:
authorAmandeep Singh <amansing@codeaurora.org>2019-06-24 13:54:00 +0530
committerAmandeep Singh <amansing@codeaurora.org>2019-09-03 11:05:57 +0530
commitbec7c9d8a8003c02f0004ddc52713f3e5b1999a1 (patch)
tree8509a198ba71b14a3dc5fb8e8d51af500c1ff9d4 /drivers/platform
parente4f6d17190c3c460d10cfe2afc76c266406f60a1 (diff)
msm: qcn: Update read/write APIs
Update read/write API in QCN sdio core driver to issue CMD53 instead of CMD52 for data equal or greater than 4 bytes. Change-Id: I5641f32fa8896d3fafb087b440ff69ad936a83ee Signed-off-by: Amandeep Singh <amansing@codeaurora.org>
Diffstat (limited to 'drivers/platform')
-rw-r--r--drivers/platform/msm/qcn/qcn_sdio.c42
1 files changed, 28 insertions, 14 deletions
diff --git a/drivers/platform/msm/qcn/qcn_sdio.c b/drivers/platform/msm/qcn/qcn_sdio.c
index 6a1b409a9e36..f8143d334ec2 100644
--- a/drivers/platform/msm/qcn/qcn_sdio.c
+++ b/drivers/platform/msm/qcn/qcn_sdio.c
@@ -202,11 +202,16 @@ static int qcn_send_meta_info(u8 event, u32 data)
value = META_INFO(event, data);
sdio_claim_host(sdio_ctxt->func);
- for (i = 0; i < 4; i++) {
- temp = (u8)((value >> (i * 8)) & 0x000000FF);
- sdio_writeb(sdio_ctxt->func, temp, (SDIO_QCN_HRQ_PUSH + i),
- &ret);
+ if (sdio_ctxt->curr_sw_mode < QCN_SDIO_SW_SBL) {
+ for (i = 0; i < 4; i++) {
+ temp = (u8)((value >> (i * 8)) & 0x000000FF);
+ sdio_writeb(sdio_ctxt->func, temp,
+ (SDIO_QCN_HRQ_PUSH + i), &ret);
+ }
+ } else {
+ sdio_writel(sdio_ctxt->func, value, SDIO_QCN_HRQ_PUSH, &ret);
}
+
sdio_release_host(sdio_ctxt->func);
return ret;
@@ -224,12 +229,17 @@ static int qcn_read_crq_info(void)
struct sdio_al_channel_handle *ch_handle = NULL;
sdio_claim_host(sdio_ctxt->func);
- for (i = 0; i < 4; i++) {
- temp = sdio_readb(sdio_ctxt->func, (SDIO_QCN_CRQ_PULL + i),
- &ret);
- temp = temp << (i * 8);
- data |= temp;
+ if (sdio_ctxt->curr_sw_mode < QCN_SDIO_SW_SBL) {
+ for (i = 0; i < 4; i++) {
+ temp = sdio_readb(sdio_ctxt->func,
+ (SDIO_QCN_CRQ_PULL + i), &ret);
+ temp = temp << (i * 8);
+ data |= temp;
+ }
+ } else {
+ data = sdio_readl(sdio_ctxt->func, SDIO_QCN_CRQ_PULL, &ret);
}
+
sdio_release_host(sdio_ctxt->func);
if (ret)
return ret;
@@ -434,11 +444,15 @@ static int qcn_read_meta_info(void)
sdio_claim_host(sdio_ctxt->func);
- for (i = 0; i < 4; i++) {
- temp = sdio_readb(sdio_ctxt->func, (SDIO_QCN_LOCAL_INFO + i),
- &ret);
- temp = temp << (i * 8);
- data |= temp;
+ if (sdio_ctxt->curr_sw_mode < QCN_SDIO_SW_SBL) {
+ for (i = 0; i < 4; i++) {
+ temp = sdio_readb(sdio_ctxt->func,
+ (SDIO_QCN_LOCAL_INFO + i), &ret);
+ temp = temp << (i * 8);
+ data |= temp;
+ }
+ } else {
+ data = sdio_readl(sdio_ctxt->func, SDIO_QCN_LOCAL_INFO, &ret);
}
sdio_writeb(sdio_ctxt->func, (u8)SDIO_QCN_IRQ_CLR_LOCAL_MASK,