18c2ecf20Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0-only */
28c2ecf20Sopenharmony_ci/*
38c2ecf20Sopenharmony_ci * Copyright (C) ST-Ericsson 2010 - 2013
48c2ecf20Sopenharmony_ci * Author: Martin Persson <martin.persson@stericsson.com>
58c2ecf20Sopenharmony_ci *         Hongbo Zhang <hongbo.zhang@linaro.com>
68c2ecf20Sopenharmony_ci */
78c2ecf20Sopenharmony_ci
88c2ecf20Sopenharmony_ci#ifndef _ABX500_H
98c2ecf20Sopenharmony_ci#define _ABX500_H
108c2ecf20Sopenharmony_ci
118c2ecf20Sopenharmony_ci#define NUM_SENSORS 5
128c2ecf20Sopenharmony_ci
138c2ecf20Sopenharmony_cistruct abx500_temp;
148c2ecf20Sopenharmony_ci
158c2ecf20Sopenharmony_ci/*
168c2ecf20Sopenharmony_ci * struct abx500_temp_ops - abx500 chip specific ops
178c2ecf20Sopenharmony_ci * @read_sensor: reads gpadc output
188c2ecf20Sopenharmony_ci * @irq_handler: irq handler
198c2ecf20Sopenharmony_ci * @show_name: hwmon device name
208c2ecf20Sopenharmony_ci * @show_label: hwmon attribute label
218c2ecf20Sopenharmony_ci * @is_visible: is attribute visible
228c2ecf20Sopenharmony_ci */
238c2ecf20Sopenharmony_cistruct abx500_temp_ops {
248c2ecf20Sopenharmony_ci	int (*read_sensor)(struct abx500_temp *, u8, int *);
258c2ecf20Sopenharmony_ci	int (*irq_handler)(int, struct abx500_temp *);
268c2ecf20Sopenharmony_ci	ssize_t (*show_name)(struct device *,
278c2ecf20Sopenharmony_ci			struct device_attribute *, char *);
288c2ecf20Sopenharmony_ci	ssize_t (*show_label) (struct device *,
298c2ecf20Sopenharmony_ci			struct device_attribute *, char *);
308c2ecf20Sopenharmony_ci	int (*is_visible)(struct attribute *, int);
318c2ecf20Sopenharmony_ci};
328c2ecf20Sopenharmony_ci
338c2ecf20Sopenharmony_ci/*
348c2ecf20Sopenharmony_ci * struct abx500_temp - representation of temp mon device
358c2ecf20Sopenharmony_ci * @pdev: platform device
368c2ecf20Sopenharmony_ci * @hwmon_dev: hwmon device
378c2ecf20Sopenharmony_ci * @ops: abx500 chip specific ops
388c2ecf20Sopenharmony_ci * @gpadc_addr: gpadc channel address
398c2ecf20Sopenharmony_ci * @min: sensor temperature min value
408c2ecf20Sopenharmony_ci * @max: sensor temperature max value
418c2ecf20Sopenharmony_ci * @max_hyst: sensor temperature hysteresis value for max limit
428c2ecf20Sopenharmony_ci * @min_alarm: sensor temperature min alarm
438c2ecf20Sopenharmony_ci * @max_alarm: sensor temperature max alarm
448c2ecf20Sopenharmony_ci * @work: delayed work scheduled to monitor temperature periodically
458c2ecf20Sopenharmony_ci * @work_active: True if work is active
468c2ecf20Sopenharmony_ci * @lock: mutex
478c2ecf20Sopenharmony_ci * @monitored_sensors: number of monitored sensors
488c2ecf20Sopenharmony_ci * @plat_data: private usage, usually points to platform specific data
498c2ecf20Sopenharmony_ci */
508c2ecf20Sopenharmony_cistruct abx500_temp {
518c2ecf20Sopenharmony_ci	struct platform_device *pdev;
528c2ecf20Sopenharmony_ci	struct device *hwmon_dev;
538c2ecf20Sopenharmony_ci	struct abx500_temp_ops ops;
548c2ecf20Sopenharmony_ci	u8 gpadc_addr[NUM_SENSORS];
558c2ecf20Sopenharmony_ci	unsigned long min[NUM_SENSORS];
568c2ecf20Sopenharmony_ci	unsigned long max[NUM_SENSORS];
578c2ecf20Sopenharmony_ci	unsigned long max_hyst[NUM_SENSORS];
588c2ecf20Sopenharmony_ci	bool min_alarm[NUM_SENSORS];
598c2ecf20Sopenharmony_ci	bool max_alarm[NUM_SENSORS];
608c2ecf20Sopenharmony_ci	struct delayed_work work;
618c2ecf20Sopenharmony_ci	bool work_active;
628c2ecf20Sopenharmony_ci	struct mutex lock;
638c2ecf20Sopenharmony_ci	int monitored_sensors;
648c2ecf20Sopenharmony_ci	void *plat_data;
658c2ecf20Sopenharmony_ci};
668c2ecf20Sopenharmony_ci
678c2ecf20Sopenharmony_ciint abx500_hwmon_init(struct abx500_temp *data);
688c2ecf20Sopenharmony_ci
698c2ecf20Sopenharmony_ci#endif /* _ABX500_H */
70