linux-i2c.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Jean Delvare <khali-PUYAD+kWke1g9hUCZPvPmw@public.gmane.org>
To: "Frank Schäfer" <fschaefer.oss-gM/Ye1E23mwN+BqQ9rBEUg@public.gmane.org>
Cc: linux-i2c-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
Subject: Re: Q: i2c block write emulation / handling of i2c message size constraints     of a bus ?
Date: Sun, 28 Oct 2012 18:39:13 +0100	[thread overview]
Message-ID: <20121028183913.79ad5ae3@endymion.delvare> (raw)
In-Reply-To: <508D4E5F.4070209-gM/Ye1E23mwN+BqQ9rBEUg@public.gmane.org>

On Sun, 28 Oct 2012 17:25:19 +0200, Frank Schäfer wrote:
> Am 28.10.2012 17:33, schrieb Jean Delvare:
> > Most I2C_FUNC_* flags actual refer to the smbus_xfer method. A driver
> > implementing master_xfer is typically fully I2C capable and can thus
> > run almost any I2C or SMBus transaction. Such a driver will set
> > functionality flags to I2C_FUNC_I2C | I2C_FUNC_SMBUS_EMUL. The rest of
> > the flags are for SMBus-only controllers. Each flag basically
> > corresponds to an i2c_smbus_*() function, which in turn corresponds to
> > the combination of an SMBus transaction type or size and a direction
> > (read or write).
> >
> > The mapping between i2c_smbus_*() functions and functionality flags is
> > rather obvious, but for clarity I'll update
> > Documentation/i2c/smbus-protocol to mention it. Patch follows.
> >
> > Also see Documentation/i2c/functionality for a detailed explanation of
> > how functionality flags work both on the I2C/SMBus adapter driver and
> > the I2C device driver sides.
> 
> Ok, so the functionality flags describe whats possible when using the
> smbus functions.
> That's a bit confusing/misleading if the adapter driver doesn't
> implement the smbus_xfer function in struct i2c_algorithm.
> And if the i2c adapter / master_xfer fcn has some restrictions (e.g.
> data length), things are getting complicated.

Yes, this is correct.

> I2C_FUNC_SMBUS functionality flags are sufficiently documented, but what
> about I2C_FUNC_I2C ?

I2C_FUNC_I2C means that you can call i2c_transfer, i2c_master_send and
i2c_master_recv on the I2C adapter.

> Should this be set always if there is a master_xfer function or only if
> the adapter is fully i2c compliant (and what does "fully i2c compliant"
> mean ?) ?

If i2c_transfer() has a chance to succeed for any transaction type not
covered by I2C_FUNC_SMBUS_* flags, then I2C_FUNC_I2C should be set. So
yes, you are right, I2C_FUNC_I2C is set if and only if master_xfer is
implemented.

In theory, "fully I2C compliant" means that i2c_transfer() would
succeed regardless of the message set passed (unless protocol mangling
flags are used.) In practice, it is still OK to set I2C_FUNC_I2C if the
controller has limitations, as long as these limitations are less
restrictive than SMBus.

> To summarize: there is no possibilty to determine the maximum i2c data
> length when using the i2c_xfer functions directly. It's basically try
> and error and if the message is too long, the adapters should return
> -EOPNOTSUPP.

Yes, this is correct. I2C_FUNC_* flags aren't fine-grained enough to
describe all cases, so they should be used as a way for device driver
to exclude transactions which aren't supported at all, but they may
still have to deal with -EOPNOTSUPP on supported transactions. This is
handled on a case-by-case basis.

It could be argued that the I2C_FUNC_* flags aren't really necessary
and drivers could simply try what they need and deal with -EOPNOTSUPP
afterward. This is correct but it would probably make the driver code
more complex in most cases.

-- 
Jean Delvare

  parent reply	other threads:[~2012-10-28 17:39 UTC|newest]

Thread overview: 12+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2012-10-27 14:17 Q: i2c block write emulation / handling of i2c message size constraints of a bus ? Frank Schäfer
     [not found] ` <508BECFE.2010302-gM/Ye1E23mwN+BqQ9rBEUg@public.gmane.org>
2012-10-27 15:50   ` Jean Delvare
     [not found]     ` <20121027175030.0474249b-R0o5gVi9kd7kN2dkZ6Wm7A@public.gmane.org>
2012-10-27 15:41       ` Frank Schäfer
     [not found]         ` <508C009F.30107-gM/Ye1E23mwN+BqQ9rBEUg@public.gmane.org>
2012-10-28 12:03           ` Jean Delvare
     [not found]             ` <20121028130301.64f032ff-R0o5gVi9kd7kN2dkZ6Wm7A@public.gmane.org>
2012-10-28 13:32               ` Frank Schäfer
     [not found]                 ` <508D33E0.6070808-gM/Ye1E23mwN+BqQ9rBEUg@public.gmane.org>
2012-10-28 15:33                   ` Jean Delvare
     [not found]                     ` <20121028163342.48bc40aa-R0o5gVi9kd7kN2dkZ6Wm7A@public.gmane.org>
2012-10-28 15:25                       ` Frank Schäfer
     [not found]                         ` <508D4E5F.4070209-gM/Ye1E23mwN+BqQ9rBEUg@public.gmane.org>
2012-10-28 17:39                           ` Jean Delvare [this message]
     [not found]                             ` <20121028183913.79ad5ae3-R0o5gVi9kd7kN2dkZ6Wm7A@public.gmane.org>
2012-10-29 15:24                               ` Frank Schäfer
     [not found]                                 ` <508E9FA0.4000505-gM/Ye1E23mwN+BqQ9rBEUg@public.gmane.org>
2012-10-29 17:27                                   ` Jean Delvare
2012-10-28 15:11               ` Laurent Pinchart
2012-10-28 14:37                 ` Frank Schäfer

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=20121028183913.79ad5ae3@endymion.delvare \
    --to=khali-puyad+kwke1g9huczpvpmw@public.gmane.org \
    --cc=fschaefer.oss-gM/Ye1E23mwN+BqQ9rBEUg@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).