xref: /linux/drivers/iio/magnetometer/hmc5843.h (revision 4f2c0a4acffbec01079c28f839422e64ddeff004)
1d2912cb1SThomas Gleixner /* SPDX-License-Identifier: GPL-2.0-only */
27247645fSCristina Moraru /*
37247645fSCristina Moraru  * Header file for hmc5843 driver
47247645fSCristina Moraru  *
57247645fSCristina Moraru  * Split from hmc5843.c
67247645fSCristina Moraru  * Copyright (C) Josef Gajdusek <atx@atx.name>
77247645fSCristina Moraru  */
87247645fSCristina Moraru 
97247645fSCristina Moraru #ifndef HMC5843_CORE_H
107247645fSCristina Moraru #define HMC5843_CORE_H
117247645fSCristina Moraru 
127247645fSCristina Moraru #include <linux/regmap.h>
137247645fSCristina Moraru #include <linux/iio/iio.h>
147247645fSCristina Moraru 
157247645fSCristina Moraru #define HMC5843_CONFIG_REG_A			0x00
167247645fSCristina Moraru #define HMC5843_CONFIG_REG_B			0x01
177247645fSCristina Moraru #define HMC5843_MODE_REG			0x02
187247645fSCristina Moraru #define HMC5843_DATA_OUT_MSB_REGS		0x03
197247645fSCristina Moraru #define HMC5843_STATUS_REG			0x09
207247645fSCristina Moraru #define HMC5843_ID_REG				0x0a
217247645fSCristina Moraru #define HMC5843_ID_END				0x0c
227247645fSCristina Moraru 
237247645fSCristina Moraru enum hmc5843_ids {
247247645fSCristina Moraru 	HMC5843_ID,
257247645fSCristina Moraru 	HMC5883_ID,
267247645fSCristina Moraru 	HMC5883L_ID,
277247645fSCristina Moraru 	HMC5983_ID,
287247645fSCristina Moraru };
297247645fSCristina Moraru 
307247645fSCristina Moraru /**
31f9c4c27fSSong Qiang  * struct hmc5843_data	- device specific data
327247645fSCristina Moraru  * @dev:		actual device
337247645fSCristina Moraru  * @lock:		update and read regmap data
347247645fSCristina Moraru  * @regmap:		hardware access register maps
357247645fSCristina Moraru  * @variant:		describe chip variants
361ef2f51eSJonathan Cameron  * @scan:		buffer to pack data for passing to
371ef2f51eSJonathan Cameron  *			iio_push_to_buffers_with_timestamp()
387247645fSCristina Moraru  */
397247645fSCristina Moraru struct hmc5843_data {
407247645fSCristina Moraru 	struct device *dev;
417247645fSCristina Moraru 	struct mutex lock;
427247645fSCristina Moraru 	struct regmap *regmap;
437247645fSCristina Moraru 	const struct hmc5843_chip_info *variant;
448d7ea738SH. Nikolaus Schaller 	struct iio_mount_matrix orientation;
451ef2f51eSJonathan Cameron 	struct {
461ef2f51eSJonathan Cameron 		__be16 chans[3];
471ef2f51eSJonathan Cameron 		s64 timestamp __aligned(8);
481ef2f51eSJonathan Cameron 	} scan;
497247645fSCristina Moraru };
507247645fSCristina Moraru 
517247645fSCristina Moraru int hmc5843_common_probe(struct device *dev, struct regmap *regmap,
527247645fSCristina Moraru 			 enum hmc5843_ids id, const char *name);
534b6fb9f3SUwe Kleine-König void hmc5843_common_remove(struct device *dev);
547247645fSCristina Moraru 
55*71041f73SJonathan Cameron extern const struct dev_pm_ops hmc5843_pm_ops;
567247645fSCristina Moraru #endif /* HMC5843_CORE_H */
57