linux-i2c.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Jean Delvare <khali-PUYAD+kWke1g9hUCZPvPmw@public.gmane.org>
To: Rodolfo Giometti <giometti-AVVDYK/kqiJWk0Htik3J/w@public.gmane.org>
Cc: Guennadi Liakhovetski
	<g.liakhovetski-Mmb7MZpHnFY@public.gmane.org>,
	i2c-GZX6beZjE8VD60Wz+7aTrA@public.gmane.org
Subject: Re: Complex I2C device
Date: Tue, 19 Feb 2008 14:21:33 +0100	[thread overview]
Message-ID: <20080219142133.2e022910@hyperion.delvare> (raw)
In-Reply-To: <20080131091619.GI9444-AVVDYK/kqiJWk0Htik3J/w@public.gmane.org>

Hi Rodolfo,

On Thu, 31 Jan 2008 10:16:19 +0100, Rodolfo Giometti wrote:
> On Wed, Jan 30, 2008 at 09:32:38PM +0100, Guennadi Liakhovetski wrote:
> > Hi Rodolfo,
> > 
> > On Wed, 30 Jan 2008, Rodolfo Giometti wrote:
> > 
> > > my custom board has a «complex» device... let me explain better: it's
> > > formed by a custom I2C device and an I/O extender PCA9539.
> > > 
> > > Ascii art:
> > > 
> > > 
> > >                 +---------+
> > >           --+---+         |
> > >             |   | PCA9539 |
> > >             |   +---------+
> > > Bus I2C ->> |      | | |
> > >             |      | | | <<--- GPIOs
> > >             |      | | |
> > >             |   +---------+
> > >             +---+         |
> > >                 |   CHIP  |
> > >                 +---------+  
> > > 
> > > Some input GPIOs of CHIP are managed by the PCA9539. So fisically I
> > > have two devices but logically they are merged together into one.
> > > 
> > > I can send commands to CHIP by both I2C bus and the GPIOs, which in
> > > turn are controlled by the PCA9539.
> > > 
> > > Can you please suggest me the best way to manage this problem? My
> > > solution was to provide PCA9539's driver of some exported symbols and
> > > using them into the CHIP's driver. Is that right? Or, can I "call" (in
> > > any way) PCA9539 driver's methods from CHIP's driver?
> > 
> > First, you want to use gpiolib, which in -mm tree now lives under 
> > drivers/gpio and includes a driver for pca9539. With it the pca9539 driver 
> > registers a gpio controller with the system, and then your driver for the 
> > other part can just request respective GPIOs as if they were normal CPU 
> > GPIOs or whatever else. And toggle them using the standard API. I will 
> > (hopefully tomorrow) post an example of exactly this to the 
> > video4linux-list-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org list. In my case this other chip is a CMOS 
> > camera.
> 
> Great, this would be a good solution for this scenario... but I'm
> looking something more "general". A related problem of mine is on
> another custom board which has the following:

Guennadi's solution (based on David Brownell's work) is actually pretty
generic as far as GPIOs are concerned. I like it.

> 
> 
>                  +---------+
>            --+---+ Battery |
>              |   | Manager |
>              |   +---------+
>  Bus I2C ->> |
>              |
>              |
>              |   +---------+
>              +---+         |
>                  |  CHIP   |
>                  +---------+
> 
> A (complex) battery pack are managed by a "battery manager" and a
> custom chip connected by the I2C bus (my hardware designer _loves_ I2C
> bus :). Even these devices can be logically considered as only one
> (big) battery...
> 
> Looking at I2C code, which uses the new style driver model, I see the
> function i2c_register_board_info() where we can specify the bus number
> and the devices list attached on that I2C bus, so I suppose we can add
> a function as:
> 
> 	struct i2c_client *i2c_find_client(int busnum, unsigned short addr);
> 
> which can return the i2c_client struct associated to the given bus
> number and i2c address.
> 
> This should resolve any possible problem related to every I2C
> "complex" device. Shouldn't it?

This would be doing things the wrong way around IMHO. Assuming that
there is no clean interface between both physical components of your
complex logical device, that would make a GPIO-like solution possible,
what you really have is a single device with 2 I2C addresses. We
support this already thanks to the i2c_new_dummy() function, so I see
no need for an additional interface.

-- 
Jean Delvare

_______________________________________________
i2c mailing list
i2c-GZX6beZjE8VD60Wz+7aTrA@public.gmane.org
http://lists.lm-sensors.org/mailman/listinfo/i2c

  parent reply	other threads:[~2008-02-19 13:21 UTC|newest]

Thread overview: 6+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2008-01-30 14:46 Complex I2C device Rodolfo Giometti
     [not found] ` <20080130144657.GA9444-AVVDYK/kqiJWk0Htik3J/w@public.gmane.org>
2008-01-30 20:32   ` Guennadi Liakhovetski
     [not found]     ` <Pine.LNX.4.64.0801302126150.6547-0199iw4Nj15frtckUFj5Ag@public.gmane.org>
2008-01-31  9:16       ` Rodolfo Giometti
     [not found]         ` <20080131091619.GI9444-AVVDYK/kqiJWk0Htik3J/w@public.gmane.org>
2008-02-19 13:21           ` Jean Delvare [this message]
     [not found]             ` <20080219142133.2e022910-ig7AzVSIIG7kN2dkZ6Wm7A@public.gmane.org>
2008-02-19 14:10               ` Rodolfo Giometti
     [not found]                 ` <20080219141049.GD8190-AVVDYK/kqiJWk0Htik3J/w@public.gmane.org>
2008-02-19 14:23                   ` Jean Delvare

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=20080219142133.2e022910@hyperion.delvare \
    --to=khali-puyad+kwke1g9huczpvpmw@public.gmane.org \
    --cc=g.liakhovetski-Mmb7MZpHnFY@public.gmane.org \
    --cc=giometti-AVVDYK/kqiJWk0Htik3J/w@public.gmane.org \
    --cc=i2c-GZX6beZjE8VD60Wz+7aTrA@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).