mirror of https://gitee.com/openkylin/linux.git
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:
parent
af4cc91782
commit
12632459f1
|
@ -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
|
||||
|
|
Loading…
Reference in New Issue