mirror of
https://github.com/torvalds/linux
synced 2024-11-05 18:23:50 +00:00
iio: magnetometer: ak8975: Add AK09118 support
Add additional AK09118 to the magnetometer driver which has the same register mapping and scaling as the AK09112 device. Signed-off-by: Danila Tikhonov <danila@jiaxyga.com> Acked-by: Krzysztof Kozlowski <krzysztof.kozlowski@linaro.org> Signed-off-by: Barnabás Czémán <barnabas.czeman@mainlining.org> Link: https://patch.msgid.link/20240819-ak09918-v4-4-f0734d14cfb9@mainlining.org Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
This commit is contained in:
parent
c19bf7faea
commit
89cf93bfb3
2 changed files with 38 additions and 1 deletions
|
@ -39,7 +39,7 @@ config AK8975
|
|||
select IIO_TRIGGERED_BUFFER
|
||||
help
|
||||
Say yes here to build support for Asahi Kasei AK8975, AK8963,
|
||||
AK09911, AK09912 or AK09916 3-Axis Magnetometer.
|
||||
AK09911, AK09912, AK09916 or AK09918 3-Axis Magnetometer.
|
||||
|
||||
To compile this driver as a module, choose M here: the module
|
||||
will be called ak8975.
|
||||
|
|
|
@ -78,6 +78,7 @@
|
|||
*/
|
||||
#define AK09912_REG_WIA1 0x00
|
||||
#define AK09912_REG_WIA2 0x01
|
||||
#define AK09918_DEVICE_ID 0x0C
|
||||
#define AK09916_DEVICE_ID 0x09
|
||||
#define AK09912_DEVICE_ID 0x04
|
||||
#define AK09911_DEVICE_ID 0x05
|
||||
|
@ -209,6 +210,7 @@ enum asahi_compass_chipset {
|
|||
AK09911,
|
||||
AK09912,
|
||||
AK09916,
|
||||
AK09918,
|
||||
};
|
||||
|
||||
enum ak_ctrl_reg_addr {
|
||||
|
@ -371,6 +373,34 @@ static const struct ak_def ak_def_array[] = {
|
|||
AK09912_REG_HXL,
|
||||
AK09912_REG_HYL,
|
||||
AK09912_REG_HZL},
|
||||
},
|
||||
[AK09918] = {
|
||||
/* ak09918 is register compatible with ak09912 this is for avoid
|
||||
* unknown id messages.
|
||||
*/
|
||||
.type = AK09918,
|
||||
.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},
|
||||
}
|
||||
};
|
||||
|
||||
|
@ -452,6 +482,7 @@ static int ak8975_who_i_am(struct i2c_client *client,
|
|||
/*
|
||||
* Signature for each device:
|
||||
* Device | WIA1 | WIA2
|
||||
* AK09918 | DEVICE_ID_| AK09918_DEVICE_ID
|
||||
* AK09916 | DEVICE_ID_| AK09916_DEVICE_ID
|
||||
* AK09912 | DEVICE_ID | AK09912_DEVICE_ID
|
||||
* AK09911 | DEVICE_ID | AK09911_DEVICE_ID
|
||||
|
@ -484,6 +515,10 @@ static int ak8975_who_i_am(struct i2c_client *client,
|
|||
if (wia_val[1] == AK09916_DEVICE_ID)
|
||||
return 0;
|
||||
break;
|
||||
case AK09918:
|
||||
if (wia_val[1] == AK09918_DEVICE_ID)
|
||||
return 0;
|
||||
break;
|
||||
}
|
||||
|
||||
dev_info(&client->dev, "Device ID %x is unknown.\n", wia_val[1]);
|
||||
|
@ -1071,6 +1106,7 @@ static const struct i2c_device_id ak8975_id[] = {
|
|||
{"ak09911", (kernel_ulong_t)&ak_def_array[AK09911] },
|
||||
{"ak09912", (kernel_ulong_t)&ak_def_array[AK09912] },
|
||||
{"ak09916", (kernel_ulong_t)&ak_def_array[AK09916] },
|
||||
{"ak09918", (kernel_ulong_t)&ak_def_array[AK09918] },
|
||||
{}
|
||||
};
|
||||
MODULE_DEVICE_TABLE(i2c, ak8975_id);
|
||||
|
@ -1085,6 +1121,7 @@ static const struct of_device_id ak8975_of_match[] = {
|
|||
{ .compatible = "asahi-kasei,ak09912", .data = &ak_def_array[AK09912] },
|
||||
{ .compatible = "ak09912", .data = &ak_def_array[AK09912] },
|
||||
{ .compatible = "asahi-kasei,ak09916", .data = &ak_def_array[AK09916] },
|
||||
{ .compatible = "asahi-kasei,ak09918", .data = &ak_def_array[AK09918] },
|
||||
{}
|
||||
};
|
||||
MODULE_DEVICE_TABLE(of, ak8975_of_match);
|
||||
|
|
Loading…
Reference in a new issue