| import xml.etree.ElementTree as ET |
| import tempfile |
| |
| DEVICE_PATH = '/vendor/etc/powerhint.xml' |
| |
| |
| def restart_power_hal(target): |
| """Kill power HAL service so it can pick up new values in powerhint.xml.""" |
| target.execute('pkill -f android\.hardware\.power') |
| |
| |
| def set_touch_param(target, opcode, new_val): |
| """Set a new value for the touch hint parameter with the specified opcode.""" |
| hinttype = '0x1A00' |
| |
| # Get current powerhint.xml file |
| with tempfile.NamedTemporaryFile() as tmp: |
| target.pull(DEVICE_PATH, tmp.name) |
| |
| # Replace current parameter value |
| tree = ET.parse(tmp.name) |
| xpath = './Hint[@type="{}"]/Resource[@opcode="{}"]'.format(hinttype, opcode) |
| tree.findall(xpath)[0].set('value', '{:#x}'.format(new_val)) |
| |
| # Write new powerhint.xml file to device |
| tree.write(tmp.name) |
| target.push(tmp.name, DEVICE_PATH) |
| |
| # Restart power HAL to pick up new value |
| restart_power_hal(target) |
| |
| |
| def set_touch_boost(target, boost=50): |
| """Change the top-app schedtune.boost value to use after touch events.""" |
| opcode = '0x42C18000' |
| if boost < 0: |
| boost = 100-boost |
| set_touch_param(target, opcode, boost) |
| |
| |
| def set_touch_min_freq(target, cluster, freq=1100): |
| """Change the CPU cluster min frequency (in Mhz) to use after touch events.""" |
| opcode = '0x40800000' if cluster == 'big' else '0x40800100' |
| set_touch_param(target, opcode, freq) |
| |
| |
| def set_touch_cpubw_hysteresis(target, enable=False): |
| """Set whether to leave CPUBW hysteresis enabled after touch events.""" |
| opcode = '0x4180C000' |
| enable_num = 1 if enable else 0 |
| set_touch_param(target, opcode, enable_num) |
| |
| |
| def set_touch_cpubw_min_freq(target, freq=51): |
| """Set CPUBW min freq used after touch events. See mapping in msm8998.dtsi.""" |
| opcode = '0x41800000' |
| set_touch_param(target, opcode, freq) |
| |
| |
| def restore_defaults(target, powerhint_host_path): |
| """Restore default power hint settings using a powerhint.xml file from the host.""" |
| target.push(powerhint_host_path, DEVICE_PATH) |
| |
| restart_power_hal(target) |
| |
| |
| def disable_launch_hint(target): |
| """Turn off all launch hint tweaks.""" |
| hinttype = '0x1B00' |
| |
| with tempfile.NamedTemporaryFile() as tmp: |
| target.pull(DEVICE_PATH, tmp.name) |
| |
| tree = ET.parse(tmp.name) |
| xpath = './Hint[@type="{}"]'.format(hinttype) |
| launch_hints = tree.findall(xpath)[0] |
| for child in launch_hints.findall('./Resource'): |
| launch_hints.remove(child) |
| |
| tree.write(tmp.name) |
| target.push(tmp.name, DEVICE_PATH) |
| |
| restart_power_hal(target) |