linux-spi.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: "Grant Likely" <grant.likely-s3s/WqlpOiPyB63q8FvJNQ@public.gmane.org>
To: cbouatmailru-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org
Cc: fabrizio.garetto-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org,
	linuxppc-dev-mnsaURCQ41sdnm+yROfE0A@public.gmane.org,
	dbrownell-Rn4VEauK+AKRv+LV9MX5uipxlwaOVQ5f@public.gmane.org,
	linux-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org,
	spi-devel-general-5NWGOfrQmneRv+LV9MX5uipxlwaOVQ5f@public.gmane.org
Subject: Re: [PATCH 3/4] spi: Add OF binding support for SPI busses
Date: Fri, 16 May 2008 23:02:05 -0600	[thread overview]
Message-ID: <fa686aa40805162202m336aade4qd6cfa5b17d6f3892@mail.gmail.com> (raw)
In-Reply-To: <20080516224916.GA16702@zarina>

On Fri, May 16, 2008 at 4:49 PM, Anton Vorontsov <cbouatmailru-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> wrote:
> On Fri, May 16, 2008 at 04:14:23PM -0600, Grant Likely wrote:
>> > Maybe this code could do something like
>> > spi->dev.platform_data = nc->data;
>> > and board code would fill nc->data at early stages? This needs to be a
>> > convention, not just random use though.. Maybe we can expand the struct
>> > device_node to explicitly include .platform_data for such cases?
>>
>> Hmmm, as you say, this could end up being rather messy.  However, by
>> passing the device node pointer, the driver could extract that data on
>> a per case basis.  (ie. it would be decided on a per driver basis
>> where to get the platform data).  I'm not sure; this bears more
>> thought...
>
> Sometimes it's not worth powder and shot adding OF functionality to
> the drivers, I2C and SPI are major examples. Another [not mmc_spi]
> example is drivers/input/touchscreen/ads7846.c, which is SPI driver
> and needs platform data. There is a board that needs this (touchscreen
> controller on a MPC8360E-RDK).

In my mind; platform_data and the device tree are all about the same
thing: representation.  In other words, how to describe the
configuration of the hardware independent of the driver itself.  The
device tree and platform data structures both solve the same problem.
In both cases, the representation data must be
translated/decoded/interpreted and stored in the drivers own private
data structure so it can be of use.

One of the things I find rather interesting is just how frequently
drivers using platform data structures have a big block of code which
simply copy pdata fields into identically named fields in the device
private data... specifically: copied discretely instead of being a
verbatim block that can be memcopied, or instead of maintaining a
pointer and using the pdata itself.  It highlights for me just how
much pdata structures are decoupled from the driver itself (just like
how the device tree data is decoupled from the driver)... but I
digress.

The point is that the translation of data from the device tree (and
from pdata for that matter) to a form usable by the driver has to live
*somewhere*.  Does it belong in the platform code?  Or should it live
with the driver itself?  I argue that it really belongs as much as
feasibly possible with the driver code.  Even if a pdata structure is
chosen to be used as an intermediary representation, the code is only
relevant to the driver and therefore shouldn't appear anywhere else in
the kernel tree.  Putting it with the driver also has the added
advantage that it can be lumped in with the driver module and
therefore will only get compiled into the kernel if the driver is
present.  Putting driver specific (not platform specific) translation
code anywhere other than with the device driver it is intended for is
just wrong.

In addition, I'd really like to avoid a situation where the same block
of translation code (or at least calls to it) is duplicated all over
the platform code directories.  It's that sort of duplication that the
device tree (and similar schemes) is intended to solve.  I agree that
using platform code is often the best solution, especially when
dealing with one-off board ports that won't appear anywhere else.
However, I strongly believe that the platform code approach should be
the exception, not the rule.  If it is a common data property that all
instantiations of the device must have, then encode it in the device
tree and be done with it.  Doing so keeps platform code straight
forward and reduces duplication.

> Also there is no way to pass functions via device tree, we're
> always end up doing board-specific hooks in the generic drivers...
>
> Finally, let's call this platform_data and be done with it. Then we
> can use this for things like drivers/video/fsl-diu-fb.c (see diu_ops,
> which is global struct, filled by
> arch/powerpc/platforms/86xx/mpc8610_hpcd.c).

Yes, I agree, there are always going to be platform/board specific
hooks and I'm not saying that we should try to eliminate them.  But
(as expressed in the argument above) I don't like the idea of making
the platform code fill in all the necessary pdata structures.  How
about this as an alternative:

Instead of allowing platform code to fill in platform_data pointers at
early platform setup, let it register a driver-specific callback hook
instead.  If the hook it populated, the driver will call it at an
appropriate time to allow the platform code to manipulate the driver
configuration.  The signature of the hook can be driver dependent
(just like how the pdata hook is platform dependent).  Doing this
ensure that the translation code stays where it belongs: with the
driver itself, and it defers execution of the code to a point to
driver initialization time instead of earlier in the platform setup
which should improve boot times in certain circumstances if the
drivers are loaded as modules.

As for adding OF support to the drivers "not worth powder and shot"; I
must disagree.  Adding the device tree support really isn't very
complex and the impact on existing drivers quite minimal.  All of the
code can be restricted to a function called by the drivers probe
routine that can be compiled out entirely if CONFIG_OF is not set.
I've already done similar stuff with drivers supporting both platform
and of_platform busses, and this situation I think should be even less
invasive.

Thoughts?

Cheers,
g.

---
Grant Likely, B.Sc., P.Eng.
Secret Lab Technologies Ltd.

-------------------------------------------------------------------------
This SF.net email is sponsored by: Microsoft 
Defy all challenges. Microsoft(R) Visual Studio 2008. 
http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/

  reply	other threads:[~2008-05-17  5:02 UTC|newest]

Thread overview: 50+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2008-05-16 19:35 [RFC PATCH 0/4] Describe SPI devices in the OF device tree and add mpc5200-spi driver Grant Likely
2008-05-16 19:36 ` [PATCH 1/4] spi: Change modalias from a pointer to a character array Grant Likely
2008-05-16 19:36 ` [PATCH 2/4] spi: split up spi_new_device() to allow two stage registration Grant Likely
     [not found]   ` <20080516193608.28030.34968.stgit-8FIgwK2HfyId2tlXD8uQ6/kpB+XfMlBf@public.gmane.org>
2008-05-22  0:17     ` David Brownell
     [not found]       ` <200805211717.13206.david-b-yBeKhBN/0LDR7s880joybQ@public.gmane.org>
2008-05-24  6:43         ` Grant Likely
     [not found]           ` <fa686aa40805232343x20031560j5659d203e25f494-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2008-05-24  6:54             ` Grant Likely
     [not found]               ` <fa686aa40805232354g147acfcdx4753fce1a448ceb7-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2008-06-30  4:08                 ` David Brownell
2008-06-17  7:28             ` Grant Likely
     [not found]               ` <fa686aa40806170028t2ccb679k22d2d3cea793ebc1-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2008-06-30  4:10                 ` David Brownell
2008-05-16 19:36 ` [PATCH 3/4] spi: Add OF binding support for SPI busses Grant Likely
     [not found]   ` <20080516193613.28030.13950.stgit-8FIgwK2HfyId2tlXD8uQ6/kpB+XfMlBf@public.gmane.org>
2008-05-16 20:47     ` Randy Dunlap
2008-05-16 20:51       ` Grant Likely
2008-05-16 22:03     ` Anton Vorontsov
2008-05-16 22:14       ` Grant Likely
     [not found]         ` <fa686aa40805161514r513d0eebt380a76f64abe8434-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2008-05-16 22:49           ` Anton Vorontsov
2008-05-17  5:02             ` Grant Likely [this message]
     [not found]               ` <fa686aa40805162202m336aade4qd6cfa5b17d6f3892-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2008-05-22  1:16                 ` David Brownell
     [not found]                   ` <200805211816.10753.david-b-yBeKhBN/0LDR7s880joybQ@public.gmane.org>
2008-05-24  6:24                     ` Grant Likely
2008-05-19 13:17     ` Guennadi Liakhovetski
2008-05-19 15:57       ` Grant Likely
2008-05-19 16:30         ` Guennadi Liakhovetski
     [not found]           ` <Pine.LNX.4.64.0805191811510.29559-0199iw4Nj15frtckUFj5Ag@public.gmane.org>
2008-05-20  5:13             ` Grant Likely
2008-05-20 15:26               ` Guennadi Liakhovetski
     [not found]                 ` <Pine.LNX.4.64.0805201650280.5283-0199iw4Nj15frtckUFj5Ag@public.gmane.org>
2008-05-20 15:48                   ` Grant Likely
2008-05-21 19:11                   ` Segher Boessenkool
     [not found]                     ` <716a0f1b6c9a544b480c06a329072483-XVmvHMARGAS8U2dJNN8I7kB+6BGkLq7r@public.gmane.org>
2008-05-21 19:33                       ` Grant Likely
     [not found]                         ` <fa686aa40805211233h72a258bpf8c945b9f662d6ee-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2008-05-23  2:26                           ` David Brownell
     [not found]                             ` <200805221926.24112.david-b-yBeKhBN/0LDR7s880joybQ@public.gmane.org>
2008-05-24  6:25                               ` Grant Likely
     [not found]                                 ` <fa686aa40805232325w65d4f706i50798121a8cce263-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2008-05-24  7:13                                   ` David Brownell
2008-05-19 17:09         ` Gary Jennejohn
     [not found]           ` <20080519190900.01ec3b2a-f7AvneZ2CE0iXleZOAq1AWD2FQJk+8+b@public.gmane.org>
2008-05-19 17:19             ` Anton Vorontsov
2008-05-21 15:19     ` Anton Vorontsov
     [not found]       ` <20080521151928.GA28857-PHTr8nzUCjejyJ0x5qLZdcN33GVbZNy3@public.gmane.org>
2008-05-23  2:05         ` David Brownell
     [not found]           ` <200805221905.32288.david-b-yBeKhBN/0LDR7s880joybQ@public.gmane.org>
2008-05-24  6:26             ` Grant Likely
     [not found]               ` <fa686aa40805232326w35f455d1s274899160d47eccb-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2008-05-24 16:50                 ` Grant Likely
     [not found]                   ` <fa686aa40805240950ocd16b97y308a54c68efa28ef-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2008-05-24 17:14                     ` Jochen Friedrich
     [not found]                       ` <48384D13.6010608-NIgtFMG+Po8@public.gmane.org>
2008-05-24 17:33                         ` Grant Likely
     [not found]                           ` <fa686aa40805241033x128c30b0v826717cc879a712e-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2008-05-24 17:45                             ` David Brownell
     [not found]                               ` <200805241045.47448.david-b-yBeKhBN/0LDR7s880joybQ@public.gmane.org>
2008-05-25  4:56                                 ` Grant Likely
2008-05-24 17:43                     ` David Brownell
     [not found]   ` <200805221915.59878.david-b@pacbell.net>
     [not found]     ` <200805221915.59878.david-b-yBeKhBN/0LDR7s880joybQ@public.gmane.org>
2008-05-24  6:31       ` Grant Likely
     [not found]         ` <fa686aa40805232331p1bf2c1bcn8c46c21a094ef01e-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2008-05-24 16:50           ` David Brownell
     [not found]             ` <200805240950.43394.david-b-yBeKhBN/0LDR7s880joybQ@public.gmane.org>
2008-05-24 16:53               ` Grant Likely
2008-05-16 19:36 ` [PATCH 4/4] [CSB] Add new mpc5200-spi (non-psc) device driver Grant Likely
2008-05-16 19:42   ` Grant Likely
     [not found] ` <20080516193054.28030.35126.stgit-8FIgwK2HfyId2tlXD8uQ6/kpB+XfMlBf@public.gmane.org>
2008-05-16 20:27   ` [RFC PATCH 0/4] Describe SPI devices in the OF device tree and add mpc5200-spi driver Jon Smirl
     [not found]     ` <9e4733910805161327u4c42fd1dg5b09319d89db447c-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2008-05-16 20:48       ` Grant Likely
     [not found]         ` <fa686aa40805161348t52b94956w112ef6926ff30892-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2008-05-16 21:25           ` Jon Smirl
     [not found]             ` <9e4733910805161425i2d6cc034y3377af053a4198b5-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2008-05-16 21:32               ` Grant Likely
     [not found]                 ` <fa686aa40805161432w6b5243f9nb0d0c32a87d86d02-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2008-05-16 21:42                   ` Jon Smirl

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=fa686aa40805162202m336aade4qd6cfa5b17d6f3892@mail.gmail.com \
    --to=grant.likely-s3s/wqlpoipyb63q8fvjnq@public.gmane.org \
    --cc=cbouatmailru-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org \
    --cc=dbrownell-Rn4VEauK+AKRv+LV9MX5uipxlwaOVQ5f@public.gmane.org \
    --cc=fabrizio.garetto-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org \
    --cc=linux-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \
    --cc=linuxppc-dev-mnsaURCQ41sdnm+yROfE0A@public.gmane.org \
    --cc=spi-devel-general-5NWGOfrQmneRv+LV9MX5uipxlwaOVQ5f@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).