Re: [PATCH] i2c: boilerplate function for byte swapped smbus_write/read_word_data

2011-10-21 Thread Jonathan Cameron


On 10/11/11 16:21, Jonathan Cameron wrote:
 On 10/11/11 12:49, Jean Delvare wrote:
 On Mon, 10 Oct 2011 13:50:14 +0200, Jean Delvare wrote:
 On Mon, 10 Oct 2011 10:07:43 +0100, Jonathan Cameron wrote:
 Reimplemented at least 17 times discounting error mangling cases
 where it could be used.

 Signed-off-by: Jonathan Cameron 
 jic23-KWPb1pKIrIJaa/9udqf...@public.gmane.org
 ---
  Documentation/i2c/smbus-protocol |8 
  include/linux/i2c.h  |   17 +
  2 files changed, 25 insertions(+), 0 deletions(-)

 Applied, thanks.

 BTW... I have a patch ready converting all concerned hwmon drivers to
 use the new functions. I would appreciate if you could take care of all
 other drivers.

 Thanks,
 Will do. Have IIO patch queued locally.  Will get the others covered shortly.
Jean,

Sorry forgot to cc you on the first few patches I sent out using this.
So for reference (and anyone else who cares).

IIO I'll deal with when it merges (patch has been posted for a couple of weeks).
v4l sent out (5 drivers)
input sent out patch (only one user)
power sent out patch (only one user)

All pretty trivial cases.

Jonathan

--
To unsubscribe from this list: send the line unsubscribe linux-i2c in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [PATCH] i2c: boilerplate function for byte swapped smbus_write/read_word_data

2011-10-11 Thread Jean Delvare
On Mon, 10 Oct 2011 13:50:14 +0200, Jean Delvare wrote:
 On Mon, 10 Oct 2011 10:07:43 +0100, Jonathan Cameron wrote:
  Reimplemented at least 17 times discounting error mangling cases
  where it could be used.
  
  Signed-off-by: Jonathan Cameron ji...@cam.ac.uk
  ---
   Documentation/i2c/smbus-protocol |8 
   include/linux/i2c.h  |   17 +
   2 files changed, 25 insertions(+), 0 deletions(-)
 
 Applied, thanks.

BTW... I have a patch ready converting all concerned hwmon drivers to
use the new functions. I would appreciate if you could take care of all
other drivers.

Thanks,
-- 
Jean Delvare
--
To unsubscribe from this list: send the line unsubscribe linux-i2c in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [PATCH] i2c: boilerplate function for byte swapped smbus_write/read_word_data

2011-10-11 Thread Jonathan Cameron
On 10/11/11 12:49, Jean Delvare wrote:
 On Mon, 10 Oct 2011 13:50:14 +0200, Jean Delvare wrote:
 On Mon, 10 Oct 2011 10:07:43 +0100, Jonathan Cameron wrote:
 Reimplemented at least 17 times discounting error mangling cases
 where it could be used.

 Signed-off-by: Jonathan Cameron ji...@cam.ac.uk
 ---
  Documentation/i2c/smbus-protocol |8 
  include/linux/i2c.h  |   17 +
  2 files changed, 25 insertions(+), 0 deletions(-)

 Applied, thanks.
 
 BTW... I have a patch ready converting all concerned hwmon drivers to
 use the new functions. I would appreciate if you could take care of all
 other drivers.
 
 Thanks,
Will do. Have IIO patch queued locally.  Will get the others covered shortly.
--
To unsubscribe from this list: send the line unsubscribe linux-i2c in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [PATCH] i2c: boilerplate function for byte swapped smbus_write/read_word_data

2011-10-10 Thread Jean Delvare
On Mon, 10 Oct 2011 10:07:43 +0100, Jonathan Cameron wrote:
 Reimplemented at least 17 times discounting error mangling cases
 where it could be used.
 
 Signed-off-by: Jonathan Cameron ji...@cam.ac.uk
 ---
  Documentation/i2c/smbus-protocol |8 
  include/linux/i2c.h  |   17 +
  2 files changed, 25 insertions(+), 0 deletions(-)

Applied, thanks.

-- 
Jean Delvare
--
To unsubscribe from this list: send the line unsubscribe linux-i2c in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [PATCH] i2c: boilerplate function for byte swapped smbus_write/read_word_data

2011-10-09 Thread Jean Delvare
On Sat, 8 Oct 2011 23:10:05 +0200, Jean Delvare wrote:
 On Thu, 22 Sep 2011 14:48:14 +0100, Jonathan Cameron wrote:
  @@ -88,6 +89,23 @@ extern s32 i2c_smbus_read_word_data(const struct 
  i2c_client *client,
  u8 command);
   extern s32 i2c_smbus_write_word_data(const struct i2c_client *client,
   u8 command, u16 value);
  +
  +static inline s32
  +i2c_smbus_read_word_data_swapped(const struct i2c_client *client,
  +u8 command)
  +{
  +   s32 value = i2c_smbus_read_word_data(client, command);
  +
  +   return (value  0) ? value : swab16(value);
  +}
  +
  +static inline s32
  +i2c_smbus_write_word_data_swapped(const struct i2c_client *client,
  + u8 command, u16 value)
  +{
  +   return i2c_smbus_write_word_data(client, command, swab16(value));
  +}
  +
   /* Returns the number of read bytes */
   extern s32 i2c_smbus_read_block_data(const struct i2c_client *client,
   u8 command, u8 *values);
 
 It might make sense to change the _data_swapped suffix to just
 _swapped, for the sake of avoiding overly long function names (_data
 was never meaningful for the original functions anyway as there is no
 ambiguity.)
 
 Other than these minor details, I like the patch very much, I tested if
 with 9 hwmon drivers and it indeed makes the drivers cleaner/smaller.
 I'll be happy to commit it when I am able to do this again.

Oh, and I think the new functions should be listed in
Documentation/i2c/smbus-protocol. Maybe not as separate entries, as
they are not new fundamental types, nor part of the SMBus protocol, but
at least as as notes in the SMBus Read Word and SMBus Write Word
sections.

-- 
Jean Delvare
--
To unsubscribe from this list: send the line unsubscribe linux-i2c in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [PATCH] i2c: boilerplate function for byte swapped smbus_write/read_word_data

2011-10-08 Thread Jean Delvare
Hi Jonathan,

On Thu, 22 Sep 2011 14:48:14 +0100, Jonathan Cameron wrote:
 Reimplemented at least 17 times discounting error mangling cases
 where it could be used.
 
 Signed-off-by: Jonathan Cameron ji...@cam.ac.uk
 ---
 
 Hi All,
 
 Quite a number of devices rather unhelpfully handle smbus read/write word
 commands but return the result byte swapped.  Hence drivers swap it back
 again.
 
 Examples based on quick grep or read users that byte swap(write is completely 
 trivial)
 
 drivers/hwmon/ad7418.c - no error handling so trivial
 drivers/hwmon/ads1015.c - correct
 drivers/hwmon/asb100.c - no error handling so trivial
 drivers/hwmon/ds1621.c - correct
 drivers/hwmon/ds620.c - no error handling so trivial
 drivers/hwmon/gl518sm.c - no error handling so trivial
 drivers/hwmon/gl520sm.c - no error handling so trivial
 drivers/hwmon/jc42.c - correct
 drivers/hwmon/lm73.c - no error handling
 drivers/hwmon/lm75.c - correct
 drivers/hwmon/lm92.c - some are byte swapped. Implementation doesn't handle 
 errors
 drivers/hwmon/tmp102.c - correct
 drivers/hwmon/w83781.c - no error handling.
 drivers/input/touchscreen/ad7879-i2c.c - no error handling
 drivers/media/video/mt9m001.c - correct
 drivers/media/video/mt9m111.c - no error handling
 drivers/media/video/mt9t031.c - correct
 drivers/media/video/mt9v022.c - correct
 drivers/media/video/mt9v032.c - correct
 drivers/media/video/vpx3220.c - correct
 drivers/staging/iio/adc/ad7150.c - correct
 drivers/staging/iio/adc/ad7152.c - correct
 drivers/staging/iio/adc/ad7291.c - correct
 drivers/staging/iio/adc/ad7746.c - correct
 drivers/staging/iio/adc/ad799x_core.c - correct
 drivers/staging/iio/adc/adt7410.c - correct
 drivers/staging/iio/adc/adt75.c - correct
 
 'correct' are those that need handle or at least pass on the error code 
 without
 mangling it.  The others typically just shove an error into some local
 cache without taking any notice.
 
 Just for the curious this is based on greping for i2c_smbus_write_word_data 
 and
 looking to see if the read does the swab16 as well.
 
 Anyhow, so to the proposal.  Introduce a couple of inline static functions 
 into
 i2c.h.
 
 My only use examples done so far are on top of unpublished iio
 changes, so I'll leave the reader to take a look and decided
 whether or not this is interesting enough to do.
 
 Even if the driver uses equivalent functions we are saving about
 6 lines per user.  I'm happy to do a series converting the easy
 ones from the above if people don't mind the patch.
 
  include/linux/i2c.h |   18 ++
  1 files changed, 18 insertions(+), 0 deletions(-)
 
 diff --git a/include/linux/i2c.h b/include/linux/i2c.h
 index a6c652e..59ae02b 100644
 --- a/include/linux/i2c.h
 +++ b/include/linux/i2c.h
 @@ -34,6 +34,7 @@
  #include linux/sched.h /* for completion */
  #include linux/mutex.h
  #include linux/of.h/* for struct device_node */
 +#include linux/swab.h

Maybe add /* for swab16 */ for consistency with other comments above.

  
  extern struct bus_type i2c_bus_type;
  extern struct device_type i2c_adapter_type;
 @@ -88,6 +89,23 @@ extern s32 i2c_smbus_read_word_data(const struct 
 i2c_client *client,
   u8 command);
  extern s32 i2c_smbus_write_word_data(const struct i2c_client *client,
u8 command, u16 value);
 +
 +static inline s32
 +i2c_smbus_read_word_data_swapped(const struct i2c_client *client,
 +  u8 command)
 +{
 + s32 value = i2c_smbus_read_word_data(client, command);
 +
 + return (value  0) ? value : swab16(value);
 +}
 +
 +static inline s32
 +i2c_smbus_write_word_data_swapped(const struct i2c_client *client,
 +   u8 command, u16 value)
 +{
 + return i2c_smbus_write_word_data(client, command, swab16(value));
 +}
 +
  /* Returns the number of read bytes */
  extern s32 i2c_smbus_read_block_data(const struct i2c_client *client,
u8 command, u8 *values);

It might make sense to change the _data_swapped suffix to just
_swapped, for the sake of avoiding overly long function names (_data
was never meaningful for the original functions anyway as there is no
ambiguity.)

Other than these minor details, I like the patch very much, I tested if
with 9 hwmon drivers and it indeed makes the drivers cleaner/smaller.
I'll be happy to commit it when I am able to do this again.

-- 
Jean Delvare
--
To unsubscribe from this list: send the line unsubscribe linux-i2c in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [PATCH] i2c: boilerplate function for byte swapped smbus_write/read_word_data

2011-10-04 Thread Jonathan Cameron
On 09/22/11 14:48, Jonathan Cameron wrote:
 Reimplemented at least 17 times discounting error mangling cases
 where it could be used.
 
Anyone care to comment?
 Signed-off-by: Jonathan Cameron ji...@cam.ac.uk
 ---
 
 Hi All,
 
 Quite a number of devices rather unhelpfully handle smbus read/write word
 commands but return the result byte swapped.  Hence drivers swap it back
 again.
 
 Examples based on quick grep or read users that byte swap(write is completely 
 trivial)
 
 drivers/hwmon/ad7418.c - no error handling so trivial
 drivers/hwmon/ads1015.c - correct
 drivers/hwmon/asb100.c - no error handling so trivial
 drivers/hwmon/ds1621.c - correct
 drivers/hwmon/ds620.c - no error handling so trivial
 drivers/hwmon/gl518sm.c - no error handling so trivial
 drivers/hwmon/gl520sm.c - no error handling so trivial
 drivers/hwmon/jc42.c - correct
 drivers/hwmon/lm73.c - no error handling
 drivers/hwmon/lm75.c - correct
 drivers/hwmon/lm92.c - some are byte swapped. Implementation doesn't handle 
 errors
 drivers/hwmon/tmp102.c - correct
 drivers/hwmon/w83781.c - no error handling.
 drivers/input/touchscreen/ad7879-i2c.c - no error handling
 drivers/media/video/mt9m001.c - correct
 drivers/media/video/mt9m111.c - no error handling
 drivers/media/video/mt9t031.c - correct
 drivers/media/video/mt9v022.c - correct
 drivers/media/video/mt9v032.c - correct
 drivers/media/video/vpx3220.c - correct
 drivers/staging/iio/adc/ad7150.c - correct
 drivers/staging/iio/adc/ad7152.c - correct
 drivers/staging/iio/adc/ad7291.c - correct
 drivers/staging/iio/adc/ad7746.c - correct
 drivers/staging/iio/adc/ad799x_core.c - correct
 drivers/staging/iio/adc/adt7410.c - correct
 drivers/staging/iio/adc/adt75.c - correct
 
 'correct' are those that need handle or at least pass on the error code 
 without
 mangling it.  The others typically just shove an error into some local
 cache without taking any notice.
 
 Just for the curious this is based on greping for i2c_smbus_write_word_data 
 and
 looking to see if the read does the swab16 as well.
 
 Anyhow, so to the proposal.  Introduce a couple of inline static functions 
 into
 i2c.h.
 
 My only use examples done so far are on top of unpublished iio
 changes, so I'll leave the reader to take a look and decided
 whether or not this is interesting enough to do.
 
 Even if the driver uses equivalent functions we are saving about
 6 lines per user.  I'm happy to do a series converting the easy
 ones from the above if people don't mind the patch.
 
  include/linux/i2c.h |   18 ++
  1 files changed, 18 insertions(+), 0 deletions(-)
 
 diff --git a/include/linux/i2c.h b/include/linux/i2c.h
 index a6c652e..59ae02b 100644
 --- a/include/linux/i2c.h
 +++ b/include/linux/i2c.h
 @@ -34,6 +34,7 @@
  #include linux/sched.h /* for completion */
  #include linux/mutex.h
  #include linux/of.h/* for struct device_node */
 +#include linux/swab.h
  
  extern struct bus_type i2c_bus_type;
  extern struct device_type i2c_adapter_type;
 @@ -88,6 +89,23 @@ extern s32 i2c_smbus_read_word_data(const struct 
 i2c_client *client,
   u8 command);
  extern s32 i2c_smbus_write_word_data(const struct i2c_client *client,
u8 command, u16 value);
 +
 +static inline s32
 +i2c_smbus_read_word_data_swapped(const struct i2c_client *client,
 +  u8 command)
 +{
 + s32 value = i2c_smbus_read_word_data(client, command);
 +
 + return (value  0) ? value : swab16(value);
 +}
 +
 +static inline s32
 +i2c_smbus_write_word_data_swapped(const struct i2c_client *client,
 +   u8 command, u16 value)
 +{
 + return i2c_smbus_write_word_data(client, command, swab16(value));
 +}
 +
  /* Returns the number of read bytes */
  extern s32 i2c_smbus_read_block_data(const struct i2c_client *client,
u8 command, u8 *values);

--
To unsubscribe from this list: send the line unsubscribe linux-i2c in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [PATCH] i2c: boilerplate function for byte swapped smbus_write/read_word_data

2011-10-04 Thread Jean Delvare
Hi Jonathan,

On Tue, 04 Oct 2011 17:37:11 +0100, Jonathan Cameron wrote:
 On 09/22/11 14:48, Jonathan Cameron wrote:
  Reimplemented at least 17 times discounting error mangling cases
  where it could be used.

 Anyone care to comment?

I will. I started reviewing your patch and pondering its inclusion, but
got sidetracked by more important issues. I will return to this
whenever I can.

-- 
Jean Delvare
--
To unsubscribe from this list: send the line unsubscribe linux-i2c in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html