mirror of
https://github.com/lm-sensors/lm-sensors.git
synced 2026-10-08 09:04:39 +07:00
<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
72 lines
2.4 KiB
C
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 */
|