soundwire: cadence: merge routines to clear/set bits

Use a single loop to wait for hardware to set/clear fields.

Signed-off-by: Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com>
Link: https://lore.kernel.org/r/20200317163329.25501-9-pierre-louis.bossart@linux.intel.com
Signed-off-by: Vinod Koul <vkoul@kernel.org>
This commit is contained in:
Pierre-Louis Bossart 2020-03-17 11:33:20 -05:00 committed by Vinod Koul
parent af4cc91782
commit 12632459f1
1 changed files with 8 additions and 20 deletions

View File

@ -211,26 +211,6 @@ static inline void cdns_updatel(struct sdw_cdns *cdns,
cdns_writel(cdns, offset, tmp);
}
static int cdns_clear_bit(struct sdw_cdns *cdns, int offset, u32 value)
{
int timeout = 10;
u32 reg_read;
writel(value, cdns->registers + offset);
/* Wait for bit to be self cleared */
do {
reg_read = readl(cdns->registers + offset);
if ((reg_read & value) == 0)
return 0;
timeout--;
udelay(50);
} while (timeout != 0);
return -EAGAIN;
}
static int cdns_set_wait(struct sdw_cdns *cdns, int offset, u32 mask, u32 value)
{
int timeout = 10;
@ -249,6 +229,14 @@ static int cdns_set_wait(struct sdw_cdns *cdns, int offset, u32 mask, u32 value)
return -ETIMEDOUT;
}
static int cdns_clear_bit(struct sdw_cdns *cdns, int offset, u32 value)
{
writel(value, cdns->registers + offset);
/* Wait for bit to be self cleared */
return cdns_set_wait(cdns, offset, value, 0);
}
/*
* all changes to the MCP_CONFIG, MCP_CONTROL, MCP_CMDCTRL and MCP_PHYCTRL
* need to be confirmed with a write to MCP_CONFIG_UPDATE