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