mirror of
https://github.com/ARM-software/devlib.git
synced 2025-01-31 02:00:45 +00:00
module: Add thermal support
Add a thermal module that will allow querying for thermal zones and trip points in the target. The module allow supports enable/disabling thermal zones as well as change trip temperatures. Signed-off-by: Punit Agrawal <punit.agrawal@arm.com>
This commit is contained in:
parent
40274101ad
commit
c7fc01c6b5
104
devlib/module/thermal.py
Normal file
104
devlib/module/thermal.py
Normal file
@ -0,0 +1,104 @@
|
|||||||
|
# Copyright 2015 ARM Limited
|
||||||
|
#
|
||||||
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
# you may not use this file except in compliance with the License.
|
||||||
|
# You may obtain a copy of the License at
|
||||||
|
#
|
||||||
|
# http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
#
|
||||||
|
# Unless required by applicable law or agreed to in writing, software
|
||||||
|
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
# See the License for the specific language governing permissions and
|
||||||
|
# limitations under the License.
|
||||||
|
|
||||||
|
import re
|
||||||
|
|
||||||
|
from devlib.module import Module
|
||||||
|
|
||||||
|
class TripPoint(object):
|
||||||
|
def __init__(self, zone, _id):
|
||||||
|
self._id = _id
|
||||||
|
self.zone = zone
|
||||||
|
self.temp_node = 'trip_point_' + _id + '_temp'
|
||||||
|
self.type_node = 'trip_point_' + _id + '_type'
|
||||||
|
|
||||||
|
@property
|
||||||
|
def target(self):
|
||||||
|
return self.zone.target
|
||||||
|
|
||||||
|
def get_temperature(self):
|
||||||
|
"""Returns the currently configured temperature of the trip point"""
|
||||||
|
temp_file = self.target.path.join(self.zone.path, self.temp_node)
|
||||||
|
return self.target.read_int(temp_file)
|
||||||
|
|
||||||
|
def set_temperature(self, temperature):
|
||||||
|
temp_file = self.target.path.join(self.zone.path, self.temp_node)
|
||||||
|
self.target.write_value(temp_file, temperature)
|
||||||
|
|
||||||
|
def get_type(self):
|
||||||
|
"""Returns the type of trip point"""
|
||||||
|
type_file = self.target.path.join(self.zone.path, self.type_node)
|
||||||
|
return self.target.read_value(type_file)
|
||||||
|
|
||||||
|
class ThermalZone(object):
|
||||||
|
def __init__(self, target, root, _id):
|
||||||
|
self.target = target
|
||||||
|
self.name = 'thermal_zone' + _id
|
||||||
|
self.path = target.path.join(root, self.name)
|
||||||
|
self.trip_points = {}
|
||||||
|
|
||||||
|
for entry in self.target.list_directory(self.path):
|
||||||
|
re_match = re.match('^trip_point_([0-9]+)_temp', entry)
|
||||||
|
if re_match is not None:
|
||||||
|
self.add_trip_point(re_match.group(1))
|
||||||
|
|
||||||
|
def add_trip_point(self, _id):
|
||||||
|
self.trip_points[int(_id)] = TripPoint(self, _id)
|
||||||
|
|
||||||
|
def is_enabled(self):
|
||||||
|
"""Returns a boolean representing the 'mode' of the thermal zone"""
|
||||||
|
value = self.target.read_value(self.target.path.join(self.path, 'mode'))
|
||||||
|
return value == 'enabled'
|
||||||
|
|
||||||
|
def set_mode(self, enable):
|
||||||
|
value = 'enabled' if enable else 'disabled'
|
||||||
|
self.target.write_value(self.target.path.join(self.path, 'mode'), value)
|
||||||
|
|
||||||
|
def get_temperature(self):
|
||||||
|
"""Returns the temperature of the thermal zone"""
|
||||||
|
temp_file = self.target.path.join(self.path, 'temp')
|
||||||
|
return self.target.read_int(temp_file)
|
||||||
|
|
||||||
|
class ThermalModule(Module):
|
||||||
|
name = 'thermal'
|
||||||
|
thermal_root = '/sys/class/thermal'
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def probe(target):
|
||||||
|
|
||||||
|
if target.file_exists(ThermalModule.thermal_root):
|
||||||
|
return True
|
||||||
|
|
||||||
|
def __init__(self, target):
|
||||||
|
super(ThermalModule, self).__init__(target)
|
||||||
|
|
||||||
|
self.zones = {}
|
||||||
|
self.cdevs = []
|
||||||
|
|
||||||
|
for entry in target.list_directory(self.thermal_root):
|
||||||
|
re_match = re.match('^(thermal_zone|cooling_device)([0-9]+)', entry)
|
||||||
|
|
||||||
|
if re_match.group(1) == 'thermal_zone':
|
||||||
|
self.add_thermal_zone(re_match.group(2))
|
||||||
|
elif re_match.group(1) == 'cooling_device':
|
||||||
|
# TODO
|
||||||
|
pass
|
||||||
|
|
||||||
|
def add_thermal_zone(self, _id):
|
||||||
|
self.zones[int(_id)] = ThermalZone(self.target, self.thermal_root, _id)
|
||||||
|
|
||||||
|
def disable_all_zones(self):
|
||||||
|
"""Disables all the thermal zones in the target"""
|
||||||
|
for zone in self.zones:
|
||||||
|
zone.set_mode('disabled')
|
Loading…
x
Reference in New Issue
Block a user