linux-spi.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Chris Packham <Chris.Packham@alliedtelesis.co.nz>
To: "dries.vanpuymbroeck@dekimo.com" <dries.vanpuymbroeck@dekimo.com>,
	"broonie@kernel.org" <broonie@kernel.org>,
	"anthony.derosa@syscall7.com" <anthony.derosa@syscall7.com>
Cc: "linux-spi@vger.kernel.org" <linux-spi@vger.kernel.org>,
	"linux-kernel@vger.kernel.org" <linux-kernel@vger.kernel.org>
Subject: Re: Multiplex SPI Chip Selects
Date: Mon, 6 Jan 2020 22:44:15 +0000	[thread overview]
Message-ID: <2db6a1c2463ca5cf41795b5348e17cfbd7de5fe3.camel@alliedtelesis.co.nz> (raw)
In-Reply-To: <CAB595VzfMRU4Pejuzi0jODvu9p_mh473-cdK92jxSxk3yPHtqw@mail.gmail.com>

On Mon, 2020-01-06 at 08:27 -0500, Anthony DeRosa wrote:
> Hi Chris,
> 
> On Sun, Jan 5, 2020 at 3:47 PM Chris Packham
> <Chris.Packham@alliedtelesis.co.nz> wrote:
> > 
> > Hi Anthony,
> > 
> > > On Wed, 2020-01-01 at 09:21 -0500, Anthony DeRosa wrote:
> > > Hi Chris,
> > > 
> > > I saw your thread[1] about multiplexing chip selects on the SPI bus
> > > and wondered what solution you settled on in the end. Looks like your
> > > patch was not integrated into the kernel, is that right? I have a
> > > similar problem where I need to use GPIOs to multiplex the CS0 pin on
> > > a raspberry pi. Any insights would be appreciated.
> > > 
> > 
> > For the simple case the existing cs-gpios support works well. So using
> > that if you can is my recommendation.
> > 
> > Unfortunately for me it's not that simple because I have 2 platforms
> > which need both the gpio CS and the native CS0. This is where things
> > get a bit tricky.
> > 
> > The existing code will invert the native CS0 (because SPI_CS_HIGH is
> > set) I think this is a straight corner-case bug and we should either
> > not invert the native CS0 or have a separate flag to indicate when the
> > native CS0 needs inverting.
> > 
> > For the 2 platforms I'm dealing with I have a complication in the HW
> > design where the gpio is used to steer the native CS0 (as opposed to
> > replacing it) which is what my original series attempted to deal with.
> > I ended up implementing a gpio-over-gpio controller that presented 2
> > virtual gpios which reflected the high-low state of a single physical
> > gpio (basically implemented Mark's suggestion from the thread). I
> > haven't attempted to upstream the driver because I consider it a SW fix
> > for quirk of our HW designs, but if there is interest I could at least
> > send it out.
>
> Thanks for your response. The cs-gpios are not sufficient for me,
> because the cs-gpios provide N more chip selects, but we need 2^N more
> chip selects. We are using a 4:16 address decoder that is controlled
> by GPIOs to extend the number of chip selects available like this
> (requires fixed-width font to view):
> 
> +      MOSI /--------------------------------+--------+--------+--------\
> +      MISO |/------------------------------+|-------+|-------+|-------\|
> +       SCL ||/----------------------------+||------+||------+||------\||
> +           |||                            |||      |||      |||      |||
> +    +------------+                        |||      |||      |||      |||
> +    | SoC  |||   |                      +-+++-+  +-+++-+  +-+++-+  +-+++-+
> +    |      |||   |                      | dev |  | dev |  | dev |  | dev |
> +    |   +--+++-+ | CS-X  +------+\      +--+--+  +--+--+  +--+--+  +--+--+
> +    |   | SPI  +-|-------+ Mux  |\\   CS-0 |        |        |        |
> +    |   +------+ |       +--++--+\\\-------/   CS-1 |        |        |
> +    |            |          ||   \\\----------------/   CS-2 |        |
> +    |   +------+ |          ||    \\-------------------------/   CS-3 |
> +    |   | GPIO +-|----------/|     \----------------------------------/
> +    |   |      +-|-----------/
> +    |   +------+ |
> +    +------------+
> 
> This proposed patch does exactly what I need to do:
> https://patchwork.kernel.org/patch/2706151/, but I was wondering why
> nothing like this already exists or why that patch had not been
> included in the mainline kernel.

Yeah that's the kind of thing I had in mind in the thread I started.
Now that mux-controls is a thing it'd probably be even easier to do
something like this.

I don't know why Dries' patch series didn't land. The reason my one
didn't land was due to some implementation details and the ability to
do something simpler with a fake gpio.

I probably won't get to anything for the next couple of weeks but after
that I can have a try at resurrecting the code from the old thread. I
have a hardware platform suitable for testing.

> 
> > 
> > Regards,
> > Chris
> > 
> > --
> > [1] -
> > https://lwn.net/ml/devicetree/20190412050213.17698-1-chris.packham@alliedtelesis.co.nz/

       reply	other threads:[~2020-01-06 22:44 UTC|newest]

Thread overview: 2+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
     [not found] <CAB595VxuL+iOQD3Re1PbjP50GD51XuMML8_R6Ku2ywAAHcOcdw@mail.gmail.com>
     [not found] ` <a0171241162171ffac6429d29edfaa83fbd9a2ba.camel@alliedtelesis.co.nz>
     [not found]   ` <CAB595VzfMRU4Pejuzi0jODvu9p_mh473-cdK92jxSxk3yPHtqw@mail.gmail.com>
2020-01-06 22:44     ` Chris Packham [this message]
2020-01-06 22:51       ` Multiplex SPI Chip Selects Mark Brown

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=2db6a1c2463ca5cf41795b5348e17cfbd7de5fe3.camel@alliedtelesis.co.nz \
    --to=chris.packham@alliedtelesis.co.nz \
    --cc=anthony.derosa@syscall7.com \
    --cc=broonie@kernel.org \
    --cc=dries.vanpuymbroeck@dekimo.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-spi@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;
as well as URLs for NNTP newsgroup(s).