Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/hid/hid
[linux-2.6-microblaze.git] / drivers / iio / magnetometer / hmc5843.h
1 /* SPDX-License-Identifier: GPL-2.0-only */
2 /*
3  * Header file for hmc5843 driver
4  *
5  * Split from hmc5843.c
6  * Copyright (C) Josef Gajdusek <atx@atx.name>
7  */
8
9 #ifndef HMC5843_CORE_H
10 #define HMC5843_CORE_H
11
12 #include <linux/regmap.h>
13 #include <linux/iio/iio.h>
14
15 #define HMC5843_CONFIG_REG_A                    0x00
16 #define HMC5843_CONFIG_REG_B                    0x01
17 #define HMC5843_MODE_REG                        0x02
18 #define HMC5843_DATA_OUT_MSB_REGS               0x03
19 #define HMC5843_STATUS_REG                      0x09
20 #define HMC5843_ID_REG                          0x0a
21 #define HMC5843_ID_END                          0x0c
22
23 enum hmc5843_ids {
24         HMC5843_ID,
25         HMC5883_ID,
26         HMC5883L_ID,
27         HMC5983_ID,
28 };
29
30 /**
31  * struct hmc5843_data  - device specific data
32  * @dev:                actual device
33  * @lock:               update and read regmap data
34  * @regmap:             hardware access register maps
35  * @variant:            describe chip variants
36  * @scan:               buffer to pack data for passing to
37  *                      iio_push_to_buffers_with_timestamp()
38  */
39 struct hmc5843_data {
40         struct device *dev;
41         struct mutex lock;
42         struct regmap *regmap;
43         const struct hmc5843_chip_info *variant;
44         struct iio_mount_matrix orientation;
45         struct {
46                 __be16 chans[3];
47                 s64 timestamp __aligned(8);
48         } scan;
49 };
50
51 int hmc5843_common_probe(struct device *dev, struct regmap *regmap,
52                          enum hmc5843_ids id, const char *name);
53 int hmc5843_common_remove(struct device *dev);
54
55 int hmc5843_common_suspend(struct device *dev);
56 int hmc5843_common_resume(struct device *dev);
57
58 #ifdef CONFIG_PM_SLEEP
59 static __maybe_unused SIMPLE_DEV_PM_OPS(hmc5843_pm_ops,
60                                         hmc5843_common_suspend,
61                                         hmc5843_common_resume);
62 #define HMC5843_PM_OPS (&hmc5843_pm_ops)
63 #else
64 #define HMC5843_PM_OPS NULL
65 #endif
66
67 #endif /* HMC5843_CORE_H */