Files
lm-sensors/kernel/busses/i2c-piix4.c
T
Frodo Looijaard ed7e4c3001 Makefile enhancements, printk enhancements
* Modules now print their version number and date on insertion
* Some printk statements missed a \n
* 'make clean' now works, even if some .d (dependency) files contain garbage.
  Note that *only* 'make clean' helps in that case; 'make clean all', for
  example, will fail! There is really no nice way to solve that.


git-svn-id: http://lm-sensors.org/svn/lm-sensors/trunk@11 7894878c-1315-0410-8ee3-d5d059ff63e0
1998-11-22 21:36:52 +00:00

122 lines
3.1 KiB
C

/*
smbus.c - A Linux module for reading sensor data.
Copyright (c) 1998 Frodo Looijaard <frodol@dds.nl>
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.
*/
#include <linux/module.h>
#include <linux/kernel.h>
#include "smbus.h"
#include "version.h"
static int piix4_init(void);
static int piix4_cleanup(void);
static int piix4_setup(void);
static s32 piix4_access(u8 addr, char read_write,
u8 command, int size, union smbus_data * data);
#ifdef MODULE
extern int init_module(void);
extern int cleanup_module(void);
#endif /* MODULE */
static struct smbus_adapter piix4_adapter;
static int piix4_initialized;
/* Detect whether a PIIX4 can be found, and initialize it, where necessary.
Return -ENODEV if not found. */
int piix4_setup(void)
{
return -ENODEV;
/* TO BE WRITTEN! */
}
/* Return -1 on error. See smbus.h for more information */
s32 piix4_access(u8 addr, char read_write,
u8 command, int size, union smbus_data * data)
{
/* TO BE WRITTEN! */
}
int piix4_init(void)
{
int res;
printk("piix4.o version %s (%s)\n",LM_VERSION,LM_DATE);
#ifdef DEBUG
if (piix4_initialized) {
printk("piix4.o: Oops, piix4_init called a second time!\n");
return -EBUSY;
}
#endif
piix4_initialized = 0;
if ((res = piix4_setup())) {
printk("piix4.o: PIIX4 not detected, module not inserted\n");
piix4_cleanup();
return res;
}
piix4_initialized ++;
strcpy(piix4_adapter.name,"SMBus PIIX4 adapter");
piix4_adapter.id = ALGO_SMBUS | SMBUS_PIIX4;
piix4_adapter.algo = &smbus_algorithm;
piix4_adapter.smbus_access = &piix4_access;
if ((res = smbus_add_adapter(&piix4_adapter))) {
printk("piix4.o: smbus_add_adapter failed, module not inserted\n");
piix4_cleanup();
return res;
}
piix4_initialized++;
printk("piix4.o: PIIX4 bus detected and initialized\n");
return 0;
}
int piix4_cleanup(void)
{
int res;
if (piix4_initialized >= 2)
{
if ((res = smbus_del_adapter(&piix4_adapter))) {
printk("piix4.o: smbus_del_adapter failed, module not removed");
return res;
}
else
piix4_initialized--;
}
if (piix4_initialized >= 1) {
/* Undo anything piix4_setup did */
piix4_initialized--;
}
return 0;
}
#ifdef MODULE
MODULE_AUTHOR("Frodo Looijaard <frodol@dds.nl>");
MODULE_DESCRIPTION("PIIX4 SMBus driver");
int init_module(void)
{
return piix4_init();
}
int cleanup_module(void)
{
return piix4_cleanup();
}
#endif /* MODULE */