mirror of
https://github.com/AuxXxilium/linux_dsm_epyc7002.git
synced 2025-04-11 03:48:13 +07:00
i2c: refactor parsing of timings
When I wanted to print the chosen values to debug output, I concluded that a helper function to parse one timing would be helpful. Signed-off-by: Wolfram Sang <wsa+renesas@sang-engineering.com> Signed-off-by: Wolfram Sang <wsa@the-dreams.de>
This commit is contained in:
parent
f27237c174
commit
def00b32f0
@ -1588,6 +1588,18 @@ void i2c_del_adapter(struct i2c_adapter *adap)
|
|||||||
}
|
}
|
||||||
EXPORT_SYMBOL(i2c_del_adapter);
|
EXPORT_SYMBOL(i2c_del_adapter);
|
||||||
|
|
||||||
|
static void i2c_parse_timing(struct device *dev, char *prop_name, u32 *cur_val_p,
|
||||||
|
u32 def_val, bool use_def)
|
||||||
|
{
|
||||||
|
int ret;
|
||||||
|
|
||||||
|
ret = device_property_read_u32(dev, prop_name, cur_val_p);
|
||||||
|
if (ret && use_def)
|
||||||
|
*cur_val_p = def_val;
|
||||||
|
|
||||||
|
dev_dbg(dev, "%s: %u\n", prop_name, *cur_val_p);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* i2c_parse_fw_timings - get I2C related timing parameters from firmware
|
* i2c_parse_fw_timings - get I2C related timing parameters from firmware
|
||||||
* @dev: The device to scan for I2C timing properties
|
* @dev: The device to scan for I2C timing properties
|
||||||
@ -1606,49 +1618,28 @@ EXPORT_SYMBOL(i2c_del_adapter);
|
|||||||
*/
|
*/
|
||||||
void i2c_parse_fw_timings(struct device *dev, struct i2c_timings *t, bool use_defaults)
|
void i2c_parse_fw_timings(struct device *dev, struct i2c_timings *t, bool use_defaults)
|
||||||
{
|
{
|
||||||
int ret;
|
bool u = use_defaults;
|
||||||
|
u32 d;
|
||||||
|
|
||||||
ret = device_property_read_u32(dev, "clock-frequency", &t->bus_freq_hz);
|
i2c_parse_timing(dev, "clock-frequency", &t->bus_freq_hz,
|
||||||
if (ret && use_defaults)
|
I2C_MAX_STANDARD_MODE_FREQ, u);
|
||||||
t->bus_freq_hz = I2C_MAX_STANDARD_MODE_FREQ;
|
|
||||||
|
|
||||||
ret = device_property_read_u32(dev, "i2c-scl-rising-time-ns", &t->scl_rise_ns);
|
d = t->bus_freq_hz <= I2C_MAX_STANDARD_MODE_FREQ ? 1000 :
|
||||||
if (ret && use_defaults) {
|
t->bus_freq_hz <= I2C_MAX_FAST_MODE_FREQ ? 300 : 120;
|
||||||
if (t->bus_freq_hz <= I2C_MAX_STANDARD_MODE_FREQ)
|
i2c_parse_timing(dev, "i2c-scl-rising-time-ns", &t->scl_rise_ns, d, u);
|
||||||
t->scl_rise_ns = 1000;
|
|
||||||
else if (t->bus_freq_hz <= I2C_MAX_FAST_MODE_FREQ)
|
|
||||||
t->scl_rise_ns = 300;
|
|
||||||
else
|
|
||||||
t->scl_rise_ns = 120;
|
|
||||||
}
|
|
||||||
|
|
||||||
ret = device_property_read_u32(dev, "i2c-scl-falling-time-ns", &t->scl_fall_ns);
|
d = t->bus_freq_hz <= I2C_MAX_FAST_MODE_FREQ ? 300 : 120;
|
||||||
if (ret && use_defaults) {
|
i2c_parse_timing(dev, "i2c-scl-falling-time-ns", &t->scl_fall_ns, d, u);
|
||||||
if (t->bus_freq_hz <= I2C_MAX_FAST_MODE_FREQ)
|
|
||||||
t->scl_fall_ns = 300;
|
|
||||||
else
|
|
||||||
t->scl_fall_ns = 120;
|
|
||||||
}
|
|
||||||
|
|
||||||
ret = device_property_read_u32(dev, "i2c-scl-internal-delay-ns", &t->scl_int_delay_ns);
|
i2c_parse_timing(dev, "i2c-scl-internal-delay-ns",
|
||||||
if (ret && use_defaults)
|
&t->scl_int_delay_ns, 0, u);
|
||||||
t->scl_int_delay_ns = 0;
|
i2c_parse_timing(dev, "i2c-sda-falling-time-ns", &t->sda_fall_ns,
|
||||||
|
t->scl_fall_ns, u);
|
||||||
ret = device_property_read_u32(dev, "i2c-sda-falling-time-ns", &t->sda_fall_ns);
|
i2c_parse_timing(dev, "i2c-sda-hold-time-ns", &t->sda_hold_ns, 0, u);
|
||||||
if (ret && use_defaults)
|
i2c_parse_timing(dev, "i2c-digital-filter-width-ns",
|
||||||
t->sda_fall_ns = t->scl_fall_ns;
|
&t->digital_filter_width_ns, 0, u);
|
||||||
|
i2c_parse_timing(dev, "i2c-analog-filter-cutoff-frequency",
|
||||||
ret = device_property_read_u32(dev, "i2c-sda-hold-time-ns", &t->sda_hold_ns);
|
&t->analog_filter_cutoff_freq_hz, 0, u);
|
||||||
if (ret && use_defaults)
|
|
||||||
t->sda_hold_ns = 0;
|
|
||||||
|
|
||||||
ret = device_property_read_u32(dev, "i2c-digital-filter-width-ns", &t->digital_filter_width_ns);
|
|
||||||
if (ret && use_defaults)
|
|
||||||
t->digital_filter_width_ns = 0;
|
|
||||||
|
|
||||||
ret = device_property_read_u32(dev, "i2c-analog-filter-cutoff-frequency", &t->analog_filter_cutoff_freq_hz);
|
|
||||||
if (ret && use_defaults)
|
|
||||||
t->analog_filter_cutoff_freq_hz = 0;
|
|
||||||
}
|
}
|
||||||
EXPORT_SYMBOL_GPL(i2c_parse_fw_timings);
|
EXPORT_SYMBOL_GPL(i2c_parse_fw_timings);
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user