Sometimes, it's convenient to define the scl's high/low count directly,
e.g HW people would do some measurement then directly give out the
optimum counts. Previously, we solved the sda falling time and scl
falling time by i2c_dw_scl_hcnt() and i2c_dw_scl_lcnt(), then put them
into dt, but what we really care isn't the sda/scl falling time.
>From another side, the dw_i2c_acpi_configure() on ACPI platform also
get hcnt/lcnt values rather than the sda/scl falling time from ACPI
method, we want similar feature for DT platforms.
Signed-off-by: Jisheng Zhang <[email protected]>
---
Documentation/devicetree/bindings/i2c/i2c-designware.txt | 16 ++++++++++++++++
drivers/i2c/busses/i2c-designware-platdrv.c | 8 ++++++++
2 files changed, 24 insertions(+)
diff --git a/Documentation/devicetree/bindings/i2c/i2c-designware.txt b/Documentation/devicetree/bindings/i2c/i2c-designware.txt
index fee26dc..05176fbf 100644
--- a/Documentation/devicetree/bindings/i2c/i2c-designware.txt
+++ b/Documentation/devicetree/bindings/i2c/i2c-designware.txt
@@ -20,6 +20,22 @@ Optional properties :
- i2c-sda-falling-time-ns : should contain the SDA falling time in nanoseconds.
This value which is by default 300ns is used to compute the tHIGH period.
+ - i2c-ss-scl-high-count : should contain the standard speed i2c clock SCL high
+ count. If defined, the i2c-scl-falling-time-ns and i2c-sda-falling-time-ns
+ will be ignored.
+
+ - i2c-ss-scl-low-count : should contain the standard speed i2c clock SCL low
+ count. If defined, the i2c-scl-falling-time-ns and i2c-sda-falling-time-ns
+ will be ignored.
+
+ - i2c-fs-scl-high-count : should contain the fast speed i2c clock SCL high
+ count. If defined, the i2c-scl-falling-time-ns and i2c-sda-falling-time-ns
+ will be ignored.
+
+ - i2c-fs-scl-low-count : should contain the fast speed i2c clock SCL low
+ count. If defined, the i2c-scl-falling-time-ns and i2c-sda-falling-time-ns
+ will be ignored.
+
Example :
i2c@f0000 {
diff --git a/drivers/i2c/busses/i2c-designware-platdrv.c b/drivers/i2c/busses/i2c-designware-platdrv.c
index d656657..8739a60 100644
--- a/drivers/i2c/busses/i2c-designware-platdrv.c
+++ b/drivers/i2c/busses/i2c-designware-platdrv.c
@@ -188,6 +188,14 @@ static int dw_i2c_plat_probe(struct platform_device *pdev)
&dev->scl_falling_time);
device_property_read_u32(&pdev->dev, "clock-frequency",
&clk_freq);
+ device_property_read_u16(&pdev->dev, "i2c-ss-scl-high-count",
+ &dev->ss_hcnt);
+ device_property_read_u16(&pdev->dev, "i2c-ss-scl-low-count",
+ &dev->ss_lcnt);
+ device_property_read_u16(&pdev->dev, "i2c-fs-scl-high-count",
+ &dev->fs_hcnt);
+ device_property_read_u16(&pdev->dev, "i2c-fs-scl-low-count",
+ &dev->fs_lcnt);
}
if (has_acpi_companion(&pdev->dev))
--
2.8.0.rc3
On Wed, Apr 06, 2016 at 03:28:00PM +0800, Jisheng Zhang wrote:
> Sometimes, it's convenient to define the scl's high/low count directly,
> e.g HW people would do some measurement then directly give out the
> optimum counts. Previously, we solved the sda falling time and scl
> falling time by i2c_dw_scl_hcnt() and i2c_dw_scl_lcnt(), then put them
> into dt, but what we really care isn't the sda/scl falling time.
This is just so you can put specific clock count instead of converting
from nanoseconds with standard properties or you gain some additional
control of the timing. If only the former, then I prefer we stick with
the common properties.
> From another side, the dw_i2c_acpi_configure() on ACPI platform also
> get hcnt/lcnt values rather than the sda/scl falling time from ACPI
> method, we want similar feature for DT platforms.
That's nice, but not really a reason IMO.
>
> Signed-off-by: Jisheng Zhang <[email protected]>
> ---
> Documentation/devicetree/bindings/i2c/i2c-designware.txt | 16 ++++++++++++++++
> drivers/i2c/busses/i2c-designware-platdrv.c | 8 ++++++++
> 2 files changed, 24 insertions(+)
On Wed, Apr 6, 2016 at 10:28 AM, Jisheng Zhang <[email protected]> wrote:
> Sometimes, it's convenient to define the scl's high/low count directly,
> e.g HW people would do some measurement then directly give out the
> optimum counts. Previously, we solved the sda falling time and scl
> falling time by i2c_dw_scl_hcnt() and i2c_dw_scl_lcnt(), then put them
> into dt, but what we really care isn't the sda/scl falling time.
>
> From another side, the dw_i2c_acpi_configure() on ACPI platform also
> get hcnt/lcnt values rather than the sda/scl falling time from ACPI
> method, we want similar feature for DT platforms.
>
Instead of duplicating some words maybe better to explicitly define
two groups of parameters and one which supersedes the other.
> Signed-off-by: Jisheng Zhang <[email protected]>
> ---
> Documentation/devicetree/bindings/i2c/i2c-designware.txt | 16 ++++++++++++++++
> drivers/i2c/busses/i2c-designware-platdrv.c | 8 ++++++++
> 2 files changed, 24 insertions(+)
>
> diff --git a/Documentation/devicetree/bindings/i2c/i2c-designware.txt b/Documentation/devicetree/bindings/i2c/i2c-designware.txt
> index fee26dc..05176fbf 100644
> --- a/Documentation/devicetree/bindings/i2c/i2c-designware.txt
> +++ b/Documentation/devicetree/bindings/i2c/i2c-designware.txt
> @@ -20,6 +20,22 @@ Optional properties :
> - i2c-sda-falling-time-ns : should contain the SDA falling time in nanoseconds.
> This value which is by default 300ns is used to compute the tHIGH period.
>
> + - i2c-ss-scl-high-count : should contain the standard speed i2c clock SCL high
> + count. If defined, the i2c-scl-falling-time-ns and i2c-sda-falling-time-ns
> + will be ignored.
> +
> + - i2c-ss-scl-low-count : should contain the standard speed i2c clock SCL low
> + count. If defined, the i2c-scl-falling-time-ns and i2c-sda-falling-time-ns
> + will be ignored.
> +
> + - i2c-fs-scl-high-count : should contain the fast speed i2c clock SCL high
> + count. If defined, the i2c-scl-falling-time-ns and i2c-sda-falling-time-ns
> + will be ignored.
> +
> + - i2c-fs-scl-low-count : should contain the fast speed i2c clock SCL low
> + count. If defined, the i2c-scl-falling-time-ns and i2c-sda-falling-time-ns
> + will be ignored.
> +
> Example :
>
> i2c@f0000 {
> diff --git a/drivers/i2c/busses/i2c-designware-platdrv.c b/drivers/i2c/busses/i2c-designware-platdrv.c
> index d656657..8739a60 100644
> --- a/drivers/i2c/busses/i2c-designware-platdrv.c
> +++ b/drivers/i2c/busses/i2c-designware-platdrv.c
> @@ -188,6 +188,14 @@ static int dw_i2c_plat_probe(struct platform_device *pdev)
> &dev->scl_falling_time);
> device_property_read_u32(&pdev->dev, "clock-frequency",
> &clk_freq);
> + device_property_read_u16(&pdev->dev, "i2c-ss-scl-high-count",
> + &dev->ss_hcnt);
> + device_property_read_u16(&pdev->dev, "i2c-ss-scl-low-count",
> + &dev->ss_lcnt);
> + device_property_read_u16(&pdev->dev, "i2c-fs-scl-high-count",
> + &dev->fs_hcnt);
> + device_property_read_u16(&pdev->dev, "i2c-fs-scl-low-count",
> + &dev->fs_lcnt);
> }
>
> if (has_acpi_companion(&pdev->dev))
> --
> 2.8.0.rc3
>
--
With Best Regards,
Andy Shevchenko
Dear Rob,
On Thu, 7 Apr 2016 12:57:59 -0500 Rob Herring wrote:
> On Wed, Apr 06, 2016 at 03:28:00PM +0800, Jisheng Zhang wrote:
> > Sometimes, it's convenient to define the scl's high/low count directly,
> > e.g HW people would do some measurement then directly give out the
> > optimum counts. Previously, we solved the sda falling time and scl
> > falling time by i2c_dw_scl_hcnt() and i2c_dw_scl_lcnt(), then put them
> > into dt, but what we really care isn't the sda/scl falling time.
>
> This is just so you can put specific clock count instead of converting
> from nanoseconds with standard properties or you gain some additional
> control of the timing. If only the former, then I prefer we stick with
> the common properties.
To be honest, both. Let me show how I gain additional control of the timing
with this patch while I can't do this w/o it.
I want the similar high percent of SCL high for both standard-mode and
fast-mode. Before this patch, this is not achievable because the parameters
to cal the hcnt/lcnt via i2c_dw_scl_hcnt() and i2c_dw_scl_lcnt() are different
for standard-mode and fast-mode.
Thanks,
Jisheng
>
> > From another side, the dw_i2c_acpi_configure() on ACPI platform also
> > get hcnt/lcnt values rather than the sda/scl falling time from ACPI
> > method, we want similar feature for DT platforms.
>
> That's nice, but not really a reason IMO.
>
> >
> > Signed-off-by: Jisheng Zhang <[email protected]>
> > ---
> > Documentation/devicetree/bindings/i2c/i2c-designware.txt | 16 ++++++++++++++++
> > drivers/i2c/busses/i2c-designware-platdrv.c | 8 ++++++++
> > 2 files changed, 24 insertions(+)
Dear Andy,
On Thu, 7 Apr 2016 21:05:35 +0300 Andy Shevchenko wrote:
> On Wed, Apr 6, 2016 at 10:28 AM, Jisheng Zhang <[email protected]> wrote:
> > Sometimes, it's convenient to define the scl's high/low count directly,
> > e.g HW people would do some measurement then directly give out the
> > optimum counts. Previously, we solved the sda falling time and scl
> > falling time by i2c_dw_scl_hcnt() and i2c_dw_scl_lcnt(), then put them
> > into dt, but what we really care isn't the sda/scl falling time.
> >
> > From another side, the dw_i2c_acpi_configure() on ACPI platform also
> > get hcnt/lcnt values rather than the sda/scl falling time from ACPI
> > method, we want similar feature for DT platforms.
> >
>
> Instead of duplicating some words maybe better to explicitly define
> two groups of parameters and one which supersedes the other.
I'm sorry, I can't catch your meaning. Could you please kindly give more
details? Or examples of "two groups of parameters"
Thanks,
Jisheng
>
> > Signed-off-by: Jisheng Zhang <[email protected]>
> > ---
> > Documentation/devicetree/bindings/i2c/i2c-designware.txt | 16 ++++++++++++++++
> > drivers/i2c/busses/i2c-designware-platdrv.c | 8 ++++++++
> > 2 files changed, 24 insertions(+)
> >
> > diff --git a/Documentation/devicetree/bindings/i2c/i2c-designware.txt b/Documentation/devicetree/bindings/i2c/i2c-designware.txt
> > index fee26dc..05176fbf 100644
> > --- a/Documentation/devicetree/bindings/i2c/i2c-designware.txt
> > +++ b/Documentation/devicetree/bindings/i2c/i2c-designware.txt
> > @@ -20,6 +20,22 @@ Optional properties :
> > - i2c-sda-falling-time-ns : should contain the SDA falling time in nanoseconds.
> > This value which is by default 300ns is used to compute the tHIGH period.
> >
> > + - i2c-ss-scl-high-count : should contain the standard speed i2c clock SCL high
> > + count. If defined, the i2c-scl-falling-time-ns and i2c-sda-falling-time-ns
> > + will be ignored.
> > +
> > + - i2c-ss-scl-low-count : should contain the standard speed i2c clock SCL low
> > + count. If defined, the i2c-scl-falling-time-ns and i2c-sda-falling-time-ns
> > + will be ignored.
> > +
> > + - i2c-fs-scl-high-count : should contain the fast speed i2c clock SCL high
> > + count. If defined, the i2c-scl-falling-time-ns and i2c-sda-falling-time-ns
> > + will be ignored.
> > +
> > + - i2c-fs-scl-low-count : should contain the fast speed i2c clock SCL low
> > + count. If defined, the i2c-scl-falling-time-ns and i2c-sda-falling-time-ns
> > + will be ignored.
> > +
> > Example :
> >
> > i2c@f0000 {
> > diff --git a/drivers/i2c/busses/i2c-designware-platdrv.c b/drivers/i2c/busses/i2c-designware-platdrv.c
> > index d656657..8739a60 100644
> > --- a/drivers/i2c/busses/i2c-designware-platdrv.c
> > +++ b/drivers/i2c/busses/i2c-designware-platdrv.c
> > @@ -188,6 +188,14 @@ static int dw_i2c_plat_probe(struct platform_device *pdev)
> > &dev->scl_falling_time);
> > device_property_read_u32(&pdev->dev, "clock-frequency",
> > &clk_freq);
> > + device_property_read_u16(&pdev->dev, "i2c-ss-scl-high-count",
> > + &dev->ss_hcnt);
> > + device_property_read_u16(&pdev->dev, "i2c-ss-scl-low-count",
> > + &dev->ss_lcnt);
> > + device_property_read_u16(&pdev->dev, "i2c-fs-scl-high-count",
> > + &dev->fs_hcnt);
> > + device_property_read_u16(&pdev->dev, "i2c-fs-scl-low-count",
> > + &dev->fs_lcnt);
> > }
> >
> > if (has_acpi_companion(&pdev->dev))
> > --
> > 2.8.0.rc3
> >
>
>
>
On Wed, 2016-04-13 at 20:16 +0800, Jisheng Zhang wrote:
> Dear Andy,
>
> On Thu, 7 Apr 2016 21:05:35 +0300 Andy Shevchenko wrote:
>
> >
> > On Wed, Apr 6, 2016 at 10:28 AM, Jisheng Zhang <[email protected]>
> > wrote:
> > >
> > > Sometimes, it's convenient to define the scl's high/low count
> > > directly,
> > > e.g HW people would do some measurement then directly give out the
> > > optimum counts. Previously, we solved the sda falling time and scl
> > > falling time by i2c_dw_scl_hcnt() and i2c_dw_scl_lcnt(), then put
> > > them
> > > into dt, but what we really care isn't the sda/scl falling time.
> > >
> > > From another side, the dw_i2c_acpi_configure() on ACPI platform
> > > also
> > > get hcnt/lcnt values rather than the sda/scl falling time from
> > > ACPI
> > > method, we want similar feature for DT platforms.
> > >
> > Instead of duplicating some words maybe better to explicitly define
> > two groups of parameters and one which supersedes the other.
> I'm sorry, I can't catch your meaning. Could you please kindly give
> more
> details? Or examples of "two groups of parameters"
> --- + - i2c-ss-scl-high-count : should contain the standard speed i2c
> > > clock SCL high
> > > + count.
> > > If defined, the i2c-scl-falling-time-ns and i2c-sda-falling-time-
> > > ns
> > > + will be ignored.
I'm referring to the above sentence. Something like
There are two groups of values identifying i2c timings:
1. i2c-scl-falling-time-ns and i2c-sda-falling-time-ns
2. *-[hl]cnt
The second group of parameters supersedes the first one.
> > > +
> > > + - i2c-ss-scl-low-count : should contain the standard speed i2c
> > > clock SCL low
> > > + count. If defined, the i2c-scl-falling-time-ns and i2c-sda-
> > > falling-time-ns
> > > + will be ignored.
> > > +
> > > + - i2c-fs-scl-high-count : should contain the fast speed i2c
> > > clock SCL high
> > > + count. If defined, the i2c-scl-falling-time-ns and i2c-sda-
> > > falling-time-ns
> > > + will be ignored.
> > > +
> > > + - i2c-fs-scl-low-count : should contain the fast speed i2c clock
> > > SCL low
> > > + count. If defined, the i2c-scl-falling-time-ns and i2c-sda-
> > > falling-time-ns
> > > + will be ignored.
> > > +
> > > Example :
> > >
> > > i2c@f0000 {
> > > diff --git a/drivers/i2c/busses/i2c-designware-platdrv.c
> > > b/drivers/i2c/busses/i2c-designware-platdrv.c
> > > index d656657..8739a60 100644
> > > --- a/drivers/i2c/busses/i2c-designware-platdrv.c
> > > +++ b/drivers/i2c/busses/i2c-designware-platdrv.c
> > > @@ -188,6 +188,14 @@ static int dw_i2c_plat_probe(struct
> > > platform_device *pdev)
> > > &dev->scl_falling_time);
> > > device_property_read_u32(&pdev->dev, "clock-
> > > frequency",
> > > &clk_freq);
> > > + device_property_read_u16(&pdev->dev, "i2c-ss-scl-
> > > high-count",
> > > + &dev->ss_hcnt);
> > > + device_property_read_u16(&pdev->dev, "i2c-ss-scl-
> > > low-count",
> > > + &dev->ss_lcnt);
> > > + device_property_read_u16(&pdev->dev, "i2c-fs-scl-
> > > high-count",
> > > + &dev->fs_hcnt);
> > > + device_property_read_u16(&pdev->dev, "i2c-fs-scl-
> > > low-count",
> > > + &dev->fs_lcnt);
> > > }
> > >
> > > if (has_acpi_companion(&pdev->dev))
> > > --
> > > 2.8.0.rc3
> > >
> >
> >
--
Andy Shevchenko <[email protected]>
Intel Finland Oy
On Wed, Apr 13, 2016 at 08:11:47PM +0800, Jisheng Zhang wrote:
> Dear Rob,
>
> On Thu, 7 Apr 2016 12:57:59 -0500 Rob Herring wrote:
>
> > On Wed, Apr 06, 2016 at 03:28:00PM +0800, Jisheng Zhang wrote:
> > > Sometimes, it's convenient to define the scl's high/low count directly,
> > > e.g HW people would do some measurement then directly give out the
> > > optimum counts. Previously, we solved the sda falling time and scl
> > > falling time by i2c_dw_scl_hcnt() and i2c_dw_scl_lcnt(), then put them
> > > into dt, but what we really care isn't the sda/scl falling time.
> >
> > This is just so you can put specific clock count instead of converting
> > from nanoseconds with standard properties or you gain some additional
> > control of the timing. If only the former, then I prefer we stick with
> > the common properties.
>
> To be honest, both. Let me show how I gain additional control of the timing
> with this patch while I can't do this w/o it.
>
> I want the similar high percent of SCL high for both standard-mode and
> fast-mode. Before this patch, this is not achievable because the parameters
> to cal the hcnt/lcnt via i2c_dw_scl_hcnt() and i2c_dw_scl_lcnt() are different
> for standard-mode and fast-mode.
If there is something you can't describe currently, then we can add
additional properties to allow you to do what you want. But they should
be generic bindings and not a plain value which is custom to this driver.