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 :)

-- 
~Vinod

Reply via email to