netlink: fix NETLINK_RECV_NO_ENOBUFS in netlink_set_err()
[linux-2.6.git] / include / linux / thermal.h
index 90c1c19..1de8b9e 100644 (file)
 
 #include <linux/idr.h>
 #include <linux/device.h>
+#include <linux/workqueue.h>
 
 struct thermal_zone_device;
 struct thermal_cooling_device;
 
+enum thermal_device_mode {
+       THERMAL_DEVICE_DISABLED = 0,
+       THERMAL_DEVICE_ENABLED,
+};
+
+enum thermal_trip_type {
+       THERMAL_TRIP_ACTIVE = 0,
+       THERMAL_TRIP_PASSIVE,
+       THERMAL_TRIP_HOT,
+       THERMAL_TRIP_CRITICAL,
+};
+
 struct thermal_zone_device_ops {
        int (*bind) (struct thermal_zone_device *,
                     struct thermal_cooling_device *);
        int (*unbind) (struct thermal_zone_device *,
                       struct thermal_cooling_device *);
-       int (*get_temp) (struct thermal_zone_device *, char *);
-       int (*get_mode) (struct thermal_zone_device *, char *);
-       int (*set_mode) (struct thermal_zone_device *, const char *);
-       int (*get_trip_type) (struct thermal_zone_device *, int, char *);
-       int (*get_trip_temp) (struct thermal_zone_device *, int, char *);
+       int (*get_temp) (struct thermal_zone_device *, unsigned long *);
+       int (*get_mode) (struct thermal_zone_device *,
+                        enum thermal_device_mode *);
+       int (*set_mode) (struct thermal_zone_device *,
+               enum thermal_device_mode);
+       int (*get_trip_type) (struct thermal_zone_device *, int,
+               enum thermal_trip_type *);
+       int (*get_trip_temp) (struct thermal_zone_device *, int,
+                             unsigned long *);
+       int (*get_crit_temp) (struct thermal_zone_device *, unsigned long *);
+       int (*notify) (struct thermal_zone_device *, int,
+                      enum thermal_trip_type);
 };
 
 struct thermal_cooling_device_ops {
-       int (*get_max_state) (struct thermal_cooling_device *, char *);
-       int (*get_cur_state) (struct thermal_cooling_device *, char *);
-       int (*set_cur_state) (struct thermal_cooling_device *, unsigned int);
+       int (*get_max_state) (struct thermal_cooling_device *, unsigned long *);
+       int (*get_cur_state) (struct thermal_cooling_device *, unsigned long *);
+       int (*set_cur_state) (struct thermal_cooling_device *, unsigned long);
 };
 
 #define THERMAL_TRIPS_NONE -1
@@ -65,47 +85,66 @@ struct thermal_cooling_device {
                                ((long)t-2732+5)/10 : ((long)t-2732-5)/10)
 #define CELSIUS_TO_KELVIN(t)   ((t)*10+2732)
 
+#if defined(CONFIG_THERMAL_HWMON)
+/* thermal zone devices with the same type share one hwmon device */
+struct thermal_hwmon_device {
+       char type[THERMAL_NAME_LENGTH];
+       struct device *device;
+       int count;
+       struct list_head tz_list;
+       struct list_head node;
+};
+
+struct thermal_hwmon_attr {
+       struct device_attribute attr;
+       char name[16];
+};
+#endif
+
 struct thermal_zone_device {
        int id;
        char type[THERMAL_NAME_LENGTH];
        struct device device;
        void *devdata;
        int trips;
+       int tc1;
+       int tc2;
+       int passive_delay;
+       int polling_delay;
+       int last_temperature;
+       bool passive;
+       unsigned int forced_passive;
        struct thermal_zone_device_ops *ops;
        struct list_head cooling_devices;
        struct idr idr;
        struct mutex lock;      /* protect cooling devices list */
        struct list_head node;
+       struct delayed_work poll_queue;
+#if defined(CONFIG_THERMAL_HWMON)
+       struct list_head hwmon_node;
+       struct thermal_hwmon_device *hwmon;
+       struct thermal_hwmon_attr temp_input;   /* hwmon sys attr */
+       struct thermal_hwmon_attr temp_crit;    /* hwmon sys attr */
+#endif
 };
 
 struct thermal_zone_device *thermal_zone_device_register(char *, int, void *,
                                                         struct
                                                         thermal_zone_device_ops
-                                                        *);
+                                                        *, int tc1, int tc2,
+                                                        int passive_freq,
+                                                        int polling_freq);
 void thermal_zone_device_unregister(struct thermal_zone_device *);
 
 int thermal_zone_bind_cooling_device(struct thermal_zone_device *, int,
                                     struct thermal_cooling_device *);
 int thermal_zone_unbind_cooling_device(struct thermal_zone_device *, int,
                                       struct thermal_cooling_device *);
-
-#ifdef CONFIG_THERMAL
+void thermal_zone_device_update(struct thermal_zone_device *);
 struct thermal_cooling_device *thermal_cooling_device_register(char *, void *,
                                                               struct
                                                               thermal_cooling_device_ops
                                                               *);
 void thermal_cooling_device_unregister(struct thermal_cooling_device *);
-#else
-static inline struct thermal_cooling_device
-*thermal_cooling_device_register(char *c, void *v,
-                                struct thermal_cooling_device_ops *t)
-{
-       return NULL;
-}
-static inline
-    void thermal_cooling_device_unregister(struct thermal_cooling_device *t)
-{
-};
-#endif
 
 #endif /* __THERMAL_H__ */