On Tue, Sep 13, 2022 at 12:27 AM Eddie James eajames@linux.ibm.com wrote:
The DPS310 chip has been observed to get "stuck" such that pressure and temperature measurements are never indicated as "ready" in the MEAS_CFG register. The only solution is to reset the device and try again. In order to avoid continual failures, use a boolean flag to only try the reset after timeout once if errors persist.
...
+static int dps310_ready_status(struct dps310_data *data, int ready_bit, int timeout) +{
int ready;int sleep = DPS310_POLL_SLEEP_US(timeout);
Longer line first?
return regmap_read_poll_timeout(data->regmap, DPS310_MEAS_CFG, ready, ready & ready_bit,sleep, timeout);+}
...
+static int dps310_ready(struct dps310_data *data, int ready_bit, int timeout) +{
int rc;rc = dps310_ready_status(data, ready_bit, timeout);if (rc) {if (rc == -ETIMEDOUT && !data->timeout_recovery_failed) {int rc2;/* Reset and reinitialize the chip. */rc2 = dps310_reset_reinit(data);if (rc2) {
With below in mind this might become
if (dps310_reset_init(...)) ... = true;
data->timeout_recovery_failed = true;} else {/* Try again to get sensor ready status. */
rc2 = dps310_ready_status(data, ready_bit, timeout);if (rc2)data->timeout_recovery_failed = true;
Shouldn't you re-use rc here again?
elsereturn 0;}}return rc;}