Skip to content

Commit 8e2e297

Browse files
pmeerwjic23
authored andcommitted
staging:iio:hmc5843: Rewrite init function
Signed-off-by: Peter Meerwald <pmeerw@pmeerw.net> Signed-off-by: Jonathan Cameron <jic23@kernel.org>
1 parent 8a5c191 commit 8e2e297

File tree

1 file changed

+13
-21
lines changed

1 file changed

+13
-21
lines changed

drivers/staging/iio/magnetometer/hmc5843.c

Lines changed: 13 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -78,6 +78,7 @@ enum hmc5843_ids {
7878
* HMC5883: Typical data output rate
7979
*/
8080
#define HMC5843_RATE_OFFSET 0x02
81+
#define HMC5843_RATE_DEFAULT 0x04
8182
#define HMC5843_RATE_BITMASK 0x1C
8283
#define HMC5843_RATE_NOT_USED 0x07
8384

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

602-
/* Called when we have found a new HMC58X3 */
603-
static void hmc5843_init_client(struct i2c_client *client,
604-
const struct i2c_device_id *id)
603+
static void hmc5843_init(struct hmc5843_data *data)
605604
{
606-
struct iio_dev *indio_dev = i2c_get_clientdata(client);
607-
struct hmc5843_data *data = iio_priv(indio_dev);
608-
609-
data->variant = &hmc5843_chip_info_tbl[id->driver_data];
610-
indio_dev->channels = data->variant->channels;
611-
indio_dev->num_channels = 3;
612-
hmc5843_set_meas_conf(data, data->meas_conf);
613-
hmc5843_set_rate(data, data->rate);
614-
hmc5843_configure(client, data->operating_mode);
615-
i2c_smbus_write_byte_data(client, HMC5843_CONFIG_REG_B, data->range);
616-
mutex_init(&data->lock);
617-
618-
pr_info("%s initialized\n", id->name);
605+
hmc5843_set_meas_conf(data, HMC5843_MEAS_CONF_NORMAL);
606+
hmc5843_set_rate(data, HMC5843_RATE_DEFAULT);
607+
hmc5843_configure(data->client, HMC5843_MODE_CONVERSION_CONTINUOUS);
608+
i2c_smbus_write_byte_data(data->client, HMC5843_CONFIG_REG_B,
609+
HMC5843_RANGE_GAIN_DEFAULT);
619610
}
620611

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

645635
i2c_set_clientdata(client, indio_dev);
646-
hmc5843_init_client(client, id);
647-
648636
indio_dev->info = &hmc5843_info;
649637
indio_dev->name = id->name;
650638
indio_dev->dev.parent = &client->dev;
651639
indio_dev->modes = INDIO_DIRECT_MODE;
640+
indio_dev->channels = data->variant->channels;
641+
indio_dev->num_channels = 3;
642+
643+
hmc5843_init(data);
652644

653645
err = iio_device_register(indio_dev);
654646
if (err)

0 commit comments

Comments
 (0)