Skip to contentSkip to conversation

staging:iio:hmc5843: Few adjustments and support for hmc5983

PATCH Superseded Josef Gajdusek 3 participants 8 messages Jul 7, 2014 – Jul 8, 2014

Subsystems (3)

v2 of 5 Superseded Latest is v5 →

lore
Share & tools
lore
#0 lore raw

v2 cover staging:iio:hmc5843: Few adjustments and support for hmc5983

This patch series modifies the hmc5843 driver to support the hmc5983 i2c and spi interfaces.

Josef Gajdusek (5):
staging:iio:hmc5843: Added regmap support staging:iio:hmc5843: Split hmc5843.c to multiple files staging:iio:hmc5843: register <-> value arrays now can have different
lengths
staging:iio:hmc5843: Add support for i2c hmc5983 staging:iio:hmc5843: Add support for spi hmc5983

 drivers/staging/iio/magnetometer/Kconfig        |  23 +-
 drivers/staging/iio/magnetometer/Makefile       |   4 +-
 drivers/staging/iio/magnetometer/hmc5843.c      | 652 ------------------------
 drivers/staging/iio/magnetometer/hmc5843.h      |  76 +++
 drivers/staging/iio/magnetometer/hmc5843_core.c | 626 +++++++++++++++++++++++
 drivers/staging/iio/magnetometer/hmc5843_i2c.c  | 107 ++++
 drivers/staging/iio/magnetometer/hmc5843_spi.c  | 105 ++++
 7 files changed, 937 insertions(+), 656 deletions(-)
 delete mode 100644 drivers/staging/iio/magnetometer/hmc5843.c
 create mode 100644 drivers/staging/iio/magnetometer/hmc5843.h
 create mode 100644 drivers/staging/iio/magnetometer/hmc5843_core.c
 create mode 100644 drivers/staging/iio/magnetometer/hmc5843_i2c.c
 create mode 100644 drivers/staging/iio/magnetometer/hmc5843_spi.c
Signature · 1 line
1.8.5.5
#1 lore raw

PATCH v2 1/5 staging:iio:hmc5843: Added regmap support

This patch changes hmc5843.c to use regmap. This provides transparent caching to the code as well as abstraction necessary to add support for SPI-based hmc5983.

---
 drivers/staging/iio/magnetometer/Kconfig   |   1 +
 drivers/staging/iio/magnetometer/hmc5843.c | 139 +++++++++++++++++++----------
 2 files changed, 95 insertions(+), 45 deletions(-)
drivers/staging/iio/magnetometer/Kconfig +1 -0
index 34634da..ad88d61 100644
@@ -8,6 +8,7 @@ config SENSORS_HMC5843
 	depends on I2C
 	select IIO_BUFFER
 	select IIO_TRIGGERED_BUFFER
+	select REGMAP_I2C
 	help
 	  Say Y here to add support for the Honeywell HMC5843, HMC5883 and
 	  HMC5883L 3-Axis Magnetometer (digital compass).
drivers/staging/iio/magnetometer/hmc5843.c +94 -45

262 lines not on this page · raw message

Signature · 1 line
1.8.5.5
#2 lore raw

PATCH v2 2/5 staging:iio:hmc5843: Split hmc5843.c to multiple files

In reply to Josef Gajdusek

This patch splits hmc5843.c to multiple files - the interface-agnostic hmc5843_core.c, i2c specific hmc5843_i2c.c and header file hmc5843.h. This is another step to add support of SPI-enabled hmc5983.

---
 drivers/staging/iio/magnetometer/Kconfig        |  16 +-
 drivers/staging/iio/magnetometer/Makefile       |   3 +-
 drivers/staging/iio/magnetometer/hmc5843.c      | 701 ------------------------
 drivers/staging/iio/magnetometer/hmc5843.h      |  75 +++
 drivers/staging/iio/magnetometer/hmc5843_core.c | 600 ++++++++++++++++++++
 drivers/staging/iio/magnetometer/hmc5843_i2c.c  | 106 ++++
 6 files changed, 795 insertions(+), 706 deletions(-)
 delete mode 100644 drivers/staging/iio/magnetometer/hmc5843.c
 create mode 100644 drivers/staging/iio/magnetometer/hmc5843.h
 create mode 100644 drivers/staging/iio/magnetometer/hmc5843_core.c
 create mode 100644 drivers/staging/iio/magnetometer/hmc5843_i2c.c
drivers/staging/iio/magnetometer/Kconfig +12 -4
index ad88d61..28c2612 100644
@@ -5,15 +5,23 @@ menu "Magnetometer sensors"
 
 config SENSORS_HMC5843
 	tristate "Honeywell HMC5843/5883/5883L 3-Axis Magnetometer"
-	depends on I2C
+	depends on (I2C || SPI_MASTER)
 	select IIO_BUFFER
 	select IIO_TRIGGERED_BUFFER
-	select REGMAP_I2C
+	select SENSORS_HMC5843_I2C if (I2C)
 	help
 	  Say Y here to add support for the Honeywell HMC5843, HMC5883 and
 	  HMC5883L 3-Axis Magnetometer (digital compass).
 
-	  To compile this driver as a module, choose M here: the module
-	  will be called hmc5843.
+	  This driver can also be compiled as a set of modules.
+	  If so, these modules will be created:
+	  - hmc5843_core (core functions)
+	  - hmc5843_i2c (support for HMC5843, HMC5883 and HMC5883L)
+
+config SENSORS_HMC5843_I2C
+	tristate
+	depends on I2C
+	depends on SENSORS_HMC5843
+	select REGMAP_I2C
 
 endmenu
drivers/staging/iio/magnetometer/Makefile +2 -1
index f9bfb2e..65baf1c 100644
@@ -2,4 +2,5 @@
 # Makefile for industrial I/O Magnetometer sensors
 #
 
-obj-$(CONFIG_SENSORS_HMC5843)	+= hmc5843.o
+obj-$(CONFIG_SENSORS_HMC5843)		+= hmc5843_core.o
+obj-$(CONFIG_SENSORS_HMC5843_I2C)	+= hmc5843_i2c.o
drivers/staging/iio/magnetometer/hmc5843.c deleted +0 -701

701 lines not on this page · raw message

drivers/staging/iio/magnetometer/hmc5843.h new file +75 -0

75 lines not on this page · raw message

drivers/staging/iio/magnetometer/hmc5843_core.c new file +600 -0

600 lines not on this page · raw message

drivers/staging/iio/magnetometer/hmc5843_i2c.c new file +106 -0

106 lines not on this page · raw message

Signature · 1 line
1.8.5.5
#3 lore raw

Re: [PATCH v2 2/5] staging:iio:hmc5843: Split hmc5843.c to multiple files

When you compare the old and new versions of hmc5843_read_raw() then it appears there is a bug fix or something which hasn't been documentented in the changelog.

Quoted 13 lines
drivers/staging/iio/magnetometer/hmc5843.c deleted +0 -13
-static int hmc5843_read_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 rval;
-	int ret;
-
-	switch (mask) {
-	case IIO_CHAN_INFO_RAW:
-		return hmc5843_read_measurement(data, chan->scan_index, val);
-	case IIO_CHAN_INFO_SCALE:
-		ret = regmap_read(data->regmap, HMC5843_CONFIG_REG_B, &rval);

drivers/staging/iio/magnetometer/hmc5843.c line 379

Quoted 10 lines
drivers/staging/iio/magnetometer/hmc5843.c deleted +0 -10
-		if (ret < 0)
-			return ret;
-		*val = 0;
-		*val2 = data->variant->regval_to_nanoscale[rval >> HMC5843_RANGE_GAIN_OFFSET];
-		return IIO_VAL_INT_PLUS_NANO;
-	case IIO_CHAN_INFO_SAMP_FREQ:
-		ret = regmap_read(data->regmap, HMC5843_CONFIG_REG_A, &rval);
-		if (ret < 0)
-			return ret;
-		rval &= HMC5843_RATE_MASK;
                ^^^^^^^^^^^^^^^^^^^^^^^^^

HMC5843_RATE_MASK is 0x1c.

Quoted 21 lines
drivers/staging/iio/magnetometer/hmc5843_core.c new file +14 -6
-		*val = data->variant->regval_to_samp_freq[rval][0];
-		*val2 = data->variant->regval_to_samp_freq[rval][1];
-		return IIO_VAL_INT_PLUS_MICRO;
-	}
-	return -EINVAL;
-}
 
+static int hmc5843_read_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 rval;
+	int ret;
+
+	switch (mask) {
+	case IIO_CHAN_INFO_RAW:
+		return hmc5843_read_measurement(data, chan->scan_index, val);
+	case IIO_CHAN_INFO_SCALE:
+		ret = regmap_read(data->regmap, HMC5843_CONFIG_REG_B, &rval);
+		if (ret < 0)

drivers/staging/iio/magnetometer/hmc5843_core.c line 360

Quoted 10 lines
drivers/staging/iio/magnetometer/hmc5843_core.c new file +10 -0
+			return ret;
+		rval >>= HMC5843_RANGE_GAIN_OFFSET;
+		*val = 0;
+		*val2 = data->variant->regval_to_nanoscale[rval];
+		return IIO_VAL_INT_PLUS_NANO;
+	case IIO_CHAN_INFO_SAMP_FREQ:
+		ret = regmap_read(data->regmap, HMC5843_CONFIG_REG_A, &rval);
+		if (ret < 0)
+			return ret;
+		rval >>= HMC5843_RATE_OFFSET;
                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^

HMC5843_RATE_OFFSET is 0x02.

drivers/staging/iio/magnetometer/hmc5843_core.c line 366

Quoted 6 lines
drivers/staging/iio/magnetometer/hmc5843_core.c new file +6 -0
+		*val = data->variant->regval_to_samp_freq[rval][0];
+		*val2 = data->variant->regval_to_samp_freq[rval][1];
+		return IIO_VAL_INT_PLUS_MICRO;
+	}
+	return -EINVAL;
+}

Ideally this patch would be a straight move and no code changes.

regards,
dan carpenter

#4 lore raw

Re: [PATCH v2 2/5] staging:iio:hmc5843: Split hmc5843.c to multiple files

Quoted 73 lines · Dan Carpenter

When you compare the old and new versions of hmc5843_read_raw() then it appears there is a bug fix or something which hasn't been documentented in the changelog.

Quoted 13 lines
drivers/staging/iio/magnetometer/hmc5843.c deleted +0 -13
-static int hmc5843_read_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 rval;
-	int ret;
-
-	switch (mask) {
-	case IIO_CHAN_INFO_RAW:
-		return hmc5843_read_measurement(data, chan->scan_index, val);
-	case IIO_CHAN_INFO_SCALE:
-		ret = regmap_read(data->regmap, HMC5843_CONFIG_REG_B, &rval);

drivers/staging/iio/magnetometer/hmc5843.c line 379

Quoted 10 lines
drivers/staging/iio/magnetometer/hmc5843.c deleted +0 -10
-		if (ret < 0)
-			return ret;
-		*val = 0;
-		*val2 = data->variant->regval_to_nanoscale[rval >> HMC5843_RANGE_GAIN_OFFSET];
-		return IIO_VAL_INT_PLUS_NANO;
-	case IIO_CHAN_INFO_SAMP_FREQ:
-		ret = regmap_read(data->regmap, HMC5843_CONFIG_REG_A, &rval);
-		if (ret < 0)
-			return ret;
-		rval &= HMC5843_RATE_MASK;
                ^^^^^^^^^^^^^^^^^^^^^^^^^

HMC5843_RATE_MASK is 0x1c.

Quoted 21 lines
drivers/staging/iio/magnetometer/hmc5843_core.c new file +14 -6
-		*val = data->variant->regval_to_samp_freq[rval][0];
-		*val2 = data->variant->regval_to_samp_freq[rval][1];
-		return IIO_VAL_INT_PLUS_MICRO;
-	}
-	return -EINVAL;
-}
 
+static int hmc5843_read_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 rval;
+	int ret;
+
+	switch (mask) {
+	case IIO_CHAN_INFO_RAW:
+		return hmc5843_read_measurement(data, chan->scan_index, val);
+	case IIO_CHAN_INFO_SCALE:
+		ret = regmap_read(data->regmap, HMC5843_CONFIG_REG_B, &rval);
+		if (ret < 0)

drivers/staging/iio/magnetometer/hmc5843_core.c line 360

Quoted 10 lines
drivers/staging/iio/magnetometer/hmc5843_core.c new file +10 -0
+			return ret;
+		rval >>= HMC5843_RANGE_GAIN_OFFSET;
+		*val = 0;
+		*val2 = data->variant->regval_to_nanoscale[rval];
+		return IIO_VAL_INT_PLUS_NANO;
+	case IIO_CHAN_INFO_SAMP_FREQ:
+		ret = regmap_read(data->regmap, HMC5843_CONFIG_REG_A, &rval);
+		if (ret < 0)
+			return ret;
+		rval >>= HMC5843_RATE_OFFSET;
                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^

HMC5843_RATE_OFFSET is 0x02.

drivers/staging/iio/magnetometer/hmc5843_core.c line 366

Quoted 6 lines
drivers/staging/iio/magnetometer/hmc5843_core.c new file +6 -0
+		*val = data->variant->regval_to_samp_freq[rval][0];
+		*val2 = data->variant->regval_to_samp_freq[rval][1];
+		return IIO_VAL_INT_PLUS_MICRO;
+	}
+	return -EINVAL;
+}

Ideally this patch would be a straight move and no code changes.

Quoted 2 lines

regards,
dan carpenter

It seems I forgot to change the first commit when I discovered this bug. I will resend fixed version within few minutes.

#5 lore raw

PATCH v2 3/5 staging:iio:hmc5843: register <-> value arrays now can have different lengths

In reply to Josef Gajdusek

Changed structure of struct hmc5843_chip_info to include length of translation arrays. Code previously using #defined constant has been changed accordingly. This allows to integrate devices which do have different amounts of available rates/scales.

---
 drivers/staging/iio/magnetometer/hmc5843_core.c | 34 +++++++++++++++++--------
 1 file changed, 23 insertions(+), 11 deletions(-)
drivers/staging/iio/magnetometer/hmc5843_core.c +23 -11
index efabca5..a808e4e 100644
@@ -39,7 +39,6 @@
  */
 #define HMC5843_RANGE_GAIN_OFFSET		0x05
 #define HMC5843_RANGE_GAIN_DEFAULT		0x01
-#define HMC5843_RANGE_GAINS			8
 #define HMC5843_RANGE_GAIN_MASK		0xe0
 
 /* Device status */
@@ -59,7 +58,6 @@
  */
 #define HMC5843_RATE_OFFSET			0x02
 #define HMC5843_RATE_DEFAULT			0x04
-#define HMC5843_RATES				7
 #define HMC5843_RATE_MASK		0x1c
 
 /* Device measurement configuration */
@@ -69,15 +67,15 @@
 #define HMC5843_MEAS_CONF_MASK			0x03
 
 /* Scaling factors: 10000000/Gain */
-static const int hmc5843_regval_to_nanoscale[HMC5843_RANGE_GAINS] = {
+static const int hmc5843_regval_to_nanoscale[] = {
 	6173, 7692, 10309, 12821, 18868, 21739, 25641, 35714
 };
 
-static const int hmc5883_regval_to_nanoscale[HMC5843_RANGE_GAINS] = {
+static const int hmc5883_regval_to_nanoscale[] = {
 	7812, 9766, 13021, 16287, 24096, 27701, 32573, 45662
 };
 
-static const int hmc5883l_regval_to_nanoscale[HMC5843_RANGE_GAINS] = {
+static const int hmc5883l_regval_to_nanoscale[] = {
 	7299, 9174, 12195, 15152, 22727, 25641, 30303, 43478
 };
 
@@ -94,11 +92,11 @@ static const int hmc5883l_regval_to_nanoscale[HMC5843_RANGE_GAINS] = {
  * 6		| 50			| 75
  * 7		| Not used		| Not used
  */
-static const int hmc5843_regval_to_samp_freq[7][2] = {
+static const int hmc5843_regval_to_samp_freq[][2] = {
 	{0, 500000}, {1, 0}, {2, 0}, {5, 0}, {10, 0}, {20, 0}, {50, 0}
 };
 
-static const int hmc5883_regval_to_samp_freq[7][2] = {
+static const int hmc5883_regval_to_samp_freq[][2] = {
 	{0, 750000}, {1, 500000}, {3, 0}, {7, 500000}, {15, 0}, {30, 0},
 	{75, 0}
 };
@@ -107,7 +105,9 @@ static const int hmc5883_regval_to_samp_freq[7][2] = {
 struct hmc5843_chip_info {
 	const struct iio_chan_spec *channels;
 	const int (*regval_to_samp_freq)[2];
+	const int n_regval_to_samp_freq;
 	const int *regval_to_nanoscale;
+	const int n_regval_to_nanoscale;
 };
 
 /* The lower two bits contain the current conversion mode */
@@ -248,7 +248,7 @@ static ssize_t hmc5843_show_samp_freq_avail(struct device *dev,
 	size_t len = 0;
 	int i;
 
-	for (i = 0; i < HMC5843_RATES; i++)
+	for (i = 0; i < data->variant->n_regval_to_samp_freq; i++)
 		len += scnprintf(buf + len, PAGE_SIZE - len,
 			"%d.%d ", data->variant->regval_to_samp_freq[i][0],
 			data->variant->regval_to_samp_freq[i][1]);
@@ -278,7 +278,7 @@ static int hmc5843_get_samp_freq_index(struct hmc5843_data *data,
 {
 	int i;
 
-	for (i = 0; i < HMC5843_RATES; i++)
+	for (i = 0; i < data->variant->n_regval_to_samp_freq; i++)
 		if (val == data->variant->regval_to_samp_freq[i][0] &&
 			val2 == data->variant->regval_to_samp_freq[i][1])
 			return i;
@@ -307,7 +307,7 @@ static ssize_t hmc5843_show_scale_avail(struct device *dev,
 	size_t len = 0;
 	int i;
 
-	for (i = 0; i < HMC5843_RANGE_GAINS; i++)
+	for (i = 0; i < data->variant->n_regval_to_nanoscale; i++)
 		len += scnprintf(buf + len, PAGE_SIZE - len,
 			"0.%09d ", data->variant->regval_to_nanoscale[i]);
 
@@ -327,7 +327,7 @@ static int hmc5843_get_scale_index(struct hmc5843_data *data, int val, int val2)
 	if (val != 0)
 		return -EINVAL;
 
-	for (i = 0; i < HMC5843_RANGE_GAINS; i++)
+	for (i = 0; i < data->variant->n_regval_to_nanoscale; i++)
 		if (val2 == data->variant->regval_to_nanoscale[i])
 			return i;
 
@@ -480,17 +480,29 @@ static const struct hmc5843_chip_info hmc5843_chip_info_tbl[] = {
 	[HMC5843_ID] = {
 		.channels = hmc5843_channels,
 		.regval_to_samp_freq = hmc5843_regval_to_samp_freq,
+		.n_regval_to_samp_freq =
+				ARRAY_SIZE(hmc5843_regval_to_samp_freq),
 		.regval_to_nanoscale = hmc5843_regval_to_nanoscale,
+		.n_regval_to_nanoscale =
+				ARRAY_SIZE(hmc5843_regval_to_nanoscale),
 	},
 	[HMC5883_ID] = {
 		.channels = hmc5883_channels,
 		.regval_to_samp_freq = hmc5883_regval_to_samp_freq,
+		.n_regval_to_samp_freq =
+				ARRAY_SIZE(hmc5883_regval_to_samp_freq),
 		.regval_to_nanoscale = hmc5883_regval_to_nanoscale,
+		.n_regval_to_nanoscale =
+				ARRAY_SIZE(hmc5883_regval_to_nanoscale),
 	},
 	[HMC5883L_ID] = {
 		.channels = hmc5883_channels,
 		.regval_to_samp_freq = hmc5883_regval_to_samp_freq,
+		.n_regval_to_samp_freq =
+				ARRAY_SIZE(hmc5883_regval_to_samp_freq),
 		.regval_to_nanoscale = hmc5883l_regval_to_nanoscale,
+		.n_regval_to_nanoscale =
+				ARRAY_SIZE(hmc5883l_regval_to_nanoscale),
 	},
 };
 
Signature · 1 line
1.8.5.5
#6 lore raw

PATCH v2 4/5 staging:iio:hmc5843: Add support for i2c hmc5983

In reply to Josef Gajdusek

This patch adds support for the hmc5983 i2c interface.
This chip is almost identical to the hmc5883. The difference being added temperature compensation, additional available sample rate (220Hz) and an SPI interface.

---
 drivers/staging/iio/magnetometer/Kconfig        |  2 +-
 drivers/staging/iio/magnetometer/hmc5843.h      |  1 +
 drivers/staging/iio/magnetometer/hmc5843_core.c | 20 +++++++++++++++++---
 drivers/staging/iio/magnetometer/hmc5843_i2c.c  |  5 +++--
 4 files changed, 22 insertions(+), 6 deletions(-)
drivers/staging/iio/magnetometer/Kconfig +1 -1
index 28c2612..32c69c0 100644
@@ -16,7 +16,7 @@ config SENSORS_HMC5843
 	  This driver can also be compiled as a set of modules.
 	  If so, these modules will be created:
 	  - hmc5843_core (core functions)
-	  - hmc5843_i2c (support for HMC5843, HMC5883 and HMC5883L)
+	  - hmc5843_i2c (support for HMC5843, HMC5883, HMC5883L and HMC5983)
 
 config SENSORS_HMC5843_I2C
 	tristate
drivers/staging/iio/magnetometer/hmc5843.h +1 -0
index 4e3cce3..c36041a 100644
@@ -29,6 +29,7 @@ enum hmc5843_ids {
 	HMC5843_ID,
 	HMC5883_ID,
 	HMC5883L_ID,
+	HMC5983_ID,
 };
 
 struct hmc5843_data {
drivers/staging/iio/magnetometer/hmc5843_core.c +17 -3
index a808e4e..fe7a79a 100644
@@ -101,6 +101,11 @@ static const int hmc5883_regval_to_samp_freq[][2] = {
 	{75, 0}
 };
 
+static const int hmc5983_regval_to_samp_freq[][2] = {
+	{0, 750000}, {1, 500000}, {3, 0}, {7, 500000}, {15, 0}, {30, 0},
+	{75, 0}, {220, 0}
+};
+
 /* Describe chip variants */
 struct hmc5843_chip_info {
 	const struct iio_chan_spec *channels;
@@ -457,7 +462,7 @@ static const struct iio_chan_spec hmc5843_channels[] = {
 	IIO_CHAN_SOFT_TIMESTAMP(3),
 };
 
-/* Beware: Y and Z are exchanged on HMC5883 */
+/* Beware: Y and Z are exchanged on HMC5883 and 5983 */
 static const struct iio_chan_spec hmc5883_channels[] = {
 	HMC5843_CHANNEL(X, 0),
 	HMC5843_CHANNEL(Z, 1),
@@ -504,6 +509,15 @@ static const struct hmc5843_chip_info hmc5843_chip_info_tbl[] = {
 		.n_regval_to_nanoscale =
 				ARRAY_SIZE(hmc5883l_regval_to_nanoscale),
 	},
+	[HMC5983_ID] = {
+		.channels = hmc5883_channels,
+		.regval_to_samp_freq = hmc5983_regval_to_samp_freq,
+		.n_regval_to_samp_freq =
+				ARRAY_SIZE(hmc5983_regval_to_samp_freq),
+		.regval_to_nanoscale = hmc5883l_regval_to_nanoscale,
+		.n_regval_to_nanoscale =
+				ARRAY_SIZE(hmc5883l_regval_to_nanoscale),
+	}
 };
 
 static int hmc5843_init(struct hmc5843_data *data)
@@ -516,7 +530,7 @@ static int hmc5843_init(struct hmc5843_data *data)
 	if (ret < 0)
 		return ret;
 	if (id[0] != 'H' || id[1] != '4' || id[2] != '3') {
-		dev_err(data->dev, "no HMC5843/5883/5883L sensor\n");
+		dev_err(data->dev, "no HMC5843/5883/5883L/5983 sensor\n");
 		return -ENODEV;
 	}
 
@@ -608,5 +622,5 @@ int hmc5843_common_remove(struct iio_dev *indio_dev)
 EXPORT_SYMBOL(hmc5843_common_remove);
 
 MODULE_AUTHOR("Shubhrajyoti Datta <[email protected]>");
-MODULE_DESCRIPTION("HMC5843/5883/5883L core driver");
+MODULE_DESCRIPTION("HMC5843/5883/5883L/5983 core driver");
 MODULE_LICENSE("GPL");
drivers/staging/iio/magnetometer/hmc5843_i2c.c +3 -2
index b3c92d9..753c914 100644
@@ -1,5 +1,5 @@
 /*
- * i2c driver for hmc5843/5843/5883/5883l
+ * i2c driver for hmc5843/5843/5883/5883l/5983
  *
  * Split from hmc5843.c
  * Copyright (C) Josef Gajdusek <[email protected]>
@@ -79,6 +79,7 @@ static const struct i2c_device_id hmc5843_id[] = {
 	{ "hmc5843", HMC5843_ID },
 	{ "hmc5883", HMC5883_ID },
 	{ "hmc5883l", HMC5883L_ID },
+	{ "hmc5983", HMC5983_ID },
 	{ }
 };
 MODULE_DEVICE_TABLE(i2c, hmc5843_id);
@@ -102,5 +103,5 @@ static struct i2c_driver hmc5843_driver = {
 module_i2c_driver(hmc5843_driver);
 
 MODULE_AUTHOR("Josef Gajdusek <[email protected]>");
-MODULE_DESCRIPTION("HMC5843/5883/5883L i2c driver");
+MODULE_DESCRIPTION("HMC5843/5883/5883L/5983 i2c driver");
 MODULE_LICENSE("GPL");
Signature · 1 line
1.8.5.5
#7 lore raw

PATCH v2 5/5 staging:iio:hmc5843: Add support for spi hmc5983

In reply to Josef Gajdusek

This patch adds support for the hmc5983 spi interface.
This chip is almost identical to the hmc5883. The difference being added temperature compensation, additional available sample rate (220Hz) and an SPI interface.

---
 drivers/staging/iio/magnetometer/Kconfig       |   8 ++
 drivers/staging/iio/magnetometer/Makefile      |   1 +
 drivers/staging/iio/magnetometer/hmc5843_spi.c | 105 +++++++++++++++++++++++++
 3 files changed, 114 insertions(+)
 create mode 100644 drivers/staging/iio/magnetometer/hmc5843_spi.c
drivers/staging/iio/magnetometer/Kconfig +8 -0
index 32c69c0..bc5c355 100644
@@ -9,6 +9,7 @@ config SENSORS_HMC5843
 	select IIO_BUFFER
 	select IIO_TRIGGERED_BUFFER
 	select SENSORS_HMC5843_I2C if (I2C)
+	select SENSORS_HMC5843_SPI if (SPI_MASTER)
 	help
 	  Say Y here to add support for the Honeywell HMC5843, HMC5883 and
 	  HMC5883L 3-Axis Magnetometer (digital compass).
@@ -17,6 +18,7 @@ config SENSORS_HMC5843
 	  If so, these modules will be created:
 	  - hmc5843_core (core functions)
 	  - hmc5843_i2c (support for HMC5843, HMC5883, HMC5883L and HMC5983)
+	  - hmc5843_spi (support for HMC5983)
 
 config SENSORS_HMC5843_I2C
 	tristate
@@ -24,4 +26,10 @@ config SENSORS_HMC5843_I2C
 	depends on SENSORS_HMC5843
 	select REGMAP_I2C
 
+config SENSORS_HMC5843_SPI
+	tristate
+	depends on SPI_MASTER
+	depends on SENSORS_HMC5843
+	select REGMAP_SPI
+
 endmenu
drivers/staging/iio/magnetometer/Makefile +1 -0
index 65baf1c..33761a1 100644
@@ -4,3 +4,4 @@
 
 obj-$(CONFIG_SENSORS_HMC5843)		+= hmc5843_core.o
 obj-$(CONFIG_SENSORS_HMC5843_I2C)	+= hmc5843_i2c.o
+obj-$(CONFIG_SENSORS_HMC5843_SPI)	+= hmc5843_spi.o
drivers/staging/iio/magnetometer/hmc5843_spi.c new file +105 -0

105 lines not on this page · raw message

Signature · 1 line
1.8.5.5