i2c-stub: Chip address as a module parameter

i2c-stub: Chip address as a module parameter

Add a mandatory chip_addr parameter to i2c-stub. This parameter
defines to which chip address the driver will respond, instead of
reponding to all addresses as before. The idea is to prevent the
users from loading i2c-stub at random and being then confused by
the results of sensors-detect or other user-space tools.

Signed-off-by: Jean Delvare <[email protected]>
Signed-off-by: Mark M. Hoffman <[email protected]>
Signed-off-by: Greg Kroah-Hartman <[email protected]>
This commit is contained in:
Jean Delvare 2006-08-13 23:46:44 +02:00 • committed by Greg Kroah-Hartman
commit 7a8d29cec7
2 changed files with 31 additions and 3 deletions

View file

@ -27,6 +27,10 @@
#include <linux/errno.h>
#include <linux/i2c.h>
static unsigned short chip_addr;
module_param(chip_addr, ushort, S_IRUGO);
MODULE_PARM_DESC(chip_addr, "Chip address (between 0x03 and 0x77)\n");
static u8 stub_pointer;
static u8 stub_bytes[256];
static u16 stub_words[256];
@ -37,6 +41,9 @@ static s32 stub_xfer(struct i2c_adapter * adap, u16 addr, unsigned short flags,
{
s32 ret;
if (addr != chip_addr)
return -ENODEV;
switch (size) {
case I2C_SMBUS_QUICK:
@ -122,7 +129,17 @@ static struct i2c_adapter stub_adapter = {
static int __init i2c_stub_init(void)
{
printk(KERN_INFO "i2c-stub loaded\n");
if (!chip_addr) {
printk(KERN_ERR "i2c-stub: Please specify a chip address\n");
return -ENODEV;
}
if (chip_addr < 0x03 || chip_addr > 0x77) {
printk(KERN_ERR "i2c-stub: Invalid chip address 0x%02x\n",
chip_addr);
return -EINVAL;
}
printk(KERN_INFO "i2c-stub: Virtual chip at 0x%02x\n", chip_addr);
return i2c_add_adapter(&stub_adapter);
}