Message ID | 1459927680-5480-1-git-send-email-jszhang@marvell.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
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 <jszhang@marvell.com> > --- > 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 <jszhang@marvell.com> 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 <jszhang@marvell.com> > --- > 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 >
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 <jszhang@marvell.com> > > --- > > 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 <jszhang@marvell.com> 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 <jszhang@marvell.com> > > --- > > 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 <jszhang@marvell.com> > > 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 > > > > > > >
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.
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))
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 <jszhang@marvell.com> --- Documentation/devicetree/bindings/i2c/i2c-designware.txt | 16 ++++++++++++++++ drivers/i2c/busses/i2c-designware-platdrv.c | 8 ++++++++ 2 files changed, 24 insertions(+)