linux-sh.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH] i2c: i2c-sh_mobile bus speed platform data
@ 2011-04-21 13:22 Magnus Damm
  2011-04-27 22:14 ` Simon Horman
                   ` (2 more replies)
  0 siblings, 3 replies; 12+ messages in thread
From: Magnus Damm @ 2011-04-21 13:22 UTC (permalink / raw)
  To: linux-i2c; +Cc: linux-sh, lethal, simon, ben-linux, khali, Magnus Damm

From: Magnus Damm <damm@opensource.se>

Add support to the i2c-sh_mobile driver for setting
the I2C bus speed using platform data.

Signed-off-by: Magnus Damm <damm@opensource.se>
---

 drivers/i2c/busses/i2c-sh_mobile.c |   13 +++++++++++--
 include/linux/i2c-sh_mobile.h      |   10 ++++++++++
 2 files changed, 21 insertions(+), 2 deletions(-)

--- 0013/drivers/i2c/busses/i2c-sh_mobile.c
+++ work/drivers/i2c/busses/i2c-sh_mobile.c	2011-04-21 20:20:23.000000000 +0900
@@ -32,6 +32,7 @@
 #include <linux/clk.h>
 #include <linux/io.h>
 #include <linux/slab.h>
+#include <linux/i2c-sh_mobile.h>
 
 /* Transmit operation:                                                      */
 /*                                                                          */
@@ -117,7 +118,7 @@ struct sh_mobile_i2c_data {
 	struct device *dev;
 	void __iomem *reg;
 	struct i2c_adapter adap;
-
+	unsigned long bus_speed;
 	struct clk *clk;
 	u_int8_t icic;
 	u_int8_t iccl;
@@ -205,7 +206,7 @@ static void activate_ch(struct sh_mobile
 	 * We also round off the result.
 	 */
 	num = i2c_clk * 5;
-	denom = NORMAL_SPEED * 9;
+	denom = pd->bus_speed * 9;
 	tmp = num * 10 / denom;
 	if (tmp % 10 >= 5)
 		pd->iccl = (u_int8_t)((num/denom) + 1);
@@ -574,6 +575,7 @@ static int sh_mobile_i2c_hook_irqs(struc
 
 static int sh_mobile_i2c_probe(struct platform_device *dev)
 {
+	struct i2c_sh_mobile_platform_data *pdata = dev->dev.platform_data;
 	struct sh_mobile_i2c_data *pd;
 	struct i2c_adapter *adap;
 	struct resource *res;
@@ -618,6 +620,11 @@ static int sh_mobile_i2c_probe(struct pl
 		goto err_irq;
 	}
 
+	/* Use platformd data bus speed or NORMAL_SPEED */
+	pd->bus_speed = NORMAL_SPEED;
+	if (pdata && pdata->bus_speed)
+		pd->bus_speed = pdata->bus_speed;
+
 	/* The IIC blocks on SH-Mobile ARM processors
 	 * come with two new bits in ICIC.
 	 */
@@ -658,6 +665,8 @@ static int sh_mobile_i2c_probe(struct pl
 		goto err_all;
 	}
 
+	dev_info(&dev->dev, "I2C adapter %d with bus speed %lu Hz\n",
+		 adap->nr, pd->bus_speed);
 	return 0;
 
  err_all:
--- /dev/null
+++ work/include/linux/i2c-sh_mobile.h	2011-04-21 20:06:59.000000000 +0900
@@ -0,0 +1,10 @@
+#ifndef __I2C_SH_MOBILE_H__
+#define __I2C_SH_MOBILE_H__
+
+#include <linux/platform_device.h>
+
+struct i2c_sh_mobile_platform_data {
+	unsigned long bus_speed;
+};
+
+#endif /* __I2C_SH_MOBILE_H__ */

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

* Re: [PATCH] i2c: i2c-sh_mobile bus speed platform data
  2011-04-21 13:22 [PATCH] i2c: i2c-sh_mobile bus speed platform data Magnus Damm
@ 2011-04-27 22:14 ` Simon Horman
  2011-04-28  1:06   ` Magnus Damm
  2011-04-28  4:25 ` [PATCH] i2c: i2c-sh_mobile bus speed platform data V2 Magnus Damm
  2011-05-04  0:59 ` [PATCH] i2c: i2c-sh_mobile bus speed platform data dong chen
  2 siblings, 1 reply; 12+ messages in thread
From: Simon Horman @ 2011-04-27 22:14 UTC (permalink / raw)
  To: Magnus Damm; +Cc: linux-i2c, linux-sh, lethal, ben-linux, khali

Hi Magnus,

On Thu, Apr 21, 2011 at 10:22:54PM +0900, Magnus Damm wrote:
> From: Magnus Damm <damm@opensource.se>
> 
> Add support to the i2c-sh_mobile driver for setting
> the I2C bus speed using platform data.
> 
> Signed-off-by: Magnus Damm <damm@opensource.se>
> ---
> 
>  drivers/i2c/busses/i2c-sh_mobile.c |   13 +++++++++++--
>  include/linux/i2c-sh_mobile.h      |   10 ++++++++++
>  2 files changed, 21 insertions(+), 2 deletions(-)
> 
> --- 0013/drivers/i2c/busses/i2c-sh_mobile.c
> +++ work/drivers/i2c/busses/i2c-sh_mobile.c	2011-04-21 20:20:23.000000000 +0900
> @@ -32,6 +32,7 @@
>  #include <linux/clk.h>
>  #include <linux/io.h>
>  #include <linux/slab.h>
> +#include <linux/i2c-sh_mobile.h>
>  
>  /* Transmit operation:                                                      */
>  /*                                                                          */
> @@ -117,7 +118,7 @@ struct sh_mobile_i2c_data {
>  	struct device *dev;
>  	void __iomem *reg;
>  	struct i2c_adapter adap;
> -
> +	unsigned long bus_speed;
>  	struct clk *clk;
>  	u_int8_t icic;
>  	u_int8_t iccl;
> @@ -205,7 +206,7 @@ static void activate_ch(struct sh_mobile
>  	 * We also round off the result.
>  	 */
>  	num = i2c_clk * 5;
> -	denom = NORMAL_SPEED * 9;
> +	denom = pd->bus_speed * 9;

I believe that on the sh73a0 and so far only the sh73a0
denom needs to be doubled.

>  	tmp = num * 10 / denom;
>  	if (tmp % 10 >= 5)
>  		pd->iccl = (u_int8_t)((num/denom) + 1);
> @@ -574,6 +575,7 @@ static int sh_mobile_i2c_hook_irqs(struc
>  
>  static int sh_mobile_i2c_probe(struct platform_device *dev)
>  {
> +	struct i2c_sh_mobile_platform_data *pdata = dev->dev.platform_data;
>  	struct sh_mobile_i2c_data *pd;
>  	struct i2c_adapter *adap;
>  	struct resource *res;
> @@ -618,6 +620,11 @@ static int sh_mobile_i2c_probe(struct pl
>  		goto err_irq;
>  	}
>  
> +	/* Use platformd data bus speed or NORMAL_SPEED */
> +	pd->bus_speed = NORMAL_SPEED;
> +	if (pdata && pdata->bus_speed)
> +		pd->bus_speed = pdata->bus_speed;
> +
>  	/* The IIC blocks on SH-Mobile ARM processors
>  	 * come with two new bits in ICIC.
>  	 */
> @@ -658,6 +665,8 @@ static int sh_mobile_i2c_probe(struct pl
>  		goto err_all;
>  	}
>  
> +	dev_info(&dev->dev, "I2C adapter %d with bus speed %lu Hz\n",
> +		 adap->nr, pd->bus_speed);
>  	return 0;
>  
>   err_all:
> --- /dev/null
> +++ work/include/linux/i2c-sh_mobile.h	2011-04-21 20:06:59.000000000 +0900
> @@ -0,0 +1,10 @@
> +#ifndef __I2C_SH_MOBILE_H__
> +#define __I2C_SH_MOBILE_H__
> +
> +#include <linux/platform_device.h>
> +
> +struct i2c_sh_mobile_platform_data {
> +	unsigned long bus_speed;
> +};
> +
> +#endif /* __I2C_SH_MOBILE_H__ */
> --
> To unsubscribe from this list: send the line "unsubscribe linux-sh" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at  http://vger.kernel.org/majordomo-info.html
> 

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

* Re: [PATCH] i2c: i2c-sh_mobile bus speed platform data
  2011-04-27 22:14 ` Simon Horman
@ 2011-04-28  1:06   ` Magnus Damm
       [not found]     ` <BANLkTi=YbtWYKLdcEkv6TDRfm-BbXGXa4w-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
  0 siblings, 1 reply; 12+ messages in thread
From: Magnus Damm @ 2011-04-28  1:06 UTC (permalink / raw)
  To: Simon Horman; +Cc: linux-i2c, linux-sh, lethal, ben-linux, khali

On Thu, Apr 28, 2011 at 7:14 AM, Simon Horman <horms@verge.net.au> wrote:
> Hi Magnus,
>
> On Thu, Apr 21, 2011 at 10:22:54PM +0900, Magnus Damm wrote:
>> From: Magnus Damm <damm@opensource.se>
>>
>> Add support to the i2c-sh_mobile driver for setting
>> the I2C bus speed using platform data.
>>
>> Signed-off-by: Magnus Damm <damm@opensource.se>
>> ---
>>
>>  drivers/i2c/busses/i2c-sh_mobile.c |   13 +++++++++++--
>>  include/linux/i2c-sh_mobile.h      |   10 ++++++++++
>>  2 files changed, 21 insertions(+), 2 deletions(-)
>>
>> --- 0013/drivers/i2c/busses/i2c-sh_mobile.c
>> +++ work/drivers/i2c/busses/i2c-sh_mobile.c   2011-04-21 20:20:23.000000000 +0900
>> @@ -32,6 +32,7 @@
>>  #include <linux/clk.h>
>>  #include <linux/io.h>
>>  #include <linux/slab.h>
>> +#include <linux/i2c-sh_mobile.h>
>>
>>  /* Transmit operation:                                                      */
>>  /*                                                                          */
>> @@ -117,7 +118,7 @@ struct sh_mobile_i2c_data {
>>       struct device *dev;
>>       void __iomem *reg;
>>       struct i2c_adapter adap;
>> -
>> +     unsigned long bus_speed;
>>       struct clk *clk;
>>       u_int8_t icic;
>>       u_int8_t iccl;
>> @@ -205,7 +206,7 @@ static void activate_ch(struct sh_mobile
>>        * We also round off the result.
>>        */
>>       num = i2c_clk * 5;
>> -     denom = NORMAL_SPEED * 9;
>> +     denom = pd->bus_speed * 9;
>
> I believe that on the sh73a0 and so far only the sh73a0
> denom needs to be doubled.

Uhm, I don't think this patch is specific to any SoC type. It may of
course be used on sh73a0 to adjust the denom value, but setting the
I2C bus speed is something that can be used on any SoC. So I'd say
that this is a fairly generic feature.

Thanks,

/ magnus

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

* Re: [PATCH] i2c: i2c-sh_mobile bus speed platform data
       [not found]     ` <BANLkTi=YbtWYKLdcEkv6TDRfm-BbXGXa4w-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
@ 2011-04-28  1:18       ` Simon Horman
  2011-04-28  2:22         ` Paul Mundt
  0 siblings, 1 reply; 12+ messages in thread
From: Simon Horman @ 2011-04-28  1:18 UTC (permalink / raw)
  To: Magnus Damm
  Cc: linux-i2c-u79uwXL29TY76Z2rM5mHXA, linux-sh-u79uwXL29TY76Z2rM5mHXA,
	lethal-M7jkjyW5wf5g9hUCZPvPmw, ben-linux-elnMNo+KYs3YtjvyW6yDsg,
	khali-PUYAD+kWke1g9hUCZPvPmw

On Thu, Apr 28, 2011 at 10:06:38AM +0900, Magnus Damm wrote:
> On Thu, Apr 28, 2011 at 7:14 AM, Simon Horman <horms@verge.net.au> wrote:
> > Hi Magnus,
> >
> > On Thu, Apr 21, 2011 at 10:22:54PM +0900, Magnus Damm wrote:
> >> From: Magnus Damm <damm@opensource.se>
> >>
> >> Add support to the i2c-sh_mobile driver for setting
> >> the I2C bus speed using platform data.
> >>
> >> Signed-off-by: Magnus Damm <damm@opensource.se>
> >> ---
> >>
> >>  drivers/i2c/busses/i2c-sh_mobile.c |   13 +++++++++++--
> >>  include/linux/i2c-sh_mobile.h      |   10 ++++++++++
> >>  2 files changed, 21 insertions(+), 2 deletions(-)
> >>
> >> --- 0013/drivers/i2c/busses/i2c-sh_mobile.c
> >> +++ work/drivers/i2c/busses/i2c-sh_mobile.c   2011-04-21 20:20:23.000000000 +0900
> >> @@ -32,6 +32,7 @@
> >>  #include <linux/clk.h>
> >>  #include <linux/io.h>
> >>  #include <linux/slab.h>
> >> +#include <linux/i2c-sh_mobile.h>
> >>
> >>  /* Transmit operation:                                                      */
> >>  /*                                                                          */
> >> @@ -117,7 +118,7 @@ struct sh_mobile_i2c_data {
> >>       struct device *dev;
> >>       void __iomem *reg;
> >>       struct i2c_adapter adap;
> >> -
> >> +     unsigned long bus_speed;
> >>       struct clk *clk;
> >>       u_int8_t icic;
> >>       u_int8_t iccl;
> >> @@ -205,7 +206,7 @@ static void activate_ch(struct sh_mobile
> >>        * We also round off the result.
> >>        */
> >>       num = i2c_clk * 5;
> >> -     denom = NORMAL_SPEED * 9;
> >> +     denom = pd->bus_speed * 9;
> >
> > I believe that on the sh73a0 and so far only the sh73a0
> > denom needs to be doubled.
> 
> Uhm, I don't think this patch is specific to any SoC type. It may of
> course be used on sh73a0 to adjust the denom value, but setting the
> I2C bus speed is something that can be used on any SoC. So I'd say
> that this is a fairly generic feature.

I'm just saying that that I've observed the value being doubled for sh73a0.


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

* Re: [PATCH] i2c: i2c-sh_mobile bus speed platform data
  2011-04-28  1:18       ` Simon Horman
@ 2011-04-28  2:22         ` Paul Mundt
       [not found]           ` <20110428022214.GB13539-M7jkjyW5wf5g9hUCZPvPmw@public.gmane.org>
  0 siblings, 1 reply; 12+ messages in thread
From: Paul Mundt @ 2011-04-28  2:22 UTC (permalink / raw)
  To: Simon Horman; +Cc: Magnus Damm, linux-i2c, linux-sh, ben-linux, khali

On Thu, Apr 28, 2011 at 10:18:01AM +0900, Simon Horman wrote:
> On Thu, Apr 28, 2011 at 10:06:38AM +0900, Magnus Damm wrote:
> > On Thu, Apr 28, 2011 at 7:14 AM, Simon Horman <horms@verge.net.au> wrote:
> > > I believe that on the sh73a0 and so far only the sh73a0
> > > denom needs to be doubled.
> > 
> > Uhm, I don't think this patch is specific to any SoC type. It may of
> > course be used on sh73a0 to adjust the denom value, but setting the
> > I2C bus speed is something that can be used on any SoC. So I'd say
> > that this is a fairly generic feature.
> 
> I'm just saying that that I've observed the value being doubled for sh73a0.
> 
The general rule of thumb is that whatever unusual behaviour is observed
in the latest CPU we will see become the standard for future ones.
Abstracting the denom value seems reasonable as a cautionary measure, and
it does do the NORMAL_SPEED as a default fallback so there is no adverse
impact for normalized platforms.

This really should be going in to include/linux/i2c/ or so though, no
need to dump these tiny stubs in to include/linux/ directly.

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

* Re: [PATCH] i2c: i2c-sh_mobile bus speed platform data
       [not found]           ` <20110428022214.GB13539-M7jkjyW5wf5g9hUCZPvPmw@public.gmane.org>
@ 2011-04-28  2:46             ` Magnus Damm
  2011-04-28  3:11               ` Paul Mundt
  0 siblings, 1 reply; 12+ messages in thread
From: Magnus Damm @ 2011-04-28  2:46 UTC (permalink / raw)
  To: Paul Mundt
  Cc: Simon Horman, linux-i2c-u79uwXL29TY76Z2rM5mHXA,
	linux-sh-u79uwXL29TY76Z2rM5mHXA, ben-linux-elnMNo+KYs3YtjvyW6yDsg,
	khali-PUYAD+kWke1g9hUCZPvPmw

On Thu, Apr 28, 2011 at 11:22 AM, Paul Mundt <lethal@linux-sh.org> wrote:
> On Thu, Apr 28, 2011 at 10:18:01AM +0900, Simon Horman wrote:
>> On Thu, Apr 28, 2011 at 10:06:38AM +0900, Magnus Damm wrote:
>> > On Thu, Apr 28, 2011 at 7:14 AM, Simon Horman <horms@verge.net.au> wrote:
>> > > I believe that on the sh73a0 and so far only the sh73a0
>> > > denom needs to be doubled.
>> >
>> > Uhm, I don't think this patch is specific to any SoC type. It may of
>> > course be used on sh73a0 to adjust the denom value, but setting the
>> > I2C bus speed is something that can be used on any SoC. So I'd say
>> > that this is a fairly generic feature.
>>
>> I'm just saying that that I've observed the value being doubled for sh73a0.
>>
> The general rule of thumb is that whatever unusual behaviour is observed
> in the latest CPU we will see become the standard for future ones.

This may also be an attempt to simply double the I2C bus speed on that
particular platform for that particular application. So in the end it
may have nothing to do with sh73a0. Actually, now when I think about
it, I recall hacking up a prototype to control the LCD backlight via
I2C on sh73a0 and AG5EVM, and I did not have to modify any part of the
I2C bus driver to get that going as expected.

> Abstracting the denom value seems reasonable as a cautionary measure, and
> it does do the NORMAL_SPEED as a default fallback so there is no adverse
> impact for normalized platforms.
>
> This really should be going in to include/linux/i2c/ or so though, no
> need to dump these tiny stubs in to include/linux/ directly.

I guess I just followed what other i2c drivers do, but yes, putting
the header file in include/linux/i2c/ makes more sense.

I'll cook up a V2.

Thanks,

/ magnus

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

* Re: [PATCH] i2c: i2c-sh_mobile bus speed platform data
  2011-04-28  2:46             ` Magnus Damm
@ 2011-04-28  3:11               ` Paul Mundt
       [not found]                 ` <20110428031115.GD13539-M7jkjyW5wf5g9hUCZPvPmw@public.gmane.org>
  0 siblings, 1 reply; 12+ messages in thread
From: Paul Mundt @ 2011-04-28  3:11 UTC (permalink / raw)
  To: Magnus Damm; +Cc: Simon Horman, linux-i2c, linux-sh, ben-linux, khali

On Thu, Apr 28, 2011 at 11:46:37AM +0900, Magnus Damm wrote:
> On Thu, Apr 28, 2011 at 11:22 AM, Paul Mundt <lethal@linux-sh.org> wrote:
> > On Thu, Apr 28, 2011 at 10:18:01AM +0900, Simon Horman wrote:
> >> On Thu, Apr 28, 2011 at 10:06:38AM +0900, Magnus Damm wrote:
> >> > On Thu, Apr 28, 2011 at 7:14 AM, Simon Horman <horms@verge.net.au> wrote:
> >> > > I believe that on the sh73a0 and so far only the sh73a0
> >> > > denom needs to be doubled.
> >> >
> >> > Uhm, I don't think this patch is specific to any SoC type. It may of
> >> > course be used on sh73a0 to adjust the denom value, but setting the
> >> > I2C bus speed is something that can be used on any SoC. So I'd say
> >> > that this is a fairly generic feature.
> >>
> >> I'm just saying that that I've observed the value being doubled for sh73a0.
> >>
> > The general rule of thumb is that whatever unusual behaviour is observed
> > in the latest CPU we will see become the standard for future ones.
> 
> This may also be an attempt to simply double the I2C bus speed on that
> particular platform for that particular application. So in the end it
> may have nothing to do with sh73a0. Actually, now when I think about
> it, I recall hacking up a prototype to control the LCD backlight via
> I2C on sh73a0 and AG5EVM, and I did not have to modify any part of the
> I2C bus driver to get that going as expected.
> 
Ok, that bit of information was missing from your patch. That's obviously
a bit more dodgy. We don't want to have the default behaviour out of spec
for some specific application.

> > Abstracting the denom value seems reasonable as a cautionary measure, and
> > it does do the NORMAL_SPEED as a default fallback so there is no adverse
> > impact for normalized platforms.
> >
> > This really should be going in to include/linux/i2c/ or so though, no
> > need to dump these tiny stubs in to include/linux/ directly.
> 
> I guess I just followed what other i2c drivers do, but yes, putting
> the header file in include/linux/i2c/ makes more sense.
> 
Other i2c drivers put things in include/linux/i2c, too. There's also an
include/linux/platform_data/ now as well for things that don't fit
anywhere else. "This is the way we used to do it" tends to be a pretty
pointless argument going forward.

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

* Re: [PATCH] i2c: i2c-sh_mobile bus speed platform data
       [not found]                 ` <20110428031115.GD13539-M7jkjyW5wf5g9hUCZPvPmw@public.gmane.org>
@ 2011-04-28  3:25                   ` Magnus Damm
  2011-04-28  4:43                     ` Simon Horman
  0 siblings, 1 reply; 12+ messages in thread
From: Magnus Damm @ 2011-04-28  3:25 UTC (permalink / raw)
  To: Paul Mundt
  Cc: Simon Horman, linux-i2c-u79uwXL29TY76Z2rM5mHXA,
	linux-sh-u79uwXL29TY76Z2rM5mHXA, ben-linux-elnMNo+KYs3YtjvyW6yDsg,
	khali-PUYAD+kWke1g9hUCZPvPmw

On Thu, Apr 28, 2011 at 12:11 PM, Paul Mundt <lethal@linux-sh.org> wrote:
> On Thu, Apr 28, 2011 at 11:46:37AM +0900, Magnus Damm wrote:
>> On Thu, Apr 28, 2011 at 11:22 AM, Paul Mundt <lethal@linux-sh.org> wrote:
>> > On Thu, Apr 28, 2011 at 10:18:01AM +0900, Simon Horman wrote:
>> >> On Thu, Apr 28, 2011 at 10:06:38AM +0900, Magnus Damm wrote:
>> >> > On Thu, Apr 28, 2011 at 7:14 AM, Simon Horman <horms@verge.net.au> wrote:
>> >> > > I believe that on the sh73a0 and so far only the sh73a0
>> >> > > denom needs to be doubled.
>> >> >
>> >> > Uhm, I don't think this patch is specific to any SoC type. It may of
>> >> > course be used on sh73a0 to adjust the denom value, but setting the
>> >> > I2C bus speed is something that can be used on any SoC. So I'd say
>> >> > that this is a fairly generic feature.
>> >>
>> >> I'm just saying that that I've observed the value being doubled for sh73a0.
>> >>
>> > The general rule of thumb is that whatever unusual behaviour is observed
>> > in the latest CPU we will see become the standard for future ones.
>>
>> This may also be an attempt to simply double the I2C bus speed on that
>> particular platform for that particular application. So in the end it
>> may have nothing to do with sh73a0. Actually, now when I think about
>> it, I recall hacking up a prototype to control the LCD backlight via
>> I2C on sh73a0 and AG5EVM, and I did not have to modify any part of the
>> I2C bus driver to get that going as expected.
>>
> Ok, that bit of information was missing from your patch. That's obviously
> a bit more dodgy. We don't want to have the default behaviour out of spec
> for some specific application.

I suspect that I may have chosen my words poorly. By writing "This may
also be an attempt to simply double the I2C bus speed on that
particular platform for that particular application." I am not
referring to this patch. I am commenting on something Simon may see
when he is going though kernel source that has been mangled by people
doing integration.

As for configuring the i2c bus speed, I wouldn't call it dodgy. It is
something that is fairly common but of course needs to be handled with
care. Other drivers handle this through module parameters, but since
we want to configure this with per-device instance granularity
platform data is a better fit.

>> > Abstracting the denom value seems reasonable as a cautionary measure, and
>> > it does do the NORMAL_SPEED as a default fallback so there is no adverse
>> > impact for normalized platforms.
>> >
>> > This really should be going in to include/linux/i2c/ or so though, no
>> > need to dump these tiny stubs in to include/linux/ directly.
>>
>> I guess I just followed what other i2c drivers do, but yes, putting
>> the header file in include/linux/i2c/ makes more sense.
>>
> Other i2c drivers put things in include/linux/i2c, too. There's also an
> include/linux/platform_data/ now as well for things that don't fit
> anywhere else. "This is the way we used to do it" tends to be a pretty
> pointless argument going forward.

I looks like I have been unclear in my writing once again. I'm not
arguing that the header should be kept in include/linux/.

/ magnus

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

* [PATCH] i2c: i2c-sh_mobile bus speed platform data V2
  2011-04-21 13:22 [PATCH] i2c: i2c-sh_mobile bus speed platform data Magnus Damm
  2011-04-27 22:14 ` Simon Horman
@ 2011-04-28  4:25 ` Magnus Damm
  2011-04-28 23:03   ` Simon Horman
  2011-05-04  0:59 ` [PATCH] i2c: i2c-sh_mobile bus speed platform data dong chen
  2 siblings, 1 reply; 12+ messages in thread
From: Magnus Damm @ 2011-04-28  4:25 UTC (permalink / raw)
  To: linux-i2c; +Cc: linux-sh, lethal, simon, ben-linux, khali, Magnus Damm

From: Magnus Damm <damm@opensource.se>

Add support to the i2c-sh_mobile driver for setting
the I2C bus speed using platform data.

Signed-off-by: Magnus Damm <damm@opensource.se>
---

 Changes since V1:
 - Moved header file from include/linux/ to include/linux/i2c/

 drivers/i2c/busses/i2c-sh_mobile.c |   13 +++++++++++--
 include/linux/i2c/i2c-sh_mobile.h  |   10 ++++++++++
 2 files changed, 21 insertions(+), 2 deletions(-)

--- 0003/drivers/i2c/busses/i2c-sh_mobile.c
+++ work/drivers/i2c/busses/i2c-sh_mobile.c	2011-04-28 13:21:51.000000000 +0900
@@ -32,6 +32,7 @@
 #include <linux/clk.h>
 #include <linux/io.h>
 #include <linux/slab.h>
+#include <linux/i2c/i2c-sh_mobile.h>
 
 /* Transmit operation:                                                      */
 /*                                                                          */
@@ -117,7 +118,7 @@ struct sh_mobile_i2c_data {
 	struct device *dev;
 	void __iomem *reg;
 	struct i2c_adapter adap;
-
+	unsigned long bus_speed;
 	struct clk *clk;
 	u_int8_t icic;
 	u_int8_t iccl;
@@ -205,7 +206,7 @@ static void activate_ch(struct sh_mobile
 	 * We also round off the result.
 	 */
 	num = i2c_clk * 5;
-	denom = NORMAL_SPEED * 9;
+	denom = pd->bus_speed * 9;
 	tmp = num * 10 / denom;
 	if (tmp % 10 >= 5)
 		pd->iccl = (u_int8_t)((num/denom) + 1);
@@ -574,6 +575,7 @@ static int sh_mobile_i2c_hook_irqs(struc
 
 static int sh_mobile_i2c_probe(struct platform_device *dev)
 {
+	struct i2c_sh_mobile_platform_data *pdata = dev->dev.platform_data;
 	struct sh_mobile_i2c_data *pd;
 	struct i2c_adapter *adap;
 	struct resource *res;
@@ -618,6 +620,11 @@ static int sh_mobile_i2c_probe(struct pl
 		goto err_irq;
 	}
 
+	/* Use platformd data bus speed or NORMAL_SPEED */
+	pd->bus_speed = NORMAL_SPEED;
+	if (pdata && pdata->bus_speed)
+		pd->bus_speed = pdata->bus_speed;
+
 	/* The IIC blocks on SH-Mobile ARM processors
 	 * come with two new bits in ICIC.
 	 */
@@ -658,6 +665,8 @@ static int sh_mobile_i2c_probe(struct pl
 		goto err_all;
 	}
 
+	dev_info(&dev->dev, "I2C adapter %d with bus speed %lu Hz\n",
+		 adap->nr, pd->bus_speed);
 	return 0;
 
  err_all:
--- /dev/null
+++ work/include/linux/i2c/i2c-sh_mobile.h	2011-04-28 12:21:45.000000000 +0900
@@ -0,0 +1,10 @@
+#ifndef __I2C_SH_MOBILE_H__
+#define __I2C_SH_MOBILE_H__
+
+#include <linux/platform_device.h>
+
+struct i2c_sh_mobile_platform_data {
+	unsigned long bus_speed;
+};
+
+#endif /* __I2C_SH_MOBILE_H__ */

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

* Re: [PATCH] i2c: i2c-sh_mobile bus speed platform data
  2011-04-28  3:25                   ` Magnus Damm
@ 2011-04-28  4:43                     ` Simon Horman
  0 siblings, 0 replies; 12+ messages in thread
From: Simon Horman @ 2011-04-28  4:43 UTC (permalink / raw)
  To: Magnus Damm; +Cc: Paul Mundt, linux-i2c, linux-sh, ben-linux, khali

On Thu, Apr 28, 2011 at 12:25:30PM +0900, Magnus Damm wrote:
> On Thu, Apr 28, 2011 at 12:11 PM, Paul Mundt <lethal@linux-sh.org> wrote:
> > On Thu, Apr 28, 2011 at 11:46:37AM +0900, Magnus Damm wrote:
> >> On Thu, Apr 28, 2011 at 11:22 AM, Paul Mundt <lethal@linux-sh.org> wrote:
> >> > On Thu, Apr 28, 2011 at 10:18:01AM +0900, Simon Horman wrote:
> >> >> On Thu, Apr 28, 2011 at 10:06:38AM +0900, Magnus Damm wrote:
> >> >> > On Thu, Apr 28, 2011 at 7:14 AM, Simon Horman <horms@verge.net.au> wrote:
> >> >> > > I believe that on the sh73a0 and so far only the sh73a0
> >> >> > > denom needs to be doubled.
> >> >> >
> >> >> > Uhm, I don't think this patch is specific to any SoC type. It may of
> >> >> > course be used on sh73a0 to adjust the denom value, but setting the
> >> >> > I2C bus speed is something that can be used on any SoC. So I'd say
> >> >> > that this is a fairly generic feature.
> >> >>
> >> >> I'm just saying that that I've observed the value being doubled for sh73a0.
> >> >>
> >> > The general rule of thumb is that whatever unusual behaviour is observed
> >> > in the latest CPU we will see become the standard for future ones.
> >>
> >> This may also be an attempt to simply double the I2C bus speed on that
> >> particular platform for that particular application. So in the end it
> >> may have nothing to do with sh73a0. Actually, now when I think about
> >> it, I recall hacking up a prototype to control the LCD backlight via
> >> I2C on sh73a0 and AG5EVM, and I did not have to modify any part of the
> >> I2C bus driver to get that going as expected.
> >>
> > Ok, that bit of information was missing from your patch. That's obviously
> > a bit more dodgy. We don't want to have the default behaviour out of spec
> > for some specific application.
> 
> I suspect that I may have chosen my words poorly. By writing "This may
> also be an attempt to simply double the I2C bus speed on that
> particular platform for that particular application." I am not
> referring to this patch. I am commenting on something Simon may see
> when he is going though kernel source that has been mangled by people
> doing integration.
> 
> As for configuring the i2c bus speed, I wouldn't call it dodgy. It is
> something that is fairly common but of course needs to be handled with
> care. Other drivers handle this through module parameters, but since
> we want to configure this with per-device instance granularity
> platform data is a better fit.

To clarify my position on this.

I merely observed a different implementation of essentially the same code
that doubles the value for the sh73a0. I am not entirely sure why it was
doubled. Nor am I sure why it was implemented outside of platform code.

However, I am sure that the exception that I noted is nowhere
in upstream code. So I think it would be fine to merge Magnus's changes.

If there is interest in resolving this sh73a0 anomaly then I guess
enquires will need to be made to the people with the alternate
implementation. That is probably a discussion best had off-list.

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

* Re: [PATCH] i2c: i2c-sh_mobile bus speed platform data V2
  2011-04-28  4:25 ` [PATCH] i2c: i2c-sh_mobile bus speed platform data V2 Magnus Damm
@ 2011-04-28 23:03   ` Simon Horman
  0 siblings, 0 replies; 12+ messages in thread
From: Simon Horman @ 2011-04-28 23:03 UTC (permalink / raw)
  To: Magnus Damm
  Cc: linux-i2c-u79uwXL29TY76Z2rM5mHXA, linux-sh-u79uwXL29TY76Z2rM5mHXA,
	lethal-M7jkjyW5wf5g9hUCZPvPmw, ben-linux-elnMNo+KYs3YtjvyW6yDsg,
	khali-PUYAD+kWke1g9hUCZPvPmw

On Thu, Apr 28, 2011 at 01:25:36PM +0900, Magnus Damm wrote:
> From: Magnus Damm <damm@opensource.se>
> 
> Add support to the i2c-sh_mobile driver for setting
> the I2C bus speed using platform data.
> 
> Signed-off-by: Magnus Damm <damm@opensource.se>

Acked-by: Simon Horman <horms@verge.net.au>

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

* Re: [PATCH] i2c: i2c-sh_mobile bus speed platform data
  2011-04-21 13:22 [PATCH] i2c: i2c-sh_mobile bus speed platform data Magnus Damm
  2011-04-27 22:14 ` Simon Horman
  2011-04-28  4:25 ` [PATCH] i2c: i2c-sh_mobile bus speed platform data V2 Magnus Damm
@ 2011-05-04  0:59 ` dong chen
  2 siblings, 0 replies; 12+ messages in thread
From: dong chen @ 2011-05-04  0:59 UTC (permalink / raw)
  To: Magnus Damm, Paul Mundt
  Cc: Simon Horman, linux-i2c-u79uwXL29TY76Z2rM5mHXA@public.gmane.org,
	linux-sh-u79uwXL29TY76Z2rM5mHXA@public.gmane.org,
	ben-linux-elnMNo+KYs3YtjvyW6yDsg@public.gmane.org,
	khali-PUYAD+kWke1g9hUCZPvPmw@public.gmane.org

Magnus Damm <magnus.damm@gmail.com>编写:


On Thu, Apr 28, 2011 at 12:11 PM, Paul Mundt <lethal@linux-sh.org> wrote:
> On Thu, Apr 28, 2011 at 11:46:37AM +0900, Magnus Damm wrote:
>> On Thu, Apr 28, 2011 at 11:22 AM, Paul Mundt <lethal@linux-sh.org> wrote:
>> > On Thu, Apr 28, 2011 at 10:18:01AM +0900, Simon Horman wrote:
>> >> On Thu, Apr 28, 2011 at 10:06:38AM +0900, Magnus Damm wrote:
>> >> > On Thu, Apr 28, 2011 at 7:14 AM, Simon Horman <horms@verge.net.au> wrote:
>> >> > > I believe that on the sh73a0 and so far only the sh73a0
>> >> > > denom needs to be doubled.
>> >> >
>> >> > Uhm, I don't think this patch is specific to any SoC type. It may of
>> >> > course be used on sh73a0 to adjust the denom value, but setting the
>> >> > I2C bus speed is something that can be used on any SoC. So I'd say
>> >> > that this is a fairly generic feature.
>> >>
>> >> I'm just saying that that I've observed the value being doubled for sh73a0.
>> >>
>> > The general rule of thumb is that whatever unusual behaviour is observed
>> > in the latest CPU we will see become the standard for future ones.
>>
>> This may also be an attempt to simply double the I2C bus speed on that
>> particular platform for that particular application. So in the end it
>> may have nothing to do with sh73a0. Actually, now when I think about
>> it, I recall hacking up a prototype to control the LCD backlight via
>> I2C on sh73a0 and AG5EVM, and I did not have to modify any part of the
>> I2C bus driver to get that going as expected.
>>
> Ok, that bit of information was missing from your patch. That's obviously
> a bit more dodgy. We don't want to have the default behaviour out of spec
> for some specific application.

I suspect that I may have chosen my words poorly. By writing "This may
also be an attempt to simply double the I2C bus speed on that
particular platform for that particular application." I am not
referring to this patch. I am commenting on something Simon may see
when he is going though kernel source that has been mangled by people
doing integration.

As for configuring the i2c bus speed, I wouldn't call it dodgy. It is
something that is fairly common but of course needs to be handled with
care. Other drivers handle this through module parameters, but since
we want to configure this with per-device instance granularity
platform data is a better fit.

>> > Abstracting the denom value seems reasonable as a cautionary measure, and
>> > it does do the NORMAL_SPEED as a default fallback so there is no adverse
>> > impact for normalized platforms.
>> >
>> > This really should be going in to include/linux/i2c/ or so though, no
>> > need to dump these tiny stubs in to include/linux/ directly.
>>
>> I guess I just followed what other i2c drivers do, but yes, putting
>> the header file in include/linux/i2c/ makes more sense.
>>
> Other i2c drivers put things in include/linux/i2c, too. There's also an
> include/linux/platform_data/ now as well for things that don't fit
> anywhere else. "This is the way we used to do it" tends to be a pretty
> pointless argument going forward.

I looks like I have been unclear in my writing once again. I'm not
arguing that the header should be kept in include/linux/.

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

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

end of thread, other threads:[~2011-05-04  0:59 UTC | newest]

Thread overview: 12+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2011-04-21 13:22 [PATCH] i2c: i2c-sh_mobile bus speed platform data Magnus Damm
2011-04-27 22:14 ` Simon Horman
2011-04-28  1:06   ` Magnus Damm
     [not found]     ` <BANLkTi=YbtWYKLdcEkv6TDRfm-BbXGXa4w-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2011-04-28  1:18       ` Simon Horman
2011-04-28  2:22         ` Paul Mundt
     [not found]           ` <20110428022214.GB13539-M7jkjyW5wf5g9hUCZPvPmw@public.gmane.org>
2011-04-28  2:46             ` Magnus Damm
2011-04-28  3:11               ` Paul Mundt
     [not found]                 ` <20110428031115.GD13539-M7jkjyW5wf5g9hUCZPvPmw@public.gmane.org>
2011-04-28  3:25                   ` Magnus Damm
2011-04-28  4:43                     ` Simon Horman
2011-04-28  4:25 ` [PATCH] i2c: i2c-sh_mobile bus speed platform data V2 Magnus Damm
2011-04-28 23:03   ` Simon Horman
2011-05-04  0:59 ` [PATCH] i2c: i2c-sh_mobile bus speed platform data dong chen

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).