ARM: hotplug: add intelli_plug (squashed up to latest 3.7)

intelli_plug: intelligent hotplug cpu driver with eco mode

intelli_plug: tweak for faster wakeup from suspend

bump version to 1.1

Signed-off-by: faux123 <reioux@gmail.com>

intelli_plug: increase cores on persistence

also replace hardcoded values with Macros for ease of updating later

Signed-off-by: faux123 <reioux@gmail.com>

intelli_plug: another performance tweak for better UI response

Signed-off-by: faux123 <reioux@gmail.com>

intelli_plug: make it gcc-4.6.x eabi compatible :p

Signed-off-by: faux123 <reioux@gmail.com>

intelli_plug: use rq_stats to help detect artificial or constant loads

benchmarks often create fake / artificial loads at a constant rate.  These
type of loads are not detected corectly by run average algorithms. Use
the run queue stats to help detect these cases and bring up the cores in
correspondence.

bump version to 1.2

Signed-off-by: faux123 <reioux@gmail.com>

intelli_plug: use mp_decision() algorithm for core 3 and 4

This replaces the simplistic check for run queue thresholds with a more
sophisticate algorithm with time awareness

bump version to 1.3

Signed-off-by: faux123 <reioux@gmail.com>

intelli_plug: tweak mp_decsion parameters and remove unused logic

Signed-off-by: faux123 <reioux@gmail.com>

intelli_plug: bump threshold slightly for better response

Signed-off-by: faux123 <reioux@gmail.com>

wip: intelli_plug: change logic for better benchmark performance

Signed-off-by: faux123 <reioux@gmail.com>

intelli_plug: use mp_decision to reduce online persistence count for cores

this should bring down the cores faster when run queue is low
also optimized code a bit using local vars

Signed-off-by: faux123 <reioux@gmail.com>

intelli_plug: restore hysteresis value for quad back to 8

this will reduce the jumpiness of hotplug decisions

Signed-off-by: faux123 <reioux@gmail.com>

intelli_plug: disable by default

let the user enable via sysfs so it won't clash with mpdecision which is
enabled by default for qualcomm phones

Signed-off-by: faux123 <reioux@gmail.com>

intelli_plug: slow down hotplug activity from 50ms to 200ms

this will reduce the hotplug chaos which may in turn save more power

Signed-off-by: faux123 <reioux@gmail.com>

intelli_plug: code clean up and minor bug fixes

bump to version 1.6

Signed-off-by: Paul Reioux <reioux@gmail.com>

intelli_plug: add dynamic load sampling rate logic

Add dynamic sampling logic based on load. If load is high and required more
than 2 cores, increase the sampling rate for a duration of 3 seconds to help
manage the load better during this time.  Once duration expires, revert back
to lazier sampling rate for better batter performance.

bump to version 1.8

Signed-off-by: Paul Reioux <reioux@gmail.com>

intelli_plug: add touch input logic

changed intelli_plug sampling rates and bump to version 2.0

Signed-off-by: Paul Reioux <reioux@gmail.com>

intelli_plug: use a context safe function call instead

Signed-off-by: Paul Reioux <reioux@gmail.com>

intelli_plug: performance tune-up continued...

Signed-off-by: Paul Reioux <reioux@gmail.com>

intelli_plug: tune for tablet devices

Signed-off-by: Paul Reioux <reioux@gmail.com>

intelli_plug: switch to use dedicated high priority workqueue

from the shared global workqueue.  This should prevent hang ups while the
global workqueue is busy and cleaned up some logic issues.

give input boost its own workqueue

bump to version 2.2

Signed-off-by: Paul Reioux <reioux@gmail.com>

intelli_plug: code review clean up

set def sampling rate to something sane rather than zero (instantaneous
rescheduling is not good if intelli_plug is disabled)

make touch input more generic rather than tied to a touchscreen driver

remove unused code

thanks to @dorimanx for the code reviews and suggestions

bump to version 2.3

Signed-off-by: Paul Reioux <reioux@gmail.com>

Intelli_plug: add wakeup cpufreq boost for quicker wakeup

bump version to 2.4

Signed-off-by: Paul Reioux <reioux@gmail.com>

Conflicts:
	arch/arm/mach-msm/intelli_plug.c

intelli_plug: add screen off max controls

bump to version 2.5

Signed-off-by: Paul Reioux <reioux@gmail.com>

Conflicts:
	arch/arm/mach-msm/intelli_plug.c

intelli_plug: add parameter to control touch boost on/off

bump version to 2.6

Signed-off-by: Paul Reioux <reioux@gmail.com>

intelli_plug: refactor stats calculation code to be less intrusive

this is done for those kernels which do not have 100% source code available
and must use existing closed source modules such as wifi drivers

Signed-off-by: Paul Reioux <reioux@gmail.com>

Conflicts:
	kernel/sched/core.c

intelli_plug: add profiles support and misc code optimization

bump to version 3.0

Signed-off-by: Paul Reioux <reioux@gmail.com>

Intelli_plug: kernel sched/core: add per cpu nr_running stats

Signed-off-by: Paul Reioux <reioux@gmail.com>

intelli_plug: use per cpu nr_runnings stats for unplugging cores

bump version to 3.1

Signed-off-by: Paul Reioux <reioux@gmail.com>

Conflicts:
	arch/arm/mach-msm/intelli_plug.c

intelli_plug: allow cpu_nr_running_threshold to be user adjustable

bump version to 3.2

Signed-off-by: Paul Reioux <reioux@gmail.com>

intelli_plug: tweak cpu_nr_running threshold

and fix minor logic issues

Signed-off-by: Paul Reioux <reioux@gmail.com>

intelli_plug: remove legacy msm_rq based code

just use the original algorithm based on nr_running_stats

bump version to 3.3

Signed-off-by: Paul Reioux <reioux@gmail.com>

Conflicts:
	arch/arm/mach-msm/intelli_plug.c

intelli_plug: add nr_running_thresholds based on thread capacity of SOC type

instead of hard coded nr_running_thresholds, perform compile time calculation
of thresholds based on thread capacity of SOC types.

bump version to 3.4

Signed-off-by: Paul Reioux <reioux@gmail.com>

intelli_plug: misc minor code fixup post 3.4 update

Signed-off-by: Paul Reioux <reioux@gmail.com>

intelli_plug: add automatic dual-core initializations

Signed-off-by: Paul Reioux <reioux@gmail.com>

intelli_plug: deprecate eco mode. replaced by built-in profile

bump version to 3.5

Signed-off-by: Paul Reioux <reioux@gmail.com>

Conflicts:
	arch/arm/mach-msm/intelli_plug.c

intelli_plug: add eco-extreme profile for more dual core use options

Signed-off-by: Paul Reioux <reioux@gmail.com>

intelli_plug: post 3.5 tweaks and code clean up

bump to version 3.6

Signed-off-by: Paul Reioux <reioux@gmail.com>

intelli_plug: move to its own directory. It's been cross platform for…
… a while

intelli_plug driver has been working on OMAP44xx, TEGRA 3, Exynos and
MSM Krait/Cortex multi-core SOCs.  So it doesn't make sense to patch on a per
SOC basis, move it to its own ARM platform independent folder so patches can
apply to all supported ARM platforms

Signed-off-by: Paul Reioux <reioux@gmail.com>

Conflicts:
arch/arm/mach-msm/Kconfig
arch/arm/mach-msm/Makefile

intelli_plug: unify powersuspend and earlysuspend drivers

also minor clean up on the persist logic

bump to version 3.7

Signed-off-by: Paul Reioux <reioux@gmail.com>

intelli_plug: adjust thread capacity for Cortex A7 SOCs

Cortex A7 is much weaker than Krait processors

Signed-off-by: Paul Reioux <reioux@gmail.com>

intelli_plug: fix thread capacity threshold calculation

Signed-off-by: Paul Reioux <reioux@gmail.com>

intelli_plug: fix logic error for eco mode profiles

Signed-off-by: Paul Reioux <reioux@gmail.com>

intelli_plug: only apply suspend/resume logic if active

Signed-off-by: Paul Reioux <reioux@gmail.com>

intelli_plug: fix incorrect cpufreq API usage

This resolves the wakeup kick and screen off max issues

Signed-off-by: Paul Reioux <reioux@gmail.com>

intelli_plug: initialize ip_info struct element during driver init

this will eliminate race issues

Signed-off-by: Paul Reioux <reioux@gmail.com>

intelli_plug: use primary CPU's info data for non-boot cpu's settings

Async CPU design has caused quite a bit of grief for controlling cpu
frequencies

bump to version 3.8

Signed-off-by: Paul Reioux <reioux@gmail.com>

intelli_plug: older Qualcomm kernel compatibility fixup

ARGH... really angry at CAF code.

some cpufreq driver APIs are incredibly unstable with some of the older
MSM kernels.  The correct way is the fix the cpufreq drivers, but there are
tons of variations out there, so rather than depending on a fix, make
intelli_plug more universal by avoiding the troubling APIs altogether

Signed-off-by: Paul Reioux <reioux@gmail.com>