All of lore.kernel.org
 help / color / mirror / Atom feed
From: Hans de Goede <hdegoede-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
To: Maxime Ripard
	<maxime.ripard-wi1+55ScJUtKEb57/3fJTNBPR1lH4CV8@public.gmane.org>,
	Wolfram Sang <wsa-z923LK4zBo2bacvFa/9K2g@public.gmane.org>
Cc: linux-i2c-u79uwXL29TY76Z2rM5mHXA@public.gmane.org,
	boris-wi1+55ScJUtKEb57/3fJTNBPR1lH4CV8@public.gmane.org
Subject: Re: I2C adapters protocol deviation
Date: Thu, 03 Apr 2014 17:30:09 +0200	[thread overview]
Message-ID: <533D7E81.4050900@redhat.com> (raw)
In-Reply-To: <20140403145528.GA6199@lukather>

Hi,

On 04/03/2014 04:55 PM, Maxime Ripard wrote:
> Hi Wolfram,
> 
> On the Allwinner A31, the PMIC communicates with the SoC through a bus
> looking quite similar to I2C, while being pretty different.
> 
> The communication starts with the PMIC through the regular I2C
> protocol, but it's only used to initialize the PMIC, and switch to a
> mode called "Push/Pull 2 Wire Interface".
> 
> That bus is using SDA and SCL, with the start and stop conditions
> exactly like I2C does, but:
>   - Once the start condition has been issued, the address isn't sent,
>     only a direction bit. Hence, it does not support multiple devices
>     anymore.
>   - Once that direction bit has been sent, the master sends the
>     register it wants to read from/write to, over 8 bits, followed by
>     one parity bit.
>   - Whenever you're writing, the master then sends the data over 8
>     bits, followed once again by a parity bit. Then, and only then, an
>     ACK is issued by the slave.
>   - Whenever you're reading, the master then clocks SDL and the slave
>     drives SDA for 8 bits plus 1 parity bit. If there was some kind of
>     error, the slave will pull SDA up for 9 cycles, resulting in a
>     parity error. Like with I2C though, since it is the only and last
>     byte it's receiving, the master won't issue an ACK.
> 
> Obviously, to go ahead with the PMIC support, we need to support this
> controller and bus first. I can't really decide whether it's within
> the scope of the allowed protocol deviations of I2C or if we should
> create a whole new bus for it.

I've been thinking about this too. In the mean time I have slept quite a
few nights on this now and swung my opinion from use i2c subsys to do our
own bus and back again. But since I've actually added support for this
to u-boot and I now know the device better I believe using the i2c
subsys is the best solution for this.

The PMIC does seem to start in i2c, and then gets switched to this new
push-pull 2 wire i2c-ish protocol on init. So it does have a slave address,
but that is used only once, and then the bus is for a single device only.

Note there seems to be no way to use the host in a regular i2c mode. It has
a setup mode where it does a single regular i2c write (or so I believe) and
then it is in its own custom mode from there on.

So what we really have is a single slave i2c host sort of. At least
we could model it like that. The host could be told which address to
listen to (and which single i2c write to do to init the pmic) through
devicetree and then all the differences would be hidden in the host
driver, ie we would check the slave-address and if it is not the single
one we support, we just return the appropriate error for a device not
acking, and everything should work as a regular i2c host which
only supports i2c_smbus_read_byte and i2c_smbus_write_byte.

IOW the i2c_algorithm struct for the host would not set master_xfer,
only smbus_xfer and its functionality function would return
I2C_FUNC_SMBUS_BYTE

Regards,

Hans

  reply	other threads:[~2014-04-03 15:30 UTC|newest]

Thread overview: 12+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-04-03 14:55 I2C adapters protocol deviation Maxime Ripard
2014-04-03 15:30 ` Hans de Goede [this message]
     [not found]   ` <533D7E81.4050900-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
2014-04-04 11:49     ` Maxime Ripard
2014-04-04 12:26     ` Wolfram Sang
2014-04-06 14:01       ` Hans de Goede
     [not found]         ` <53415E50.9000402-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
2014-04-06 15:37           ` Wolfram Sang
2014-04-06 17:18             ` Hans de Goede
     [not found]               ` <53418C61.6020604-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
2014-04-07  7:49                 ` Boris BREZILLON
     [not found]                   ` <5342589B.5000600-wi1+55ScJUtKEb57/3fJTNBPR1lH4CV8@public.gmane.org>
2014-04-07 12:06                     ` Hans de Goede
2014-04-07  8:15                 ` Maxime Ripard
2014-04-07 12:07                   ` Hans de Goede
2014-04-07  8:01             ` 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=533D7E81.4050900@redhat.com \
    --to=hdegoede-h+wxahxf7alqt0dzr+alfa@public.gmane.org \
    --cc=boris-wi1+55ScJUtKEb57/3fJTNBPR1lH4CV8@public.gmane.org \
    --cc=linux-i2c-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \
    --cc=maxime.ripard-wi1+55ScJUtKEb57/3fJTNBPR1lH4CV8@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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.