Date: Sun, 23 Nov 2008 15:10:48 -0600 From: Nathan Whitehorn <nwhitehorn@freebsd.org> To: =?UTF-8?B?UmFmYcWCIEphd29yb3dza2k=?= <raj@semihalf.com> Cc: =?UTF-8?B?RGFnLUVybGluZyBTbcO4cmdyYXY=?= <des@des.no>, freebsd-arch@freebsd.org Subject: Re: Enumerable I2C busses Message-ID: <4929C6D8.7090305@freebsd.org> In-Reply-To: <C1917DFE-AA7F-4042-8A8F-088599FCDBB4@semihalf.com> References: <4929877B.6060307@freebsd.org> <86myfq9uha.fsf@ds4.des.no> <C1917DFE-AA7F-4042-8A8F-088599FCDBB4@semihalf.com>
next in thread | previous in thread | raw e-mail | index | archive | help
Rafał Jaworowski wrote: > > On 2008-11-23, at 19:18, Dag-Erling Smørgrav wrote: > >> Nathan Whitehorn <nwhitehorn@freebsd.org> writes: >>> The current I2C bus mechanism does not support the bus adding its own >>> children [...] >> >> That's because the I2C protocol does not support device enumeration or >> identification. You have to know in advance what kind of devices are >> attached and at what address. Even worse, it is not uncommon for >> similar but not entirely compatible devices to use the same I2C address >> (for instance, every I2C-capable RTC chip uses the same address, even >> though they have different feature sets) > > Well, hard-coded addresses and conflicting assignments between vendors > do not technically prevent from scanning the bus; actually, our current > iicbus code can do bus scaning when compiled with a diag define. The > problem however is some slave devices are not well-behaved, and they > don't like to be read/written to other than in very specific scenario: > if polled during bus scan strange effects occur e.g. they disappear from > the bus, or do not react to consecutive requests etc. All of this is true, but perhaps my question was badly worded. What I am trying to figure out is how to shove information from an out-of-band source (Open Firmware, in this case) into newbus without disrupting existing code. In that way, my question is not I2C specific -- we run into the same issue with the Open Firmware nexus node and pseudo-devices like cryptosoft that attach themselves. What I want to do is to have the I2C bus add the children that the firmware says it has. What the firmware cannot tell in advance, however, is which FreeBSD driver is responsible for those devices, and so the I2C bus driver can't know that without a translation table that I would prefer not to hack in to the bus driver. It seems reasonable to allow devices to use a real probe routine to look at the firmware's name and compatible properties, like we allow on other Open Firmware busses. The trouble is that existing drivers don't do this, because they expect to be attached with hints, so they will attach to all devices. I'm trying to figure out how to avoid this. My basic question comes down to whether there is a good way in newbus to handle busses that may be wholly or partially enumerated by firmware or some other method, and may also have devices that can only attach themselves if told to by hints. > Nathan, not sure if this helps you, but I have a nice i2c diagnostic > tool, which among other features lets the user scan the I2C bus for > present slave devices. This is done from userland, so doing similar > thing in-kernel wouldn't be a problem. I was planning to post this for > review this coming week, so you can have a look. It's not directly useful, no, but that's a very useful tool that will be handy to have. -Nathan
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?4929C6D8.7090305>