On Thu, Oct 19, 2017 at 11:02:02AM +0200, Takashi Iwai wrote:
On Thu, 19 Oct 2017 05:03:20 +0200, Vinod Koul wrote:
slave->ops = drv->ops;
ret = drv->probe(slave, id); if (ret) { dev_err(dev, "Probe of %s failed: %d\n", drv->name, ret); return ret; }
/* device is probed so let's read the properties now */
if (slave->ops && slave->ops->read_prop)
slave->ops->read_prop(slave);
/*
* Check for valid clk_stop_timeout, use DisCo worst case value of
* 300ms
*/
if (slave->prop.clk_stop_timeout == 0)
slave->prop.clk_stop_timeout = 300;
slave->bus->clk_stop_timeout = max_t(u32, slave->bus->clk_stop_timeout,
slave->prop.clk_stop_timeout);
Isn't it racy? Also what happens after removing a driver? The clk_stop_timeout is kept high?
Well the spec mandates 300 as worst case, in practice this _should_ be lesser. I need to double check on behaviour of clock stop on driver removal. We need to keep in mind that multiple Slaves can be on a bus and removal maybe from one of them, so we may not do clock stop.
+int sdw_slave_read_dpn(struct sdw_slave *slave,
struct sdw_dpn_prop *dpn, int count, int ports, char *type)
Missing comment for a public API function.
Ah missed this one. It was made public for debug, lets make it static now :)