static int hmc5843_init(struct hmc5843_data *data) { int ret; u8 id[3]; ret = regmap_bulk_read(data->regmap, HMC5843_ID_REG, id, ARRAY_SIZE(id)); if (ret < 0) return ret; if (id[0] != 'H' || id[1] != '4' || id[2] != '3') { dev_err(data->dev, "no HMC5843/5883/5883L/5983 sensor\n"); return -ENODEV; } ret = hmc5843_set_meas_conf(data, HMC5843_MEAS_CONF_NORMAL); if (ret < 0) return ret; ret = hmc5843_set_samp_freq(data, HMC5843_RATE_DEFAULT); if (ret < 0) return ret; ret = hmc5843_set_range_gain(data, HMC5843_RANGE_GAIN_DEFAULT); if (ret < 0) return ret; return hmc5843_set_mode(data, HMC5843_MODE_CONVERSION_CONTINUOUS); }
static int hmc5843_init(struct hmc5843_data *data) { int ret; u8 id[3]; ret = i2c_smbus_read_i2c_block_data(data->client, HMC5843_ID_REG, sizeof(id), id); if (ret < 0) return ret; if (id[0] != 'H' || id[1] != '4' || id[2] != '3') { dev_err(&data->client->dev, "no HMC5843/5883/5883L sensor\n"); return -ENODEV; } ret = hmc5843_set_meas_conf(data, HMC5843_MEAS_CONF_NORMAL); if (ret < 0) return ret; ret = hmc5843_set_samp_freq(data, HMC5843_RATE_DEFAULT); if (ret < 0) return ret; ret = hmc5843_set_range_gain(data, HMC5843_RANGE_GAIN_DEFAULT); if (ret < 0) return ret; return hmc5843_set_mode(data, HMC5843_MODE_CONVERSION_CONTINUOUS); }
static int hmc5843_write_raw(struct iio_dev *indio_dev, struct iio_chan_spec const *chan, int val, int val2, long mask) { struct hmc5843_data *data = iio_priv(indio_dev); int rate, range; switch (mask) { case IIO_CHAN_INFO_SAMP_FREQ: rate = hmc5843_get_samp_freq_index(data, val, val2); if (rate < 0) return -EINVAL; return hmc5843_set_samp_freq(data, rate); case IIO_CHAN_INFO_SCALE: range = hmc5843_get_scale_index(data, val, val2); if (range < 0) return -EINVAL; return hmc5843_set_range_gain(data, range); default: return -EINVAL; } }