blob: d9483b0b6af31ad78177b3892876d5c67ffc7927 (plain
Kernel driver over current detection driver
* Intel Medfield Platform
Author: Durgadoss R
This driver monitors the current drawn by the platform, and detects the
peak current conditions. When the current drawn is more than the
configured limit for a period of time (which is specified by a timer), an
interrupt is generated. The current limit and the timer value can be
configured at run time.
The current thresholds aka BATTCURRENTLIMITS(BC) are of two types:
at which the system should take actions to bring the
current consumption down.
at which the hardware does a COLDOFF.
The timer thresholds are of three types:
This corresponds to the first flag for time that the battery
current has been above BC1. An interrupt is generated to allow
software to correct the situation based on use-case.
2.hardware action threshold(T2)
This corresponds to the second flag for time that the battery
current has been above BC1. It signifies that the system
should control high current subsystems through hardware.
Besides a general interrupt, audio_volume_crush, vibra_disable
signals are sent.
This final flag signifies that when the system current exceeds
the threshold for more than T3, system should shutdown.
Following table summarizes the exported sysfs files:
bcu_status(RW) - To enable/disable burst control unit.
0 - enables bcu, 1 - disables bcu.
accumulation_time(RW)- Time since last clearing/overflow of warning_count
in milli seconds. Writing 0 resets the acc_time and
also clears both the warning counters.
warning_count(RO) - Two space seperated values that indicate the number
of times the current thresholds have been crossed.
action_mask(RW) - A hex value to enable/disable specific
actions taken when current violation happens.
bits [b4 b3 b2 b1 b0] control [a4 a3 a2 a1 a0] actions
respectively. a4 - camera output, a3 - sys burst,
a2 - SOC burst enable, a1 - vibra, a0 - audio output.
bits [b7 b6 b5] - Reserved.
Default value:08 (sys burst output is enabled).
action_status(RO) - A hex value showing the status of actions taken
since the __last__ interrupt.
b7 - T3 violation
b6 - T2 violation
b5 - T1 violation
b4 - camera action taken status
b3 - sys burst disable action taken status
b2 - SOC burst disable action taken status
b1 - vibra disable
b0 - audio volume crush
A '1' in a bit position indicates that particular
action has been taken.
current_warning(RW) - This gives the current(in mA) at which a warning is
generated. Range: 1400 to 4800. Default:3000
current_shutdown(RW) - This gives the current(in mA) at which system shutdown
is initiated. Range:1800 to 5800. Default:3800
timer_warning(RW) - Time above current_warning limit at which interrupts
are trigerred(so that software can bring the current
consumption down). Values are in micro seconds.
Range:200 to 7700 in steps of 500
timer_hw_action(RW) - Time above current_warning limit at which the system
is trigerred into hardware control to bring down the
current consumption. Values are in micro seconds.
Range:200 to 7700 in steps of 500
timer_shutdown(RW) - Time above current_warning limit at which a hardware
shutdown event is trigerred. The timer values are in
Range:1000 to 15000 in steps of 1000
For all timer interfaces, tolerance shall be 5% maximum.
All timers start running concurrently once current_warning/current_shutdown