Commit 76e28aa9 authored by Matt Ranostay's avatar Matt Ranostay Committed by Jonathan Cameron

iio: magnetometer: ak8975: add AK09116 support

Add additional AK09116 to the magnetometer driver which has the same
register mapping and scaling as the AK09112 device.
Signed-off-by: default avatarMatt Ranostay <matt.ranostay@konsulko.com>
Link: https://lore.kernel.org/r/20210825020738.35877-1-matt.ranostay@konsulko.comSigned-off-by: default avatarJonathan Cameron <Jonathan.Cameron@huawei.com>
parent c5dc9e36
...@@ -17,11 +17,13 @@ properties: ...@@ -17,11 +17,13 @@ properties:
- asahi-kasei,ak8963 - asahi-kasei,ak8963
- asahi-kasei,ak09911 - asahi-kasei,ak09911
- asahi-kasei,ak09912 - asahi-kasei,ak09912
- asahi-kasei,ak09916
- enum: - enum:
- ak8975 - ak8975
- ak8963 - ak8963
- ak09911 - ak09911
- ak09912 - ak09912
- ak09916
deprecated: true deprecated: true
reg: reg:
......
...@@ -28,7 +28,7 @@ config AK8975 ...@@ -28,7 +28,7 @@ config AK8975
select IIO_TRIGGERED_BUFFER select IIO_TRIGGERED_BUFFER
help help
Say yes here to build support for Asahi Kasei AK8975, AK8963, Say yes here to build support for Asahi Kasei AK8975, AK8963,
AK09911 or AK09912 3-Axis Magnetometer. AK09911, AK09912 or AK09916 3-Axis Magnetometer.
To compile this driver as a module, choose M here: the module To compile this driver as a module, choose M here: the module
will be called ak8975. will be called ak8975.
......
...@@ -78,6 +78,7 @@ ...@@ -78,6 +78,7 @@
*/ */
#define AK09912_REG_WIA1 0x00 #define AK09912_REG_WIA1 0x00
#define AK09912_REG_WIA2 0x01 #define AK09912_REG_WIA2 0x01
#define AK09916_DEVICE_ID 0x09
#define AK09912_DEVICE_ID 0x04 #define AK09912_DEVICE_ID 0x04
#define AK09911_DEVICE_ID 0x05 #define AK09911_DEVICE_ID 0x05
...@@ -208,6 +209,7 @@ enum asahi_compass_chipset { ...@@ -208,6 +209,7 @@ enum asahi_compass_chipset {
AK8963, AK8963,
AK09911, AK09911,
AK09912, AK09912,
AK09916,
}; };
enum ak_ctrl_reg_addr { enum ak_ctrl_reg_addr {
...@@ -345,6 +347,31 @@ static const struct ak_def ak_def_array[] = { ...@@ -345,6 +347,31 @@ static const struct ak_def ak_def_array[] = {
AK09912_REG_HXL, AK09912_REG_HXL,
AK09912_REG_HYL, AK09912_REG_HYL,
AK09912_REG_HZL}, AK09912_REG_HZL},
},
{
.type = AK09916,
.raw_to_gauss = ak09912_raw_to_gauss,
.range = 32752,
.ctrl_regs = {
AK09912_REG_ST1,
AK09912_REG_ST2,
AK09912_REG_CNTL2,
AK09912_REG_ASAX,
AK09912_MAX_REGS},
.ctrl_masks = {
AK09912_REG_ST1_DRDY_MASK,
AK09912_REG_ST2_HOFL_MASK,
0,
AK09912_REG_CNTL2_MODE_MASK},
.ctrl_modes = {
AK09912_REG_CNTL_MODE_POWER_DOWN,
AK09912_REG_CNTL_MODE_ONCE,
AK09912_REG_CNTL_MODE_SELF_TEST,
AK09912_REG_CNTL_MODE_FUSE_ROM},
.data_regs = {
AK09912_REG_HXL,
AK09912_REG_HYL,
AK09912_REG_HZL},
} }
}; };
...@@ -425,6 +452,7 @@ static int ak8975_who_i_am(struct i2c_client *client, ...@@ -425,6 +452,7 @@ static int ak8975_who_i_am(struct i2c_client *client,
/* /*
* Signature for each device: * Signature for each device:
* Device | WIA1 | WIA2 * Device | WIA1 | WIA2
* AK09916 | DEVICE_ID_| AK09916_DEVICE_ID
* AK09912 | DEVICE_ID | AK09912_DEVICE_ID * AK09912 | DEVICE_ID | AK09912_DEVICE_ID
* AK09911 | DEVICE_ID | AK09911_DEVICE_ID * AK09911 | DEVICE_ID | AK09911_DEVICE_ID
* AK8975 | DEVICE_ID | NA * AK8975 | DEVICE_ID | NA
...@@ -452,6 +480,10 @@ static int ak8975_who_i_am(struct i2c_client *client, ...@@ -452,6 +480,10 @@ static int ak8975_who_i_am(struct i2c_client *client,
if (wia_val[1] == AK09912_DEVICE_ID) if (wia_val[1] == AK09912_DEVICE_ID)
return 0; return 0;
break; break;
case AK09916:
if (wia_val[1] == AK09916_DEVICE_ID)
return 0;
break;
default: default:
dev_err(&client->dev, "Type %d unknown\n", type); dev_err(&client->dev, "Type %d unknown\n", type);
} }
...@@ -1057,6 +1089,7 @@ static const struct i2c_device_id ak8975_id[] = { ...@@ -1057,6 +1089,7 @@ static const struct i2c_device_id ak8975_id[] = {
{"AK8963", AK8963}, {"AK8963", AK8963},
{"ak09911", AK09911}, {"ak09911", AK09911},
{"ak09912", AK09912}, {"ak09912", AK09912},
{"ak09916", AK09916},
{} {}
}; };
...@@ -1071,6 +1104,8 @@ static const struct of_device_id ak8975_of_match[] = { ...@@ -1071,6 +1104,8 @@ static const struct of_device_id ak8975_of_match[] = {
{ .compatible = "ak09911", }, { .compatible = "ak09911", },
{ .compatible = "asahi-kasei,ak09912", }, { .compatible = "asahi-kasei,ak09912", },
{ .compatible = "ak09912", }, { .compatible = "ak09912", },
{ .compatible = "asahi-kasei,ak09916", },
{ .compatible = "ak09916", },
{} {}
}; };
MODULE_DEVICE_TABLE(of, ak8975_of_match); MODULE_DEVICE_TABLE(of, ak8975_of_match);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment