Welcome to the Perseus kernel! I thought it would be a nice catchname considering the Galaxy/Universe/Pegasus themes.
This is a direct port of my kernel on the Galaxy S3. I am using the same source base for both devices for the kernel, just with a different configuration file. The kernel images are not interoperable! I will continue development in parallel for both devices, with the Note 2 having maybe some delay due to third party testing.
I'm trying to be more cutting-edge in terms of development in this kernel. In contrast to other kernels and philosophies of other developers, I don't believe giving the users more choice is a very smart thing to do. As such you won't find a dozen different governors or twenty different settings for this kernel. There is a optimal, or at least, most optimal setting on which the devices operate both in terms of performance and power management. For the average user this kernel will brings lots of benefits to battery life, screen improvement, fluidity and sound enhancements without having to set up any of the configurations.
The kernel comes with a configuration application called STweaks, and is installed automatically with the kernel. You will find all advanced options in there.
Don't be scared by the alpha denomination of the kernel, I'm just taking the traditional naming scheme where alpha designates feature development, beta is feature-completeness, and final will actually be when I'll actively stop developing the kernel. The kernel is very stable, and any bugs are fixed in hotfix versions (alpha x.y)
The kernel is also being maintained and released cross-device for the I9305 (S3 LTE), i9300 (S3) and N7105 (Note 2 LTE) and shares the same base-source. I solely own a I9300 Galaxy S3, but since all the phones derive from the same Midas platform, I merely adapt the differences without having the other devices.
Features / changelist:
Perseus alpha36.3 (26/04):
Fixed slice lookup issue on ABB: It's recommended you put your slices back to default before flashing if you changed them to borderline stability values. Please upgrade.
Perseus alpha36 (22/04):
Adaptive Body Bias control (ABB). (Experimental feature)
Body biasing is taking advantage of transistor body effect for binning the chip depending on its quality. In fact, this is used on the latest Samsung SoCs both for reducing power consumption and validating bad chips by adjusting their electrical characteristics.
The body bias is dictated by the voltage applied to the transistor gate (The usual voltages you're all used to) minus the voltage applied to the transistor body. The resulting bias can change the transistor's electrical characteristics in two possible ways:
Before reading on: A transistor's voltage and operating frequency is defined/limited mostly on its threshold voltage. Wikipedia has a neat visual representation of this; voltage must raise to a certain point for the transistor to be able to switch and operate. This threshold voltage can be highly dependant on temperature, influenced by the body effect, and defined by the manufacturing process. What we're doing nowdays with undervolting is to get as near as possible to the upper bound of this threshold voltage.
With that in mind:
Forward Body Bias
A FBB is defined when the bias of the gate voltage minus body voltage is positive, meaning the gate voltage is higher than the body voltage. This has the effect of reducing the threshold voltage. By reducing it, you can achieve lower voltages, or be able to clock the transistor higher. However the side-effect of lowering the threshold voltage is that you are sacrificing power leakage, meaning that the lower the threshold voltage becomes, the higher leakage current in the transistor becomes. This leakage power rises exponentially with a linear lowering of the threshold voltage. This is what is called static transistor leakage.
Reverse Body Bias
A RBB is defined when the bias of gate voltage minus body voltage is negative, meaning the gate voltage is lower than the body voltage. it has the direct opposite effect of FBB, it raises the threshold voltage thus you would need a higher gate voltage for switching, but however you also dramatically decrease static leakage.
What happens is that you want to use RBB when idling, and a reduced RBB, or even FBB at very high clocks.
Samsung currently uses this on top of voltage scaling to bin their chips. Here's an excerpt of the stock body biasing on the 4412 Prime chip (I'm using that one as an example as it has better adjusted ABB values over the Rev 1.1 chips).
{
"lightbox_close": "Close",
"lightbox_next": "Next",
"lightbox_previous": "Previous",
"lightbox_error": "The requested content cannot be loaded. Please try again later.",
"lightbox_start_slideshow": "Start slideshow",
"lightbox_stop_slideshow": "Stop slideshow",
"lightbox_full_screen": "Full screen",
"lightbox_thumbnails": "Thumbnails",
"lightbox_download": "Download",
"lightbox_share": "Share",
"lightbox_zoom": "Zoom",
"lightbox_new_window": "New window",
"lightbox_toggle_sidebar": "Toggle sidebar"
}
To find out your ASV group: You can read out your ASV group in /sys/devices/system/abb/abb_info now.
I have rewritten the ABB scaling logic/driver for CPU, GPU, MIF and INT voltages.
In the current implementation, since it would be insane to have paired-up gate-body voltages divides the frequency range in several slices; even Samsung uses only three voltage ranges on the DVFS scale. I divided the frequency ranges as follows:
CPU: Divided into four slices, with frequency ranges of 200], 800], 1600] and ]1600 Mhz.
GPU: Three slices: 160], 533] and ]533 Mhz.
MIF and INT: Both only two slices with the bottom frequencies for each as middle-threshold.
As mentioned above, controls can be found in /sys/devices/system/abb/ and the entries are self-explanatory. You can also change the frequency slice limits per sysfs, however in STweaks I only included the voltages for each slice only for now.
Disclaimer
{ And that's about it in that regard. I have tried testing things over last couple of weeks, but I haven't come to a solid conclusion yet beyond what's presented by the stock characteristics: It's up to you people to do some advanced testing on the matter. My limited empirical testing in terms of voltages tells me it works as intended, but if a user with advanced measuring equipment would do similar testing to what I did back on the 4210 it would be perfect. }
zRAM: Switched over from LZO to Snappy compression algorithm, this provides much faster compression and decompression than the LZO implementation which was in the current kernel. I updated the Snappy libraries to the latest original CSNAPPY implementation, so this is extremely new.
Some kernel internal updates to speed up hotplugging and improve I/O latencies.
A correctly (Unlike basically every other kernel out there till now) applied load averaging patch regarding fixing a Moiré pattern in the scheduler load calculations which was floating around.
Fixed mono and equalizer switches in the sound engine. (Thanks to sorgelig for beating me to it)
Fixed led controls to behave correctly with user-space apps.
mDNIe digital brightness reduction:
You can now lower the brightness to basically nothing via this: it uses the mDNIe engine to digitally remove luminance from the RGB channel values, as opposed to reducing brightness via a proper backlight/display driver. The side effect of this is that you lose colour resolution somewhat, but is a practical and working method to reduce the too bright minimum values of our displays.
You have three configurables:
A reduction rate which you want to apply, this is the intensity of the darkening you want to achieve.
The take-over point; the backlight driver gets fed brightness values from 0-255 (In reality values below 20 have no effect). The take-over point is the point where the digital brightness reduction starts, on a reverse scale. The reduction is applied linearly from 0, (Full reduction taking place), to the take-over point (Zero reduction). The stock slider doesn't go below 20 in the interface, so practically the full reduction rate is never applied unless you use a third-party brightness controller app, just to keep that in mind, but in practice it doesn't matter.
Auto-brightness input-delta: This is needed because the stock framework is retarded in the values it forwards to the kernel, you can adjust this to avoid having brightness reduction when you don't want it on auto-brightness.
Somebody needs to edit config_autoBrightnessLevels, config_autoBrightnessLcdBacklightValues in framework-res.apk\res\values\arrays.xml to fix this.
Optionally, if you use a third-party app like Custom Auto Brightness which allows backlight values of down to 0, you can avoid this problem.
The register hook needs to be enabled to be able to use this function.
EA8061 Note 2 owners only: increased the maximum brightness by 50 candela: the manual controls were limited to 250cd as maximum as opposed to 300cd which was only usable during auto-brightness, and unusable for any third-party apps. This doesn't apply to users with S6EVER02 controllers.
Unaligned memory access throughout the kernel when applicable.
Switched over to GCC 4.7.3 Linaro toolchain for compiling.
Perseus alpha35 (06/04):
Further rewrote the in-kernel audio controls:
Threw out the old detection methods for something more robust.
This particularly enables non-cellular applications such as Skype, Viber, and so on to be detected correctly. A "calling" state now includes any and all use-cases where the audio is outputted via the phone's earpiece. This fixes microphone levels for such apps to correctly use the calling sensitivity value.
Added microphone level for camera use, this state is enabled whenever a camera stream is active. It should give more options into adjusting things to your likings.
By now the sound engine has only little similarities to Boeffla, any bugs and feedback now go directly to me.
Developers only: MHS: Added a new small tool for tracking media use and reporting it to other in-kernel drivers. Capable of detecting video recording, decoding and camera streams for now. See commit for more info.
mDNIe control changes:
Removed several controls in STweaks simply because people misunderstood them or misused them, or they simply had no rational use.
Video detection, now with the help of MHS, is no longer limited to the stock video player. Any video players using hardware decoding will now be able to make use of edge enhancement, HDR and DNR, this includes any web-based players and the YouTube app.
Custom LED controls implemented; Exposed most variable controls for the notification LED via sysfs and STweaks (LED tab). :
Control LED brightness. Currently the OS dictates, depending on brightness detected by the light-sensor, wether to run the LED in a low-power mode or in a high-power mode, you can now set brightness for both.
Blinking control, this is basically the shape of the wave-pattern that the LED blinks in, you have several controls, best described the data-sheet description:
The fade-in time period is TT1 in the graph, while the fade-out period is TT2.
Slope (1/2/3/4) detention time represents DT1,2,3,4 in the graph, it controls how "steep" the four different curves are.
The LED fading checkbox simply switches between having the detention times controlled by the sliders to having them to 0 (Stock blinking behaviour).
The ZRam control is found in the I/O Tab in STweaks. Set it to 0 to turn it off completely, any other value to turn swap on. Changing value takes about ~10-20 seconds depending how loaded the disk is with swap pages so don't piss your pants if it doesn't react immediately.
Sources:
https://github.com/AndreiLux/Perseus-S3
Credit and thanks:
gokhanmoral, netarchy, and anybody credited in the commits.
Thanks to sswagonman for the initial testing.
TL;DR: before flashing aside from known issues in the second post.
This isn't an AOSP kernel.
Please choose the right version between N7100 (International 3G) and N7105 (International LTE).
The kernels are labelled for their respective target device. You have no excuse in messing this up.
Other variants
Note 2 L900 (Sprint) Download
Note 2 i605 (Verizon) Download
Note 2 T889 (T-Mobile) Download
Note 2 i317 (AT&T) Download
U.S. Cellular R950 & China Mobile N7108 (这个版本是专为中国移动用户提供的Samsung Galaxy Note II 变体,中国移动版-N7108)
Kernels for these variations of the devices below.
Known issues [Updated 10/01]
None.
Older changelogs
Perseus alpha34 (22/03):
Updated sound engine. Based on Boeffla (Andip71)sound but custom fork with rewritten system interface and some other code re-factorings.
Should fix all FM Radio issues.
Brings us saturation prevention for the equalizer.
Privacy mode.
Microphone level control
You now have control over the speaker equalizer via sysfs, please visit /sys/class/misc/wolfson-control/ the controls are self-explanatory.
I removed the equalizer pre-sets from STweaks, if you want, set them manually:
Bass-extreme: 12 8 3 -1 1
Bass and Treble: 10 7 0 2 5
Treble: -5 1 0 4 3
Classic: 0 0 0 -3 -5
Pleasant for ears: 4 3 2 3 1
Eargasm: 12 8 4 2 3
I recommend HeadphoneAmpControl (thread - Play Store) for controlling the volume directly on a hardware level; it will overwrite the digital volume of the OS and use the hardware amplifiers only.
Enabled ZRam by default with disk size of 200mB and swappiness of 90%.
Applied a requested patch which allows PCs to be booted off from the phone storage.
Perseus alpha33 (26/02):
Revamped and hopefully final version of mDNIe controls:
The controls work now on two levels: First we have a master sequence that overrides any and all of Samsung's settings; The master sequence is calibrated to sRGB norms on a precision level equalling and even surpassing the iPad3/4 with help of professional equipment (Spectrophotometer) and professional hands. All credit goes to Slimer777 for his incredible job in doing this.
Calibration data:
Simple report: Download
Detailed calibration report: Download
Advanced colour management report: Download
(Please note that the "before" values represent the raw screen output without use of mDNIe, these values don't represent any of the live profiles)
The master sequence works as as the calibrated base; for people not wanting to bother further with any more controls, you simply enable this and you're done. Please keep in mind that every screen is slightly different and variations in manufacturing affect image output; this works as a base calibrated as close as possible to sRGB / Rec. 709 specifications.
Second part is the register hook, it catches effect values and modifies them by applying delta values available as controls in STweaks and in /sys/class/misc/mdnie/hook_control/.
Leaving both these options will give you Samsung's default values, plus the black crush fix.
The register hook, while used on Samsung's profiles, is not capable to alter effects which are not integrated in that screen profile's value sequence, the "Movie" profile for example lacks some effects present in the "Dynamic" profile. The same is valid when having different scenarios, the "Camera" scenario will use different effects in its base than the "UI" scenario. To fully explore all possible effects, use the Master profile as it integrates all effect values known.
Each control has a master kill-switch which enables or disables the effect. This varies by profile and scenario, so you have control to only "toggle" the switch, whatever its state may be in.
Digital noise reduction - Reduces and flattens out grain. Advanced controls are found in the hook_control folder with the dnr_ prefix.
High dynamic range - A HDR effect which brings out details in dark and extremely bright scenes.
Digital edge enhancement - An edge enhancement effect. What we previously called "sharpening". Divided in controls for radius, amount and threshold. Read the Wikipedia page for more information. More advanced controls found in the sysfs under the de_ prefix.
For the above three effects, scenario consideration is taken into account. You can enable/disable them depending when you want it to be applied. Please be aware only the stock applications trigger the scenarios. I will try to enable at least the video scenario depending on when the hardware decoder is active in the future so that they are enabled also in third-party video players.
Chroma saturation control - Same as in previous version but with fixed labels.
Colour temperature control - By default this is disabled on all profiles, however, if your screen has a tint to it, this is the first control you should try to fix as it alters temperature on all channels.
The SCR controls are colour channel filters working on the Red, Green, Blue, Yellow, Cyan, Magenta, White, and Black channels.
Imagine the controls as manipulating the corners of the RGB cube:
(Credit to Wikipedia for the graphic)
By controlling the RGB coordinates of each corner/channel we can mould the cube into a different shape. At the same time the cube is projected onto a hexagon; the perimeter / angle of the hexagon represents the colour hue, the radius of the hexagon from the middle represents chroma. We can use the chroma saturation controls to "push in" each corner of the cube, while moulding the corner's directions with the RGB controls. The RGB coordinates can be transformed into the HSL space space if needed, however I didn't include this function yet as I don't feel the need for it.
STweaks has controls for the RGBYCMW channels, the K (Black) channel I left out because it makes no sense in altering it, but can be found in the sysfs folder.
Several controls have a "factory setting" switch, this are the burned in-hardware values for some controls, they overwrite the controls themselves.
Additionally to the controls exposed to STweaks, there are several other effects and modifiers exposed in the sysfs interfaces. This also includes the gamma curve controls for levels 0-255 in steps of 16.
There are also some additional unidentified configurables which I wasn't able to properly give a name to or had no effects: Dithering, ABC (Seems to give a gamma brightness boost), SCC, UC, and MCM (Colour temperature) configurables whose exact effect isn't documented.
Perseus alpha32 (29/01):
Charging control implemented. This is my own version.
Charging currents:
Charging currents are dictated by input and charging current limits. The input current is the current flowing into the device through the USB port at 5V. The charging current is the current delivered to the battery at usually 4.35V. The device can have a higher charging current than input current because of the voltage differential, usually a 15% discrepancy. You can also have much higher input currents than charging currents, this can be useful when you are using the device in situations like gaming and charging your battery at the same time, provided your charger actually can provide the power.
There are 3 USB charger type categories: DCP / Dedicated Charging Ports which also includes AC chargers, but also special USB plugs; SDP / Standard Downstream Ports which usually includes almost all data enabled USB ports, and CDP / Charging Downstream Ports which includes also data enabled USB ports but which are designed to provide more power, usually on newer laptops where the USB port has a lightning logo next to it. More info here. - Technical explanation here.
Charging logic:
Stable margin removal option. The charger chip is capable of detecting unstable charging sources; it dynamically reduces the input current in 100mA steps until it detects a stable voltage input [We don't have the charger chip datasheet, so the technical explanation is a bit blurry here on how it decides that it's unstable]. It further reduces it by 100mA as a safety margin, you can disable this now.
Complete disabling of unstable power detection. This simply ignores unstable power sources and leaves the input current limit at its set up value. This will fix charging problems people have been reporting. However, please use it at your own risk, the S3 chargers which have had these symptoms clearly have some issue in their hardware so you might actually kill them with this option enabled as there is no protection from the phone's side anymore.
The actual input current limit can be read out in /sys/devices/platform/samsung-battery/power_supply/battery/current_max, so you can see the real limit there, it's the closest thing we have to the actual charging current on stock values since there is no hardware to read out the live currents.
Voltage control:
Hard voltage control: 4.20, 4.35V, and 4.40V charging voltages are available. This is included for anybody running on third-party batteries, whom most of them have a 3.7V battery chemistry as opposed to the 3.8V on the stock battery. These batteries should be charged at 4.2V instead of 4.35V.
Soft voltage control: As opposed to the hard voltage control which is the voltage which the charger chip provides to the battery while charging, the soft-voltage is the battery voltage itself. 3.7V batteries have a top-off voltage of 4.2V and 3.8V again 4.35V. The default limit on the stock battery is 4.30V before the charger logic stops and considers the battery as full. This is also merely provided for 3rd party batteries which should be charged at lower voltages. If you overcharge your battery beyond these what are safe considered voltages, such as raising the default 4.30 top-off voltage to the design 4.35V or even higher, you are running into the risk of damaging the battery or even causing it to melt-down. Use at your own discretion.
mDNIe sharpness and RGB/YCM chroma saturation control in STweaks:
I started implementing sharpness control in STweaks and went a bit over-board instead of a simple checkbox; You now have controls over the mDNIe registers as a delta offset value compared to the stock register values. I'm applying the offset to all mDNIe profiles and scenarios which have the specific post-processing effect active in that specific scenario. Meaning, that you start with the default profile; Dynamic / Standard / Natural / Movie and have the delta offset applied on top of that.
Sharpness delta. This is what brought most of the quality difference in hardcore's original tweaks. You can now fine-tune it to your own taste, and also take into regard that it produces a different effect for each screen profile while having the same delta - the base values between the profiles are different.
DE control - I don't know what this actually does and I couldn't discern much difference between the values, but it used to be disabled in hardcore's tweaks.
Chroma saturation control: This is composed of 2 values for each RGB/YCM channel. See the Munsell color system for a visual representation of the values controlled here. The chroma curve control describes the curve weight based on chroma intensity, the chroma gain is the chromatic gain that is being applied on the respective channel. Chromatic saturation weight is again another multiplier for all channels combined. I have not managed to properly identify the chroma grey threshold and its effects.
Basically this is like an RGB control on steroids, and enables you to tune your screen to your own liking and calibrate it as you wish. Please note that not all scenarios in the profiles have chroma saturation effects, the Movie profile for example has no effect applied to the UI so chromatic control has no effect on it.
I also want to state that the above are my deductions and theories on the descriptions of these controls, I'm not familiar enough on colour theory to be able to confidently say that these descriptions are correct, and the controls are a work-in-progress for now. Experts are welcome to contribute here.
Front buffer early suspend delay option for those who have issues with the CRT animation.
Did some refactoring on the Mali drivers and fixed a bug which may have caused less capable undervolting than the stock implementation.
Perseus alpha31 (09/01):
Removed my own security fixes and replaced them with the official Samsung one. I guess it can now be disclosed: exynos-mem was only one of multiple entry-points for the memory exploit. We discovered the s5p-smem exploit ourselves back in December but kept it quiet, I fixed that one back in version 29.2 without mentioning. Nobody was secure from a smart exploiter up until then, SuperCurios or Chainfire's software fixes are also just patching a single hole in what is a Swiss cheese. Kernels >v31 and beyond stock LLA are now the only truly protected ones.
Samsung's fix for the sudden death syndrome (SDS) included. It is caused by eMMC failure on phones with VTU00M 16GB internal memory chips with revision 0xF1. You can check your phone with the "eMMC Brickbug Check" in the Play Store (Ignore the message if it says you're not affected, the type and revision is what matters). The patch is a firmware soft-patch that is applied on every boot and MMC resume, it is not a permanent fix. You will need to stay forever on kernels which include the patch, this also includes updated recoveries and their embedded kernels.
Some other minor MMC changes extracted from Update 7 sources.
Perseus alpha30 (06/01):
Internal and memory voltage control. This is the first and only working implementation out there. Memory interface voltage is exactly what it the name implies, the voltage on the chip-to-chip interface from the SoC to the memory chip. Internal voltage is the whole SoC voltage excluding CPU, GPU, and the MIF. This includes all auxiliary function blocks such as the ISP/Image signal processor, camera interfaces, I/O interfaces, display controller and the MFC/Multi function codec hardware video de-/en-coder.
- Internal voltage respectively memory voltage table is found in /sys/devices/cpu/busfreq/ as int_volt_table or mif_volt_table
- The frequencies are defined as OPP's (Operating performance points), internal frequency and memory frequency (And voltages) together as a pair form an OPP. If you want to change the voltages through the sysfs files, keep in mind how you change them. MIF voltages are stored independently with each OPP step. INT voltages are stored in respect of their frequency key.
- Default OPP steps are: 440220, 293220, 293176, 176176, 147147, 110110. The first three numbers represent the memory frequency, the other three the internal base frequency. For example 293220 means the memory interface is at 293MHz (586MHz DDR) and the internal frequency is 220MHz.
- The voltages in STweaks are sorted out through some magic and are frequency unique, I recommend using that for controlling them.
Busfreq logic control added into STweaks, this includes all the already available configurables in the stock kernel with added explanations and I supplemented it with a sampling rate parameter.
Sensorhub driver and firmware updated.
Touchscreen driver and firmware updated.
Replaced pegasusq's runqueue detection logic with a new more superiror and precise in-scheduler collection logic, I found that the real runqueues are much less than what was previously reported. This should help a lot with hotplugging.
Enabled AFTR by default since we are now running very often in single-core mode. Keep in mind this mode is WFI Idle + LPA + AFTR.
Fixed a kernel bug which was eating up randomness entropy. This is related to that whole seeder business - please don't use any of those fixes. I also disabled virtual addresss randomization and at the same time disabled entropy generation from the block layer, which should avoid I/O overheads.
I raised the LPA CPU idle target residency, and fixed a bug in the ABB control for voltages for 900 and 1000MHz. I suspect these two to be causes of the sudden reboots for Note 2 users, and may fix them.
Perseus alpha29 (18/12):
I'm doing a quick release because of the security fix, not very feature rich.
Fixes the exynos-mem security hole. This is my own fix and will not break camera. Read about it here. You don't need to use Chainfire's or Supercurio's fixes, in fact, you shouldn't use them because of the camera.
[*]Updated Wifi drivers.
Increased max brightness by 50 candela. (Thanks nebkat)
Added GPU utilization control to sysfs and STweaks.
Changed default GPU thresholds to more relaxed values (75/17)
Added block device read-ahead control to STweaks. Additionally set the default read-ahead for internal memory to 256kB and 1mB for SD cards.
29.1: - Reverted the Wifi drivers back.
Perseus alpha28 (13/12):
28.1: I reverted the striked out changes due to exFat. I changed my mind due to demand. I apologize for the chaos.
On your SD card showing up as damaged: it is not.
I made a decision in terms of exFat compatibility; either I advance the kernel with newer upstream Linux versions or stay back and keep compatibility with the exFat modules. While I have nothing against proprietary modules or such, not being able to adapt them to the kernel is not optimal. You can format your cards to FAT32 or ext4 without much issue. Please back up your data and format your card accordingly before flashing v28.
[*]Updated the block system to Linux kernel 3.3.
Introduced FIOPSv2, ROWv4, ZEN, BFQv5 as new I/O schedulers;
FIOPS is the new default scheduler, it's a CFQ like fairness scheduler optimized for solid state storage. ROW should be the actual better performer here as it has superior logic, but I didn't set it as default because of some lags when installing applications. ZEN is just a mix of SIO and Deadline and nothing special. BFQ seems to underperform. I recommend the first two over everything else, and added the latter two just for comparison's sake.
Added dynamic Fsync control (Faux123). It disables Fsync only when the screen is on. Enabled by default (Fsync off).
Changed some logic on when the adaptive scaling voltages are applied in the kernel init sequence. This fixes GPU voltages not being applied at boot and also fixes the wrong default voltages being displayed in STweaks.
STweaks tab for I/O with scheduler selection for each device block and also dynamic Fsync.
New script side feature in the uci.sh framework: When inserting an override.profile file into the profile folder (/data/.perseus), the entries in the override profile will supersede the ones in your default profile. You can use to make CWM zips to turn off set at boot flags or to share targeted settings with others. The override is applied once at boot after which the profile deletes itself.
Perseus alpha27 (02/12):
Sources updated with various updates from N8000u1 base. Included are following important changes;
Wacom drivers, Sensorhub firmwares, touchscreen updated.
Updated wireless drivers.
Adds a delay to SD Card host controller power-down, which I assume is to prevent some corruption. There is a specific change to Toshiba 19nm manufactured SD Cards, these are mostly the latest SanDisk 64GB cards. Together this may fix issues users have had.
Updates the camera interface, Video4Linux and Jpeg2x drivers and this fixes compatibility with 4.1.2 ROMs. Backwards compatibility is retained.
Other updates which are more transparent to the end-user.
Removed the sharpness modifications due to demand.
LTE devices only: Disabled CPU frequency clock while connected to a cable.
New PegasusQ logic:
- We now have additional conditionals on the hotplug logic which checks the total load across all cores and is able to bias towards a specified core count if the load is low. This is useful because previously we could have had frequency spikes and lots of low-load threads triggering a hotplug-up while in reality it wasn't needed. The core count is more biased on keeping 2 cores online in most cases now unless really needed.
- The way freq_step is handled has changed. We now take the remainder of load space above the up threshold and dissect it into three slices each having different frequency increase step sizes. The first two slices are each of up threshold differential size, lop-sided towards the lower end of the load scale. We specify the slice size and freq_step delta in regard to the original freq_step.
- A new fast-down scaling logic; if frequency is beyond a certain threshold, we take a heightened up_threshold value solely on the down scaling logic to scale down more aggressively from the higher frequencies.
Audio enhancements (Gokhan Moral's port of Voodoo sound) re-enabled. Call-detection is currently broken (Effects are applied during call while they shouldn't be), but this fixes the effects not being applied otherwise. (Thanks to sjkoon for finally debugging that)
STweaks. This is my custom implementation of the kernel side, based on Gokhan Moral's initial implementation.
- CPU overclocking and voltages interface.
- Configurables for all CPU governor settings.
- GPU overclocking and voltage interface.
- Interface for audio enhancements.
Just an explanation in regard how uci.sh (Script framework on which STweaks is built) works: The settings displayed in STweaks are the defaults with which the kernel boots the first time and are saved as a profile. The saved profile settings are applied before anything else on boot, including init.d. The values displayed in STweaks do not correspond to live kernel values, but the values saved in the profile. As such if there is another app or script setting something after STweaks, it will not represent those changes. Please be aware of that. I included labels with the default values for almost all values, they are dynamically generated.
*Note: Currently the labeled default GPU voltages do not correspond the real default ones as the ASV voltages get applied after I'm reading them out for the interface on early boot. I'll fix this later on.
Perseus alpha26 (14/11):
Updated MTP drivers back to the newest version. Fixes some inconsistencies which some people had.
Further increased MMC command timeout from Linux default 300ms to 3s in trying to finally squash errors and "unexpectedly removed SD card" after resume.
Ported Gokhan Moral's mDNIe interface and also added colour tone modes on top of the scenarios. System interfaces are found in /sys/class/misc/mdnie . Input syntax is the same as the output syntax, or, single register-value pairs as a single line in the output format, except 0xFF which is a terminator value.
Increased default sampling rate down to 30ms from 50ms for a bit more fluidity.
Updated Sensorhub drivers from latest sources.
Updated Wacom and E-pen drivers from latest sources.
LTE devices only: Updated some power management functions on the MDM modem from latest sources; this will drastically decrease the amount of wakelocks on mobile data and improve battery life.
26.1
Disabled net_os_rxfilter_add_remove userspace/ROM filter management in the Wifi driver to prevent the operating system of enabling unwanted pass-through multicast and broadcast filters while in standby.
Perseus alpha25 (23/10):
Raised and fixed USB, MISC charging rate to 900mA.
Enabled OTG car dock, smart dock and music dock charging. Alternatively this can be triggered if you short pins 4 and 5 of the USB connector with a 40.2kΩ, 64.9kΩ or 619kΩ resistor.
MTP fixed on OSX devices.
Fixed ROM power savings feature, this was originally broken because of the addition of overclocking, and the same interface that Samsung uses for limiting CPU speed in power savings mode also limits the max frequency to factory defaults. This is now fixed and powersavings mode will throttle to 1000MHz.
Fixed mis-configuration of the default audio settings to improve sound quality, sorry about that.
Ripped out the old GPU scaling mechanisms and scaling logic and replaced it by something new.
The old mechanism was getting overly complicated and was a remnant of the Galaxy S2 where we merely had 2 frequency steps originally; this was fine then, but isn't anymore today. The threshold fuçkery was confusing to a lot of people and people generally misconfigured their settings with inane values.
The new scaling logic follows a more CPU governor-like approach: Scaling up logic is basically the same as before: the GPU will scale up to the next frequency step when the load reaches a certain threshold. Up-scaling takes place step by step. The up-scaling threshold is now global and a single value applies for all frequency steps.
Scaling down in the new logic resembles more like the ondemand method; The scaling down takes place when the load goes under a certain threshold. This threshold is dictated by the up-threshold minus a down-differential. By default they are 90 and 10. Triggering this condition we scale down into a dynamic frequency target capable of accommodating and dictated by the load level. In plain words, we can scale from max frequency immediately down to the lowest one. This will improve power consumption.
Ripped out the old GPU control interfaces and rewrote it with something new to accommodate the new logic. Your old scripts won't work anymore.
We now have 10 frequency steps to the user's disposition; defaults are: 54 108 160 266 350 440 533 640 733 800.
NOTE 2 USERS HAVE 533 AS MAX FREQ.
The new system interface targets can be found in /sys/devices/system/gpu/ .
- freq_table outputs a list of the current frequency table. You can use this interface for configuring the frequencies themselves in two ways:
Pair-wise target setting: echo 533 500 > /sys/devices/system/gpu/freq_table will change the 533 step frequency to 500.
Whole-table echo: echo 54 108 160 266 350 440 500 640 733 800 > /sys/devices/system/gpu/freq_table
In the above example you end up with the same end-result over the stock settings.
Valid clock frequencies are as follows: 54, 108, 160, 200, 266, 275, 300, 350, 400, 440, 500, 533, 600, 640, 666, 700, 733, 750, 800.
- volt_table outputs the voltages to the corresponding frequencies.
Pair-wise target setting: echo 533 1025 > /sys/devices/system/gpu/volt_table will change's 533MHz's voltage to 1025mV.
Whole-table echo in the same format as freq_table. Valid voltages are 600mV => x <= 1200mV.
- thresholds sets the two global threshold settings. echo 90 10 > /sys/devices/system/gpu/thresholds . Remember that the first is the up-threshold and the second is the down-differential. The down differential may not be higher than (99 - up value).
- min_freq and max_freq set the limits of the current DVFS policy. By default we're scaling from 160MHz to 440MHz (Same as stock).
echo 533 > /sys/devices/system/gpu/max_freq will enable the top limit to 533MHz and basically overclock the device.
echo 108 > /sys/devices/system/gpu/min_freq in the same way sets the lower limit.
25.3:
- current_freq shows the current frequency. This is if somebody likes to make a monitoring app or something.
- time_in_state shows the time spent in µS on each frequency step. Echo 0 to it (by default disabled) to disable it, 1 to enable monitoring, and any other numerical value to reset the timekeeping back to 0.
Perseus alpha24 (09/10):
Galaxy Note 2 source and kernel merge. Various platform fixes included from patching up from update5.
Fixed Mali GPU interface bugs relating to staycount, and lowered undervolt-soft limit down to 600mV.
Feature recap for new Note 2 users:
- Overclocking up to 1.8GHz and undervolting support through SetCPU. Note 2 users have a better quality CPU than Galaxy S3 users, so mind the default high voltages on those frequencies.
- GPU overclocking and undervolting support.
- A great amount of changes to improve battery life.
- Features which are in strikethrough in the changelog below do not work/are not ported on the Note 2, yet.
24.3 => Sharpness fix for the display included. Courtesy of hardcore.
24.4 => Removed Touch Boost in exchange for the Flexrate mechanisms. See below in changelog for more information.
Ported LCDFreq to the Note 2. See below in changelog for more information. The flickering is sadly still there on the Note 2.
Fixed undervolting below 850mV, previous undervolting below that value would be disregarded and 850mV would be applied in reality, even if it showed up the entered value.
Improved boot time by about 22 seconds: Fixed a major bug in the sensor hub firmware update logic, in the stock kernel and currently published sources the sensorhub firmware is being flashed over the current one on every boot, regardless if the payload firmware is the same as the current one. The update is about 130kB but it is done over the incredibly slow i2c bus, so this slowed down boot considerably. The reason was mis-labeling of the kernel firwmare version in the driver and failure to check if firmware was actually newer.
Perseus alpha23 (27/09):
Changed some auxiliary CPU clock dividers for frequencies 1600,1704,1800 MHz. These frequencies should use less power now and also should be more easily reached with more stability or lower voltage depending on your device.
Fixed CPUPower driver (Back from alpha20); this will now skew the reported processing capacity of CPU0 in the lower frequencies up until 500MHz to be 8 times greater than CPU1-3, what it does now is that the scheduler will even more migrate tasks onto CPU0 to avoid idle wakeups on the remaining CPUs, resulting in increased power efficiency. For high load > 500MHz, the driver reverts back to the default power configuraitons.
Reset the regulator configurations to their physical minima; you can now undervolt to 600mV on the GPU. Sorry I missed this before.
New feature: Dynamic Screen Frequency Scaling.
This decreases the display controller frequency in tandem with the CPU speed. Usually when you have low activity on the screen; i.e. low re-draw rates, then you mostly also have logically low CPU load. I wrote a scaling mechanic to switch between high display frequency (60Hz), and low display frequency (40Hz) in accordance to CPU scaling. This is tied in in the CPUFreq governor, in this case PegasusQ. We have three new governor configurables found in /sys/devices/system/cpu/cpufreq/pegasusq/ (Or alternatively just use SetCPU):
lcdfreq_enable: Enables or disables the mechanic, disabled by default.
lcdfreq_kick_in_down_delay: The amount of samples to wait on below the threshold frequency before entering low display frequency mode. Default value is 5 for now, a.k.a. in most cases 250ms unless accelerated flexrate is active on low load (fingers touching the screen), then depending on situation it might get as low as 62.5ms.
lcdfreq_kick_in_freq: The frequency threshold below which the low display frequency kick-in will be active. Default is 500MHz, and should probably stay as such, setting it higher will cause lags as we'd be using 40Hz in an interactive situation.
For the curious: I made a rudimentary time_in_state state accounting sysfs in /sys/devices/platform/samsung-pd.2/s3cfb.0/graphics/fb0/lcdfreq/time_in_state for testing purposes. Currently it shows wrong time values for 60Hz as the driver gets initialized before the high resolution timer, and I'll fix that later, but the 40Hz time statistics are correct.
Notice: There will be now conflicts between this and user-space controlled TwDVFS service/app. The service would limit screen frequency to 40Hz while using the camera app, this will be now overridden. I also thought the service would do more but I could not find it scaling for anything else than the camera, so it's pretty much useless in my mind, and you could theoretically remove it.
Feedback 23.3: This feature causes flickering on bright colours and low brightness. Enable it at your own will.
Changed the functionality to boost to 60Hz on any touch interaction, regardless of CPU speed.
Please provide feedback on fluidity and battery life.
Perseus alpha22 (22/09):
Update to update5 source code. Only compatible with Samsung Jellybean ROMs.
Stacks with my previous memory changes: total memory: 857mB for now.
Implemented timer slack controller.
Backported the scheduler NoHz load computation fixes, this should dramatically improve PegasusQ's hot-plugging decision making.
Further reduced Mali sampling rate down to 50ms and changes the default thresholds to more aggressive power savings and clear-cut scaling. Removed 10ms regulator switching latency. I measured a 10% battery improvement in GLBenchmark 2.1 Egypt Battery - 50% Brightness 60 FPS.
config.gz support.
Alpha21 is the same as above but without update5 and for ICS. This is the last kernel for ICS, I'll not longer support it.
Perseus alpha20 (9/09):
Gökhan Moral's port of Voodoo Sound implemented. Currently no configuration interface is available, so if you wish to play with the settings, refer to the sysfs interfaces in /sys/class/misc/scoobydoo_sound/ . If you wish to change the device name, you must do echo 0 > /sys/class/misc/scoobydoo_sound_control/enable , followed by an echo output to the same file with the target device driver name. You can use this to change the device path to /sys/class/misc/voodoo_sound/ and sub-sequentially make a certain configuration application work. Please do not ask me for support on the latter. You can disable the sound modifications completely by the same method, by of course not re-enabling it afterwards.
Changed the Wifi packet filter to block out all but mDNS multi-cast packets.
Increased mmc timeout for bad quality SD cards.
Perseus alpha19 (1/09):
Updated Samsung source base up to update4, includes changes to the Wifi driver and various other small fixes
Added ARM topology support for the scheduler to be able to use sched_mc levels. This should increase cpu idle power consumption by decreasing idle wake-ups. For the moment disabled by default, and cpu_power doesn't seem to correctly work.
Swap support.
mDNIe sharpening improvement, courtesy of hardcore.
Decreased Mali utilization timeout to 100ms down from 1s which improves reaction time on instant GPU loads (Lock screen is best example).
New valid GPU frequencies : 54, 108, 160, 200, 266, 275, 300, 333, 350, 400, 440, 500, 533, 600, 640, 666, 700 Mhz
Increased user-space memory by 48mB to have a total of 825mB useable RAM; this comes from reduced DMA memory spaces on the part of:
- The Mulfi Function Codec a.k.a. the hardware decoding and encoding unit memory space from 50176kB to 28672kB
- The camera interface imaging subsystem from 12080kB to 10240kB
- The front-camera firmware block-space from 15360kB to 14336kB
- The ION heap size for the Video4Linux driver from 71680kB to 48128kB
In the case of the ION/V4L and MFC heap sizes I determined it by setting a benchmark for all the HD sample videos listed here to not have any detrimental effect before and after the changes. Below 41mB is the size for which the Planet Earth birds scene at 1080p high profile 4.1 40mbps video starts to lag. Keep in mind that there is no way this would be considered normal quality as this is basically un-recoded Blu-Ray quality and most videos are vastly under this bit-rate.
I note that I also haven't found any detriment in use of the cameras including the modded 30mbps camera quality.
Disabled the Kies daemon, I see no point in it and it uses up memory uselessly. Obviously Kies won't work any-more, if you want you can start the service yourselves manually.
Perseus alpha18 (11/07):
Updated Samsung source base up to update3, includes various fixes to fuelgauge battery reporting on full charge, MHL code, video media drivers, Wifi driver updates, gyroscope, MAX77686 battery charger changes, increased max display brightness, a buttload of LCD panel changes, and changes to the pixel refresh rate driver (This thing is controlled by the TwDVFSapp by the way and decreases screen power consumption at runtime).
ro.secure=1 again now but with an insecure adbd as root included.
LFB ramdisk.
Compiled with Linaro 4.6.2 and some higher level optimizations.
Keep in mind that running the new kernel on older ROMs can cause some funny behaviour, so update your ROM if so.
Perseus alpha17 (9/07):
Rewrote flexrate request code for pegasusq: I apologize for releasing the previous version in the state that it was, shame on me.
Now upon receiving a flexrate request and active ones, the governor delays hot-plugging sampling logic so that accelerated sampling is being taken into account and hot-plug sampling is normalized for the standard sampling rate. All sub-samples are being averaged into a normal sized sample at the end of the normalized period. This no longer interferes with the runqueue read-outs as they were being reset too fast and generally accelerated hot-plugging in a bad manner.
Changed touchscreen flexrate requests to 12500µS sampling rates over 4 periods to synchronize with the default pegasusq sampling rate.
I consider this chapter to be done and a success as far implementing flexrates as a viable and working alternative to touch-boost to increase responsiveness without having the bad battery-life side-effects of the touch booster.
Performance governor is now core-aware, previously as no other hot-plugging logic was available, the governor would start with whatever number of online cores were available at that time and stay like that. This made Performance useless for it's designed purpose, that being bringing maximum performance. It now brings up all available cores online upon start and turns all additional cores back offline on governor stop. It is now by far the best and consistent governor for benchmarking.
Removed unused cpu_freq_up, cpu_freq_down, and several other flexrate related governor parameters in Pegasusq as they were either not used, or senseless.
Default Pegasusq parameters changed:
- Sampling-down factor reduced to 1 from 2, this caused reduced sampling speed upon reaching maximum frequency. It now scales (possibly down) faster.
- Frequency steps reduced from 40% to 21% of maximum frequency, this causes it to scale in 300MHz steps for the default maximum policy of 1400MHz. As we now have flexrates to scale faster I did not notice any negative effects on performance and this should help battery-wise on load-"spiky" applications, and in general.
- Increased runqueue-length thresholds for the hot-plugging logic by a flat 75 for all conditions. In my opinion and experience they were too low and caused to keep the cores needlessly online. This now reduces for "average low" use the online-time of the third core considerably.
- Increased the hot-plug frequency conditions for the 4th core.
Updated the kernel from upstream to 3.0.36.
Memcopy and string function improvements, won't bring any noticeable differences.
Compilier optimizations (Roughly the same as Ninphetamine's) are now in. VFP uses the NEON libraries now. I couldn't measure any increase in any synthetic benchmarks with this though.
LFB exFat modules.
Perseus alpha16 (3/07):
Disabled touchscreen touch booster; this previously locked the CPU frequency at 800MHz, memory interface to 400MHz and bus frequency to 200MHz at any time the finger touched the screen.
Implemented flexrate capability into pegasusq; additionally added a frequency threshold above which flexrate requests are ignored. Currently this is set at 800MHz but is configurable in the governor tunables.
Enabled quality of service requests in the touchscreen driver, this currently triggers a flexrate request at a sampling period of 15ms over the governor default of 50ms, and over 5 periods, giving 75ms of heightened reactivity. It also sends a direct memory access throughput quality of service request to the the linux power management quality of service interface to guarantee a 266MHz bus frequency for 142ms. Still need to check if that the last part works correctly.
Perseus alpha14 (21/06):
Only Mali platform changes.
Remove Samsung integrated checks on in the Pegasus platform that prevented the GPU control interfaces to work. Overclocking, undervolting, and the rest now properly work.
Removal of the CPU frequency lock to 1200MHz if the GPU is at 440MHz, this is excessive as 3D load heavy applications usually do not tax the CPU that far, and is an unnecessary power consumption burden.
The thermal control unit temperature throttling causes to fix the voltage to a fixed value when throttling is in place; this is useless considering frequency is not limited, making the whole thing senseless. Thus removed.
Perseus alpha13 (20/06):
Rebased sources on a Linux branch for commit completedness. All commits reapplied and cleaned. New repo.
CIFS included as module
Busybox removed. This should be part of the ROM.
Perseus alpha12 (14/06):
Added enhanced init.d support as per dk_zero-cool's implementation.
SHA-1 improvements
Added exception to the module loading logic for the exFat driver module thus making it work. (Credit to gokhanmoral)
Perseus alpha11 (10/06):
ro.secure=0
Recovery renamed as busybox in /sbin. I'll compile a proper busybox later on, or remove it alltogether when a recovery with autoinstall is released by CF or somebody else.
Perseus alpha10 (8/06):
Overclocking up to 1800MHz. Voltages in ASV table are somewhat scaled up until 1600MHz, after that you're on your own and have to optimize yourself.
Intel claims maximum sustainable safe voltage for 32nm HKMG to be 1.4V, above that may cause electron migration to the silicon and permanently deteriorate your chip. 1700 and above only for avid overclockers and benchmark freaks. Credit to tvanhak for playing lab rat with his phone.
Samsung frequency limitation removed to scale above 1400MHz, full credit goes to Gokhanmoral for finding this hack in the kernel as it is in a very sneaky location.
Perseus alpha7 (5/06):
Reduced regulator voltage initialization minimum to 600mV, you can now undervolt that far. Be aware of crashes.
Added SIO scheduler
Some network and CRC related patches
Perseus alpha6 (4/06):
UV_mV_table support, apps like SetCPU work now.
If you have a voltage set at for example 1187500µV the output will be rounded up to be displayed at 1188mV. If you set a voltage non multiple of 12.5mV then for example, 1190mV, it will round it to the nearest valid step, being 1187.5mV. UV_uV_table is there for finer grained control but no app suports that yet.
Perseus alpha3 (4/06):
Mali: disable state tracking
Mali: GPU frequency, scaling and voltage control
Governor pegasusq: make up_threshold_at_min_freq and freq_for_responsiveness configurable values. This is the reason the Galaxy S3 is so smooth, it has super aggressive scaling values for the governor until default 500MHz.
Enabled 1500MHz per defconfig and added voltage values to ASV table for it
Added UV_uV_table for voltage control on the CPU; this is not compatible for any programm which supports undervolting right now, we need UV_mV_table for that and since we have 12.5mV steps being fed to Vdd it's not compatible for now.
Boot partitions are made visible.
Reserved. (Variant downloads moved to post 2)
Wihoe first kernel .. gonna flash this baby when im home from work!
Sent from my GT-N7100 using XDA Premium HD app
Testing at 1800 with reduced voltages at the moment
Sent from my GT-N7100 using Tapatalk 2
All right, gona try it soon and it performed well on the S3though my cpu crashed all the time at 1800 Mhz.
gee2012 said:
All right, gona try it soon and it performed well on the S3though my cpu crashed all the time at 1800 Mhz.
Click to expand...
Click to collapse
So far so good. Did drop the voltages to 1300 tho but gonna give it some time to run
Sent from my GT-N7100 using Tapatalk 2
sswagonman said:
So far so good. Did drop the voltages to 1300 tho but gonna give it some time to run
Sent from my GT-N7100 using Tapatalk 2
Click to expand...
Click to collapse
Did you undervolt bu -75 or -100, ask this cause i get my GN2 tomorrow so can`t do anything atm
Downloaded twice. ..installation aborted. ... Does it happen only to me?
sent with my beast N7100
Use the .tar if the zip didn't work, I'll fix it in a few hours.
Wow. This must be tested
Sent from my GT-N7100 using Tapatalk 2
Ferranza said:
Downloaded twice. ..installation aborted. ... Does it happen only to me?
sent with my beast N7100
Click to expand...
Click to collapse
edit the update-script
find the line and edit to this will fix the problem
write_raw_image("/tmp/boot.img", "/dev/block/mmcblk0p8")
** for some reason, the back and menu key will not function at all
Onepagebook said:
edit the update-script
find the line and edit to this will fix the problem
write_raw_image("/tmp/boot.img", "/dev/block/mmcblk0p8")
** for some reason, the back and menu key will not function at all
Click to expand...
Click to collapse
I managed to upload the wrong CWM version, I reuploaded and both issues fixed.
Flashed thru Mobile Odin. Worked flawless.
Sent from my GT-N7100 using Tapatalk 2
Ok so now I can install it?
sent with my beast N7100
Have not undervolted yet but at 1800 this is incredible
Sent from my GT-N7100 using Tapatalk 2
Reb0rn said:
Flashed thru Mobile Odin. Worked flawless.
Sent from my GT-N7100 using Tapatalk 2
Click to expand...
Click to collapse
No flash counter increase on Mobile Odin Pro 3.4.0?
That was fast Andrei, like i told you befor... so Damn nice to see your kernel here.
Will get my replacement device tomorrow and then I will try it out right away.
{
"lightbox_close": "Close",
"lightbox_next": "Next",
"lightbox_previous": "Previous",
"lightbox_error": "The requested content cannot be loaded. Please try again later.",
"lightbox_start_slideshow": "Start slideshow",
"lightbox_stop_slideshow": "Stop slideshow",
"lightbox_full_screen": "Full screen",
"lightbox_thumbnails": "Thumbnails",
"lightbox_download": "Download",
"lightbox_share": "Share",
"lightbox_zoom": "Zoom",
"lightbox_new_window": "New window",
"lightbox_toggle_sidebar": "Toggle sidebar"
}
I. Thanks!
.
Disclaimer: I take no responsibility for any damage that might occur to your device. You proceed strictly at your own risk. This is a work in progress.Thank you for your interest in Plasma kernel, I hope you enjoy it. I've poured hundreds upon hundreds of hours of work into putting together a kernel that best showcases our hardware. Plasma kernel would not be possible without super-smart people like AndreiLux, DerTeufel, temasek, googyanas, faux123, and the regular contributors to the official cm kernel repositories. Please donate to them to support their hard work!.
II. Features
CPU frequency range: 100MHz to 2.16GHz
ZZMoove, PegasusQ, performance (with support for multiple cores), and LulzactiveQ CPU governors
Zen, noop, deadline, row, cfq, sio, vr schedulers
Experimental Wolfson AND Voodoo Sound support (choose one or the other on the Audio tab of STweaks, then REBOOT!)
CPU voltage control
Linux 3.0.101
AndreiLux: Screen color calibration with mdnie-control
GPU over/underclock and over/undervolt
Control the frequency and voltage of all 5 GPU steps
Support for GPU clocks from 54MHz to beyond 800MHz
Control GPU governor sampling rate
Built with 4.8 toolchain
Built with -O3 and other optimizations
Extra panel brightness (<299)
Faux123: Dynamic fsync control (v1.2)
AndreiLux: Charging control
Support for STweaks
Control screen refresh rate (can be reduced to save battery)
AndreiLux: Memory/internal voltage control interface
AndreiLux: Adaptive Body Bias (ABB) control
AndreiLux: Digital brightness control/reduction (better than ScreenFilter)
LED control (with some color mixing adjustments by me)
Touchwake support, including touchkeys (enable in Screen tab of STweaks)
Multi-touch kernel-based gesture engine
Proportional Rate Reduction for TCP
Joe's RCU
Temasek: Frandom module (enable on the Memory/Internal tab of STweaks and REBOOT!)
S-Pen settings on the S-PEN tab of STweaks
zCache
Support for 4x parallel "Turbo ZRAM" (settings are on the "I/O / RAM" tab of STweaks)
UKSM
Enhanced Touchwake/Slide2Wake functionality
Arc-swipes to turn your phone on with one hand (Screen tab of STweaks)
Long-tap-off to turn your device off with one hand (Screen tab of STweaks)
Power off gesture: tap the top of the screen and a touchkey at the same time to trigger suspend
Change your power manager (PM) CPU lock frequency
Press the home button 4 times to toggle the screen negative
Press the home buttom 3 times as fast as you can to toggle the screen into nightmode (red)
exFAT support
For more, take a look at the commits
.
III. What's NewDon't forget to check out what was new in 2.0b7 and 2.0b12!
[ZRAM Total Disk Size]: By default ZRAM is setup as four (4x) swaps operating in parallel at equal priorities. Set this to the TOTAL amount of RAM you wish to dedicate to ZRAM, and STweaks will automatically divide it evenly by four.
[UKSM Enable]: Enable the UKSM daemon that will continuously scan memory for duplicate data.
[UKSM Daemon Sampling Rate]: How often the daemon checks for duplicate data.
[UKSM CPU Usage Limit]: How much system load (CPU usage) the daemon will use.
[Long-tap-off Always On]: Found in its own section under the Touchwake section. When enabled Longtapoff will always work, regardless of how you woke your device. Takes effect immediately.
[Many ZZMoove settings]: Many ZZMoove settings on the newly created "ZZMoove Scaling" and "ZZMoove Hotplug" tabs. Descriptions coming soon.
.
IV. Download / Donate
Support the development of Plasma kernel by DONATING if you find it useful!
AOSP 4.3.x only!
Plasma kernel v2.02 for Verizon Note 2 (i605)
Plasma Gesture Pack
Support the development of Plasma kernel by DONATING if you find it useful!
.
V. Changelog
v2.02 (November 2nd, 2013)
Tracked audio/media skipping bug to disabled loggers (thanks pappschlumpf!) By default logging is now enabled. While you can still disable it, it will always be reset upon reboot.
Changes to write-back caching (thanks temasek)
Support for switching touchkey backlight driver from ROM/kernel (bottom of Screen tab in STweaks) (thanks Yank555-lu)
Some bug fixes for Slide2Wake
.
VI. Archived Changelogs
2013-10-29 | v2.00
Linux 3.0.101 (thanks temasek)
Hopeful bugfixes for untouchable screen, and taps on top triggering suspend
Should you encounter a problem like that, cycling on and off (power button) should now reset any state variables
Fix FC issues. Works with more ROMs, including the latest AOSP nightlies
Allow pm_idx_freq to be set as high as 1600 MHz, theoretically could slightly speed up waking from deep sleep. Set on "Plasma Tuneables" tab of STweaks
Added several new tuneable ideas to zzmoove
Added "ZZMoove Scaling" and "ZZMoove Hotplug" tabs to STweaks. The descriptions are still a work in progress
Moved mDNIe controls to their own "Color" tab
Greatly enhanced the longpressoff feature's reliability and ease of use (by upgrading to scheduled_work)
Slide2Wake and arc swipes now trigger CPU and memory frequency locks to speed up waking
Slide2Wake and arc swipes no longer accidentally send input in the milliseconds after the screen comes on, but before you finished your gesture
Added option to Screen tab of STweaks to enable Longtapoff always, regardless of how the device woken
Expanded the trigger areas for slide2wake and arc swipes
ZRAM/swap is working and compatible with "Turbo ZRAM" (4x parallel ZRAM swaps for quad core devices) (thanks googyanas)
ZRAM settings in STweaks now allows you to set one total size of RAM that will be divided into 4x ZRAM swaps. Setting to 0 disables all swaps. Changes are applied instantly. No need for any other ZRAM/swap apps or init.d scripts.
UKSM (Ultra KSM (Kernel Samepage Merging)) enabled, with settings on the "I/O / RAM" tab of STweaks. Mostly just a novelty, but what it does is continuously checks RAM for duplicate pages to save space
zCache enabled and always running
Cleancache enabled
Frontswap enabled
Enabled LOWMEM_CHECK (thanks googyanas)
Enabled SPEEDUP_KEYRESUME as discussed in temasek's thread (Placebo effect? Maybe. Better ask Brian Molko. A cookie for you if you understand that reference) (thanks googyanas)
Added my own wake-speed ideas (2-second max-CPU-speed lock, and 2-second max-bus/RAM-speed lock on KEY_POWER press)
Permanently fixed (hopefully) the laggy, skippy, media bug
Toggle negative screen mode by taping the home button 4 times quickly (but NOT as fast as you can) (based on a commit by gokhanmoral)
Toggle nightmode (red) screen mode by pressing the home button 3 times VERY quickly (pretty much as fast as you can) This is purposely designed to be a dim red, as searing bright 255 red isn't particularly easy on your eyes in the dark. Fun fact: this (and the negative one described above) are functional even during boot...triple tap to see your bootscreen turn red
CPUFreq bug fixes/commits (thanks DerTeufel)
Permanent TRIM (thanks googyanas)
Added shell scripts to quickly and easily see statistics with as little typing as possible. Open a command prompt on your device, type "su" and press enter to ascend to root. Now you can type "szc" and press enter to see zCache statistics (szc = show zcache). Or type "ssw" to see swapfile/zRAM statistics (ssw = show swap). Note: Some statistics don't fully populate until a few minutes after boot
Experimental: Set ZZMoove governor for battery savings by obtaining a root shell as described above, then typing "zzb" and pressing enter (zzb = zzmove battery). Does not reapply after reboot.
Compiler optimizations
2013-07-19 | v1.67
- Updated to Linux 3.0.84 [thanks, temasek]
- Enabled support for SELinux
- Fixed some bugs with the stylus touchkey block
- Voodoo was removed
- Sound-control is permanently enabled. Anything Voodoo did, sound-control can do.
- A bunch of ROW and other smaller cherry-picks
- Fixed some STweaks bugs
- Fixed some gestures in the Gesture Pack
2013-06-26 | v1.65
- Updated to Linux 3.0.83 [thanks, temasek]
- Better battery life, particularly while idle. [thanks, temasek]
- Gesture engine now has support for two special gesture flags; TKEYS and EXCLUSIVE
- S-Pen: Disabled the booster and made it optional, as well as what frequency it boosts to. By default this used to lock at 800MHz when you used the pen, which has shown to be way overkill for the most part.
- S-Pen: Adjust input averaging strength (2 or 3 are the only useful settings. Wanna see what the actual input is from the digitizer? Set this to 0 and draw a line. Yeah...now you see what the poor driver has to filter out)
- S-Pen: Adjust box filter strength for pen input and hover input. Mostly experimental.
- S-Pen: Set minimum pressure before pen input is registered.
- S-Pen: Set fixed pressure (driver will never report sensitivity, and instead uses this value)
- S-Pen: Disable side button (for those that don't use it, it can really get in the way at times)
- S-Pen: X and Y axis offset (tweak this to your screen and usage. Samsung defaults this to -30 for right handed users)
- S-Pen: When the pen is within hovering distance, the touchkeys will now be disabled. When out of range, the block will be held for a definable period before restoring them. This means you can naturally write without fearing the buttons will come on and do crazy stuff.
- S-Pen: Disable touchscreen and gestures when drawing
- GPU: Frequency, voltage, and up/down threshold are available for each of the 5 steps.
- GPU: Expanded GPU clock options: 54, 100, 160, 200, 266, 275, 300, 333, 350, 400, 440, 500, 533, 600, 640, 666, 700, 733, 750, 800+ MHz.
- GPU: Adjustable GPU scaling driver polling frequency (sampling rate) [thanks, AndreiLux]
- GPU: Lock GPU to one user-defined step.
- GPU: Limit the GPU to less than 5 steps.
- GPU: Increase default GPU polling frequency to 100ms (stock was 1000ms (!!!) and causing laggy performance within the first few seconds of using your device). [thanks, AndreiLux]
- Fixed some STweaks bugs.
- A bunch of predefined gestures in the Gesture Pack.
2013-06-11 | v1.60 [733 GPU overclock] / [No GPU overclock]
- Updated to Linux 3.0.81
- Added section to Screen tab in STweaks for touchkey backlight control (for ROMs without controls built in)
- Implemented mechanism to manually control the display panel's refresh rate (no, you can't go higher than 60fps )
- Added support for lcdfreq scaling in PegasusQ (on PegasusQ Scaling tab of STweaks)
- Added support for lcqfreq scaling on touch (on Screen tab of STweaks)
- Option to force lcdfreq's limited state to constantly be on, effectively giving you control of panel refresh rate (on Screen tab of STweaks)
- Made PegasusQ screen-off multicore policy enforcement more robust
- i605: Fixed bug in STweaks profile path after kernel rename
2013-06-08 | v1.58 [733 GPU overclock] / [No GPU overclock]
- Updated to Linux 3.0.80
- Switched to TCP Veno
- Updated zzmoove to version 0.4
- Added a sysfs entry to control the PM lock frequency
- Added screen-off tunables for PegasusQ, LulzactiveQ and zzmoove
- Added screen-off hotplugging to LulzactiveQ
- Led-control: more accurately mix LED colors
- Led-control: custom requests for white (255/255/255) are adjusted to obtain the most realistic actual color
- Led-control: change system notification (charging/charged) LED brightness level (LED tab of STweaks)
- Frandom module (enabled on the Memory/Internal tab of STweaks. A reboot is required after changing this setting!)
- Experimental: Reduce mdm wakelocks
- Updated row scheduler
- Experimental: Support for both Voodoo and Wolfson/sound-control. They both do they same thing though. Choose one on the Audio tab of STweaks, then reboot.
- Wacom: add sysfs entry for pen inserted (/sys/devices/virtual/sec/sec_epen/epen_pen_inserted)
- Dynamic fsync tweaks
- Many small cherrypicks
2013-05-06 | v1.50 [733 GPU overclock] / [No GPU overclock]
- Updated to Linux 3.0.76
- Sbrissen's WiFi driver from the GT-9505
- Kernel-based multi-touch gesture support. Enable it on the Screen tab of STweaks. Flashable sample script to be added to this post soon.
- Touchwake now wakes from the touchkeys in addition to screen taps
- Updated zzmoove governor with changes from DerTeufel
- PegasusQ: calculate gradient of CPU load to early increase frequency
- Added LulzactiveQ governor
- Stopped an insane amount of kernel logging in cpuidle-exynos4
- Updated Wacom drivers
- Updated camera drivers
- Added Proportional Rate Reduction for TCP
- Added missing flexrate code and removed the default touchbooster
- Joe's RCU2013-04-27 | v1.43 [733 GPU overclock] / [No GPU overclock]
- Updated to Linux 3.0.75
- Adaptive Body Bias (ABB) control. This is only for the most hardcore users. I suggest reading the note above, as well as this thread.
- Snappy compression added to zRAM
- Some kernel updates to speed up hotplugging
- Correctly applied load averaging patch to fix moire pattern
- New LED control. Offers better control over LED fading. If your ROM has its own fade control, be sure to match your chosen setting in the LED tab of STweaks to avoid possible issues
- mDNIe digital brightness reduction. Ever notice how the lowest screen brightness setting is still very bright, especially in a dark room? Many of us nighttime users have had to manually enable apps like ScreenFilter to overlay a black layer to artificially dim the screen via software. This is somewhat like that, but more accurate and done at the video driver level in the kernel. To summarize, it seamlessly allows you to reduce the typical brightness control beyond its normal minimum by digitally darkening the display data after a certain point. This is very cool, as it's all automatic once you initially tweak it - goodbye ScreenFilter! Adjust the settings on the Screen STweaks tab.
- Expanded explanation of ABB on its STweaks tab
- Unaligned memory access where possible
- Fixed a bug that was causing frequencies greater than 1600 to become stuck as the current frequency
- Added the zzmoove governor and tweaked it for this kernel
- Updated ramdisk
- Reworded the settings in STweaks for ABB
- Fixed a bug in Adaptive Body Bias (ABB) that caused certain frequencies to be offset
- Touchwake support. Enable it on the Screen tab of STweaks
- Some dynamic fsync commits
2013-04-17 | v1.34 [733 GPU overclock] / [No GPU overclock]
- Updated to Linux 3.0.73
- Flexrate now works
- Other, smaller changes2013-04-10 | v1.32 [733 GPU overclock] / [No GPU overclock]
- Fixed MTP2013-04-09 | v1.31
- Forgot to include Front End Delay code last time
- Smarter CPU usage; assign more work to only 1 core when at lower frequencies
- Ability to change memory and internal voltages
- Boot a device from storage
- WiFi driver updates
- Other driver updates
- Updated to Linux 3.0.72
- Compiled with -O3
- Added support for Android zRAM (settings are in I/O tab of STweaks)
- Updated STweaks
- Started building optional non-GPU overclocked versions for those who don't want it
- Many, many small additions, such as better entropy (see commits for individual credits)2013-04-03 | v1.20
- Added support for STweaks2013-04-02 | v1.12
- Original
.
VII. SourceSource for Plasma kernel can be found on my github.
FAQ:
Q: I have no earpiece volume!
Be sure to choose Voodoo Sound or Sound Controls on the Audio tab of STweaks, then reboot.Q: I can stably run this kernel. How can I use the screen-off settings so I can save battery?
You will have to intentionally crash your system to find your lowest value, and should definitely make a nandroid first. Then be sure to turn off dynamic fsync on the bottom of the I/O tab of STweaks, as this being enabled could cause data loss from a crash. When you are done with that, the first thing will be to lower the PM Lock Frequency. Try 600MHz, press Apply, then put your device to sleep, give it a few seconds, and see if it wakes. Be sure it's going into deep sleep! If it wakes up instantly, it wasn't in deep sleep. After booting, things like mediascanner can take minutes to finish and release their partial wakelocks. If you are sure it went into deep sleep, repeat with a lower frequency until you cannot wake. Pull the battery and reboot. Once it boots up, go into STweaks and set PM Lock Frequency to the last stable frequency. You must do this before the screen goes off, or else it'll crash again when it enters deep sleep!
Now, once you are sure of your stable PM frequency, move on to the next step. Set CPU Screen-Off Max Frequency to 200MHz. Use your device for a few minutes or hours or whatever. If you find music skips too much, or calls are slow to wake up the phone, set this to 300MHz, but now be prepared for a possible SOD if your device cannot handle scaling that low. If you experience one, leave this setting at 300MHz, and enable "Keep sleep max frequency fixed" and set CPU Screen-Off Fixed Max Frequency to 200MHz. If your phone was slow to wake at 200MHz before, try setting this to 300MHz.
Err, a bit of a vestigial tail here...don't forget to set Screen-Off Frequency For Responsiveness (it's higher up in the PegasusQ Scaling tab) to whatever your lowest screen-off frequency is. It isn't needed anymore and I should have taken it out probably. Like its waking counterpart, it is a threshold below which aggressive upscaling is used. Basically, it's the frequency the CPU will want to hover at, in this case, while the screen is off.Q: Explain the PegasusQ screen-off settings.
CPU Screen-Off Max Frequency - This becomes the effective policy max as soon as you press the power button. Setting this too low may cause slow waking, or choppy music. Ideally this is just like normally setting the max policy; i.e. the governor will try to get frequencies as low as possible without going over this. This means if you get skips in your music at 200MHz, you can set this to 300MHz and the governor will be able to grab that extra power if it needs it. The problem is, some devices get finicky when they're bouncing around between sub-PM Lock frequencies and will crash. That's where the Fixed Sleep Frequency setting comes in. Read on.
Up Threshold While Screen-Off - This becomes the effective Up Threshold value as soon as you press the power button. Setting this higher will make the CPU more reluctant to scale higher (go faster).
PM Lock Frequency - This typically hardcoded value normally overrides the governor to throttle the CPU to 800MHz every time the system itself is unsuspended. This means it happens thousands of times a day, and can significantly add up after a few hours. I found different devices could handle different frequencies, so I made this is adjustable and added an interface to lulzactiveq and zzmoove. 500MHz works very stably for me.
After Boot Delay - Gives your device a grace period after booting during which none of the screen-off policies will be enforced so your start up tasks can be completed quickly.
Enable Fixed Sleep Frequency - This is where things get sorta confusing. If your device can't scale while sleeping, most likely it will be able to tolerate just sticking to one low frequency. But this has a downside...you disable the scaling logic of the governor, so you either have to suffer degraded screen-off performance (skips in your music) with a battery-saving frequency, or set this higher, but then that means you'll be pegging this higher frequency now even though you just needed it occasionally. But yay, I had an idea to put a one-way toggle in there. Read on.
CPU Screen-Off Fixed Max Sleep Frequency - So here's the thing. All devices can handle low scaling just fine, as long the screen is merely off (e.g. listening to music, etc). Once the system falls into deep sleep, that's when stability issues arise. So I had an idea... When you play music, you usually interact with the screen then turn it off, but it never actually goes into deep sleep until it's done playing. So I made it so the above Screen-Off Max Frequency will be used, including scaling, until deep sleep is called for. Then from that point on it will become fixed to this setting's frequency until you turn the screen back on, then the toggle gets reset.
v1.60 Release Notes
Control your panel refresh frequency - This is inspired by and based on AndreiLux's commits last year. Samsung includes a driver called "lcdfreq" that allows for scaling of panel refresh frequency to save power. It toggles between two states: limited and unlimited. Not all devices actively use this feature in stock builds, but it is possible to enable nonetheless. When in limited mode the panel's refresh rate is reduced from 60Hz (58 actual) to 40Hz (41 actual). I went a step further and made it so the limited mode's panel divider can be set manually (25, 27, 29, 31, 34, 37, 41, 45, 50, 60 fps). I also made it so the limited mode can now be forced, effectively allowing you to adjust the default refresh rate of your panel to save battery. Not everyone needs/wants 60fps. How much battery will this save? I don't know yet, but if you want to find out, the option is on the Screen tab of STweaks. Be sure to check the force checkbox. Very low rates will introduce flickering to some eyes (remember, this is a refresh rate being adjusted, not just fps).
Lcdfreq in PegasusQ - Note: This is irrelevant if you have decided to lock your refresh rate as described above. AndreiLux implemented this last year, and I modified it a bit and added more tunables. When enabled, PegasusQ will try to control the state of lcdfreq based on CPU load. Some of you may know AndreiLux abandoned this due to problems with flickering, but I have taken a different approach. His goal was to provide 60Hz as quickly as possible, which ended up frequently alternating between the two states. I'm aiming for the opposite - to stick with limited as long as possible and only boost it during heavy use (like a game). When bounced around between limited and unlimited too rapidly, there can be visible flickering and tearing, and different frequencies seem to slightly affect the color balance, which makes it even more noticeable. Quite possibly why Samsung doesn't use this on Note 2's.
lcdfreq_kick_in_down_delay - When PegasusQ decides it wants to call for the panel to be kicked down (into limited mode) it will have to ask this many times before actually doing it.
lcdfreq_kick_in_up_delay - When PegasusQ decides it wants to call for the panel to be boosted (into unlimited mode) it will have to ask this many times before actually doing it.
lcdfreq_kick_in_freq - Before PegasusQ will consider limiting the refresh rate, the CPU must be running at this frequency or below.
Boost lcdfreq on touch - Immediately boosts to the unlimited state, regardless of what PegasusQ calls for. A commit by AndreiLux. At some point I may add to this to make it time based (i.e. hold the boost for x amount of seconds after a touch).
Control the touchy backlight - On the Screen tab of STweaks. For ROMs that don't provide this support natively, otherwise it may be unreliable.
v1.65 Release Notes
Control your GPU - Over/underclock your GPU! Over/undervolt your GPU, too! Settings explained on the GPU tab of STweaks. Support for frequency, voltage, up/down threshold and GPU governor sampling rate.
Lock/Limit your GPU - You can lock your GPU to a specific step, or limit it to a definable maximum number of steps (e.g. 2 or 3)
Control S-Pen booster - Control/disable the S-Pen CPU booster. Stock is 800MHz, but I find that overkill.
S-Pen X,Y Axis Offset - For some reason Wacom sets this to like 30,30 depending on handedness. I have no idea why, I prefer 0,0. For most users I recommend checking the box on the S-Pen tab in STweaks and leaving the sliders at 0,0.
S-Pen Box Filter - Depending upon what you use your S-Pen for, this makes it much easier to draw shapes, but harder to do finer things, like writing. Think of it as "snap to grid".
Gestures! - Be sure to scroll down to the FAQ section to read how to use them.
Q: How do gestures work?
Flash the gesture pack and reboot. This places the action and handler scripts in /etc/init.d to be run on boot. The available gestures are listed on the Gestures tab of STweaks. You may customize the scripts, but be warned that flashing the zip again will overwrite them.
Some gestures will require you to hold down a touchkey while performing them. Be sure to have a Touchkey Modifier Delay set in STweaks (Screen tab). 100-200ms works well. Now any time you touch and hold a touchkey and then touch the screen within the delay you just set, you will activate gesture-only mode, during which the touchscreen will no longer send touch events to the operating system, only the gesture engine. This means you won't get any bleed through of gesture draws into the foreground app. It's also a safety of sorts, to prevent critical gestures from being accidentally triggered. The downside is, you can't have your cake and eat it...well, not without some delay at least. If the touchkey modifier was simply piggybacked onto the touchkey driver that would be nice, but it would also mean every time you used it, it would also report the touchkey (Menu/Back) event. Or, if you blocked it always, well then obviously your touchkeys wouldn't work anymore. So a compromise is using a very short delay, and after that delay is up, the touchkey driver checks to see if the screen has been touched and the touchkey is still down. If it has been touched, then gesture-only mode is set in the touchscreen driver until all fingers are up. If the screen has NOT been touched after the delay, then the touchkey driver assumes it's just a normal touchkey press and reports it like normal. This may seem like an insanely small delay, but it's meant for you to touch the touchkey and start drawing with another finger *simultaneously*.
tl;dr: Flash the gesture pack, go to the Screen tab and set the Touchkey Modifier Delay to 150ms or so, then apply it. Now test it. First swipe from near the bottom-left corner, up towards the middle-right side. Nothing should happen. Now repeat, this time putting a finger down on the touchkey and holding, while *at the same time* starting to drawing this simple gesture. Aim to have both fingertips touch down at the same time. If it goes well, the virtual power key will be pressed and it will go into suspend. If you have trouble, increase the delay until you get more practice. Eventually you'll be able to do this gesture one-handed by touching the touchkey with the side of your thumb, and sliding/flicking your index or middle finger outward in an arc..
Useful Apps (no affiliation):
BetterBatteryStats XDA / Play
Awesome tool that lets you see both kernel and partial wakelocks, as well as the average percent battery drain.CPU Spy XDA / Play
Provides a GUI to CPU time-in-state data.Micro CPU Monitor Play
One of my favorite apps ever, this puts a very small 1px bar across the top of the screen for each core. It can be set to come from left or right, the background can be set transparent, and the bar thickness and color are adjustable. Very useful for quickly (and discretely) noticing abnormally high CPU usage.top Play
Provides a GUI to the linux command 'top'. Provides a very reliable way to see what processes are using the most CPU time.System Monitor Play
This app makes monitoring CPU history easy, and makes it especially easy to see the effects of hotplugging tweaks because of the way it clearly displays the state of each core..
Notes:
How to use the mdnie-control interface:
AndreiLux and Slimer777 have gone to great lengths to create an extremely accurate internal color profile using a spectrophotometer. The color accuracy is terrific. Most computers and tech use a very unnaturally cool color temperature (blue tint to white), so many people are taken by surprise when they see how yellow reality actually is. You need some time to get used to the new colors, but if you are still not pleased with the result, AndreiLux has setup MANY options for you to tweak in STweaks. Personally, I recommend increasing the chroma saturation weight.
Settings can easily be configured in the STweak app now. Download it from the Play Store.
A bit about body bias:
To summarize this feature: When we traditionally change voltages (SetCPU, Performance Control, etc), we are changing the gate voltage of the transistors. This can be a difficult concept to grasp, so here's a super-simple analogy to help: Imagine a light switch instead of a transistor. You reach your finger out to flick it. The force your finger applies would be analogous to the gate voltage. However transistors also have a body voltage, which can be thought of as the resistance behind the switch. By applying a positive difference between the gate and body, (which usually, but not always, equates to reducing the body voltage) we can make the proverbial switch "looser" so it's easier to flip, but now that it's looser, it's starting to leak a small amount of current as a result. So why would we want to do this if it will be leaking more? Because now that the switch is looser, we'll hopefully need less gate voltage (aka finger pressure in the analogy) which would save more power than was lost with that leakage. Or, for someone overclocking instead of undervolting, the "loose" switch will be easier to flip, and you may achieve an overclock not possible by merely ramping up the gate voltage (brute force) in your voltage control app of choice. Basically like the old saying "two steps forward, one step back" - we get something good, but have to sacrifice a little power lost through leakage. But how about the opposite scenario? What if in the analogy you have a really strong finger? Then you're leaking power for no reason because you don't need a "loose" switch. So, we can take advantage of that fitness and tighten it up by applying a negative body bias (also called a Reverse Body Bias, or RBB). This will make the transistor harder to switch, but plug up the leak and therefore increase power efficiency.
Ok, so why does all this exist? Why not just have an enormous negative bias (RBB) from the factory and save all that power lost through leakage? Because not all chips are equal, and not all transistors on the same chip are even equal. Temperature, manufacturing techniques, a few atoms of contamination, etc can make the chip less "fit" and unable to switch as easily as others. So how do they help these weakling transistors from getting the entire chip sent to the factory garbage can? Well, on one hand the gate voltage can be increased, but that is a last resort since it would waste too much power. Before it comes to that, they get a crutch in the form of a positive body bias (also called a Forward Body Bias, or FBB), which hopefully you'll remember was the subject of the first scenario above. And remember what that does? It makes them easier to switch, but at the cost of slightly decreased power efficiency. This offers better power savings when compared to increasing the gate voltage.
Samsung knows all this, and bins their chips according the ASV level, which can be thought of as the "quality" of the chip. The higher the ASV number, the better the chip, and the less power it needs to do its job. At the factory they mix increased gate voltages with varying body voltages to end up with a table of stock body biases. Long story short, this is how they deal with less-than-perfect chips. It's a lottery for the buyer. But since their values aren't tailored to your chip - the hope is that maybe you can scrape by with a bit less power than Samsung thought a chip of that grade could. So what AndreiLux has done is implemented new scaling logic/control code that lets you adjust the body voltage, and thus the body bias. Thanks to him, we now have another tool to help us squeeze a little bit more power out of our chips.
Calculating your body bias is incredibly simple: bodybias = gatevoltage - bodyvoltage. If you know the voltage of a given frequency, you can calculate your body bias by taking the gate voltage (what it says for that frequency in your usual voltage adjustment app) and then subtracting the value of the slice that corresponds to the range the example frequency was in on the ABB tab of STweaks. This can get tricky, because people forget that "body bias" is a difference between two values. If you start off with a stock negative body bias, that is to say that your body voltage is higher than your gate voltage, increasing your body voltage will actually be increasing your bias and you'll be needlessly wasting more power. However if you start off with a positive stock body bias, adding to the body voltage will actually be decreasing your bias since it will be bringing you closer to the gate voltage.
Sure
Sent from my SCH-I605 using xda premium
bring it!
;0)
Running now, 3/4g works, using wifi tether to post this, GPS works, so far so good.
Wouldn't mind giving this a shot, although it sounds like it's already up to snuff.
I'll volunteer if you need any more testers
sent from my CarbonROM'd i605
Still need testers? Glad to help..
Im available to test if you need anymore feedback.
Sent from my SCH-I605 using XDA Premium HD app
OP updated. Thank you 123SIT for testing!
Running very well so far, nice work.
Sent from my SCH-I605 using xda premium
Does this not have fast charge?
Sent from my SCH-I605 using Tapatalk 2
I saw this matrix kernel and thought mathkid was over here.
lbiniusc said:
Does this not have fast charge?
Sent from my SCH-I605 using Tapatalk 2
Click to expand...
Click to collapse
Adjustable charger settings in STweaks.
Sent from my SCH-I605 using xda premium
screen color controls on AOSP...YESSSSSSS!!!!!! thank you!!!!
This kernel is running great on PAC...
I really really want to try this kernel, but I have a question that I hope someone can answer for me before I go ahead and install it.
Do these AOSP kernels pull and merge from CM10.1 deposits? Because having a kernel that could potentially be missing fixes in a newer CM build would be really disappointing and keep me from ever leaving the stock CM kernel.
But if it doesn't matter and the CM nightly updates don't really affect the kernel then boy I can't wait to swipe that flash switch in TWRP
Running awesome on Carbon.. Fyi
Sent from my SCH-I605 using xda app-developers app
DaRkL3AD3R said:
I really really want to try this kernel, but I have a question that I hope someone can answer for me before I go ahead and install it.
Do these AOSP kernels pull and merge from CM10.1 deposits? Because having a kernel that could potentially be missing fixes in a newer CM build would be really disappointing and keep me from ever leaving the stock CM kernel.
But if it doesn't matter and the CM nightly updates don't really affect the kernel then boy I can't wait to swipe that flash switch in TWRP
Click to expand...
Click to collapse
I monitor https://github.com/CyanogenMod/android_kernel_samsung_smdk4412 for any new commits, so anything in CM's 4412 should be in this kernel.
DaRkL3AD3R said:
I really really want to try this kernel, but I have a question that I hope someone can answer for me before I go ahead and install it.
Do these AOSP kernels pull and merge from CM10.1 deposits? Because having a kernel that could potentially be missing fixes in a newer CM build would be really disappointing and keep me from ever leaving the stock CM kernel.
But if it doesn't matter and the CM nightly updates don't really affect the kernel then boy I can't wait to swipe that flash switch in TWRP
Click to expand...
Click to collapse
You should definitely try this one out. I'm running CM10.1 (seen you over in the CM thread) and I noticed great performance. And Voodoo Sound is a nice touch