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 |
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 --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; }; /**