linux-i2c.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Guenter Roeck <linux-0h96xk9xTtrk1uMJSBkQmQ@public.gmane.org>
To: Martin Belanger
	<martin.belanger-Ir6+u9MVKBtBDgjK7y7TUQ@public.gmane.org>
Cc: Wolfram Sang <wsa-z923LK4zBo2bacvFa/9K2g@public.gmane.org>,
	linux-i2c-u79uwXL29TY76Z2rM5mHXA@public.gmane.org,
	Jean Delvare <jdelvare-l3A5Bk7waGM@public.gmane.org>
Subject: Re: Problem with multiple i2c multiplexers on the same bus
Date: Fri, 31 Oct 2014 14:59:39 -0700	[thread overview]
Message-ID: <5454064B.10000@roeck-us.net> (raw)
In-Reply-To: <CAB0SmAG1r-EUFrDAjuh14uYQYc_typV4+JbfkUvCGX+=_09QmA-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>

On 10/31/2014 02:45 PM, Martin Belanger wrote:
> Hi all, and thanks for your response.
>
> You are correct Guenter.  We need to address both i2c- and gpio-based
> multiplexers.  You and Jean suggested the following solution:
>
> I2C Mux:  i2c-N-mux-i2c-XX (chan_id M)
> GPIO Mux: i2c-N-mux-gpio-XX (chan_id M)
>
Too long ago to remember.

> Where XX is the i2c address or the first GPIO pin number.  This
> ensures unique IDs for both technologies.
>
> Adding a parameter to i2c_add_mux_adapter() (as you and Jean
> suggested) would solve the problem.  Basically, we pass a unique id
> string (e.g. "-i2c-XX" or "-gpio-XX") to the API, which then adds to
> the "name" as described above. In cases where a unique id is not
> required, we can simply pass NULL to i2c_add_mux_adapter().  Here's an
> example of what the new API would look like:
>
> struct i2c_adapter *i2c_add_mux_adapter(struct i2c_adapter *parent,
>      struct device *mux_dev,
>      void *mux_priv, u32 force_nr, u32 chan_id,
>      unsigned int class,
>      int (*select) (struct i2c_adapter *,
>            void *mux_dev, u32 chan_id),
>      int (*deselect) (struct i2c_adapter *,
>      void *mux_dev, u32 chan_id),
>      const char *explicit_id);
>
> The parameter explicit_id gets used as follows:
>
> if (NULL == explicit_id)

Personally, I would never accept code like that; it just confuses me
to see the constant first in an expression.

API-wise I am fine with the proposed change, except I would probably
move the new argument ahead of chan_id and name it mux_id.

Guenter

>      explicit_id = "";
> snprintf(priv->adap.name, sizeof(priv->adap.name),
>      "i2c-%d-mux%s (chan_id %d)", i2c_adapter_id(parent), explicit_id, chan_id);
>
> If it's OK will all parties, I can submit a patch for it (and I'll
> make sure to reference Guenter and Jean as the designers).  This,
> however, is a first for me.  I read all the documents about submitting
> patches.  I was just wondering if I should submit against the current
> 3.18 development or some other "stable" releases.
>
> Regards,
> Martin
> Martin Belanger
> Sr. Software Engineer
> 1383 North McDowell Blvd.
> Petaluma, CA 94954
> M(707) 481-3392
> Emartin.belanger-Ir6+u9MVKBtBDgjK7y7TUQ@public.gmane.org
> www.cyaninc.com
>
>
> On Fri, Oct 31, 2014 at 2:17 PM, Guenter Roeck <linux-0h96xk9xTtrk1uMJSBkQmQ@public.gmane.org> wrote:
>> On 10/31/2014 02:03 PM, Wolfram Sang wrote:
>>>
>>> Hi,
>>>
>>> On Mon, Oct 27, 2014 at 11:46:01AM -0700, Martin Belanger wrote:
>>>>
>>>> This is regarding a series of emails between Guenter Roeck and Jean
>>>> Delvare titled "Problem with multiple i2c multiplexers on one bus, and
>>>> mux bus naming" sent in November 2013. Ref:
>>>> http://thread.gmane.org/gmane.linux.drivers.i2c/16980
>>>
>>>
>>> Please CC those people then, too. That helps getting their attention.
>>> I've done this now.
>>>
>>>> I'm having the same problem with multiple PCA954x multiplexers on the
>>>> same bus and there is no way to tell them apart just by looking at the
>>>> "name" file.
>>>>
>>>> There was a suggestion to change the name from "i2c-N-mux (chan_id M)"
>>>> to "i2c-N-mux-XX (chan_id M)" or even "i2c-N-mux-i2c-XX (chan_id M)",
>>>> where XX is the multiplexer's i2c address. That would solve my
>>>> problem, but unfortunately it looks like Guenter never submitted the
>>>> patch (or maybe it was rejected?).
>>>
>>>
>>> It just dropped off :( But you guys have my attention now, let's fix
>>> this issue for 3.19! I am just reading through the old mails and will
>>> think about it. Input is welcome.
>>>
>> I didn't follow up on the issue since it was not an immediate concern,
>> and my proposed solution had some problems. If I remember correctly,
>> one of the problems was that the multiplexer does not have to be an
>> i2c chip. In that case XX would be unknown and/or have to be omitted.
>>
>> Guenter
>>
>>
>>>> I would like to submit a similar change, but I was thinking of adding
>>>> a module parameter so that the change is not the default behavior.
>>>> The idea is to preserve backward compatibility for applications that
>>>> don't require this fix. For example, modprobe i2c-dev
>>>> explicit_mux_id=1 would use i2c-N-mux-i2c-XX (chan_id M), whereas
>>>> modprobe i2c-dev would default to the current behavior: i.e. i2c-N-mux
>>>> (chan_id M).
>>>
>>>
>>> I don't like the need to set a module parameter to fix a flaw. I do
>>> consider changing the ABI to have better strings in "name". But as said,
>>> I need to think about it a little more...
>>>
>>> Thanks,
>>>
>>>      Wolfram
>>>
>>
>

      parent reply	other threads:[~2014-10-31 21:59 UTC|newest]

Thread overview: 7+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-10-27 18:46 Problem with multiple i2c multiplexers on the same bus Martin Belanger
     [not found] ` <CAB0SmAFZ5KPpeSbQia9kq668G5kE6hpw9eBRy=59U6GOymkj9A-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2014-10-31 21:03   ` Wolfram Sang
2014-10-31 21:17     ` Guenter Roeck
     [not found]       ` <5453FC86.1080408-0h96xk9xTtrk1uMJSBkQmQ@public.gmane.org>
2014-10-31 21:45         ` Martin Belanger
     [not found]           ` <CAB0SmAG1r-EUFrDAjuh14uYQYc_typV4+JbfkUvCGX+=_09QmA-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2014-10-31 21:59             ` Wolfram Sang
2014-11-02 20:38               ` Wolfram Sang
2014-10-31 21:59             ` Guenter Roeck [this message]

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=5454064B.10000@roeck-us.net \
    --to=linux-0h96xk9xttrk1umjsbkqmq@public.gmane.org \
    --cc=jdelvare-l3A5Bk7waGM@public.gmane.org \
    --cc=linux-i2c-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \
    --cc=martin.belanger-Ir6+u9MVKBtBDgjK7y7TUQ@public.gmane.org \
    --cc=wsa-z923LK4zBo2bacvFa/9K2g@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).