mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git
synced 2025-01-16 05:26:07 +00:00
soundwire: cadence: add soft-reset on startup
Follow the recommended programming flows. Signed-off-by: Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com> Reviewed-by: Péter Ujfalusi <peter.ujfalusi@linux.intel.com> Signed-off-by: Bard Liao <yung-chuan.liao@linux.intel.com> Link: https://lore.kernel.org/r/20241003094830.119673-2-yung-chuan.liao@linux.intel.com Signed-off-by: Vinod Koul <vkoul@kernel.org>
This commit is contained in:
parent
cbcb7edd09
commit
6124a4063b
@ -1377,6 +1377,31 @@ static void cdns_init_clock_ctrl(struct sdw_cdns *cdns)
|
|||||||
cdns_writel(cdns, CDNS_MCP_SSP_CTRL1, ssp_interval);
|
cdns_writel(cdns, CDNS_MCP_SSP_CTRL1, ssp_interval);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* sdw_cdns_soft_reset() - Cadence soft-reset
|
||||||
|
* @cdns: Cadence instance
|
||||||
|
*/
|
||||||
|
int sdw_cdns_soft_reset(struct sdw_cdns *cdns)
|
||||||
|
{
|
||||||
|
int ret;
|
||||||
|
|
||||||
|
cdns_updatel(cdns, CDNS_MCP_CONTROL, CDNS_MCP_CONTROL_SOFT_RST,
|
||||||
|
CDNS_MCP_CONTROL_SOFT_RST);
|
||||||
|
|
||||||
|
ret = cdns_config_update(cdns);
|
||||||
|
if (ret < 0) {
|
||||||
|
dev_err(cdns->dev, "%s: config update failed\n", __func__);
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
ret = cdns_set_wait(cdns, CDNS_MCP_CONTROL, CDNS_MCP_CONTROL_SOFT_RST, 0);
|
||||||
|
if (ret < 0)
|
||||||
|
dev_err(cdns->dev, "%s: Soft Reset timed out\n", __func__);
|
||||||
|
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
EXPORT_SYMBOL(sdw_cdns_soft_reset);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* sdw_cdns_init() - Cadence initialization
|
* sdw_cdns_init() - Cadence initialization
|
||||||
* @cdns: Cadence instance
|
* @cdns: Cadence instance
|
||||||
|
@ -168,6 +168,7 @@ int sdw_cdns_probe(struct sdw_cdns *cdns);
|
|||||||
irqreturn_t sdw_cdns_irq(int irq, void *dev_id);
|
irqreturn_t sdw_cdns_irq(int irq, void *dev_id);
|
||||||
irqreturn_t sdw_cdns_thread(int irq, void *dev_id);
|
irqreturn_t sdw_cdns_thread(int irq, void *dev_id);
|
||||||
|
|
||||||
|
int sdw_cdns_soft_reset(struct sdw_cdns *cdns);
|
||||||
int sdw_cdns_init(struct sdw_cdns *cdns);
|
int sdw_cdns_init(struct sdw_cdns *cdns);
|
||||||
int sdw_cdns_pdi_init(struct sdw_cdns *cdns,
|
int sdw_cdns_pdi_init(struct sdw_cdns *cdns,
|
||||||
struct sdw_cdns_stream_config config);
|
struct sdw_cdns_stream_config config);
|
||||||
|
@ -16,6 +16,12 @@ int intel_start_bus(struct sdw_intel *sdw)
|
|||||||
struct sdw_bus *bus = &cdns->bus;
|
struct sdw_bus *bus = &cdns->bus;
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
|
ret = sdw_cdns_soft_reset(cdns);
|
||||||
|
if (ret < 0) {
|
||||||
|
dev_err(dev, "%s: unable to soft-reset Cadence IP: %d\n", __func__, ret);
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* follow recommended programming flows to avoid timeouts when
|
* follow recommended programming flows to avoid timeouts when
|
||||||
* gsync is enabled
|
* gsync is enabled
|
||||||
|
Loading…
x
Reference in New Issue
Block a user