From 0db4801f4dcaeb65a7b2ec0e8723f94221625611 Mon Sep 17 00:00:00 2001 From: Ramprasad Katkam Date: Fri, 9 Nov 2018 11:01:23 +0530 Subject: [PATCH] soc: swr-mstr: Remove master access from slave api The read/write api exposed by soundwire master is intended to be used only for accessing soundwire slave registers. Remove master access from the api, to avoid invalid access due to slaves sending devnum as zero incorrectly. Change-Id: Ia00179f87908f95f03ef027630d178016affdb18 Signed-off-by: Ramprasad Katkam --- soc/swr-mstr-ctrl.c | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-) diff --git a/soc/swr-mstr-ctrl.c b/soc/swr-mstr-ctrl.c index df373abcc4..d6ebafd76b 100644 --- a/soc/swr-mstr-ctrl.c +++ b/soc/swr-mstr-ctrl.c @@ -534,6 +534,10 @@ static int swrm_read(struct swr_master *master, u8 dev_num, u16 reg_addr, dev_err(&master->dev, "%s: swrm is NULL\n", __func__); return -EINVAL; } + if (!dev_num) { + dev_err(&master->dev, "%s: invalid slave dev num\n", __func__); + return -EINVAL; + } mutex_lock(&swrm->devlock); if (!swrm->dev_up) { mutex_unlock(&swrm->devlock); @@ -542,11 +546,7 @@ static int swrm_read(struct swr_master *master, u8 dev_num, u16 reg_addr, mutex_unlock(&swrm->devlock); pm_runtime_get_sync(swrm->dev); - if (dev_num) - ret = swrm_cmd_fifo_rd_cmd(swrm, &val, dev_num, 0, reg_addr, - len); - else - val = swr_master_read(swrm, reg_addr); + ret = swrm_cmd_fifo_rd_cmd(swrm, &val, dev_num, 0, reg_addr, len); if (!ret) *reg_val = (u8)val; @@ -567,6 +567,10 @@ static int swrm_write(struct swr_master *master, u8 dev_num, u16 reg_addr, dev_err(&master->dev, "%s: swrm is NULL\n", __func__); return -EINVAL; } + if (!dev_num) { + dev_err(&master->dev, "%s: invalid slave dev num\n", __func__); + return -EINVAL; + } mutex_lock(&swrm->devlock); if (!swrm->dev_up) { mutex_unlock(&swrm->devlock); @@ -575,10 +579,7 @@ static int swrm_write(struct swr_master *master, u8 dev_num, u16 reg_addr, mutex_unlock(&swrm->devlock); pm_runtime_get_sync(swrm->dev); - if (dev_num) - ret = swrm_cmd_fifo_wr_cmd(swrm, reg_val, dev_num, 0, reg_addr); - else - swr_master_write(swrm, reg_addr, reg_val); + ret = swrm_cmd_fifo_wr_cmd(swrm, reg_val, dev_num, 0, reg_addr); pm_runtime_put_autosuspend(swrm->dev); pm_runtime_mark_last_busy(swrm->dev);