From: Alessandro Rubini <rubini@gnudd.com>
To: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Cc: federico.vaga@gmail.com, linux-kernel@vger.kernel.org
Subject: How to make a bus with heterogeneous devices?
Date: Fri, 24 Feb 2012 16:20:51 +0100 [thread overview]
Message-ID: <20120224152051.GA23232@mail.gnudd.com> (raw)
Hello Greg.
Federico Vaga and me are working on the ZIO framework
(ohwr.org/projects/zio) and he's currently adding the bus abstraction,
so we can support several cards of the same type. Under ZIO,
different devices may have different attributes: an SPI ADC chip may
allow to choose from two voltage references while a PCI digital-output
device may have a device-wide clocking rate.
But the list of attributes associated to a device is only known when
the driver is matched. In other workds, the "device" part is only
claiming "here I am and I'm called <sth>", then the probe method of the
<sth> driver will instantiate the device with its attributes.
However, the device appears in sysfs whether or not there is a driver
for it (which we agree is correct), but the list of attributes is only
known when the driver is matched -- because the list is known to the
driver, not to the device.
Here are some paths we evaluated:
1- /sys/bus/zio/devices may include place-holders, while a successful
match and probe will create real stuff is in /sys/zio/devices/<sth>-0/
But this would mean kobjects and you mandated us to only use devices
instead.
2- Like above, but falling in /sys/devices/virtual/zio/ ?
3- Attributes may be added after match succeeds, before calling probe.
This cam be done with a "raw" call to sysfs_create_group(); then
groups cna be added to dev->groups so they will be removed on
device_unregister().
4- Attributes may be added to the device before drv->probe is called
(or after it succeeds), using FIXMEFEDE. But .... FIXMEFEDE
5- The real attributes may live in another device, which is a child of
the one used within the bus abstraction. Here the drawback is using
an additional device and directory level for no reason.
6- We may use a fake (almost empty) device for the match function, and
then register the real one, with full attributes, when the match
succeeds (so match is called again and must be worked around). This
would work but is clearly a horrible hack.
We looked at other bus abstractions, and all of them host homogeneous
devices (they may have sub-devices, but none of them has different
attributes). Even the platform bus has no per-device attribute list
instantiated by the driver. In the cases where the attribute list is
different for each device, the list is known to the device, before the
match function is called.
Any suggestion is welcome. Meanwhile, Federico started implementing 3
above, but it still looks a dirty approach, and possibly not future-proof.
thanks
/alessandro (and federico)
next reply other threads:[~2012-02-24 15:21 UTC|newest]
Thread overview: 10+ messages / expand[flat|nested] mbox.gz Atom feed top
2012-02-24 15:20 Alessandro Rubini [this message]
2012-02-25 0:40 ` How to make a bus with heterogeneous devices? Greg Kroah-Hartman
2012-02-29 13:57 ` Federico Vaga
2012-02-29 23:58 ` Greg Kroah-Hartman
2012-03-02 10:18 ` Federico Vaga
2012-03-02 22:38 ` Greg Kroah-Hartman
2012-03-03 11:43 ` Kay Sievers
2012-03-03 15:44 ` Federico Vaga
2012-03-04 18:59 ` Kay Sievers
2012-03-12 15:08 ` Federico Vaga
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20120224152051.GA23232@mail.gnudd.com \
--to=rubini@gnudd.com \
--cc=federico.vaga@gmail.com \
--cc=gregkh@linuxfoundation.org \
--cc=linux-kernel@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox