Message ID | alpine.DEB.2.20.1707041104390.3346@hadrien (mailing list archive) |
---|---|
State | Not Applicable, archived |
Headers | show |
On Tue, Jul 4, 2017 at 12:11 PM, Julia Lawall <julia.lawall@lip6.fr> wrote: > Here is a revised version (not a patch because it doesn't support all of > the various modes) and the results. It doesn't return anything beyond > what was mentioned in previous mails. > > For the following code: > > ret = i2c_smbus_read_word_data(chip->client, reg << 1); > val[0] = (u16)ret & 0xFF; > val[1] = (u16)ret >> 8; > > do we want to see: > > put_unaligned(val,i2c_smbus_read_word_data(chip->client, reg << 1)); If and only if the type of the pointer is a byte type (u8 *, char *, or alike) _and_ we try to use it as a provider for 16-bit value (2 bytes).
On Tue, 4 Jul 2017, Andy Shevchenko wrote: > On Tue, Jul 4, 2017 at 12:11 PM, Julia Lawall <julia.lawall@lip6.fr> wrote: > > Here is a revised version (not a patch because it doesn't support all of > > the various modes) and the results. It doesn't return anything beyond > > what was mentioned in previous mails. > > > > For the following code: > > > > ret = i2c_smbus_read_word_data(chip->client, reg << 1); > > val[0] = (u16)ret & 0xFF; > > val[1] = (u16)ret >> 8; > > > > do we want to see: > > > > put_unaligned(val,i2c_smbus_read_word_data(chip->client, reg << 1)); > > If and only if the type of the pointer is a byte type (u8 *, char *, > or alike) _and_ we try to use it as a provider for 16-bit value (2 > bytes). OK, the provider part seems to add more complexity than is worth putting in the rule, so I will let the developer figure out what should be done. thanks, julia
diff -u -p a/drivers/gpio/gpio-pca953x.c b/drivers/gpio/gpio-pca953x.c --- a/drivers/gpio/gpio-pca953x.c +++ b/drivers/gpio/gpio-pca953x.c @@ -187,10 +187,7 @@ static int pca953x_write_regs_8(struct p static int pca953x_write_regs_16(struct pca953x_chip *chip, int reg, u8 *val) { - __le16 word = cpu_to_le16(get_unaligned((u16 *)val)); - return i2c_smbus_write_word_data(chip->client, - reg << 1, (__force u16)word); } static int pca957x_write_regs_16(struct pca953x_chip *chip, int reg, u8 *val) @@ -241,7 +238,6 @@ static int pca953x_read_regs_16(struct p int ret; ret = i2c_smbus_read_word_data(chip->client, reg << 1); - val[0] = (u16)ret & 0xFF; val[1] = (u16)ret >> 8; return ret; diff -u -p a/drivers/macintosh/windfarm_smu_sat.c b/drivers/macintosh/windfarm_smu_sat.c --- a/drivers/macintosh/windfarm_smu_sat.c +++ b/drivers/macintosh/windfarm_smu_sat.c @@ -77,18 +77,15 @@ struct smu_sdbp_header *smu_sat_get_sdb_ return NULL; } - err = i2c_smbus_read_word_data(sat->i2c, 9); if (err < 0) { printk(KERN_ERR "smu_sat_get_sdb_part rd len error\n"); return NULL; } - len = err; if (len == 0) { printk(KERN_ERR "smu_sat_get_sdb_part no partition %x\n", id); return NULL; } - len = le16_to_cpu(len); len = (len + 3) & ~3; buf = kmalloc(len, GFP_KERNEL); if (buf == NULL) diff -u -p a/drivers/macintosh/windfarm_lm75_sensor.c b/drivers/macintosh/windfarm_lm75_sensor.c --- a/drivers/macintosh/windfarm_lm75_sensor.c +++ b/drivers/macintosh/windfarm_lm75_sensor.c @@ -68,7 +68,6 @@ static int wf_lm75_get(struct wf_sensor } /* Read temperature register */ - data = (s32)le16_to_cpu(i2c_smbus_read_word_data(lm->i2c, 0)); data <<= 8; *value = data;