public inbox for linux-media@vger.kernel.org
 help / color / mirror / Atom feed
* Re: [PATCH V2] v4l: use i2c_smbus_read_word_swapped
       [not found] ` <1319203825-23247-1-git-send-email-jic23@cam.ac.uk>
@ 2011-10-22  8:57   ` Laurent Pinchart
  2011-10-22  8:57   ` [PATCH] v4l: mt9p031/mt9t001: Use i2c_smbus_{read|write}_word_swapped() Laurent Pinchart
  1 sibling, 0 replies; 4+ messages in thread
From: Laurent Pinchart @ 2011-10-22  8:57 UTC (permalink / raw)
  To: Jonathan Cameron; +Cc: linux-media, khali, kernel, robert.jarzmik

Hi Jonathan,

Thanks for the patch.

On Friday 21 October 2011 15:30:25 Jonathan Cameron wrote:
> Function ensures that error codes don't get mangled.
> Dependant on:
> i2c: boilerplate function for byte swapped  smbus_write/read_word_data
> which is working it's way through the i2c tree.
> 
> Signed-off-by: Jonathan Cameron <jic23@cam.ac.uk>
> Acked-by: Jean Delvare <khali@linux-fr.org>

For the mt9v032 driver,

Acked-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>

The mt9t001 and mt9p031 drivers should be fixed similarly. I'll send a patch.

> ---
> 
> V2: Stray line removed as per Jean's comment.  Thanks Jean.
> 
> Dependency due to go upstream during next merge window.
> 
>  drivers/media/video/mt9m001.c |    5 ++---
>  drivers/media/video/mt9m111.c |    7 +++----
>  drivers/media/video/mt9t031.c |    5 ++---
>  drivers/media/video/mt9v022.c |    5 ++---
>  drivers/media/video/mt9v032.c |    8 ++++----
>  5 files changed, 13 insertions(+), 17 deletions(-)
> 
> diff --git a/drivers/media/video/mt9m001.c b/drivers/media/video/mt9m001.c
> index 4da9cca..862a300 100644
> --- a/drivers/media/video/mt9m001.c
> +++ b/drivers/media/video/mt9m001.c
> @@ -102,14 +102,13 @@ static struct mt9m001 *to_mt9m001(const struct
> i2c_client *client)
> 
>  static int reg_read(struct i2c_client *client, const u8 reg)
>  {
> -	s32 data = i2c_smbus_read_word_data(client, reg);
> -	return data < 0 ? data : swab16(data);
> +	return i2c_smbus_read_word_swapped(client, reg);
>  }
> 
>  static int reg_write(struct i2c_client *client, const u8 reg,
>  		     const u16 data)
>  {
> -	return i2c_smbus_write_word_data(client, reg, swab16(data));
> +	return i2c_smbus_write_word_swapped(client, reg, data);
>  }
> 
>  static int reg_set(struct i2c_client *client, const u8 reg,
> diff --git a/drivers/media/video/mt9m111.c b/drivers/media/video/mt9m111.c
> index a357aa8..41b3029 100644
> --- a/drivers/media/video/mt9m111.c
> +++ b/drivers/media/video/mt9m111.c
> @@ -210,7 +210,7 @@ static int reg_page_map_set(struct i2c_client *client,
> const u16 reg) if (page > 2)
>  		return -EINVAL;
> 
> -	ret = i2c_smbus_write_word_data(client, MT9M111_PAGE_MAP, swab16(page));
> +	ret = i2c_smbus_write_word_swapped(client, MT9M111_PAGE_MAP, page);
>  	if (!ret)
>  		lastpage = page;
>  	return ret;
> @@ -222,7 +222,7 @@ static int mt9m111_reg_read(struct i2c_client *client,
> const u16 reg)
> 
>  	ret = reg_page_map_set(client, reg);
>  	if (!ret)
> -		ret = swab16(i2c_smbus_read_word_data(client, reg & 0xff));
> +		ret = i2c_smbus_read_word_swapped(client, reg & 0xff);
> 
>  	dev_dbg(&client->dev, "read  reg.%03x -> %04x\n", reg, ret);
>  	return ret;
> @@ -235,8 +235,7 @@ static int mt9m111_reg_write(struct i2c_client *client,
> const u16 reg,
> 
>  	ret = reg_page_map_set(client, reg);
>  	if (!ret)
> -		ret = i2c_smbus_write_word_data(client, reg & 0xff,
> -						swab16(data));
> +		ret = i2c_smbus_write_word_swapped(client, reg & 0xff, data);
>  	dev_dbg(&client->dev, "write reg.%03x = %04x -> %d\n", reg, data, ret);
>  	return ret;
>  }
> diff --git a/drivers/media/video/mt9t031.c b/drivers/media/video/mt9t031.c
> index 30547cc..e4ac238 100644
> --- a/drivers/media/video/mt9t031.c
> +++ b/drivers/media/video/mt9t031.c
> @@ -81,14 +81,13 @@ static struct mt9t031 *to_mt9t031(const struct
> i2c_client *client)
> 
>  static int reg_read(struct i2c_client *client, const u8 reg)
>  {
> -	s32 data = i2c_smbus_read_word_data(client, reg);
> -	return data < 0 ? data : swab16(data);
> +	return i2c_smbus_read_word_swapped(client, reg);
>  }
> 
>  static int reg_write(struct i2c_client *client, const u8 reg,
>  		     const u16 data)
>  {
> -	return i2c_smbus_write_word_data(client, reg, swab16(data));
> +	return i2c_smbus_write_word_swapped(client, reg, data);
>  }
> 
>  static int reg_set(struct i2c_client *client, const u8 reg,
> diff --git a/drivers/media/video/mt9v022.c b/drivers/media/video/mt9v022.c
> index 51b0fcc..d5272d9 100644
> --- a/drivers/media/video/mt9v022.c
> +++ b/drivers/media/video/mt9v022.c
> @@ -116,14 +116,13 @@ static struct mt9v022 *to_mt9v022(const struct
> i2c_client *client)
> 
>  static int reg_read(struct i2c_client *client, const u8 reg)
>  {
> -	s32 data = i2c_smbus_read_word_data(client, reg);
> -	return data < 0 ? data : swab16(data);
> +	return i2c_smbus_read_word_swapped(client, reg);
>  }
> 
>  static int reg_write(struct i2c_client *client, const u8 reg,
>  		     const u16 data)
>  {
> -	return i2c_smbus_write_word_data(client, reg, swab16(data));
> +	return i2c_smbus_write_word_swapped(client, reg, data);
>  }
> 
>  static int reg_set(struct i2c_client *client, const u8 reg,
> diff --git a/drivers/media/video/mt9v032.c b/drivers/media/video/mt9v032.c
> index c64e1dc..7906929 100644
> --- a/drivers/media/video/mt9v032.c
> +++ b/drivers/media/video/mt9v032.c
> @@ -138,10 +138,10 @@ static struct mt9v032 *to_mt9v032(struct v4l2_subdev
> *sd)
> 
>  static int mt9v032_read(struct i2c_client *client, const u8 reg)
>  {
> -	s32 data = i2c_smbus_read_word_data(client, reg);
> +	s32 data = i2c_smbus_read_word_swapped(client, reg);
>  	dev_dbg(&client->dev, "%s: read 0x%04x from 0x%02x\n", __func__,
> -		swab16(data), reg);
> -	return data < 0 ? data : swab16(data);
> +		data, reg);
> +	return data;
>  }
> 
>  static int mt9v032_write(struct i2c_client *client, const u8 reg,
> @@ -149,7 +149,7 @@ static int mt9v032_write(struct i2c_client *client,
> const u8 reg, {
>  	dev_dbg(&client->dev, "%s: writing 0x%04x to 0x%02x\n", __func__,
>  		data, reg);
> -	return i2c_smbus_write_word_data(client, reg, swab16(data));
> +	return i2c_smbus_write_word_swapped(client, reg, data);
>  }
> 
>  static int mt9v032_set_chip_control(struct mt9v032 *mt9v032, u16 clear,
> u16 set)

-- 
Regards,

Laurent Pinchart

^ permalink raw reply	[flat|nested] 4+ messages in thread

* [PATCH] v4l: mt9p031/mt9t001: Use i2c_smbus_{read|write}_word_swapped()
       [not found] ` <1319203825-23247-1-git-send-email-jic23@cam.ac.uk>
  2011-10-22  8:57   ` [PATCH V2] v4l: use i2c_smbus_read_word_swapped Laurent Pinchart
@ 2011-10-22  8:57   ` Laurent Pinchart
  2011-10-24  8:26     ` Jonathan Cameron
  2011-10-27 14:56     ` Jean Delvare
  1 sibling, 2 replies; 4+ messages in thread
From: Laurent Pinchart @ 2011-10-22  8:57 UTC (permalink / raw)
  To: Jonathan Cameron; +Cc: linux-media, khali, kernel

The MT9P031 and MT9T001 sensors transfer 16-bit data on the I2C bus in
swapped order. Let the I2C core handle byte order by using the
i2c_smbus_{read|write}_word_swapped() functions.

Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
---
 drivers/media/video/mt9p031.c |    5 ++---
 drivers/media/video/mt9t001.c |    5 ++---
 2 files changed, 4 insertions(+), 6 deletions(-)

diff --git a/drivers/media/video/mt9p031.c b/drivers/media/video/mt9p031.c
index 5cfa39f..aa01c4b 100644
--- a/drivers/media/video/mt9p031.c
+++ b/drivers/media/video/mt9p031.c
@@ -131,13 +131,12 @@ static struct mt9p031 *to_mt9p031(struct v4l2_subdev *sd)
 
 static int mt9p031_read(struct i2c_client *client, u8 reg)
 {
-	s32 data = i2c_smbus_read_word_data(client, reg);
-	return data < 0 ? data : be16_to_cpu(data);
+	return i2c_smbus_read_word_swapped(client, reg);
 }
 
 static int mt9p031_write(struct i2c_client *client, u8 reg, u16 data)
 {
-	return i2c_smbus_write_word_data(client, reg, cpu_to_be16(data));
+	return i2c_smbus_write_word_swapped(client, reg, data);
 }
 
 static int mt9p031_set_output_control(struct mt9p031 *mt9p031, u16 clear,
diff --git a/drivers/media/video/mt9t001.c b/drivers/media/video/mt9t001.c
index cac1416..2ea6a08 100644
--- a/drivers/media/video/mt9t001.c
+++ b/drivers/media/video/mt9t001.c
@@ -132,13 +132,12 @@ static inline struct mt9t001 *to_mt9t001(struct v4l2_subdev *sd)
 
 static int mt9t001_read(struct i2c_client *client, u8 reg)
 {
-	s32 data = i2c_smbus_read_word_data(client, reg);
-	return data < 0 ? data : be16_to_cpu(data);
+	return i2c_smbus_read_word_swapped(client, reg);
 }
 
 static int mt9t001_write(struct i2c_client *client, u8 reg, u16 data)
 {
-	return i2c_smbus_write_word_data(client, reg, cpu_to_be16(data));
+	return i2c_smbus_write_word_swapped(client, reg, data);
 }
 
 static int mt9t001_set_output_control(struct mt9t001 *mt9t001, u16 clear,
-- 
Regards,

Laurent Pinchart

^ permalink raw reply related	[flat|nested] 4+ messages in thread

* Re: [PATCH] v4l: mt9p031/mt9t001: Use i2c_smbus_{read|write}_word_swapped()
  2011-10-22  8:57   ` [PATCH] v4l: mt9p031/mt9t001: Use i2c_smbus_{read|write}_word_swapped() Laurent Pinchart
@ 2011-10-24  8:26     ` Jonathan Cameron
  2011-10-27 14:56     ` Jean Delvare
  1 sibling, 0 replies; 4+ messages in thread
From: Jonathan Cameron @ 2011-10-24  8:26 UTC (permalink / raw)
  To: Laurent Pinchart; +Cc: linux-media, khali, kernel

On 10/22/11 09:57, Laurent Pinchart wrote:
> The MT9P031 and MT9T001 sensors transfer 16-bit data on the I2C bus in
> swapped order. Let the I2C core handle byte order by using the
> i2c_smbus_{read|write}_word_swapped() functions.
> 
> Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Acked-by: Jonathan Cameron <jic23@cam.ac.uk>
> ---
>  drivers/media/video/mt9p031.c |    5 ++---
>  drivers/media/video/mt9t001.c |    5 ++---
>  2 files changed, 4 insertions(+), 6 deletions(-)
> 
> diff --git a/drivers/media/video/mt9p031.c b/drivers/media/video/mt9p031.c
> index 5cfa39f..aa01c4b 100644
> --- a/drivers/media/video/mt9p031.c
> +++ b/drivers/media/video/mt9p031.c
> @@ -131,13 +131,12 @@ static struct mt9p031 *to_mt9p031(struct v4l2_subdev *sd)
>  
>  static int mt9p031_read(struct i2c_client *client, u8 reg)
>  {
> -	s32 data = i2c_smbus_read_word_data(client, reg);
> -	return data < 0 ? data : be16_to_cpu(data);
> +	return i2c_smbus_read_word_swapped(client, reg);
>  }
>  
>  static int mt9p031_write(struct i2c_client *client, u8 reg, u16 data)
>  {
> -	return i2c_smbus_write_word_data(client, reg, cpu_to_be16(data));
> +	return i2c_smbus_write_word_swapped(client, reg, data);
>  }
>  
>  static int mt9p031_set_output_control(struct mt9p031 *mt9p031, u16 clear,
> diff --git a/drivers/media/video/mt9t001.c b/drivers/media/video/mt9t001.c
> index cac1416..2ea6a08 100644
> --- a/drivers/media/video/mt9t001.c
> +++ b/drivers/media/video/mt9t001.c
> @@ -132,13 +132,12 @@ static inline struct mt9t001 *to_mt9t001(struct v4l2_subdev *sd)
>  
>  static int mt9t001_read(struct i2c_client *client, u8 reg)
>  {
> -	s32 data = i2c_smbus_read_word_data(client, reg);
> -	return data < 0 ? data : be16_to_cpu(data);
> +	return i2c_smbus_read_word_swapped(client, reg);
>  }
>  
>  static int mt9t001_write(struct i2c_client *client, u8 reg, u16 data)
>  {
> -	return i2c_smbus_write_word_data(client, reg, cpu_to_be16(data));
> +	return i2c_smbus_write_word_swapped(client, reg, data);
>  }
>  
>  static int mt9t001_set_output_control(struct mt9t001 *mt9t001, u16 clear,


^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: [PATCH] v4l: mt9p031/mt9t001: Use i2c_smbus_{read|write}_word_swapped()
  2011-10-22  8:57   ` [PATCH] v4l: mt9p031/mt9t001: Use i2c_smbus_{read|write}_word_swapped() Laurent Pinchart
  2011-10-24  8:26     ` Jonathan Cameron
@ 2011-10-27 14:56     ` Jean Delvare
  1 sibling, 0 replies; 4+ messages in thread
From: Jean Delvare @ 2011-10-27 14:56 UTC (permalink / raw)
  To: Laurent Pinchart; +Cc: Jonathan Cameron, linux-media, kernel

On Sat, 22 Oct 2011 10:57:54 +0200, Laurent Pinchart wrote:
> The MT9P031 and MT9T001 sensors transfer 16-bit data on the I2C bus in
> swapped order. Let the I2C core handle byte order by using the
> i2c_smbus_{read|write}_word_swapped() functions.
> 
> Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>

As far as I can tell, this fixes a bug too, the original code would not
work on big-endian machines.

Acked-by: Jean Delvare <khali@linux-fr.org>

> ---
>  drivers/media/video/mt9p031.c |    5 ++---
>  drivers/media/video/mt9t001.c |    5 ++---
>  2 files changed, 4 insertions(+), 6 deletions(-)
> 
> diff --git a/drivers/media/video/mt9p031.c b/drivers/media/video/mt9p031.c
> index 5cfa39f..aa01c4b 100644
> --- a/drivers/media/video/mt9p031.c
> +++ b/drivers/media/video/mt9p031.c
> @@ -131,13 +131,12 @@ static struct mt9p031 *to_mt9p031(struct v4l2_subdev *sd)
>  
>  static int mt9p031_read(struct i2c_client *client, u8 reg)
>  {
> -	s32 data = i2c_smbus_read_word_data(client, reg);
> -	return data < 0 ? data : be16_to_cpu(data);
> +	return i2c_smbus_read_word_swapped(client, reg);
>  }
>  
>  static int mt9p031_write(struct i2c_client *client, u8 reg, u16 data)
>  {
> -	return i2c_smbus_write_word_data(client, reg, cpu_to_be16(data));
> +	return i2c_smbus_write_word_swapped(client, reg, data);
>  }
>  
>  static int mt9p031_set_output_control(struct mt9p031 *mt9p031, u16 clear,
> diff --git a/drivers/media/video/mt9t001.c b/drivers/media/video/mt9t001.c
> index cac1416..2ea6a08 100644
> --- a/drivers/media/video/mt9t001.c
> +++ b/drivers/media/video/mt9t001.c
> @@ -132,13 +132,12 @@ static inline struct mt9t001 *to_mt9t001(struct v4l2_subdev *sd)
>  
>  static int mt9t001_read(struct i2c_client *client, u8 reg)
>  {
> -	s32 data = i2c_smbus_read_word_data(client, reg);
> -	return data < 0 ? data : be16_to_cpu(data);
> +	return i2c_smbus_read_word_swapped(client, reg);
>  }
>  
>  static int mt9t001_write(struct i2c_client *client, u8 reg, u16 data)
>  {
> -	return i2c_smbus_write_word_data(client, reg, cpu_to_be16(data));
> +	return i2c_smbus_write_word_swapped(client, reg, data);
>  }
>  
>  static int mt9t001_set_output_control(struct mt9t001 *mt9t001, u16 clear,


-- 
Jean Delvare

^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2011-10-27 14:56 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
     [not found] <20111021144652.6aa97c8f@endymion.delvare>
     [not found] ` <1319203825-23247-1-git-send-email-jic23@cam.ac.uk>
2011-10-22  8:57   ` [PATCH V2] v4l: use i2c_smbus_read_word_swapped Laurent Pinchart
2011-10-22  8:57   ` [PATCH] v4l: mt9p031/mt9t001: Use i2c_smbus_{read|write}_word_swapped() Laurent Pinchart
2011-10-24  8:26     ` Jonathan Cameron
2011-10-27 14:56     ` Jean Delvare

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox