staticint mmc35240_get_samp_freq_index(struct mmc35240_data *data, int val, int val2)
{ int i;
for (i = 0; i < ARRAY_SIZE(mmc35240_samp_freq); i++) if (mmc35240_samp_freq[i].val == val &&
mmc35240_samp_freq[i].val2 == val2) return i; return -EINVAL;
}
ret = regmap_read(data->regmap, MMC35240_REG_ID, ®_id); if (ret < 0) {
dev_err(&data->client->dev, "Error reading product id\n"); return ret;
}
dev_dbg(&data->client->dev, "MMC35240 chip id %x\n", reg_id);
/* *makesurewerestoresensorcharacteristics,bydoing *aSET/RESETsequence,theaxispolaritybeingnaturally *alignedafterRESET
*/
ret = mmc35240_hw_set(data, true); if (ret < 0) return ret;
usleep_range(MMC35240_WAIT_SET_RESET, MMC35240_WAIT_SET_RESET + 1);
ret = mmc35240_hw_set(data, false); if (ret < 0) return ret;
/* set default sampling frequency */
ret = regmap_update_bits(data->regmap, MMC35240_REG_CTRL1,
MMC35240_CTRL1_BW_MASK,
data->res << MMC35240_CTRL1_BW_SHIFT); if (ret < 0) return ret;
ret = regmap_bulk_read(data->regmap, MMC35240_OTP_START_ADDR,
otp_data, sizeof(otp_data)); if (ret < 0) return ret;
ret = regmap_write(data->regmap, MMC35240_REG_CTRL0,
MMC35240_CTRL0_TM_BIT); if (ret < 0) return ret;
while (tries-- > 0) {
ret = regmap_read(data->regmap, MMC35240_REG_STATUS,
®_status); if (ret < 0) return ret; if (reg_status & MMC35240_STATUS_MEAS_DONE_BIT) break; /* minimum wait time to complete measurement is 10 ms */
usleep_range(10000, 11000);
}
if (tries < 0) {
dev_err(&data->client->dev, "data not ready\n"); return -EIO;
}
return0;
}
staticint mmc35240_read_measurement(struct mmc35240_data *data, __le16 buf[3])
{ int ret;
ret = mmc35240_take_measurement(data); if (ret < 0) return ret;
staticint mmc35240_write_raw(struct iio_dev *indio_dev, struct iio_chan_spec const *chan, int val, int val2, long mask)
{ struct mmc35240_data *data = iio_priv(indio_dev); int i, ret;
switch (mask) { case IIO_CHAN_INFO_SAMP_FREQ:
i = mmc35240_get_samp_freq_index(data, val, val2); if (i < 0) return -EINVAL;
mutex_lock(&data->mutex);
ret = regmap_update_bits(data->regmap, MMC35240_REG_CTRL1,
MMC35240_CTRL1_BW_MASK,
i << MMC35240_CTRL1_BW_SHIFT);
mutex_unlock(&data->mutex); return ret; default: return -EINVAL;
}
}
staticbool mmc35240_is_writeable_reg(struct device *dev, unsignedint reg)
{ switch (reg) { case MMC35240_REG_CTRL0: case MMC35240_REG_CTRL1: returntrue; default: returnfalse;
}
}
staticbool mmc35240_is_readable_reg(struct device *dev, unsignedint reg)
{ switch (reg) { case MMC35240_REG_XOUT_L: case MMC35240_REG_XOUT_H: case MMC35240_REG_YOUT_L: case MMC35240_REG_YOUT_H: case MMC35240_REG_ZOUT_L: case MMC35240_REG_ZOUT_H: case MMC35240_REG_STATUS: case MMC35240_REG_ID: returntrue; default: returnfalse;
}
}
staticbool mmc35240_is_volatile_reg(struct device *dev, unsignedint reg)
{ switch (reg) { case MMC35240_REG_CTRL0: case MMC35240_REG_CTRL1: returnfalse; default: returntrue;
}
}
regcache_mark_dirty(data->regmap);
ret = regcache_sync_region(data->regmap, MMC35240_REG_CTRL0,
MMC35240_REG_CTRL1); if (ret < 0)
dev_err(dev, "Failed to restore control registers\n");
MODULE_AUTHOR("Daniel Baluta <daniel.baluta@intel.com>");
MODULE_DESCRIPTION("MEMSIC MMC35240 magnetic sensor driver");
MODULE_LICENSE("GPL v2");
Messung V0.5 in Prozent
¤ Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.0.14Bemerkung:
(vorverarbeitet am 2026-09-28)
¤
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.