[PATCH 2.6] Refactor swap_bytes in i2c chip drivers
Jean Delvare
khali at linux-fr.org
Mon Mar 29 23:20:14 CEST 2004
> Ick, no, we should be using the proper kernel call for this, swab16(),
> right? Care to redo this patch to just fix the drivers and get rid of
> our duplicating of this function.
Oh, I didn't know such a function existed, sorry.
Here's a new patch, hope you like it. Tested to work on my as99127f, btw
(w83781d driver).
Documentation update follows (well, tomorrow it does).
Thanks.
diff -ruN linux-2.6.5-rc2/drivers/i2c/chips.orig/asb100.c linux-2.6.5-rc2/drivers/i2c/chips/asb100.c
--- linux-2.6.5-rc2/drivers/i2c/chips.orig/asb100.c Mon Mar 29 20:50:39 2004
+++ linux-2.6.5-rc2/drivers/i2c/chips/asb100.c Mon Mar 29 22:48:24 2004
@@ -862,11 +862,6 @@
return 0;
}
-static u16 swap_bytes(u16 val)
-{
- return (val >> 8) | (val << 8);
-}
-
/* The SMBus locks itself, usually, but nothing may access the chip between
bank switches. */
static int asb100_read_value(struct i2c_client *client, u16 reg)
@@ -891,17 +886,17 @@
/* convert from ISA to LM75 I2C addresses */
switch (reg & 0xff) {
case 0x50: /* TEMP */
- res = swap_bytes(i2c_smbus_read_word_data (cl, 0));
+ res = swab16(i2c_smbus_read_word_data (cl, 0));
break;
case 0x52: /* CONFIG */
res = i2c_smbus_read_byte_data(cl, 1);
break;
case 0x53: /* HYST */
- res = swap_bytes(i2c_smbus_read_word_data (cl, 2));
+ res = swab16(i2c_smbus_read_word_data (cl, 2));
break;
case 0x55: /* MAX */
default:
- res = swap_bytes(i2c_smbus_read_word_data (cl, 3));
+ res = swab16(i2c_smbus_read_word_data (cl, 3));
break;
}
}
@@ -939,10 +934,10 @@
i2c_smbus_write_byte_data(cl, 1, value & 0xff);
break;
case 0x53: /* HYST */
- i2c_smbus_write_word_data(cl, 2, swap_bytes(value));
+ i2c_smbus_write_word_data(cl, 2, swab16(value));
break;
case 0x55: /* MAX */
- i2c_smbus_write_word_data(cl, 3, swap_bytes(value));
+ i2c_smbus_write_word_data(cl, 3, swab16(value));
break;
}
}
diff -ruN linux-2.6.5-rc2/drivers/i2c/chips.orig/ds1621.c linux-2.6.5-rc2/drivers/i2c/chips/ds1621.c
--- linux-2.6.5-rc2/drivers/i2c/chips.orig/ds1621.c Mon Mar 29 20:46:02 2004
+++ linux-2.6.5-rc2/drivers/i2c/chips/ds1621.c Mon Mar 29 22:47:57 2004
@@ -97,11 +97,6 @@
static int ds1621_id = 0;
-static u16 swap_bytes(u16 val)
-{
- return (val >> 8) | (val << 8);
-}
-
/* All registers are word-sized, except for the configuration register.
DS1621 uses a high-byte first convention, which is exactly opposite to
the usual practice. */
@@ -110,7 +105,7 @@
if (reg == DS1621_REG_CONF)
return i2c_smbus_read_byte_data(client, reg);
else
- return swap_bytes(i2c_smbus_read_word_data(client, reg));
+ return swab16(i2c_smbus_read_word_data(client, reg));
}
/* All registers are word-sized, except for the configuration register.
@@ -121,8 +116,7 @@
if (reg == DS1621_REG_CONF)
return i2c_smbus_write_byte_data(client, reg, value);
else
- return i2c_smbus_write_word_data(client, reg,
- swap_bytes(value));
+ return i2c_smbus_write_word_data(client, reg, swab16(value));
}
static void ds1621_init_client(struct i2c_client *client)
diff -ruN linux-2.6.5-rc2/drivers/i2c/chips.orig/gl518sm.c linux-2.6.5-rc2/drivers/i2c/chips/gl518sm.c
--- linux-2.6.5-rc2/drivers/i2c/chips.orig/gl518sm.c Mon Mar 29 20:46:02 2004
+++ linux-2.6.5-rc2/drivers/i2c/chips/gl518sm.c Mon Mar 29 22:46:39 2004
@@ -484,18 +484,13 @@
return 0;
}
-static inline u16 swap_bytes(u16 val)
-{
- return (val >> 8) | (val << 8);
-}
-
/* Registers 0x07 to 0x0c are word-sized, others are byte-sized
GL518 uses a high-byte first convention, which is exactly opposite to
the usual practice. */
static int gl518_read_value(struct i2c_client *client, u8 reg)
{
if ((reg >= 0x07) && (reg <= 0x0c))
- return swap_bytes(i2c_smbus_read_word_data(client, reg));
+ return swab16(i2c_smbus_read_word_data(client, reg));
else
return i2c_smbus_read_byte_data(client, reg);
}
@@ -506,8 +501,7 @@
static int gl518_write_value(struct i2c_client *client, u8 reg, u16 value)
{
if ((reg >= 0x07) && (reg <= 0x0c))
- return i2c_smbus_write_word_data(client, reg,
- swap_bytes(value));
+ return i2c_smbus_write_word_data(client, reg, swab16(value));
else
return i2c_smbus_write_byte_data(client, reg, value);
}
diff -ruN linux-2.6.5-rc2/drivers/i2c/chips.orig/lm75.c linux-2.6.5-rc2/drivers/i2c/chips/lm75.c
--- linux-2.6.5-rc2/drivers/i2c/chips.orig/lm75.c Mon Mar 29 20:46:02 2004
+++ linux-2.6.5-rc2/drivers/i2c/chips/lm75.c Mon Mar 29 22:46:14 2004
@@ -206,11 +206,6 @@
return 0;
}
-static u16 swap_bytes(u16 val)
-{
- return (val >> 8) | (val << 8);
-}
-
/* All registers are word-sized, except for the configuration register.
LM75 uses a high-byte first convention, which is exactly opposite to
the usual practice. */
@@ -219,7 +214,7 @@
if (reg == LM75_REG_CONF)
return i2c_smbus_read_byte_data(client, reg);
else
- return swap_bytes(i2c_smbus_read_word_data(client, reg));
+ return swab16(i2c_smbus_read_word_data(client, reg));
}
/* All registers are word-sized, except for the configuration register.
@@ -230,8 +225,7 @@
if (reg == LM75_REG_CONF)
return i2c_smbus_write_byte_data(client, reg, value);
else
- return i2c_smbus_write_word_data(client, reg,
- swap_bytes(value));
+ return i2c_smbus_write_word_data(client, reg, swab16(value));
}
static void lm75_init_client(struct i2c_client *client)
diff -ruN linux-2.6.5-rc2/drivers/i2c/chips.orig/w83781d.c linux-2.6.5-rc2/drivers/i2c/chips/w83781d.c
--- linux-2.6.5-rc2/drivers/i2c/chips.orig/w83781d.c Mon Mar 29 20:50:39 2004
+++ linux-2.6.5-rc2/drivers/i2c/chips/w83781d.c Mon Mar 29 22:45:43 2004
@@ -275,11 +275,6 @@
static struct w83781d_data *w83781d_update_device(struct device *dev);
static void w83781d_init_client(struct i2c_client *client);
-static inline u16 swap_bytes(u16 val)
-{
- return (val >> 8) | (val << 8);
-}
-
static struct i2c_driver w83781d_driver = {
.owner = THIS_MODULE,
.name = "w83781d",
@@ -1407,20 +1402,17 @@
/* convert from ISA to LM75 I2C addresses */
switch (reg & 0xff) {
case 0x50: /* TEMP */
- res =
- swap_bytes(i2c_smbus_read_word_data(cl, 0));
+ res = swab16(i2c_smbus_read_word_data(cl, 0));
break;
case 0x52: /* CONFIG */
res = i2c_smbus_read_byte_data(cl, 1);
break;
case 0x53: /* HYST */
- res =
- swap_bytes(i2c_smbus_read_word_data(cl, 2));
+ res = swab16(i2c_smbus_read_word_data(cl, 2));
break;
case 0x55: /* OVER */
default:
- res =
- swap_bytes(i2c_smbus_read_word_data(cl, 3));
+ res = swab16(i2c_smbus_read_word_data(cl, 3));
break;
}
}
@@ -1481,12 +1473,10 @@
i2c_smbus_write_byte_data(cl, 1, value & 0xff);
break;
case 0x53: /* HYST */
- i2c_smbus_write_word_data(cl, 2,
- swap_bytes(value));
+ i2c_smbus_write_word_data(cl, 2, swab16(value));
break;
case 0x55: /* OVER */
- i2c_smbus_write_word_data(cl, 3,
- swap_bytes(value));
+ i2c_smbus_write_word_data(cl, 3, swab16(value));
break;
}
}
--
Jean Delvare
http://www.ensicaen.ismra.fr/~delvare/
More information about the lm-sensors
mailing list