diff options
| author | Linux Build Service Account <lnxbuild@localhost> | 2019-09-13 07:57:19 -0700 |
|---|---|---|
| committer | Gerrit - the friendly Code Review server <code-review@localhost> | 2019-09-13 07:57:19 -0700 |
| commit | 579c3a61d15a8f8666ea20ec18bad0ef37ff8621 (patch) | |
| tree | 66c311dec83efe7ed0afb292d885831611010129 | |
| parent | 7cc2dc9f84573604b21d64f9b35c9355bc181eba (diff) | |
| parent | a08ceb359a912d92586bde08dea82522fd30558f (diff) | |
Merge "msm: qti_sdio_client: Return error number in diag callback"
| -rw-r--r-- | drivers/char/qti_sdio_client.c | 23 | ||||
| -rw-r--r-- | drivers/platform/msm/qcn/qcn_sdio.c | 1 | ||||
| -rw-r--r-- | include/linux/mmc/host.h | 4 |
3 files changed, 16 insertions, 12 deletions
diff --git a/drivers/char/qti_sdio_client.c b/drivers/char/qti_sdio_client.c index 880ab2189bc3..5cc107993093 100644 --- a/drivers/char/qti_sdio_client.c +++ b/drivers/char/qti_sdio_client.c @@ -88,9 +88,9 @@ static DEFINE_MUTEX(work_lock); static spinlock_t list_lock; #define qlog(qsb, _msg, ...) do { \ - if (to_console) \ - pr_err("[%s] " _msg, __func__, ##__VA_ARGS__); \ - if (ipc_log) \ + if (!qsb ? 1 : to_console) \ + pr_err("[%s] " _msg, __func__, ##__VA_ARGS__); \ + if (qsb && ipc_log) \ ipc_log_string(qsb->ipc_log_ctxt, "[%s] " _msg, __func__, \ ##__VA_ARGS__); \ } while (0) @@ -438,8 +438,10 @@ int qti_client_read(int id, char *buf, size_t count) wait_event(qsb->wait_q, qsb->data_avail || atomic_read(&qsb->is_client_closing)); - if (atomic_read(&qsb->is_client_closing)) - return count; + if (atomic_read(&qsb->is_client_closing)) { + ret = -ENODEV; + goto out; + } bytes = qsb->data_avail; @@ -484,7 +486,7 @@ out: if (id == QCN_SDIO_CLI_ID_DIAG && qsb->ops && qsb->ops->read_complete_cb) { qsb->ops->read_complete_cb((void *)(uintptr_t)0, buf, count, - count); + ret < 0 ? ret : count); } if (!qsb->data_remain) { @@ -593,8 +595,10 @@ int qti_client_write(int id, char *buf, size_t count) wait_event(qsb->wait_q, qsb->tx_ready || atomic_read(&qsb->is_client_closing)); - if (atomic_read(&qsb->is_client_closing)) - return count; + if (atomic_read(&qsb->is_client_closing)) { + ret = -ENODEV; + goto out; + } if (qsb->mode) { reinit_completion(&tx_complete); @@ -627,10 +631,11 @@ int qti_client_write(int id, char *buf, size_t count) buffer = buffer + temp_count; } +out: if (id == QCN_SDIO_CLI_ID_DIAG && qsb->ops && qsb->ops->write_complete_cb) { qsb->ops->write_complete_cb((void *)(uintptr_t)0, buf, count, - count); + ret < 0 ? ret : count); } return count; diff --git a/drivers/platform/msm/qcn/qcn_sdio.c b/drivers/platform/msm/qcn/qcn_sdio.c index 46d950de0d0e..21dcd3c74508 100644 --- a/drivers/platform/msm/qcn/qcn_sdio.c +++ b/drivers/platform/msm/qcn/qcn_sdio.c @@ -561,7 +561,6 @@ static void qcn_sdio_irq_handler(struct sdio_func *func) sdio_claim_host(sdio_ctxt->func); data = sdio_readb(sdio_ctxt->func, SDIO_QCN_IRQ_STATUS, &ret); if (ret == -ETIMEDOUT) { - sdio_release_irq(sdio_ctxt->func); sdio_release_host(sdio_ctxt->func); pr_err("%s: IRQ status read error ret = %d\n", __func__, ret); diff --git a/include/linux/mmc/host.h b/include/linux/mmc/host.h index 49648aa63ee3..2dff3db6e4f3 100644 --- a/include/linux/mmc/host.h +++ b/include/linux/mmc/host.h @@ -735,8 +735,8 @@ static inline int mmc_boot_partition_access(struct mmc_host *host) static inline bool mmc_card_and_host_support_async_int(struct mmc_host *host) { - return ((host->caps2 & MMC_CAP2_ASYNC_SDIO_IRQ_4BIT_MODE) && - (host->card->cccr.async_intr_sup)); + return (host->card && (host->caps2 & MMC_CAP2_ASYNC_SDIO_IRQ_4BIT_MODE) + && (host->card->cccr.async_intr_sup)); } static inline int mmc_host_uhs(struct mmc_host *host) |
