From: Laurent Pinchart <laurent.pinchart-ryLnwIuWjnjg/C1BVhZhaw@public.gmane.org>
To: Frank Bormann <fbormann-/E1597aS9LQAvxtiuMwx3w@public.gmane.org>
Cc: Rodolfo Giometti <giometti-k2GhghHVRtY@public.gmane.org>,
Linux I2C List
<linux-i2c-u79uwXL29TY76Z2rM5mHXA@public.gmane.org>
Subject: Re: platform_data in i2c device drivers
Date: Thu, 20 Mar 2014 01:10:02 +0100 [thread overview]
Message-ID: <1511928.3cA2QKoAZt@avalon> (raw)
In-Reply-To: <532A1B12.8080400-/E1597aS9LQAvxtiuMwx3w@public.gmane.org>
Hi Frank,
On Wednesday 19 March 2014 18:32:50 Frank Bormann wrote:
> Hi Everyone,
>
> I am looking at the i2c_pca954x i2c bus mux driver in linux-stable. My goal
> is to have the slave buses show up in Linux with static bus numbers.
> Ideally, I want to define the first bus number to use in the dtb.
>
> It seems, the driver has already some support for static bus numbers as its
> probe function checks for the existence of a struct pca954x_platform_data
> instance in client->dev.platform_data and pca954x_platform_mode struct it
> points to has a member adap_id that seems to be doing exactly that judging
> by its documentation. However, calls made to pca954x_probe always have to
> platform_data pointer being passed in through client set to null.
>
> In addition to that, the recent addition to the driver of a reset gpio to be
> configured reads directly from the dtb in the probe function.
>
> I am unsure about how to set this up properly. On one hand, platform_data is
> being passed in to the probe function, which seem to indicate, there may be
> some generic place in the i2c core code to set driver-specific
> configuration, on the other hand, the recent reset gpio addition to the
> driver seems to indicate that the driver's probe function is in fact the
> right place to read additional configuration from the dtb.
>
> Any help is greatly appreciated.
You're looking at two different configuration mechanisms, which probably
explains your confusion.
Platform data is the oldest mechanism used to pass configuration information
to the driver. This is largely used through the Linux kernel on a wide range
of architectures. The idea is to store device-specific configuration
information in board files (as you mentioned DT I'll assume you're working on
ARM, so that would be arch/arm/mach-*/board-*.c) using driver-specific
structures and associate those structures with devices. Drivers can then
retrieve the platform data at probe time and configure the device accordingly.
The way platform data is associated with devices depends on the bus type. For
I2C the i2c_board_info structure, used to instantiate I2C devices in board
code, has a void *platform_data field that can be set to point to a platform
data structure. You can find an example of this in the i2c3_devices array in
arch/arm/mach-shmobile/board-kzm9g.c.
Device tree (DT) is a newer mechanism to specify hardware configuration.
Instead of relying on C board files that contain a mix a code and data, the
platform is described in a tree-like structure of devices with properties
associated to all those devices. That structure is called the device tree and
is compiled as a binary that gets passed to the kernel at boot time. When
using the device tree, drivers don't receive platform data anymore but are
responsible for parsing the content of the device tree to read platform-
specific hardware configuration information. The content of device tree nodes
is defined in documents called DT bindings that can be found in
Documentation/devicetree/bindings/ (i2c/i2c-mux-pca954x.txt in this case).
A NULL platform_data pointer can then mean either that your platform boots
using the device tree, or that the board file doesn't specify any platform
data for the device in case of legacy (non-DT) boot. There's also a hybrid
method that can be used to associated platform data declared in C files to DT
nodes, but that's for special cases only and shouldn't be used for the
pca954x.
This being said, if your platform uses the device tree, you shouldn't (in
theory at least) need static I2C bus numbers. This is why there is no DT
property similar to the platform data adap_id field defined in the pca954x DT
bindings.
--
Regards,
Laurent Pinchart
next prev parent reply other threads:[~2014-03-20 0:10 UTC|newest]
Thread overview: 13+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-03-19 22:32 platform_data in i2c device drivers Frank Bormann
[not found] ` <532A1B12.8080400-/E1597aS9LQAvxtiuMwx3w@public.gmane.org>
2014-03-20 0:10 ` Laurent Pinchart [this message]
2014-03-20 16:12 ` Frank Bormann
[not found] ` <532B1367.8050906-/E1597aS9LQAvxtiuMwx3w@public.gmane.org>
2014-03-20 16:25 ` Ben Dooks
[not found] ` <532B1689.3080202-4yDnlxn2s6sWdaTGBSpHTA@public.gmane.org>
2014-03-20 17:16 ` Frank Bormann
[not found] ` <532B2273.8040004-/E1597aS9LQAvxtiuMwx3w@public.gmane.org>
2014-03-20 17:51 ` Laurent Pinchart
2014-03-21 15:55 ` Frank Bormann
[not found] ` <532C60EC.3060405-/E1597aS9LQAvxtiuMwx3w@public.gmane.org>
2014-03-21 16:01 ` Laurent Pinchart
[not found] ` <534FF708.7040409@yahoo.com>
[not found] ` <534FF708.7040409-/E1597aS9LQAvxtiuMwx3w@public.gmane.org>
2014-04-17 15:46 ` [PATCH] i2c-mux-pca954x: allow downstream bus numbers to be specified in the dts Laurent Pinchart
2014-04-17 18:00 ` Laxman Dewangan
[not found] ` <535016B5.7060006-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org>
2014-04-22 21:46 ` Frank Bormann
[not found] ` <53501564.1090607@yahoo.com>
[not found] ` <53501564.1090607-/E1597aS9LQAvxtiuMwx3w@public.gmane.org>
2014-04-17 20:15 ` Laurent Pinchart
[not found] ` <CAE6_GsvJpajY==6MJExo3T7FrVF_LNGcoozq0N5KEBho9y5NWw@mail.gmail.com>
[not found] ` <CAE6_GsvJpajY==6MJExo3T7FrVF_LNGcoozq0N5KEBho9y5NWw-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2014-04-17 20:42 ` Laurent Pinchart
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=1511928.3cA2QKoAZt@avalon \
--to=laurent.pinchart-rylnwiuwjnjg/c1bvhzhaw@public.gmane.org \
--cc=fbormann-/E1597aS9LQAvxtiuMwx3w@public.gmane.org \
--cc=giometti-k2GhghHVRtY@public.gmane.org \
--cc=linux-i2c-u79uwXL29TY76Z2rM5mHXA@public.gmane.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;
as well as URLs for NNTP newsgroup(s).