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