[PATCH 1/2 v2] OMAP2/3: hwmod: fix the i2c-reset timeout during bootup
Avinash.H.M.
avinashhm at ti.com
Mon Apr 11 09:11:54 EDT 2011
> > > + oh->_sysc_cache = v;
> > > + omap_hwmod_write(v, oh, oh->class->sysc->sysc_offs);
> >
> > Direct SYSCONFIG access isn't right here. This should go through
> > omap_hwmod.
> >
> > What is probably needed is exposing _ocp_softreset to device code
> > via something like omap_hwmod_ocp_softreset() and calling that here.
> >
Hi Kevin ,
Looking more closely, i realised that, the sequence of _ocp_softreset
doesn't work for I2C. It has a special programming sequence which needs
to be followed to reset the IP. That was the reason, we created
omap_i2c_reset. So i feel we need not expose _ocp_softreset.
Since, the problem here is accessing the SYSCONFIG here, instead, what i
can do is, something like below.
omap_hwmod_softreset(struct omap_hwmod *oh)
{
v = oh->_sysc_cache;
v |= (0x1 << oh->class->sysc->sysc_fields->srst_shift);
oh->_sysc_cache = v;
omap_hwmod_write(v, oh, oh->class->sysc->sysc_offs);
}
And then call this in omap_i2c_reset. Is this OK ?
- Avinash
More information about the linux-arm-kernel
mailing list