Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

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>

authored by

Danila Tikhonov and committed by
Jonathan Cameron
89cf93bf c19bf7fa

+38 -1
+1 -1
drivers/iio/magnetometer/Kconfig
··· 39 39 select IIO_TRIGGERED_BUFFER 40 40 help 41 41 Say yes here to build support for Asahi Kasei AK8975, AK8963, 42 - AK09911, AK09912 or AK09916 3-Axis Magnetometer. 42 + AK09911, AK09912, AK09916 or AK09918 3-Axis Magnetometer. 43 43 44 44 To compile this driver as a module, choose M here: the module 45 45 will be called ak8975.
+37
drivers/iio/magnetometer/ak8975.c
··· 78 78 */ 79 79 #define AK09912_REG_WIA1 0x00 80 80 #define AK09912_REG_WIA2 0x01 81 + #define AK09918_DEVICE_ID 0x0C 81 82 #define AK09916_DEVICE_ID 0x09 82 83 #define AK09912_DEVICE_ID 0x04 83 84 #define AK09911_DEVICE_ID 0x05 ··· 210 209 AK09911, 211 210 AK09912, 212 211 AK09916, 212 + AK09918, 213 213 }; 214 214 215 215 enum ak_ctrl_reg_addr { ··· 373 371 AK09912_REG_HXL, 374 372 AK09912_REG_HYL, 375 373 AK09912_REG_HZL}, 374 + }, 375 + [AK09918] = { 376 + /* ak09918 is register compatible with ak09912 this is for avoid 377 + * unknown id messages. 378 + */ 379 + .type = AK09918, 380 + .raw_to_gauss = ak09912_raw_to_gauss, 381 + .range = 32752, 382 + .ctrl_regs = { 383 + AK09912_REG_ST1, 384 + AK09912_REG_ST2, 385 + AK09912_REG_CNTL2, 386 + AK09912_REG_ASAX, 387 + AK09912_MAX_REGS}, 388 + .ctrl_masks = { 389 + AK09912_REG_ST1_DRDY_MASK, 390 + AK09912_REG_ST2_HOFL_MASK, 391 + 0, 392 + AK09912_REG_CNTL2_MODE_MASK}, 393 + .ctrl_modes = { 394 + AK09912_REG_CNTL_MODE_POWER_DOWN, 395 + AK09912_REG_CNTL_MODE_ONCE, 396 + AK09912_REG_CNTL_MODE_SELF_TEST, 397 + AK09912_REG_CNTL_MODE_FUSE_ROM}, 398 + .data_regs = { 399 + AK09912_REG_HXL, 400 + AK09912_REG_HYL, 401 + AK09912_REG_HZL}, 376 402 } 377 403 }; 378 404 ··· 482 452 /* 483 453 * Signature for each device: 484 454 * Device | WIA1 | WIA2 455 + * AK09918 | DEVICE_ID_| AK09918_DEVICE_ID 485 456 * AK09916 | DEVICE_ID_| AK09916_DEVICE_ID 486 457 * AK09912 | DEVICE_ID | AK09912_DEVICE_ID 487 458 * AK09911 | DEVICE_ID | AK09911_DEVICE_ID ··· 513 482 break; 514 483 case AK09916: 515 484 if (wia_val[1] == AK09916_DEVICE_ID) 485 + return 0; 486 + break; 487 + case AK09918: 488 + if (wia_val[1] == AK09918_DEVICE_ID) 516 489 return 0; 517 490 break; 518 491 } ··· 1106 1071 {"ak09911", (kernel_ulong_t)&ak_def_array[AK09911] }, 1107 1072 {"ak09912", (kernel_ulong_t)&ak_def_array[AK09912] }, 1108 1073 {"ak09916", (kernel_ulong_t)&ak_def_array[AK09916] }, 1074 + {"ak09918", (kernel_ulong_t)&ak_def_array[AK09918] }, 1109 1075 {} 1110 1076 }; 1111 1077 MODULE_DEVICE_TABLE(i2c, ak8975_id); ··· 1121 1085 { .compatible = "asahi-kasei,ak09912", .data = &ak_def_array[AK09912] }, 1122 1086 { .compatible = "ak09912", .data = &ak_def_array[AK09912] }, 1123 1087 { .compatible = "asahi-kasei,ak09916", .data = &ak_def_array[AK09916] }, 1088 + { .compatible = "asahi-kasei,ak09918", .data = &ak_def_array[AK09918] }, 1124 1089 {} 1125 1090 }; 1126 1091 MODULE_DEVICE_TABLE(of, ak8975_of_match);