diff mbox series

[v5,3/9] i2c: add support for filters optional properties

Message ID 1568189911-31641-4-git-send-email-eugen.hristev@microchip.com (mailing list archive)
State New, archived
Headers show
Series i2c: add support for filters | expand

Commit Message

Eugen Hristev Sept. 11, 2019, 8:24 a.m. UTC
From: Eugen Hristev <eugen.hristev@microchip.com>

i2c-digital-filter-width-ns:
This optional timing property specifies the width of the spikes on the i2c
lines (in ns) that can be filtered out by built-in digital filters which are
embedded in some i2c controllers.
i2c-analog-filter-cutoff-frequency:
This optional timing property specifies the cutoff frequency of a low-pass
analog filter built-in i2c controllers. This low pass filter is used to filter
out high frequency noise on the i2c lines. Specified in Hz.
Include these properties in the timings structure and read them as integers.

Signed-off-by: Eugen Hristev <eugen.hristev@microchip.com>
---
 drivers/i2c/i2c-core-base.c | 6 ++++++
 include/linux/i2c.h         | 6 ++++++
 2 files changed, 12 insertions(+)

Comments

Peter Rosin Oct. 21, 2019, 3:20 p.m. UTC | #1
On 2019-09-11 10:24, Eugen.Hristev@microchip.com wrote:
> From: Eugen Hristev <eugen.hristev@microchip.com>
> 
> i2c-digital-filter-width-ns:
> This optional timing property specifies the width of the spikes on the i2c
> lines (in ns) that can be filtered out by built-in digital filters which are
> embedded in some i2c controllers.
> i2c-analog-filter-cutoff-frequency:
> This optional timing property specifies the cutoff frequency of a low-pass
> analog filter built-in i2c controllers. This low pass filter is used to filter
> out high frequency noise on the i2c lines. Specified in Hz.
> Include these properties in the timings structure and read them as integers.
> 
> Signed-off-by: Eugen Hristev <eugen.hristev@microchip.com>
> ---
>  drivers/i2c/i2c-core-base.c | 6 ++++++
>  include/linux/i2c.h         | 6 ++++++
>  2 files changed, 12 insertions(+)
> 
> diff --git a/drivers/i2c/i2c-core-base.c b/drivers/i2c/i2c-core-base.c
> index 9c440fa..c9fcb16 100644
> --- a/drivers/i2c/i2c-core-base.c
> +++ b/drivers/i2c/i2c-core-base.c
> @@ -1658,6 +1658,12 @@ void i2c_parse_fw_timings(struct device *dev, struct i2c_timings *t, bool use_de
>  		t->sda_fall_ns = t->scl_fall_ns;
>  
>  	device_property_read_u32(dev, "i2c-sda-hold-time-ns", &t->sda_hold_ns);
> +
> +	device_property_read_u32(dev, "i2c-digital-filter-width-ns",
> +				 &t->digital_filter_width_ns);
> +
> +	device_property_read_u32(dev, "i2c-analog-filter-cutoff-frequency",
> +				 &t->analog_filter_cutoff_freq_hz);
>  }
>  EXPORT_SYMBOL_GPL(i2c_parse_fw_timings);
>  
> diff --git a/include/linux/i2c.h b/include/linux/i2c.h
> index fa5552c..26ce143 100644
> --- a/include/linux/i2c.h
> +++ b/include/linux/i2c.h
> @@ -575,6 +575,10 @@ struct i2c_lock_operations {
>   * @scl_int_delay_ns: time IP core additionally needs to setup SCL in ns
>   * @sda_fall_ns: time SDA signal takes to fall in ns; t(f) in the I2C specification
>   * @sda_hold_ns: time IP core additionally needs to hold SDA in ns
> + * @digital_filter_width_ns: width in ns of spikes on i2c lines that the IP core
> + *			     digital filter can filter out
> + * @analog_filter_cutoff_freq_hz: threshold frequency for the low pass IP core
> +			      analog filter

The indentation is a little bit excessive and also off. Other comments in the
file just uses a single tab after the asterisk in this scenario. Also, the last
of the new lines is missing that leading asterisk.

Cheers,
Peter

>   */
>  struct i2c_timings {
>  	u32 bus_freq_hz;
> @@ -583,6 +587,8 @@ struct i2c_timings {
>  	u32 scl_int_delay_ns;
>  	u32 sda_fall_ns;
>  	u32 sda_hold_ns;
> +	u32 digital_filter_width_ns;
> +	u32 analog_filter_cutoff_freq_hz;
>  };
>  
>  /**
>
diff mbox series

Patch

diff --git a/drivers/i2c/i2c-core-base.c b/drivers/i2c/i2c-core-base.c
index 9c440fa..c9fcb16 100644
--- a/drivers/i2c/i2c-core-base.c
+++ b/drivers/i2c/i2c-core-base.c
@@ -1658,6 +1658,12 @@  void i2c_parse_fw_timings(struct device *dev, struct i2c_timings *t, bool use_de
 		t->sda_fall_ns = t->scl_fall_ns;
 
 	device_property_read_u32(dev, "i2c-sda-hold-time-ns", &t->sda_hold_ns);
+
+	device_property_read_u32(dev, "i2c-digital-filter-width-ns",
+				 &t->digital_filter_width_ns);
+
+	device_property_read_u32(dev, "i2c-analog-filter-cutoff-frequency",
+				 &t->analog_filter_cutoff_freq_hz);
 }
 EXPORT_SYMBOL_GPL(i2c_parse_fw_timings);
 
diff --git a/include/linux/i2c.h b/include/linux/i2c.h
index fa5552c..26ce143 100644
--- a/include/linux/i2c.h
+++ b/include/linux/i2c.h
@@ -575,6 +575,10 @@  struct i2c_lock_operations {
  * @scl_int_delay_ns: time IP core additionally needs to setup SCL in ns
  * @sda_fall_ns: time SDA signal takes to fall in ns; t(f) in the I2C specification
  * @sda_hold_ns: time IP core additionally needs to hold SDA in ns
+ * @digital_filter_width_ns: width in ns of spikes on i2c lines that the IP core
+ *			     digital filter can filter out
+ * @analog_filter_cutoff_freq_hz: threshold frequency for the low pass IP core
+			      analog filter
  */
 struct i2c_timings {
 	u32 bus_freq_hz;
@@ -583,6 +587,8 @@  struct i2c_timings {
 	u32 scl_int_delay_ns;
 	u32 sda_fall_ns;
 	u32 sda_hold_ns;
+	u32 digital_filter_width_ns;
+	u32 analog_filter_cutoff_freq_hz;
 };
 
 /**