All of lore.kernel.org
 help / color / mirror / Atom feed
From: hunold@linuxtv.org (Michael Hunold)
To: Adrian Cox <adrian@humboldt.co.uk>
Cc: Linux Kernel Mailing List <linux-kernel@vger.kernel.org>,
	sensors@Stimpy.netroedge.com, Jon Smirl <jonsmirl@gmail.com>,
	Greg KH <greg@kroah.com>
Subject: [PATCH][2.6] Add command function to struct i2c_adapter
Date: Thu, 19 May 2005 06:25:17 +0000	[thread overview]
Message-ID: <41527696.5060002@linuxtv.org> (raw)
In-Reply-To: <1095854048.18365.75.camel@localhost>

Hi,

On 22.09.2004 13:54, Adrian Cox wrote:
> Not in the current Linux DVB code. A frontend driver registers itself
> onto a list, and whenever a DVB card registers its I2C adapter the
> available frontends are probed. My solution would throw away all the
> list handling in dvb_i2c.c entirely.

Kernels including 2.6.9-rc2-mm1 have the proprietary dvb_i2c 
implementation inside, ie. no kernel i2c at all. I have recently sent a 
patch to Andrew that converts all dvb drivers and frontends to fully use 
kernel i2c. The current discussion is completely about the 
not-yet-officially-released dvb subsystem using kernel-i2c.

>>All in all I don't see how we can solve the problem without either a "do not
>>probe" flag in the adapter structure or a class bitfield in both the adapter
>>and the client structures. I would be fine with either option unless someone
>>explains how one is better than the other in any particular case.

> What I want is a way for a card driver to create a private I2C adapter,
> and private instances of I2C clients, for purposes of code reuse. The
> card driver would be responsible for attaching those clients to the bus
> and cleaning up the objects on removal. The bus wouldn't be visible in
> sysfs, or accessible from user-mode.

We're having a similar discussion on the linux-dvb mailing list and I 
have made a similar suggestion. There shouldn't be such a thing as a 
generic i2c bus at all - at least not for specific PCI or AGP cards 
having an i2c bus, because you really now what's there.

The adapters should be able to create a specific i2c bus. This bus then 
should have a well-defined client<->adapter interface. The adapter 
provides an interface clients can use for example to query h/w dependent 
informations, like "Is it possible to have chipset XY on your bus?". For 
DVB this question can be answered using pci subvendor/subdevice 
informations. This avoids the need to add a command() function to struct 
i2c_adapter.

If the adapter wants a client to join the bus and the client is really 
found, then the client must provide a well-defined set of functions as 
well. The adapter can then control the device in a type-safe manner and 
doesn't have to control it using the current ioctl interface.

> - Adrian Cox
> Humboldt Solutions Ltd.

We need to keep in mind, that the adapter interface must be a per-client 
interface. On PCI devices it's simple: you have a i2c bus bound to a dvb 
card and know which chipsets can be there. The bus is dvb specific.

On embedded platforms, however, you usually have one one i2c bus, where 
everything is present: dvb frontends, audio/video multiplexers, 
digital/analog audio converters, stuff like that.

So if you create *the* i2c bus and invite i2c client to participate at 
the party, you need to provide different interfaces to the different 
chipsets.

CU
Michael.

WARNING: multiple messages have this Message-ID (diff)
From: Michael Hunold <hunold@linuxtv.org>
To: Adrian Cox <adrian@humboldt.co.uk>
Cc: Linux Kernel Mailing List <linux-kernel@vger.kernel.org>,
	sensors@Stimpy.netroedge.com, Jon Smirl <jonsmirl@gmail.com>,
	Greg KH <greg@kroah.com>
Subject: Re: [PATCH][2.6] Add command function to struct i2c_adapter
Date: Thu, 23 Sep 2004 09:09:10 +0200	[thread overview]
Message-ID: <41527696.5060002@linuxtv.org> (raw)
In-Reply-To: <1095854048.18365.75.camel@localhost>

Hi,

On 22.09.2004 13:54, Adrian Cox wrote:
> Not in the current Linux DVB code. A frontend driver registers itself
> onto a list, and whenever a DVB card registers its I2C adapter the
> available frontends are probed. My solution would throw away all the
> list handling in dvb_i2c.c entirely.

Kernels including 2.6.9-rc2-mm1 have the proprietary dvb_i2c 
implementation inside, ie. no kernel i2c at all. I have recently sent a 
patch to Andrew that converts all dvb drivers and frontends to fully use 
kernel i2c. The current discussion is completely about the 
not-yet-officially-released dvb subsystem using kernel-i2c.

>>All in all I don't see how we can solve the problem without either a "do not
>>probe" flag in the adapter structure or a class bitfield in both the adapter
>>and the client structures. I would be fine with either option unless someone
>>explains how one is better than the other in any particular case.

> What I want is a way for a card driver to create a private I2C adapter,
> and private instances of I2C clients, for purposes of code reuse. The
> card driver would be responsible for attaching those clients to the bus
> and cleaning up the objects on removal. The bus wouldn't be visible in
> sysfs, or accessible from user-mode.

We're having a similar discussion on the linux-dvb mailing list and I 
have made a similar suggestion. There shouldn't be such a thing as a 
generic i2c bus at all - at least not for specific PCI or AGP cards 
having an i2c bus, because you really now what's there.

The adapters should be able to create a specific i2c bus. This bus then 
should have a well-defined client<->adapter interface. The adapter 
provides an interface clients can use for example to query h/w dependent 
informations, like "Is it possible to have chipset XY on your bus?". For 
DVB this question can be answered using pci subvendor/subdevice 
informations. This avoids the need to add a command() function to struct 
i2c_adapter.

If the adapter wants a client to join the bus and the client is really 
found, then the client must provide a well-defined set of functions as 
well. The adapter can then control the device in a type-safe manner and 
doesn't have to control it using the current ioctl interface.

> - Adrian Cox
> Humboldt Solutions Ltd.

We need to keep in mind, that the adapter interface must be a per-client 
interface. On PCI devices it's simple: you have a i2c bus bound to a dvb 
card and know which chipsets can be there. The bus is dvb specific.

On embedded platforms, however, you usually have one one i2c bus, where 
everything is present: dvb frontends, audio/video multiplexers, 
digital/analog audio converters, stuff like that.

So if you create *the* i2c bus and invite i2c client to participate at 
the party, you need to provide different interfaces to the different 
chipsets.

CU
Michael.

  parent reply	other threads:[~2005-05-19  6:25 UTC|newest]

Thread overview: 65+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2004-09-20 17:19 [PATCH][2.6] Add command function to struct i2c_adapter Michael Hunold
2004-09-21 15:41 ` Greg KH
2005-05-19  6:25   ` Greg KH
2004-09-21 17:10   ` Michael Hunold
2005-05-19  6:25     ` Michael Hunold
2004-09-21 17:39     ` Jon Smirl
2005-05-19  6:25       ` Jon Smirl
2004-09-21 18:05       ` Michael Hunold
2005-05-19  6:25         ` Michael Hunold
2004-09-22  8:56         ` Adrian Cox
2005-05-19  6:25           ` Adrian Cox
2004-09-22 12:08           ` Jean Delvare
2005-05-19  6:25             ` Jean Delvare
2004-09-22 11:54             ` Adrian Cox
2005-05-19  6:25               ` Adrian Cox
2004-09-22 13:38               ` Jean Delvare
2005-05-19  6:25                 ` Jean Delvare
2004-09-22 13:13                 ` Adrian Cox
2005-05-19  6:25                   ` Adrian Cox
2004-09-22 15:40                 ` Jon Smirl
2005-05-19  6:25                   ` Jon Smirl
2004-09-22 15:56                   ` Adrian Cox
2005-05-19  6:25                     ` Adrian Cox
2004-09-22 16:07                     ` Jon Smirl
2005-05-19  6:25                       ` Jon Smirl
2004-09-22 16:51                       ` Adrian Cox
2005-05-19  6:25                         ` Adrian Cox
2004-09-22 17:17                         ` Jon Smirl
2005-05-19  6:25                           ` Jon Smirl
2004-09-22 18:55                         ` Jean Delvare
2005-05-19  6:25                           ` Jean Delvare
2004-09-22 18:32                 ` Adrian Cox
2005-05-19  6:25                   ` Adrian Cox
2004-09-22 20:04                   ` Mark M. Hoffman
2005-05-19  6:25                     ` Mark M. Hoffman
2004-09-23  7:41                   ` Michael Hunold
2005-05-19  6:25                     ` Michael Hunold
2004-09-23  7:48                   ` Michael Hunold
2005-05-19  6:25                     ` Michael Hunold
2004-09-23  7:09               ` Michael Hunold [this message]
2005-05-19  6:25                 ` Michael Hunold
2004-09-23 20:18                 ` Adrian Cox
2005-05-19  6:25                   ` Adrian Cox
2004-09-21 20:33       ` Jean Delvare
2005-05-19  6:25         ` Jean Delvare
2004-09-21 21:02         ` Jon Smirl
2005-05-19  6:25           ` Jon Smirl
2004-09-24 17:06   ` Michael Hunold
2005-05-19  6:25     ` Michael Hunold
2004-09-24 18:05     ` Jean Delvare
2005-05-19  6:25       ` Jean Delvare
2004-09-24 20:21       ` Michael Hunold
2005-05-19  6:25         ` Michael Hunold
2004-10-01  6:52         ` Greg KH
2005-05-19  6:25           ` Greg KH
2004-10-01 12:22           ` Adrian Cox
2005-05-19  6:25             ` Adrian Cox
2004-10-01 13:57             ` Jean Delvare
2005-05-19  6:25               ` Jean Delvare
2004-10-01 23:41             ` Greg KH
2005-05-19  6:25               ` Greg KH
  -- strict thread matches above, loose matches on Subject: below --
2005-05-19  6:25 [Fwd: [PATCH][2.6] Add command function to struct i2c_adapter] Michael Hunold
2004-09-21 13:28 ` [PATCH][2.6] Add command function to struct i2c_adapter Jean Delvare
2005-05-19  6:25   ` Jean Delvare
2004-09-21 14:38   ` Michael Hunold
2005-05-19  6:25     ` Michael Hunold

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=41527696.5060002@linuxtv.org \
    --to=hunold@linuxtv.org \
    --cc=adrian@humboldt.co.uk \
    --cc=greg@kroah.com \
    --cc=jonsmirl@gmail.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=sensors@Stimpy.netroedge.com \
    /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.