18c2ecf20Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0-only */
28c2ecf20Sopenharmony_ci/*
38c2ecf20Sopenharmony_ci * Header file for hmc5843 driver
48c2ecf20Sopenharmony_ci *
58c2ecf20Sopenharmony_ci * Split from hmc5843.c
68c2ecf20Sopenharmony_ci * Copyright (C) Josef Gajdusek <atx@atx.name>
78c2ecf20Sopenharmony_ci */
88c2ecf20Sopenharmony_ci
98c2ecf20Sopenharmony_ci#ifndef HMC5843_CORE_H
108c2ecf20Sopenharmony_ci#define HMC5843_CORE_H
118c2ecf20Sopenharmony_ci
128c2ecf20Sopenharmony_ci#include <linux/regmap.h>
138c2ecf20Sopenharmony_ci#include <linux/iio/iio.h>
148c2ecf20Sopenharmony_ci
158c2ecf20Sopenharmony_ci#define HMC5843_CONFIG_REG_A			0x00
168c2ecf20Sopenharmony_ci#define HMC5843_CONFIG_REG_B			0x01
178c2ecf20Sopenharmony_ci#define HMC5843_MODE_REG			0x02
188c2ecf20Sopenharmony_ci#define HMC5843_DATA_OUT_MSB_REGS		0x03
198c2ecf20Sopenharmony_ci#define HMC5843_STATUS_REG			0x09
208c2ecf20Sopenharmony_ci#define HMC5843_ID_REG				0x0a
218c2ecf20Sopenharmony_ci#define HMC5843_ID_END				0x0c
228c2ecf20Sopenharmony_ci
238c2ecf20Sopenharmony_cienum hmc5843_ids {
248c2ecf20Sopenharmony_ci	HMC5843_ID,
258c2ecf20Sopenharmony_ci	HMC5883_ID,
268c2ecf20Sopenharmony_ci	HMC5883L_ID,
278c2ecf20Sopenharmony_ci	HMC5983_ID,
288c2ecf20Sopenharmony_ci};
298c2ecf20Sopenharmony_ci
308c2ecf20Sopenharmony_ci/**
318c2ecf20Sopenharmony_ci * struct hmc5843_data	- device specific data
328c2ecf20Sopenharmony_ci * @dev:		actual device
338c2ecf20Sopenharmony_ci * @lock:		update and read regmap data
348c2ecf20Sopenharmony_ci * @regmap:		hardware access register maps
358c2ecf20Sopenharmony_ci * @variant:		describe chip variants
368c2ecf20Sopenharmony_ci * @scan:		buffer to pack data for passing to
378c2ecf20Sopenharmony_ci *			iio_push_to_buffers_with_timestamp()
388c2ecf20Sopenharmony_ci */
398c2ecf20Sopenharmony_cistruct hmc5843_data {
408c2ecf20Sopenharmony_ci	struct device *dev;
418c2ecf20Sopenharmony_ci	struct mutex lock;
428c2ecf20Sopenharmony_ci	struct regmap *regmap;
438c2ecf20Sopenharmony_ci	const struct hmc5843_chip_info *variant;
448c2ecf20Sopenharmony_ci	struct iio_mount_matrix orientation;
458c2ecf20Sopenharmony_ci	struct {
468c2ecf20Sopenharmony_ci		__be16 chans[3];
478c2ecf20Sopenharmony_ci		s64 timestamp __aligned(8);
488c2ecf20Sopenharmony_ci	} scan;
498c2ecf20Sopenharmony_ci};
508c2ecf20Sopenharmony_ci
518c2ecf20Sopenharmony_ciint hmc5843_common_probe(struct device *dev, struct regmap *regmap,
528c2ecf20Sopenharmony_ci			 enum hmc5843_ids id, const char *name);
538c2ecf20Sopenharmony_ciint hmc5843_common_remove(struct device *dev);
548c2ecf20Sopenharmony_ci
558c2ecf20Sopenharmony_ciint hmc5843_common_suspend(struct device *dev);
568c2ecf20Sopenharmony_ciint hmc5843_common_resume(struct device *dev);
578c2ecf20Sopenharmony_ci
588c2ecf20Sopenharmony_ci#ifdef CONFIG_PM_SLEEP
598c2ecf20Sopenharmony_cistatic __maybe_unused SIMPLE_DEV_PM_OPS(hmc5843_pm_ops,
608c2ecf20Sopenharmony_ci					hmc5843_common_suspend,
618c2ecf20Sopenharmony_ci					hmc5843_common_resume);
628c2ecf20Sopenharmony_ci#define HMC5843_PM_OPS (&hmc5843_pm_ops)
638c2ecf20Sopenharmony_ci#else
648c2ecf20Sopenharmony_ci#define HMC5843_PM_OPS NULL
658c2ecf20Sopenharmony_ci#endif
668c2ecf20Sopenharmony_ci
678c2ecf20Sopenharmony_ci#endif /* HMC5843_CORE_H */
68