Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 8e2e2971 authored by Peter Meerwald's avatar Peter Meerwald Committed by Jonathan Cameron
Browse files

staging:iio:hmc5843: Rewrite init function

parent 8a5c1913
Loading
Loading
Loading
Loading
+13 −21
Original line number Diff line number Diff line
@@ -78,6 +78,7 @@ enum hmc5843_ids {
 * HMC5883: Typical data output rate
 */
#define HMC5843_RATE_OFFSET			0x02
#define HMC5843_RATE_DEFAULT			0x04
#define HMC5843_RATE_BITMASK			0x1C
#define HMC5843_RATE_NOT_USED			0x07

@@ -599,23 +600,13 @@ static const struct hmc5843_chip_info hmc5843_chip_info_tbl[] = {
	},
};

/* Called when we have found a new HMC58X3 */
static void hmc5843_init_client(struct i2c_client *client,
				const struct i2c_device_id *id)
static void hmc5843_init(struct hmc5843_data *data)
{
	struct iio_dev *indio_dev = i2c_get_clientdata(client);
	struct hmc5843_data *data = iio_priv(indio_dev);

	data->variant = &hmc5843_chip_info_tbl[id->driver_data];
	indio_dev->channels = data->variant->channels;
	indio_dev->num_channels = 3;
	hmc5843_set_meas_conf(data, data->meas_conf);
	hmc5843_set_rate(data, data->rate);
	hmc5843_configure(client, data->operating_mode);
	i2c_smbus_write_byte_data(client, HMC5843_CONFIG_REG_B, data->range);
	mutex_init(&data->lock);

	pr_info("%s initialized\n", id->name);
	hmc5843_set_meas_conf(data, HMC5843_MEAS_CONF_NORMAL);
	hmc5843_set_rate(data, HMC5843_RATE_DEFAULT);
	hmc5843_configure(data->client, HMC5843_MODE_CONVERSION_CONTINUOUS);
	i2c_smbus_write_byte_data(data->client, HMC5843_CONFIG_REG_B,
		HMC5843_RANGE_GAIN_DEFAULT);
}

static const struct iio_info hmc5843_info = {
@@ -638,17 +629,18 @@ static int hmc5843_probe(struct i2c_client *client,
	/* default settings at probe */
	data = iio_priv(indio_dev);
	data->client = client;
	data->meas_conf = HMC5843_MEAS_CONF_NORMAL;
	data->range = HMC5843_RANGE_GAIN_DEFAULT;
	data->operating_mode = HMC5843_MODE_CONVERSION_CONTINUOUS;
	data->variant = &hmc5843_chip_info_tbl[id->driver_data];
	mutex_init(&data->lock);

	i2c_set_clientdata(client, indio_dev);
	hmc5843_init_client(client, id);

	indio_dev->info = &hmc5843_info;
	indio_dev->name = id->name;
	indio_dev->dev.parent = &client->dev;
	indio_dev->modes = INDIO_DIRECT_MODE;
	indio_dev->channels = data->variant->channels;
	indio_dev->num_channels = 3;

	hmc5843_init(data);

	err = iio_device_register(indio_dev);
	if (err)