Files
lm-sensors/kernel/include/i2c-virtual.h
T
Mark D. Studebaker 8f73f9beed baseline checkin of virtual adapter code from Ken Harrenstien
<klh@google.com> received Sept. '04.
      No changes by me other than include file path fixups.
      Compiles, but will not insmod without i2c-core changes
      or stubs to add xxx_nolock() functions.

-----------------

Here you go.  I apologize for the fact this code is not integrated
into the lm_sensors package structure and thus will require you to
make various little updates.  But I really wanted to get this out
before I'm yanked away again, and am pretty sure you can do it much
faster than I can figure out what needs to be done!

BTW the kernel files are built against 2.4.x where x varies; 18 and 19
should work.

Feel free to clean up anything.

--Ken

On Sat, 18 Sep 2004, Mark Studebaker wrote:

>>> > On Tue, 7 Sep 2004, Mark Studebaker wrote:
>>
>>>> >>sure, send it over.
>>>> >>Sorry for delay, your mail got buried by other mail and just now spotted it.
>>>> >>mds
>>>> >>
>>>> >>Ken Harrenstien wrote:
>>>> >>
>>>
>>>>> >>>It turned out to be a while before I could get back to this, but
>>>>> >>>everything's been working for a while now and I'd like to send in the
>>>>> >>>new pca954x driver.
>>>>> >>>
>>>>> >>>I was looking at the list in the "new_drivers" file -- it *is* kind of
>>>>> >>>intimidating.  Since some of the changes affect core i2c files, I was
>>>>> >>>hoping that what I could do to start with is just send you a tar of
>>>>> >>>the modified files in their entirety, or a patch-diff of the changes
>>>>> >>>against the 2.8.7 distribution, so you can scope things out and verify
>>>>> >>>they're on the right track for acceptance.  The following files are
>>>>> >>>the ones I've changed so far:
>>>>> >>>
>>>>> >>>        New:
>>>>> >>>                Documentation/i2c/virtual_i2c
>>>>> >>>                drivers/i2c/i2c-virtual.c
>>>>> >>>                drivers/sensors/pca954x.c
>>>>> >>>                include/linux/i2c-virtual.h
>>>>> >>>        Patched:
>>>>> >>>                Documentation/Configure.help
>>>>> >>>                drivers/i2c/Makefile
>>>>> >>>                drivers/i2c/Config.in
>>>>> >>>                drivers/i2c/i2c-core.c
>>>>> >>>                drivers/sensors/Makefile
>>>>> >>>                drivers/sensors/Config.in
>>>>> >>>                include/linux/i2c-id.h
>>>>> >>>                include/linux/i2c.h
>>>>> >>>
>>>>> >>>
>>>>> >>>I plan to write some additional doc once I know that the code itself
>>>>> >>>is acceptable, and you then can tell me what other files need to be
>>>>> >>>updated.
>>>>> >>>
>>>>> >>>To answer a couple other issues you raised:
>>>>> >>>
>>>>> >>>On Thu, 24 Jun 2004, Mark Studebaker wrote:
>>>>> >>>
>>>>> >>>
>>>>> >>>
>>>>
>>>>>> >>>>(copying the mailing list, already forwarded the first mail to the list)
>>>>>> >>>>
>>>>>> >>>>First I want to ask whether you are working on kernel 2.4 or 2.6.
>>>>
>>>>> >>>
>>>>> >>>
>>>>> >>>2.4.
>>>>> >>>
>>>>> >>>
>>>>> >>>
>>>>
>>>>>> >>>>Third, you may not have realized that Khali recently did a (2.4 kernel) pca9540 driver.
>>>>>> >>>>It is in our sensors package. It however doesn't do any of the bootstrapping or
>>>>>> >>>>bus registering either. It may or may not help you.
>>>>
>>>>> >>>
>>>>> >>>
>>>>> >>>I saw it in the 2.8.7 distrib, and used parts of it as a template.
>>>>> >>>The pca954x driver will support that chip, although the external /proc
>>>>> >>>interface it presents is necessarily different.
>>>>> >>>
>>>>> >>>--Ken


git-svn-id: http://lm-sensors.org/svn/lm-sensors/trunk@2765 7894878c-1315-0410-8ee3-d5d059ff63e0
2004-11-21 16:56:23 +00:00

72 lines
2.4 KiB
C

/*
* i2c-virtual.h - Header file for the 'virtual i2c' adapter driver.
*
* Copyright (c) 2004 Google, Inc.
*
* Based on:
* i2c-virtual.h from Brian Kuschak <bkuschak@yahoo.com>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/
#ifndef __I2C_VIRTUAL_H
#define __I2C_VIRTUAL_H
#include <linux/i2c.h>
struct i2c_mux_ctrl {
struct i2c_client *client; /* The mux chip/device */
unsigned long addr;
unsigned long value; /* Channel # */
/* fn which enables the mux */
int (*select)(struct i2c_adapter *adap, struct i2c_mux_ctrl *mux);
/* fn which disables the mux */
int (*deselect)(struct i2c_adapter *adap, struct i2c_mux_ctrl *mux);
};
/* This has to be exposed, since the code which assigns the callbacks must
use it.
*/
struct i2c_virt_priv {
struct i2c_adapter *parent_adap; /* pointer to parent adapter */
struct i2c_mux_ctrl mux; /* MUX settings for this adapter */
};
static inline struct i2c_adapter *i2c_virt_parent(struct i2c_adapter *adap)
{
if (adap->algo && (adap->algo->id == I2C_ALGO_VIRT)) {
return ((struct i2c_virt_priv *)(adap->data))->parent_adap;
}
return NULL;
}
/*
* Called to create a 'virtual' i2c bus which represents a multiplexed bus
* segment. The client and mux_val are passed to the select and deselect
* callback functions to perform hardware-specific mux control.
*/
struct i2c_adapter *i2c_virt_create_adapter(struct i2c_adapter *parent_adap,
struct i2c_client *client,
unsigned long mux_val,
void *select_cb,
void *deselect_cb);
int i2c_virt_remove_adapter(struct i2c_adapter *adap);
#endif /* __I2C_VIRTUAL_H */