linux-spi.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Maxime Ripard <maxime.ripard-wi1+55ScJUtKEb57/3fJTNBPR1lH4CV8@public.gmane.org>
To: Martin Sperl <kernel-TqfNSX0MhmxHKSADF0wUEw@public.gmane.org>
Cc: Mark Brown <broonie-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org>,
	Alexandre Belloni
	<alexandre.belloni-wi1+55ScJUtKEb57/3fJTNBPR1lH4CV8@public.gmane.org>,
	linux-spi-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
Subject: Re: [PATCH] spi: Force the registration of the spidev devices
Date: Wed, 30 Apr 2014 11:14:29 -0700	[thread overview]
Message-ID: <20140430181429.GD3000@lukather> (raw)
In-Reply-To: <24BF05CB-35FF-42E8-BE5C-A5E4E3D0C52A-TqfNSX0MhmxHKSADF0wUEw@public.gmane.org>

[-- Attachment #1: Type: text/plain, Size: 4986 bytes --]

On Tue, Apr 29, 2014 at 11:31:49PM +0200, Martin Sperl wrote:
> On 29.04.2014, at 20:37, Mark Brown <broonie-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org> wrote:
> 
> > On Mon, Apr 28, 2014 at 10:22:54AM -0700, Maxime Ripard wrote:
> > 
> >> spidev device registration has always been a controversial subject since the
> >> move to DT.
> > 
> > Why can we not handle this by using sysfs to bind spidev to the device?
> 
> 
> 
> I think the question is actually more generic than just "spidev" related.
> 
> A solution should also help all those users of development boards like 
> raspberry pi, beagle board,... where people want to add spi devices without
> having to know too much about the fine details of the kernel configuration
> /kernel compiling/creating a new device tree or similar.... 
> They just want their device to work with the existing kernel 
> with minimal effort!
> 
> For just this purpose I got an out of tree module called spi-config that 
> - as of now - allows to define the binding of spi devices (not solely 
> focused on spidev) as per module argument while loading the driver.
> 
> This could easily get extended to work also via sysfs.
> 
> The problem here is mostly around the "passing" of driver specific platform 
> data, which this module currently handles in a sort of "binary blob" way, 
> which is suboptimal (as it is very architecture specific),
> but at least it works...
> 
> Some examples of what is there:
> 
> Bind spidev to spi0.1 with a speed of 2MHz and SPI mode 3:
> modprobe spi-config bus=0:cs=1:modalias=spidev:speed=2000000:mode=3
> 
> Bind an mcp2515 CAN-bus controller to spi0.0 with 10MHz speed and 
> IRQ triggered via GPIO25:
> modprobe spi-config bus=0:cs=0:modalias=mcp2515:speed=10000000:gpioirq=25:\
> mode=0:pd=20:pdu32-0=16000000:pdu32-4=0x2002
> 
> The extra "pd...=" args are the ones describing platform data that is needed
> by the mcp251x driver to set up the device correctly. 
> In the above example we define:
> * pd=20: the platform data size is 20 bytes (zero filled)
> * pdu32-0: a u32 at offset 0 with a value of 16MHz Quarz speed
> * pdu32-4: a u32 at offset 4 the interrupt flags used by the driver
>            (=IRQF_TRIGGER_FALLING|IRQF_ONESHOT)
> 
> The above mcp2515 device now configured via sysfs could look like this:
> echo "cs=0:modalias=mcp2515:speed=10000000:gpioirq=25:mode=0:\
> pd=20:pdu32-0=16000000:pdu32-4=0x2002" > /sys/class/spi_master/spi0/register
> 
> Unregistering the device:
> echo "cs=0" > /sys/class/spi_master/spi0/unregister
> 
> As said: the trickiest part is "platform data", all the "spi-parameters"
> are well-defined and are easily parseable.
> 
> Options that come to my mind to increase "readability" are:
> * "const char *extra_parameters" 
>   in spi_device containing all "unhandled" parameters left for the driver
>   to parse during probing.
> * "int (*config)(struct spi_device *,const char *key,const char *value)"
>   in spi_driver that sets the corresponding parameters
>   (creating platform data if it is not already set/allocated) 
>   and which is called prior to calling spi_driver->probe(spi)
> 
> So with those "readability" options the sysfs interface could 
> look like this:
> echo "cs=0:modalias=mcp2515:speed=10000000:gpioirq=25:mode=0:\
> can_oscillator_hz=16000000:interrupt_flags=0x2002" \
> > /sys/class/spi_master/spi0/register
> 
> When using the second option the framework could fall back to the
> voodoo-"pd...=" approach that I have show above to avoid having to touch 
> all spi drivers immediately to make use of this interface.
> 
> The biggest pitfall I see is that if a device driver expects platform
> data but none is provided, then loading the driver could crash the kernel.
> But that is something that probably should get fixed in the driver 
> itself and not in the framework.
> 
> A totally different approach could be the use of device-tree overlays, 
> which is also not included in the kernel, but would allow for similar
> config schemes.
> But that would leave systems not using device tree without this option.
> 
> So it seems as if we need to find an approach that is acceptable...

I'd really be in favor of using the DT overlays for this. All this is
nice, but very fragile. You can't really handle any weird
configurations that you might encounter, like weird interrupt
controllers that might be requiring more informations, or you don't
set any interrupt parents, and this parameter list will basically be
an ever-growing list of parameters to deal with all kind of crazy
corner-cases, and I'm not sure it's something we want.

You listed only ARM boards, that are not supposed to be non-DT. RPi is
using DT fine, just like the beaglebones. I don't really see why we
should care about !DT cases.

Maxime

-- 
Maxime Ripard, Free Electrons
Embedded Linux, Kernel and Android engineering
http://free-electrons.com

[-- Attachment #2: Digital signature --]
[-- Type: application/pgp-signature, Size: 836 bytes --]

  parent reply	other threads:[~2014-04-30 18:14 UTC|newest]

Thread overview: 50+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-04-28 17:22 [PATCH] spi: Force the registration of the spidev devices Maxime Ripard
     [not found] ` <1398705774-12361-1-git-send-email-maxime.ripard-wi1+55ScJUtKEb57/3fJTNBPR1lH4CV8@public.gmane.org>
2014-04-29 18:37   ` Mark Brown
     [not found]     ` <20140429183758.GH15125-GFdadSzt00ze9xe1eoZjHA@public.gmane.org>
2014-04-29 21:31       ` Martin Sperl
     [not found]         ` <24BF05CB-35FF-42E8-BE5C-A5E4E3D0C52A-TqfNSX0MhmxHKSADF0wUEw@public.gmane.org>
2014-04-30 18:14           ` Maxime Ripard [this message]
2014-04-30 20:00             ` Martin Sperl
     [not found]               ` <DA3907EB-0C1B-42FB-B288-9E33F6E24E3E-TqfNSX0MhmxHKSADF0wUEw@public.gmane.org>
2014-04-30 22:19                 ` Maxime Ripard
2014-05-01  1:21                 ` Mark Brown
2014-04-30 18:06       ` Maxime Ripard
2014-05-01  1:18         ` Mark Brown
     [not found]           ` <20140501011811.GF3245-GFdadSzt00ze9xe1eoZjHA@public.gmane.org>
2014-05-01 22:36             ` Maxime Ripard
2014-05-01 23:28               ` Geert Uytterhoeven
     [not found]                 ` <CAMuHMdUWa1_n94sDvv=L_goc+SOnD9CAKi5DzifrY7GWYRdQmw-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2014-05-02 16:55                   ` Mark Brown
2014-05-05  4:17                 ` Maxime Ripard
2014-05-05  7:10                   ` Geert Uytterhoeven
     [not found]                     ` <CAMuHMdWZ1rvC+tkT=CbfMwZtppyJ_KpzT7JrLd5k5P2oxzA+8g-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2014-05-05 13:57                       ` Alexandre Belloni
     [not found]                         ` <20140505135701.GA21940-m++hUPXGwpdeoWH0uzbU5w@public.gmane.org>
2014-05-05 14:22                           ` Geert Uytterhoeven
2014-05-05 19:16                     ` Mark Brown
2014-05-02 17:40               ` Mark Brown
2014-05-05  4:21                 ` Maxime Ripard
2014-05-05 19:17                   ` Mark Brown
     [not found]                     ` <20140505191723.GK22111-GFdadSzt00ze9xe1eoZjHA@public.gmane.org>
2014-05-08  2:22                       ` Maxime Ripard
  -- strict thread matches above, loose matches on Subject: below --
2015-05-12 20:33 Maxime Ripard
     [not found] ` <1431462804-30467-1-git-send-email-maxime.ripard-wi1+55ScJUtKEb57/3fJTNBPR1lH4CV8@public.gmane.org>
2015-05-13 11:26   ` Mark Brown
     [not found]     ` <20150513112604.GI3066-GFdadSzt00ze9xe1eoZjHA@public.gmane.org>
2015-05-13 12:35       ` Michal Suchanek
2015-05-13 12:51       ` Maxime Ripard
2015-05-13 14:36         ` Mark Brown
     [not found]           ` <20150513143610.GT2761-GFdadSzt00ze9xe1eoZjHA@public.gmane.org>
2015-05-13 15:31             ` Michal Suchanek
     [not found]               ` <CAOMqctTd7xG6mwX9AojTH4uaGDY06xOgDFUP437VDiE0rp0sXA-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2015-05-13 17:43                 ` Mark Brown
2015-05-13 19:09           ` Maxime Ripard
2015-05-13 19:10         ` Geert Uytterhoeven
     [not found]           ` <CAMuHMdWJ730G_a6=vQgs4gV837am5KKd7zEhU2FaHw2cpv=aRA-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2015-05-13 19:41             ` Maxime Ripard
2015-05-13 15:37       ` Greg Kroah-Hartman
     [not found]         ` <20150513153740.GC11677-U8xfFu+wG4EAvxtiuMwx3w@public.gmane.org>
2015-05-13 15:52           ` Michal Suchanek
2015-05-13 17:13           ` Mark Brown
     [not found]             ` <20150513171300.GD2761-GFdadSzt00ze9xe1eoZjHA@public.gmane.org>
2015-05-13 17:20               ` Greg Kroah-Hartman
     [not found]                 ` <20150513172028.GA18303-U8xfFu+wG4EAvxtiuMwx3w@public.gmane.org>
2015-05-13 17:39                   ` Mark Brown
     [not found]                     ` <20150513173922.GF2761-GFdadSzt00ze9xe1eoZjHA@public.gmane.org>
2015-05-13 18:16                       ` Greg Kroah-Hartman
2015-05-13 18:32                         ` Mark Brown
     [not found]                           ` <20150513183211.GK2761-GFdadSzt00ze9xe1eoZjHA@public.gmane.org>
2015-05-13 18:36                             ` Greg Kroah-Hartman
     [not found]                               ` <20150513183653.GA879-U8xfFu+wG4EAvxtiuMwx3w@public.gmane.org>
2015-05-13 18:51                                 ` Mark Brown
     [not found]                                   ` <20150513185149.GL2761-GFdadSzt00ze9xe1eoZjHA@public.gmane.org>
2015-05-13 19:17                                     ` Maxime Ripard
2015-05-13 17:50           ` Maxime Ripard
2015-05-13 18:12             ` Mark Brown
2015-05-13 18:17             ` Greg Kroah-Hartman
     [not found]               ` <20150513181736.GC16811-U8xfFu+wG4EAvxtiuMwx3w@public.gmane.org>
2015-05-13 19:23                 ` Geert Uytterhoeven
2015-05-13 19:26                 ` Maxime Ripard
2015-05-13 22:33                   ` Greg Kroah-Hartman
     [not found]                     ` <20150513223331.GA26748-U8xfFu+wG4EAvxtiuMwx3w@public.gmane.org>
2015-05-14 14:34                       ` Mark Brown
2015-07-15  6:27                       ` Lucas De Marchi
2015-05-15  8:09                     ` Maxime Ripard

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=20140430181429.GD3000@lukather \
    --to=maxime.ripard-wi1+55scjutkeb57/3fjtnbpr1lh4cv8@public.gmane.org \
    --cc=alexandre.belloni-wi1+55ScJUtKEb57/3fJTNBPR1lH4CV8@public.gmane.org \
    --cc=broonie-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org \
    --cc=kernel-TqfNSX0MhmxHKSADF0wUEw@public.gmane.org \
    --cc=linux-spi-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).