PID Objects & Algo

These are the PID controller implementations for fans,
and thermals.  This also includes the PID algorithm used.

Change-Id: I30471fbf7a8a7ed65f78bf105970d62815fedc56
Signed-off-by: Patrick Venture <venture@google.com>
diff --git a/pid/README b/pid/README
new file mode 100644
index 0000000..93e48f3
--- /dev/null
+++ b/pid/README
@@ -0,0 +1,11 @@
+ThermalControllers and FanControllers are derived objects from a common PID
+Controller object.  The design implemented in this structure is a facsimile of
+what was published in the Chrome OS source.
+
+One has any number of ThermalControllers that run through a PID step to
+generate a set-point RPM to reach its thermal set-point.  The maximum ouput
+from the set of ThermalControllers is taken as the input to all the
+FanController PID loops.
+
+Each group of these controllers is managed within a zone.  A PIDZone object
+helps manage them by providing a sensor value cache and overall execution.