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