linux/drivers/thermal/st/st_thermal.h
<<
>>
Prefs
   1/*
   2 * ST Thermal Sensor Driver for STi series of SoCs
   3 * Author: Ajit Pal Singh <ajitpal.singh@st.com>
   4 *
   5 * Copyright (C) 2003-2014 STMicroelectronics (R&D) Limited
   6 *
   7 * This program is free software; you can redistribute it and/or modify
   8 * it under the terms of the GNU General Public License as published by
   9 * the Free Software Foundation; either version 2 of the License, or
  10 * (at your option) any later version.
  11 */
  12
  13#ifndef __STI_THERMAL_SYSCFG_H
  14#define __STI_THERMAL_SYSCFG_H
  15
  16#include <linux/interrupt.h>
  17#include <linux/platform_device.h>
  18#include <linux/regmap.h>
  19#include <linux/thermal.h>
  20
  21enum st_thermal_regfield_ids {
  22        INT_THRESH_HI = 0, /* Top two regfield IDs are mutually exclusive */
  23        TEMP_PWR = 0,
  24        DCORRECT,
  25        OVERFLOW,
  26        DATA,
  27        INT_ENABLE,
  28
  29        MAX_REGFIELDS
  30};
  31
  32/* Thermal sensor power states */
  33enum st_thermal_power_state {
  34        POWER_OFF = 0,
  35        POWER_ON
  36};
  37
  38struct st_thermal_sensor;
  39
  40/**
  41 * Description of private thermal sensor ops.
  42 *
  43 * @power_ctrl:         Function for powering on/off a sensor. Clock to the
  44 *                      sensor is also controlled from this function.
  45 * @alloc_regfields:    Allocate regmap register fields, specific to a sensor.
  46 * @do_memmap_regmap:   Memory map the thermal register space and init regmap
  47 *                      instance or find regmap instance.
  48 * @register_irq:       Register an interrupt handler for a sensor.
  49 */
  50struct st_thermal_sensor_ops {
  51        int (*power_ctrl)(struct st_thermal_sensor *, enum st_thermal_power_state);
  52        int (*alloc_regfields)(struct st_thermal_sensor *);
  53        int (*regmap_init)(struct st_thermal_sensor *);
  54        int (*register_enable_irq)(struct st_thermal_sensor *);
  55        int (*enable_irq)(struct st_thermal_sensor *);
  56};
  57
  58/**
  59 * Description of thermal driver compatible data.
  60 *
  61 * @reg_fields:         Pointer to the regfields array for a sensor.
  62 * @sys_compat:         Pointer to the syscon node compatible string.
  63 * @ops:                Pointer to private thermal ops for a sensor.
  64 * @calibration_val:    Default calibration value to be written to the DCORRECT
  65 *                      register field for a sensor.
  66 * @temp_adjust_val:    Value to be added/subtracted from the data read from
  67 *                      the sensor. If value needs to be added please provide a
  68 *                      positive value and if it is to be subtracted please
  69 *                      provide a negative value.
  70 * @crit_temp:          The temperature beyond which the SoC should be shutdown
  71 *                      to prevent damage.
  72 */
  73struct st_thermal_compat_data {
  74        char *sys_compat;
  75        const struct reg_field *reg_fields;
  76        const struct st_thermal_sensor_ops *ops;
  77        unsigned int calibration_val;
  78        int temp_adjust_val;
  79        int crit_temp;
  80};
  81
  82struct st_thermal_sensor {
  83        struct device *dev;
  84        struct thermal_zone_device *thermal_dev;
  85        const struct st_thermal_sensor_ops *ops;
  86        const struct st_thermal_compat_data *cdata;
  87        struct clk *clk;
  88        struct regmap *regmap;
  89        struct regmap_field *pwr;
  90        struct regmap_field *dcorrect;
  91        struct regmap_field *overflow;
  92        struct regmap_field *temp_data;
  93        struct regmap_field *int_thresh_hi;
  94        struct regmap_field *int_enable;
  95        int irq;
  96        void __iomem *mmio_base;
  97};
  98
  99extern int st_thermal_register(struct platform_device *pdev,
 100                               const struct of_device_id *st_thermal_of_match);
 101extern int st_thermal_unregister(struct platform_device *pdev);
 102extern const struct dev_pm_ops st_thermal_pm_ops;
 103
 104#endif /* __STI_RESET_SYSCFG_H */
 105