Skip to content

Commit 6124a40

Browse files
plbossartvinodkoul
authored andcommitted
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>
1 parent cbcb7ed commit 6124a40

File tree

3 files changed

+32
-0
lines changed

3 files changed

+32
-0
lines changed

drivers/soundwire/cadence_master.c

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1377,6 +1377,31 @@ static void cdns_init_clock_ctrl(struct sdw_cdns *cdns)
13771377
cdns_writel(cdns, CDNS_MCP_SSP_CTRL1, ssp_interval);
13781378
}
13791379

1380+
/**
1381+
* sdw_cdns_soft_reset() - Cadence soft-reset
1382+
* @cdns: Cadence instance
1383+
*/
1384+
int sdw_cdns_soft_reset(struct sdw_cdns *cdns)
1385+
{
1386+
int ret;
1387+
1388+
cdns_updatel(cdns, CDNS_MCP_CONTROL, CDNS_MCP_CONTROL_SOFT_RST,
1389+
CDNS_MCP_CONTROL_SOFT_RST);
1390+
1391+
ret = cdns_config_update(cdns);
1392+
if (ret < 0) {
1393+
dev_err(cdns->dev, "%s: config update failed\n", __func__);
1394+
return ret;
1395+
}
1396+
1397+
ret = cdns_set_wait(cdns, CDNS_MCP_CONTROL, CDNS_MCP_CONTROL_SOFT_RST, 0);
1398+
if (ret < 0)
1399+
dev_err(cdns->dev, "%s: Soft Reset timed out\n", __func__);
1400+
1401+
return ret;
1402+
}
1403+
EXPORT_SYMBOL(sdw_cdns_soft_reset);
1404+
13801405
/**
13811406
* sdw_cdns_init() - Cadence initialization
13821407
* @cdns: Cadence instance

drivers/soundwire/cadence_master.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -168,6 +168,7 @@ int sdw_cdns_probe(struct sdw_cdns *cdns);
168168
irqreturn_t sdw_cdns_irq(int irq, void *dev_id);
169169
irqreturn_t sdw_cdns_thread(int irq, void *dev_id);
170170

171+
int sdw_cdns_soft_reset(struct sdw_cdns *cdns);
171172
int sdw_cdns_init(struct sdw_cdns *cdns);
172173
int sdw_cdns_pdi_init(struct sdw_cdns *cdns,
173174
struct sdw_cdns_stream_config config);

drivers/soundwire/intel_bus_common.c

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,12 @@ int intel_start_bus(struct sdw_intel *sdw)
1616
struct sdw_bus *bus = &cdns->bus;
1717
int ret;
1818

19+
ret = sdw_cdns_soft_reset(cdns);
20+
if (ret < 0) {
21+
dev_err(dev, "%s: unable to soft-reset Cadence IP: %d\n", __func__, ret);
22+
return ret;
23+
}
24+
1925
/*
2026
* follow recommended programming flows to avoid timeouts when
2127
* gsync is enabled

0 commit comments

Comments
 (0)