1 /* SPDX-License-Identifier: GPL-2.0 */
2 #ifndef _BMC150_ACCEL_H_
3 #define _BMC150_ACCEL_H_
5 #include <linux/atomic.h>
6 #include <linux/iio/iio.h>
7 #include <linux/mutex.h>
8 #include <linux/regulator/consumer.h>
9 #include <linux/types.h>
10 #include <linux/workqueue.h>
14 struct bmc150_accel_chip_info
;
15 struct bmc150_accel_interrupt_info
;
18 * We can often guess better than "UNKNOWN" based on the device IDs
19 * but unfortunately this information is not always accurate. There are some
20 * devices where ACPI firmware specifies an ID like "BMA250E" when the device
21 * actually has a BMA222E. The driver attempts to detect those by reading the
22 * chip ID from the registers but this information is not always enough either.
24 * Therefore, this enum should be only used when the chip ID detection is not
25 * enough and we can be reasonably sure that the device IDs are reliable
26 * in practice (e.g. for device tree platforms).
33 struct bmc150_accel_interrupt
{
34 const struct bmc150_accel_interrupt_info
*info
;
38 struct bmc150_accel_trigger
{
39 struct bmc150_accel_data
*data
;
40 struct iio_trigger
*indio_trig
;
41 int (*setup
)(struct bmc150_accel_trigger
*t
, bool state
);
46 enum bmc150_accel_interrupt_id
{
47 BMC150_ACCEL_INT_DATA_READY
,
48 BMC150_ACCEL_INT_ANY_MOTION
,
49 BMC150_ACCEL_INT_WATERMARK
,
50 BMC150_ACCEL_INTERRUPTS
,
53 enum bmc150_accel_trigger_id
{
54 BMC150_ACCEL_TRIGGER_DATA_READY
,
55 BMC150_ACCEL_TRIGGER_ANY_MOTION
,
56 BMC150_ACCEL_TRIGGERS
,
59 struct bmc150_accel_data
{
60 struct regmap
*regmap
;
61 struct regulator_bulk_data regulators
[2];
62 struct bmc150_accel_interrupt interrupts
[BMC150_ACCEL_INTERRUPTS
];
63 struct bmc150_accel_trigger triggers
[BMC150_ACCEL_TRIGGERS
];
65 u8 fifo_mode
, watermark
;
68 * Ensure there is sufficient space and correct alignment for
69 * the timestamp if enabled
80 int64_t timestamp
, old_timestamp
; /* Only used in hw fifo mode. */
81 const struct bmc150_accel_chip_info
*chip_info
;
82 enum bmc150_type type
;
83 struct i2c_client
*second_device
;
84 void (*resume_callback
)(struct device
*dev
);
85 struct delayed_work resume_work
;
86 struct iio_mount_matrix orientation
;
89 int bmc150_accel_core_probe(struct device
*dev
, struct regmap
*regmap
, int irq
,
90 enum bmc150_type type
, const char *name
,
91 bool block_supported
);
92 void bmc150_accel_core_remove(struct device
*dev
);
93 extern const struct dev_pm_ops bmc150_accel_pm_ops
;
94 extern const struct regmap_config bmc150_regmap_conf
;
96 #endif /* _BMC150_ACCEL_H_ */