soundwire: add sdw_show_ping_status() helper
This helper provides an optional delay parameter to wait for devices to resync in case of errors, and checks that devices are indeed attached on the bus. Signed-off-by: Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com> Reviewed-by: Rander Wang <rander.wang@intel.com> Signed-off-by: Bard Liao <yung-chuan.liao@linux.intel.com> Acked-By: Vinod Koul <vkoul@kernel.org> Link: https://lore.kernel.org/r/20220714011043.46059-4-yung-chuan.liao@linux.intel.com Signed-off-by: Mark Brown <broonie@kernel.org>
This commit is contained in:
parent
133547a1ef
commit
79fe02cb75
@ -297,6 +297,38 @@ int sdw_transfer(struct sdw_bus *bus, struct sdw_msg *msg)
|
||||
return ret;
|
||||
}
|
||||
|
||||
/**
|
||||
* sdw_show_ping_status() - Direct report of PING status, to be used by Peripheral drivers
|
||||
* @bus: SDW bus
|
||||
* @sync_delay: Delay before reading status
|
||||
*/
|
||||
void sdw_show_ping_status(struct sdw_bus *bus, bool sync_delay)
|
||||
{
|
||||
u32 status;
|
||||
|
||||
if (!bus->ops->read_ping_status)
|
||||
return;
|
||||
|
||||
/*
|
||||
* wait for peripheral to sync if desired. 10-15ms should be more than
|
||||
* enough in most cases.
|
||||
*/
|
||||
if (sync_delay)
|
||||
usleep_range(10000, 15000);
|
||||
|
||||
mutex_lock(&bus->msg_lock);
|
||||
|
||||
status = bus->ops->read_ping_status(bus);
|
||||
|
||||
mutex_unlock(&bus->msg_lock);
|
||||
|
||||
if (!status)
|
||||
dev_warn(bus->dev, "%s: no peripherals attached\n", __func__);
|
||||
else
|
||||
dev_dbg(bus->dev, "PING status: %#x\n", status);
|
||||
}
|
||||
EXPORT_SYMBOL(sdw_show_ping_status);
|
||||
|
||||
/**
|
||||
* sdw_transfer_defer() - Asynchronously transfer message to a SDW Slave device
|
||||
* @bus: SDW bus
|
||||
|
@ -922,6 +922,8 @@ int sdw_bus_master_add(struct sdw_bus *bus, struct device *parent,
|
||||
struct fwnode_handle *fwnode);
|
||||
void sdw_bus_master_delete(struct sdw_bus *bus);
|
||||
|
||||
void sdw_show_ping_status(struct sdw_bus *bus, bool sync_delay);
|
||||
|
||||
/**
|
||||
* sdw_port_config: Master or Slave Port configuration
|
||||
*
|
||||
|
Loading…
Reference in New Issue
Block a user