| /* | 
 |  * Copyright (c) 2015, The Linux Foundation. All rights reserved. | 
 |  * | 
 |  * This software is licensed under the terms of the GNU General Public | 
 |  * License version 2, as published by the Free Software Foundation, and | 
 |  * may be copied, distributed, and modified under those terms. | 
 |  * | 
 |  * This program is distributed in the hope that it will be useful, | 
 |  * but WITHOUT ANY WARRANTY; without even the implied warranty of | 
 |  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | 
 |  * GNU General Public License for more details. | 
 |  */ | 
 | #ifndef __QCOM_TSENS_H__ | 
 | #define __QCOM_TSENS_H__ | 
 |  | 
 | #define ONE_PT_CALIB		0x1 | 
 | #define ONE_PT_CALIB2		0x2 | 
 | #define TWO_PT_CALIB		0x3 | 
 |  | 
 | #include <linux/thermal.h> | 
 |  | 
 | struct tsens_device; | 
 |  | 
 | struct tsens_sensor { | 
 | 	struct tsens_device		*tmdev; | 
 | 	struct thermal_zone_device	*tzd; | 
 | 	int				offset; | 
 | 	int				id; | 
 | 	int				hw_id; | 
 | 	int				slope; | 
 | 	u32				status; | 
 | }; | 
 |  | 
 | /** | 
 |  * struct tsens_ops - operations as supported by the tsens device | 
 |  * @init: Function to initialize the tsens device | 
 |  * @calibrate: Function to calibrate the tsens device | 
 |  * @get_temp: Function which returns the temp in millidegC | 
 |  * @enable: Function to enable (clocks/power) tsens device | 
 |  * @disable: Function to disable the tsens device | 
 |  * @suspend: Function to suspend the tsens device | 
 |  * @resume: Function to resume the tsens device | 
 |  * @get_trend: Function to get the thermal/temp trend | 
 |  */ | 
 | struct tsens_ops { | 
 | 	/* mandatory callbacks */ | 
 | 	int (*init)(struct tsens_device *); | 
 | 	int (*calibrate)(struct tsens_device *); | 
 | 	int (*get_temp)(struct tsens_device *, int, int *); | 
 | 	/* optional callbacks */ | 
 | 	int (*enable)(struct tsens_device *, int); | 
 | 	void (*disable)(struct tsens_device *); | 
 | 	int (*suspend)(struct tsens_device *); | 
 | 	int (*resume)(struct tsens_device *); | 
 | 	int (*get_trend)(struct tsens_device *, int, enum thermal_trend *); | 
 | }; | 
 |  | 
 | /** | 
 |  * struct tsens_data - tsens instance specific data | 
 |  * @num_sensors: Max number of sensors supported by platform | 
 |  * @ops: operations the tsens instance supports | 
 |  * @hw_ids: Subset of sensors ids supported by platform, if not the first n | 
 |  */ | 
 | struct tsens_data { | 
 | 	const u32		num_sensors; | 
 | 	const struct tsens_ops	*ops; | 
 | 	unsigned int		*hw_ids; | 
 | }; | 
 |  | 
 | /* Registers to be saved/restored across a context loss */ | 
 | struct tsens_context { | 
 | 	int	threshold; | 
 | 	int	control; | 
 | }; | 
 |  | 
 | struct tsens_device { | 
 | 	struct device			*dev; | 
 | 	u32				num_sensors; | 
 | 	struct regmap			*map; | 
 | 	struct regmap_field		*status_field; | 
 | 	struct tsens_context		ctx; | 
 | 	bool				trdy; | 
 | 	const struct tsens_ops		*ops; | 
 | 	struct tsens_sensor		sensor[0]; | 
 | }; | 
 |  | 
 | char *qfprom_read(struct device *, const char *); | 
 | void compute_intercept_slope(struct tsens_device *, u32 *, u32 *, u32); | 
 | int init_common(struct tsens_device *); | 
 | int get_temp_common(struct tsens_device *, int, int *); | 
 |  | 
 | extern const struct tsens_data data_8916, data_8974, data_8960, data_8996; | 
 |  | 
 | #endif /* __QCOM_TSENS_H__ */ |