[DEV] [R&D] Linux 3.14 kernel for Exynos5420-based devices [WIP] [SM-P600/601] - Galaxy Note 10.1 (2014 Edition) Original Android D

I thought I'd post an update since some progress has been made, though there are still some things missing.
The current plan is to make a unified kernel for all Universal 5420-based devices, including our Note, the 12.2, and Tab S. I've managed to forward-port a lot of the necessary drivers to Linux 3.14. Most come from Samsung's Universal 5422, 5430, 5433 and 7420 kernels (Linux 3.10), while other stuff such as the Mali GPU drivers were taken from one of Linaro's 3.14 kernel trees along with Mali platform support for the Exynos5420-based Arndale Octa board. Currently I have only been focusing on SM-P600 support since that's the tablet I will be testing it on, but once I make sure it runs I'll be adding in support for other devices as well.
What's done so far:
* Maxim max77802 drivers (PMIC, regulator)
* Maxim max77888 drivers (PMIC, MUIC, LED, regulator, haptic)
- These will be used as a base for max77803 support since it's essentially the same driver
* Samsung's TN extension features
* Samsung's USB notify layer
* Samsung's battery/charger/fuelgauge drivers
Also:
* The sii8240 driver has been pulled in, though it doesn't compile yet
* The sensors are all supported in mainline so their drivers can easily be cherry-picked
Todo:
* Port over the LCD driver (LSL101DL01 / LSL122DL01)
- It needs to be adapted to the new display port driver (exynos-dp) instead of the old s5p-dp driver.
- It also requires device tree support, which is absent in 3.4, whereas board files are not supported in 3.14.
- This is beyond my skill and knowledge so if there's anyone reading this who can- and is willing to help please contact me.
* Write a board-specific DT blob.
* Probably a few more things that I'm forgetting.
Source/changelog: here
Feel free to fork this if you wish to help with development, just make sure to notify me if you do.
Original post:
Hi guys,
As some of you may know, the Linux kernel for ARM has long migrated from the use of board files to the use of device tree blobs for providing hardware descriptions to the kernel. Still, Samsung seems to insist on relying on all this unnecessary junk code instead of migrating to the use of device trees for their Exynos devices. Currently, the only Exynos5420-based device trees in existance are for development boards such as the Arndale Octa and the SMDK5420. No device tree exists for the UNIVERSAL5420 board and its variants which are found in the Galaxy Note and Tab series. So, I decided to write one.
I am no programming expert but seeing as the device tree syntax is not that complex, I thought, how hard can it be? The hardest part is basically combing through all the board files and searching for whatever stands up as being relevant in the device tree format as well as figuring out the correct unit-addresses, most of which seem to be listed in /arch/arm/mach-exynos/include/mach/map.h.
I'm using the SMDK5420 device tree as a base since it seems to be a watered-down development version of the UNIVERSAL5420 board. Still, there's a lot of stuff that needs to be added in and certain bits also need replacing. So far I have added in the nodes for the Maxim MAX77802 PMIC and its regulators as well as the nodes for the charger and a few 'skeletons' for the screen, the ARM Mali GPU and the Wolfson WM5102 codec. Some of these may still have incorrect unit addresses and other bits may still be incorrect or unnecessary.
If this project becomes successful it might:
Allow us to run higher kernel versions (i.e. above Linux 3.4) on our devices.
Make it easier to create ports of open source bootloaders such as u-boot or kexecboot for our devices.
Open up new doors in getting Global Task Scheduling (big.LITTLE MP) to work on the universal5420, as has been achieved on exynos5420-based development boards.
The project is located in my git repository here along with the SM-P600 board files and other references.
This is obviously still in early development but if anyone here who is familiar with the device tree syntax is willing to review my code and provide some constructive criticism it would be much appreciated.
For further information on the device tree and its syntax, here are some helpful links:
http://www.devicetree.org/Device_Tree_Usage
https://www.power.org/documentation/epapr-version-1-1/
https://www.kernel.org/doc/Documentation/devicetree/
http://lwn.net/Articles/572692/ (Device trees I: Are we having fun yet?)
http://lwn.net/Articles/573409/ (Device trees II: The harder parts)
Click to expand...
Click to collapse
XDA:DevDB Information
Unified Exynos 5420 Kernel, Kernel for the Samsung Galaxy Note 10.1 (2014 Edition)
Contributors
Andmoreagain
Source Code: https://github.com/sigma-1/universal5420-device-tree
Kernel Special Features:
Version Information
Status: Testing
Created 2014-10-31
Last Updated 2015-08-27

Well ... Wish you luck with the Development ...
Andmoreagain said:
Hi guys,
As some of you may know, the Linux kernel for ARM has long migrated from the use of board files to the use of device tree blobs for providing hardware descriptions to the kernel. Still, Samsung seems to insist on relying on all this unnecessary junk code instead of migrating to the use of device trees for their Exynos devices. Currently, the only Exynos5420-based device trees in existance are for development boards such as the Arndale Octa and the SMDK5420. No device tree exists for the UNIVERSAL5420 board and its variants which are found in the Galaxy Note and Tab series. So, I decided to write one.
I am no programming expert but seeing as the device tree syntax is not that complex, I thought, how hard can it be? The hardest part is basically combing through all the board files and searching for whatever stands up as being relevant in the device tree format as well as figuring out the correct unit-addresses, most of which seem to be listed in /arch/arm/mach-exynos/include/mach/map.h.
I'm using the SMDK5420 device tree as a base since it seems to be a watered-down development version of the UNIVERSAL5420 board. Still, there's a lot of stuff that needs to be added in and certain bits also need replacing. So far I have added in the nodes for the Maxim MAX77802 PMIC and its regulators as well as the nodes for the charger and a few 'skeletons' for the screen, the ARM Mali GPU and the Wolfson WM5102 codec. Some of these may still have incorrect unit addresses and other bits may still be incorrect or unnecessary.
If this project becomes successful it might:
Allow us to run higher kernel versions (i.e. above Linux 3.4) on our devices.
Make it easier to create ports of open source bootloaders such as u-boot or kexecboot for our devices.
Open up new doors in getting Global Task Scheduling (big.LITTLE MP) to work on the universal5420, as has been achieved on exynos5420-based development boards.
The project is located in my git repository here along with the SM-P600 board files and other references.
This is obviously still in early development but if anyone here who is familiar with the device tree syntax is willing to review my code and provide some constructive criticism it would be much appreciated.
For further information on the device tree and its syntax, here are some helpful links:
http://www.devicetree.org/Device_Tree_Usage
https://www.power.org/documentation/epapr-version-1-1/
https://www.kernel.org/doc/Documentation/devicetree/
http://lwn.net/Articles/572692/ (Device trees I: Are we having fun yet?)
http://lwn.net/Articles/573409/ (Device trees II: The harder parts)
XDA:DevDB Information
UNIVERSAL5420 Device Tree, Kernel for the Samsung Galaxy Note 10.1 (2014 Edition)
Contributors
Andmoreagain
Kernel Special Features:
Version Information
Status: Testing
Created 2014-10-31
Last Updated 2014-11-01
Click to expand...
Click to collapse
Dear friend , maybe @xluco can help us get the device tree so that we can clear a way for AOSP and such ROMs to our SM-P600/1 ... Good Luck
With Best Wishes
Hitman1376​

hitman1376 said:
Dear friend , maybe @xluco can help us get the device tree so that we can clear a way for AOSP and such ROMs to our SM-P600/1 ... Good Luck
With Best Wishes
Hitman1376​
Click to expand...
Click to collapse
Thanks, unfortunately I'm not that familiar with the android source code. At least it will probably be easier to gather all the device information once we get everything into a single file.
But anyway, I did an adb pull of the /dev, /proc and /sys directories from my p600. Found lots of useful info, especially for calculating some of the interrupt values. The gpu node is also complete, although I have yet to update my repo.
I'm also going to grab myself a development board tomorrow in hopes of getting a better picture of what I'm doing. I need to be able to visualize things as I work on this stuff.

Well ... Finally Good news ...
Andmoreagain said:
Thanks, unfortunately I'm not that familiar with the android source code. At least it will probably be easier to gather all the device information once we get everything into a single file.
But anyway, I did an adb pull of the /dev, /proc and /sys directories from my p600. Found lots of useful info, especially for calculating some of the interrupt values. The gpu node is also complete, although I have yet to update my repo.
I'm also going to grab myself a development board tomorrow in hopes of getting a better picture of what I'm doing. I need to be able to visualize things as I work on this stuff.
Click to expand...
Click to collapse
Well ... seems like you know what to do ( And managed it out well :good: ... I took a look into the GitHub ... Good work :good: ) ... but , if there were any problems , I would be glad to help ( I own a P601 but it doesn't matter ... their almost the same ... ) ...
Wish you luck with the Development
Hitman1376​

Excellent project mate, good luck! I'd offer some support but I don't know a single thing about device trees

Some updates!
Hey guys!
I had to take a long break from this project due to school and other stuff, but I'm at it again. I have done some homework along the way, and since there now exists a flattened device tree for the universal5422 board and several newer Exynos devices, it makes this work much easier since the universal5420 and 5422 are identical in many aspects, though not completely.
Now, to better explain what this project is all about and to clear up some confusion, a flattened device tree or a device tree blob is not the same thing as the android "device tree", required for compiling android for a specific device. The so-called flattened device tree is compiled as a separate binary along the kernel and describes the hardware of the device to the kernel in order to load the correct device drivers. In the past, ARM devices had to rely on so-called board files, such as all the board-*.c and dev-*.c files found in the arch/arm/mach-exynos directory of the stock kernel's source code for our device. This was a problematic solution, mostly because:
A) It meant that each vendor had to throw together a special branch of linux for every single device, containing a huge amount of device-specific code in order to load the necessary drivers.​
B) There is an ongoing project, called the Android Mainlining Project, and I quote:
The goal of this project is to ultimately mainline all patches required to run the current released version of Android. The purpose of mainlining these patches is 3-fold:
to allow a developer to use the latest released version of the Linux kernel to run an Android system, without requiring patches to their kernel
to make it possible to develop drivers and board support features against either an Android kernel release or a kernel.org kernel release, with little or no modifications or conditional code
to reduce or eliminate the burden of maintaining independent patches from release to release for Android kernel developers
To "mainline" a patch means to have it included in Linus Torvalds' kernel.org kernel, in a released (non-rc) version.​
Click to expand...
Click to collapse
For some basic info regarding the Board File to Device Tree Migration, this document would be a good start.
"The Device Tree is a data structure for describing hardware. Rather than hard coding every detail of a device into an operating system, many aspects of the hardware can be described in a data structure that is passed to the operating system at boot time."
Click to expand...
Click to collapse
Now, some updates:​
I finally have a decent picture of each and every device available on our board, their addresses, and configurations. I have also documented which device is connected to which I2C (inter-integrated circuit) bus, but there are still several things that need to be figured out regarding this whole I2C labyrinth.
To begin with, the aliases listed in the generic exynos5420.dtsi device tree are as follows:
aliases {
mshc0 = &mmc_0;
mshc1 = &mmc_1;
mshc2 = &mmc_2;
pinctrl0 = &pinctrl_0;
pinctrl1 = &pinctrl_1;
pinctrl2 = &pinctrl_2;
pinctrl3 = &pinctrl_3;
pinctrl4 = &pinctrl_4;
i2c0 = &i2c_0;
i2c1 = &i2c_1;
i2c2 = &i2c_2;
i2c3 = &i2c_3;
i2c4 = &hsi2c_4;
i2c5 = &hsi2c_5;
i2c6 = &hsi2c_6;
i2c7 = &hsi2c_7;
i2c8 = &hsi2c_8;
i2c9 = &hsi2c_9;
i2c10 = &hsi2c_10;
gsc0 = &gsc_0;
gsc1 = &gsc_1;
spi0 = &spi_0;
spi1 = &spi_1;
spi2 = &spi_2;
usbdrdphy0 = &usbdrd_phy0;
usbdrdphy1 = &usbdrd_phy1;
};
Click to expand...
Click to collapse
As you can see, the I2C's are numbered from 0 to 10, making them 11 in total, where i2c's 4 - 10 apparently have the "high speed" or hs setting enabled.
This is a bit confusing to me, because the I2C buses that are actually in use, as seen in rootfs/sys/bus/i2c/devices, gives a different set of numbers:
i2c-0
i2c-1
i2c-3
i2c-7
i2c-8
i2c-10
i2c-17
i2c-18
i2c-22
i2c-24
Click to expand...
Click to collapse
And here are the devices assigned to them:
i2c-0
[email protected]
[email protected] (screen)
i2c-1
[email protected]
i2c-3
[email protected]
[email protected]
[email protected]
[email protected]
i2c-7
[email protected]
i2c-8
[email protected] (the digitizer or epen)
(?)@9 // device name not listed, but the address is the same as that of the maxim pmic on i2c-7 //
i2c-10
[email protected]
[email protected]
[email protected]
[email protected]
[email protected]
i2c-17
(?)@25
(?)@48
[email protected]
i2c-18
[email protected]
i2c-22
[email protected]
i2c-24
[email protected]
[email protected]
In the "drivers" folder I also found the following, but they were not assigned to a bus or an address:
exynos_edid
exynos_hdcp
ir-kbd-i2c
Click to expand...
Click to collapse
Anyway, if the i2c buses only go from 0 - 10 in the generic Exynos5420 device tree, then why do we also have 17, 18, 22 and 24 appearing here?
Furthermore, here is how their addresses are listed in the stock source code (arch/arm/mach-exynos/include/map.h)
#define EXYNOS5_PA_IIC(x) (0x12C60000 + ((x) * 0x10000))
#define EXYNOS5420_PA_HSIIC0 0x12CA0000
#define EXYNOS5420_PA_HSIIC1 0x12CB0000
#define EXYNOS5420_PA_HSIIC2 0x12CC0000
#define EXYNOS5420_PA_HSIIC3 0x12CD0000
#define EXYNOS5420_PA_HSIIC4 0x12E00000
#define EXYNOS5420_PA_HSIIC5 0x12E10000
#define EXYNOS5420_PA_HSIIC6 0x12E20000
Click to expand...
Click to collapse
Aaaand if we look into rootfs/proc/iomem, we find this:
12c60000-12c60fff : s3c2440-i2c
12c70000-12c70fff : s3c2440-i2c.1
12c70000-12c70fff : s3c2440-i2c
12c90000-12c90fff : s3c2440-i2c.3
12c90000-12c90fff : s3c2440-i2c
12cd0000-12cd0fff : exynos5-hs-i2c
12e00000-12e00fff : exynos5-hs-i2c
12e20000-12e20fff : exynos5-hs-i2c.6
12e20000-12e20fff : exynos5-hs-i2c
12c60000-12c60fff : s3c2440-i2c.0
12cd0000-12cd0fff : exynos5-hs-i2c.3
12e00000-12e00fff : exynos5-hs-i2c.4
Click to expand...
Click to collapse
I'm currently working on building CM12 with some additional packages such as i2c-tools and some extra kernel debugging features. But in the meantime, if anyone here can help solve this entire I2C puzzle then it would be of great help. We have the devices, their addresses, etc., but which bus is which compared to the generic Exynos5420 device tree "header" (for lack of a better term) is my biggest question at the moment.
If the final outcome of this project actually works, then there won't be anything standing in the way of compiling, say, linux-linaro-lsk-v3.10-android with full HMP support. Sure, some proprietary kernel drivers may have to be integrated such as the Mali drivers but I have already tried to bake them into linux 3.14 and it compiled without any errors whatsoever. Hell, we might even be able to finally upgrade them by grabbing the latest sources from ARM! In any case it's worth a try because f*ck the sammy police!

So as far as I can tell, Samsung have decided that despite having five free I2C ports, they're going to move four of their I2Cs to be bit-banged on GPIOs. I think this should be sufficient for those four (11, 17, 22 and 24) in a device tree:
Code:
[email protected] {
compatible = "i2c-gpio";
gpios = <&gpd1 4 0 /* sda */
&gpd1 5 0 /* scl */
>;
i2c-gpio,delay-us = <1>;
#address-cells = <1>;
#size-cells = <0>;
};
[email protected] {
compatible = "i2c-gpio";
gpios = <&gpb3 6 0 /* sda */
&gpb3 7 0 /* scl */
>;
// i2c-gpio,delay-us not specified?
#address-cells = <1>;
#size-cells = <0>;
};
[email protected] {
compatible = "i2c-gpio";
gpios = <&gpa1 5 0 /* sda */
&gpa1 4 0 /* scl */
>;
i2c-gpio,delay-us = <2>;
#address-cells = <1>;
#size-cells = <0>;
};
[email protected] {
compatible = "i2c-gpio";
gpios = <&gpa2 2 0 /* sda */
&gpa2 3 0 /* scl */
>;
// i2c-gpio,delay-us not specified?
#address-cells = <1>;
#size-cells = <0>;
};
The addresses of the other ports appear to agree with the existing code in exynos5420-pinctrl.dtsi:
Code:
s3c2440-i2c.0 = [email protected]
s3c2440-i2c.1 = [email protected]
s3c2440-i2c.2 = [email protected]
s3c2440-i2c.3 = [email protected]
exynos5-hs-i2c.0 = [email protected]
exynos5-hs-i2c.1 = [email protected]
exynos5-hs-i2c.2 = [email protected]
exynos5-hs-i2c.3 = [email protected]
exynos5-hs-i2c.4 = [email protected]
exynos5-hs-i2c.5 = [email protected]
exynos5-hs-i2c.6 = [email protected]
-d

Well, HMP is trully what's left missing from this tab. I mean we've got good roms, AOSP support, having its hardware completely unlocked would be the last piece of the puzzle at it were ... Personally it would give me smooth Linux via framebuffer, at it stands it's CPU (core) limited, often maxing all 4 cores, having 8 cores to stretch its legs even with throttling in place (it) would be a blessing. Smooth desktop OS on a Note tablet would be a first.
Hmmm, having no (significant) kernel experience my support would be confined to that of encouragement ... oh well. Good luck to you sir!

I'm out of town and left my laptop at home, but here's a new draft for the iic nodes I made on my phone:
Code:
[email protected] {
[email protected] {
};
[email protected] {
};
};
[email protected] {
[email protected] {
};
};
[email protected] {
[email protected] {
};
[email protected] {
};
[email protected] {
};
[email protected] {
};
};
[email protected] {
clock-frequency = <400000>;
status = "okay";
[email protected] {
compatible = "maxim,max77802";
interrupt-parent = <&gpx0>;
interrupts = <3 IRQ_TYPE_LEVEL_HIGH>;
pinctrl-names = "default";
pinctrl-0 = <&max77802_irq>;
wakeup-source;
reg = <0x9>;
voltage-regulators {
buck1_reg: BUCK1 {
regulator-name = "vdd_mif";
regulator-min-microvolt = <700000>;
regulator-max-microvolt = <1300000>;
regulator-always-on;
regulator-boot-on;
regulator-ramp-delay = <12000>;
regulator-initial-mode = <1>;
};
buck2_reg: BUCK2 {
regulator-name = "vdd_arm";
regulator-min-microvolt = <800000>;
regulator-max-microvolt = <1500000>;
regulator-apply-uV;
regulator-always-on;
regulator-boot-on;
regulator-ramp-delay = <12000>;
regulator-initial-mode = <1>;
};
buck3_reg: BUCK3 {
regulator-name = "vdd_int";
regulator-min-microvolt = <800000>;
regulator-max-microvolt = <1400000>;
regulator-always-on;
regulator-boot-on;
regulator-ramp-delay = <12000>;
regulator-initial-mode = <1>;
};
buck4_reg: BUCK4 {
regulator-name = "vdd_g3d";
regulator-min-microvolt = <700000>;
regulator-max-microvolt = <1400000>;
regulator-always-on;
regulator-boot-on;
regulator-ramp-delay = <12000>;
regulator-initial-mode = <1>;
};
buck6_reg: BUCK6 {
regulator-name = "vdd_kfc";
regulator-min-microvolt = <800000>;
regulator-max-microvolt = <1500000>;
regulator-always-on;
regulator-boot-on;
regulator-ramp-delay = <12000>;
regulator-initial-mode = <1>;
};
ldo2_reg: LDO2 {
regulator-name ="VMEM2_1.2V_AP";
regulator-min-microvolt = <1200000>;
regulator-max-microvolt = <1200000>;
regulator-always-on;
regulator-initial-mode = <1>;
};
ldo3_reg: LDO3 {
regulator-name = "VCC_1.8V_AP";
regulator-min-microvolt = <1800000>;
regulator-max-microvolt = <1800000>;
regulator-always-on;
regulator-initial-mode = <1>;
};
ldo4_reg: LDO4 {
regulator-name = "VMMC2_2.8V_AP";
regulator-min-microvolt = <1800000>;
regulator-max-microvolt = <2800000>;
regulator-always-on;
regulator-initial-mode = <1>;
};
ldo5_reg: LDO5 {
regulator-name = "VHSIC_1.8V_AP";
regulator-min-microvolt = <1800000>;
regulator-max-microvolt = <1800000>;
regulator-always-on;
regulator-initial-mode = <1>;
};
ldo6_reg: LDO6 {
regulator-name = "VXPLL_1.8V_AP";
regulator-min-microvolt = <1800000>;
regulator-max-microvolt = <1800000>;
regulator-always-on;
regulator-initial-mode = <1>;
};
ldo8_reg: LDO8 {
regulator-name = "VMIPI_1.0V_AP";
regulator-min-microvolt = <1000000>;
regulator-max-microvolt = <1000000>;
regulator-always-on;
regulator-initial-mode = <1>;
};
ldo9_reg: LDO9 {
regulator-name = "VADC_1.8V";
regulator-min-microvolt = <1800000>;
regulator-max-microvolt = <1800000>;
regulator-always-on;
regulator-initial-mode = <1>;
};
ldo10_reg: LDO10 {
regulator-name = "VMIPI_1.8V_AP";
regulator-min-microvolt = <1800000>;
regulator-max-microvolt = <1800000>;
regulator-always-on;
regulator-initial-mode = <1>;
};
ldo11_reg: LDO11 {
regulator-name = "VDDQ_PRE_1.8V";
regulator-min-microvolt = <1800000>;
regulator-max-microvolt = <1800000>;
regulator-always-on;
regulator-initial-mode = <1>;
};
ldo12_reg: LDO12 {
regulator-name = "VUOTG_3.0V_AP";
regulator-min-microvolt = <3000000>;
regulator-max-microvolt = <3000000>;
regulator-always-on;
regulator-initial-mode = <1>;
};
ldo14_reg: LDO14 {
regulator-name = "VABB1_1.8V_AP";
regulator-min-microvolt = <1800000>;
regulator-max-microvolt = <1800000>;
regulator-always-on;
regulator-initial-mode = <1>;
};
ldo15_reg: LDO15 {
regulator-name = "VHSIC_1.0V_AP";
regulator-min-microvolt = <1000000>;
regulator-max-microvolt = <1000000>;
regulator-always-on;
regulator-initial-mode = <1>;
};
ldo17_reg: LDO17 {
regulator-name = "VG3DS_1.0V_AP";
regulator-min-microvolt = <1000000>;
regulator-max-microvolt = <1000000>;
regulator-always-on;
regulator-initial-mode = <1>;
};
ldo18_reg: LDO18 {
regulator-name = "CAM_ISP_SENSOR_IO_1.8V";
regulator-min-microvolt = <1800000>;
regulator-max-microvolt = <1800000>;
regulator-always-on;
regulator-initial-mode = <1>;
};
ldo19_reg: LDO19 {
regulator-name = "VT_CAM_1.8V";
regulator-min-microvolt = <1800000>;
regulator-max-microvolt = <1800000>;
regulator-always-on;
regulator-initial-mode = <1>;
};
ldo23_reg: LDO23 {
regulator-name = "KEY_LED_3.3V";
regulator-min-microvolt = <3300000>;
regulator-max-microvolt = <3300000>;
regulator-always-on;
regulator-initial-mode = <1>;
};
ldo24_reg: LDO24 {
regulator-name = "CAM_AF_2.8_PM";
regulator-min-microvolt = <2800000>;
regulator-max-microvolt = <2800000>;
regulator-always-on;
regulator-initial-mode = <1>;
};
ldo25_reg: LDO25 {
regulator-name = "VCC_3.3V_MHL";
regulator-min-microvolt = <3300000>;
regulator-max-microvolt = <3300000>;
regulator-always-on;
regulator-initial-mode = <1>;
};
ldo26_reg: LDO26 {
regulator-name = "VCC_3.0V_MOTOR";
regulator-min-microvolt = <3000000>;
regulator-max-microvolt = <3000000>;
regulator-always-on;
regulator-initial-mode = <1>;
};
ldo27_reg: LDO27 {
regulator-name = "VSIL_1.2A";
regulator-min-microvolt = <1200000>;
regulator-max-microvolt = <1200000>;
regulator-always-on;
regulator-initial-mode = <1>;
};
ldo28_reg: LDO28 {
regulator-name = "VCC_1.8V_MHL";
regulator-min-microvolt = <1800000>;
regulator-max-microvolt = <1800000>;
regulator-always-on;
regulator-initial-mode = <1>;
};
ldo29_reg: LDO29 {
regulator-name = "TSP_VDD_1.8V";
regulator-min-microvolt = <1800000>;
regulator-max-microvolt = <1800000>;
regulator-always-on;
regulator-initial-mode = <1>;
};
ldo30_reg: LDO30 {
regulator-name = "VMIFS_1.0V_AP";
regulator-min-microvolt = <1000000>;
regulator-max-microvolt = <1000000>;
regulator-always-on;
regulator-initial-mode = <1>;
};
ldo32_reg: LDO32 {
regulator-name = "IRLED_3.3V";
regulator-min-microvolt = <3300000>;
regulator-max-microvolt = <3300000>;
regulator-always-on;
regulator-initial-mode = <1>;
};
ldo33_reg: LDO33 {
regulator-name = "VCC_2.8V_AP";
regulator-min-microvolt = <2800000>;
regulator-max-microvolt = <2800000>;
regulator-always-on;
regulator-initial-mode = <1>;
};
ldo35_reg: LDO35 {
regulator-name = "CAM_SENSOR_CORE_1.2V";
regulator-min-microvolt = <1050000>;
regulator-max-microvolt = <1200000>;
regulator-always-on;
regulator-initial-mode = <1>;
};
};
};
};
[email protected] {
[email protected] {
};
};
[email protected] {
[email protected] {
};
[email protected] {
};
[email protected] {
};
[email protected] {
};
[email protected] {
};
};
[email protected] {
compatible = "i2c-gpio";
gpios = <&gpd1 4 0 /* sda */
&gpd1 5 0 /* scl */
>;
i2c-gpio,delay-us = <1>;
#address-cells = <1>;
#size-cells = <0>;
[email protected] {
};
};
[email protected] {
compatible = "i2c-gpio";
gpios = <&gpb3 6 0 /* sda */
&gpb3 7 0 /* scl */
>;
// i2c-gpio,delay-us not specified?
#address-cells = <1>;
#size-cells = <0>;
[email protected] {
};
};
[email protected] {
compatible = "i2c-gpio";
gpios = <&gpa1 5 0 /* sda */
&gpa1 4 0 /* scl */
>;
i2c-gpio,delay-us = <2>;
#address-cells = <1>;
#size-cells = <0>;
[email protected] {
};
};
[email protected] {
compatible = "i2c-gpio";
gpios = <&gpa2 2 0 /* sda */
&gpa2 3 0 /* scl */
>;
// i2c-gpio,delay-us not specified?
#address-cells = <1>;
#size-cells = <0>;
[email protected] {
};
[email protected] {
};
};
EDIT:
Oh and some great news! I just had a long and interesting conversation with a local who noticed me while I was writing this earlier and asked me about it. Surprisingly, after I told him about my project he said he knew exactly what I was talking about. Turned out he's a developer who specializes in embedded linux systems and has actual experience with writing flattened device trees. What's even better is that he's willing to help me with this!
This has just taken an interesting turn so stay tuned...

Hi mate!
I really want to help you but I don't know how to programming in Linux(for the moment) and I know little bit in Android. My hoght school profile is based on IT and programming but unfortunately i don't make on these langage, I'm making only C++ and C#.The point is: I want to help you and the CM devs to resolve the bugs. I'm waiting response form Sand Pox.
If u find me useful pm to me and I will try to help u. Good luck !

Good luck!

Kryptocid said:
Hi mate!
I really want to help you but I don't know how to programming in Linux(for the moment) and I know little bit in Android. My hoght school profile is based on IT and programming but unfortunately i don't make on these langage, I'm making only C++ and C#.The point is: I want to help you and the CM devs to resolve the bugs. I'm waiting response form Sand Pox.
If u find me useful pm to me and I will try to help u. Good luck !
Click to expand...
Click to collapse
Hey! I just sent you a PM
I just put up a new repo with the current progress. I'll add more reference stuff later on, but here's the link to the repo: https://bitbucket.org/sigma-1/exynos5420_lt03wifi_dts

Hallo?

So, I think it's time to declare my research on the flattened device tree officially over. What I have thrown together so far gives me a good idea of how the fdt should eventually look like, although it's not completely accurate.
What should happen now is basically device driver development. Since I'm aiming for Linux 3.18.y there are some things that need to be considered. The SM-P600 relies on certain drivers that are exclusively present in the stock kernel, but some of them can also be found in other Samsung kernels which range from v3.4 to 3.10.
Some of these drivers can be swapped out for generic drivers, while others need to be ported over. My current plan is to start by compiling a system with only just the minimal hardware support to make it boot.
Android's branch of the 3.18 kernel has much of the required support already, but there are at least two major drivers that must be implemented, namely the LCD driver and drivers for the max77803 pmic from Maxim Integrated. The latter does not play that much of an essential part as the max77802 pmic which is already supported in the kernel, but one of the things it controls is the charging mechanism which I believe is pretty much essential.
Also, there is no support for the proprietary battery/charger/fuelgauge drivers from Samsung. Hopefully the generic driver works just as well even though I literally have no idea how it will work out.
Our max17050 fuel gauge is already supported, it's just the max77803 "charger" part that needs to be figured out.
Once the device boots, the rest of the drivers can be implemented one by one as kernel modules once they have been adapted to linux 3.18. That's also where device tree overlays come in, which is one of the cool features of the device tree implementation.
So, I guess I'm off to learn how to write linux device drivers. Guess I'll just write the LCD driver from scratch. The Maxim drivers all look very similar so the 3.4 verson can probably just be upgraded in accordance with the ones already present in Linus' tree.
Another thing to note here is that the ARM Mali GPU drivers are not present in the upstream linux kernel. On the other hand, they have been reverse-engineered and implemented into the Direct Rendering Manager (DRM). What that means though is that the proprietary libs will no longer work. Instead, libdrm would have to be implemented into the android source along with its exynos-specific support libs.
The Mali/Midgard drivers could be implemented into the kernel source, but I personally like the open source alternative better as long as it works.

Andmoreagain said:
So, I think it's time to declare my research on the flattened device tree officially over. What I have thrown together so far gives me a good idea of how the fdt should eventually look like, although it's not completely accurate.
What should happen now is basically device driver development. Since I'm aiming for Linux 3.18.y there are some things that need to be considered. The SM-P600 relies on certain drivers that are exclusively present in the stock kernel, but some of them can also be found in other Samsung kernels which range from v3.4 to 3.10.
Some of these drivers can be swapped out for generic drivers, while others need to be ported over. My current plan is to start by compiling a system with only just the minimal hardware support to make it boot.
Android's branch of the 3.18 kernel has much of the required support already, but there are at least two major drivers that must be implemented, namely the LCD driver and drivers for the max77803 pmic from Maxim Integrated. The latter does not play that much of an essential part as the max77802 pmic which is already supported in the kernel, but one of the things it controls is the charging mechanism which I believe is pretty much essential.
Also, there is no support for the proprietary battery/charger/fuelgauge drivers from Samsung. Hopefully the generic driver works just as well even though I literally have no idea how it will work out.
Our max17050 fuel gauge is already supported, it's just the max77803 "charger" part that needs to be figured out.
Once the device boots, the rest of the drivers can be implemented one by one as kernel modules once they have been adapted to linux 3.18. That's also where device tree overlays come in, which is one of the cool features of the device tree implementation.
So, I guess I'm off to learn how to write linux device drivers. Guess I'll just write the LCD driver from scratch. The Maxim drivers all look very similar so the 3.4 verson can probably just be upgraded in accordance with the ones already present in Linus' tree.
Another thing to note here is that the ARM Mali GPU drivers are not present in the upstream linux kernel. On the other hand, they have been reverse-engineered and implemented into the Direct Rendering Manager (DRM). What that means though is that the proprietary libs will no longer work. Instead, libdrm would have to be implemented into the android source along with its exynos-specific support libs.
The Mali/Midgard drivers could be implemented into the kernel source, but I personally like the open source alternative better as long as it works.
Click to expand...
Click to collapse
Keep it up! Good work

Is it worth considering a possible arm port of Ubuntu? How about Ubuntu Touch to make use of SPEN?
So far it looks as though your effort has the depth and scope ... is it something you would consider worth exploring?

xda_nikita said:
Is it worth considering a possible arm port of Ubuntu? How about Ubuntu Touch to make use of SPEN?
So far it looks as though your effort has the depth and scope ... is it something you would consider worth exploring?
Click to expand...
Click to collapse
I actually intend on starting with building a regular Linux rootfs with a desktop distro such as Ubuntu before jumping on to a full android build. In regards to s-pen functionality, I won't be focusing on that until everything else is working as it should. I hope it can be supported eventually though. I myself would love to be able to draw directly in GIMP or InkScape with the s-pen.
My first aim is to get the u-boot bootloader up and running. That alone would open up a lot of possibilities for future development as well as true multi boot.

So I've been tinkering with this a bit, and I'm currently pulling in some Samsung drivers to a linux-linaro v3.13 tree. I decided to go with this particular kernel base since it's not too different from linux 3.10 and because it has native support for exynos5420 which upstream android/linux-3.10 doesn't. My original thought was to use linux 3.18, but it just presented me with too much incompatibility with the 3.10 drivers.
I've also found a suitable driver for the max77803 PMIC. It's actually for max77888, but our stock driver is based on the max77888 driver and they're almost identical for that matter. Pulled it in from a 3.10 tree along with the battery+motor drivers and a driver for the sii8240 chip. I'm still fixing up some missing includes before I start diffing it against the stock drivers. I'll post an update once it all compiles without an issue.
Edit:
Fixed up some build errors with the sec_battery driver, now running into some "field has incomplete type" error with max17050 fuelgauge driver. Not sure what to make of this so if anyone has any ideas it would be greatly appreciated.
Code:
LD drivers/base/built-in.o
CC drivers/battery/sec_battery.o
CC drivers/battery/sec_adc.o
CC drivers/battery/max17050_fuelgauge.o
In file included from drivers/battery/max17050_fuelgauge.c:15:0:
include/linux/battery/sec_fuelgauge.h:60:19: error: field 'fuel_alert_wake_lock' has incomplete type
struct wake_lock fuel_alert_wake_lock;
^
scripts/Makefile.build:308: recipe for target 'drivers/battery/max17050_fuelgauge.o' failed
make[2]: *** [drivers/battery/max17050_fuelgauge.o] Error 1
scripts/Makefile.build:455: recipe for target 'drivers/battery' failed
make[1]: *** [drivers/battery] Error 2
Makefile:816: recipe for target 'drivers' failed
make: *** [drivers] Error 2
Source code: https://bitbucket.org/sigma-1/linux-linaro-3.13-2014.01
I also find Samsung's 3.10 kernels a bit odd looking in some aspects. They still use deprecated macros such as __devinit and __devexit that shouldn't be present in 3.10 at all. Anyway, I'm gonna continue to try and sort this out.

Hi not a developer (so far) but did someone read about this device here?
There is a Linux running on an Samsung Exynos5422 Cortex™-A15
Its maybe helpfull to get some stuff thats not supported from Samsung opensource
http://www.hardkernel.com/main/products/prdt_info.php?g_code=G143452239825

peterpan07 said:
Hi not a developer (so far) but did someone read about this device here?
There is a Linux running on an Samsung Exynos5422 Cortex™-A15
Its maybe helpfull to get some stuff thats not supported from Samsung opensource
http://www.hardkernel.com/main/products/prdt_info.php?g_code=G143452239825
Click to expand...
Click to collapse
Yeah, the Exynos series of SoC's are all supported upstream, including Exynos 5420. The current kernel base I'm using comes from Linaro and not Samsung OSRC and it has most of the required support already. The upstream kernel actually has much better and advanced support for the Exynos series than any of Samsung's stock kernels. They just seem to be more interested in actually providing upstream support for the development boards while end-user devices such as phones and tablets get no such support. It's understandable and in most cases this doesn't really make much difference to the end-user. Exynos 5420 is a special case though IMO because our stock kernel still doesn't properly support all the capabilities it has to offer.
The issue we're facing is basically that Samsung's phones and tablets rely on hardware that isn't entirely supported upstream. Like I've mentioned before, an example would be the PMICs that are commonly used in Samsung's products. Usually these are chips manufactured by Maxim Integrated and while a handful of these chips have upstream kernel support, most of them don't and their drivers are exclusively found in Samsung OSRC kernel trees. Thankfully the PMICs are the least of my worries in this context because these drivers are all based on one another and all look pretty similar for that matter. Basically the only thing that truly needs to be worked upon in this early phase is the driver for our LCD (LSL101DL01). If simply adding OF/Device Tree support to the driver doesn't work then it may have to be rewritten in order for it to work properly with linux v3.10 and higher. I simply haven't started looking into it enough to be able to say anything about it at this point.
The PMICs are my current priority, since support for max77802/803 will also be needed for the u-boot bootloader as far as my understanding goes. Otherwise it doesn't seem like u-boot requires much driver support compared to the kernel.
Current todo list:
- Apply upstream patches for max77802 support
- Get max77803 (muic, motor, leds, charger), max17050 (fuel gauge) and Samsung's battery drivers working
- Forward-port the LCD driver to play nicely with Linux v3.10 or higher
- Add device tree bindings for all of the above
Again, any help would be appreciated. I'm personally just learning things as I go along so if there's anyone here who has experience with C/kernel programming and might be willing to contribute to this project or even just provide some insight or ideas, then please let me know! The more, the merrier!

Related

[REF][SUGGESTION] clean up your codes for OC/UV and old kernel codes if possible

hi all,
first of all, i would like to say that i'm no expert in c, and this post is not intended to blame anyone but want to raise this concern only.
since i started to mod i9000's kernel source code, i found some unneeded conditional statements in the original source and modded OC/UV sections which can be avoided very easily and thus consuming less resources.
let's take a look in this example from the original source:
Code:
for (i = 0; i < LOOP_CNT; i++) {
tmp = __raw_readb(iem_base + S5PV310_APC_DBG_DLYCODE);
sum_result += tmp;
hpm[i] = tmp;
}
for (i = 0; i < LOOP_CNT; i++)
printk(KERN_INFO "ASV : hpm[%d] = %d value\n", i, hpm[i]);
the second for loop is definitely unnecessary, and it should be changed to something like:
Code:
for (i = 0; i < LOOP_CNT; i++) {
tmp = __raw_readb(iem_base + S5PV310_APC_DBG_DLYCODE);
sum_result += tmp;
hpm[i] = tmp;
printk(KERN_INFO "ASV : hpm[%d] = %d value\n", i, hpm[i]);
}
let's take a look at another extreme case, taken from the OC/UV section:
Code:
if (index < L6)
{
if (old_index == L0)
index = L1;
if (old_index == L1)
index = L2;
if (old_index == L2)
index = L3;
if (old_index == L3)
index = L4;
if (old_index == L4)
index = L5;
if (old_index == L5)
index = L6;
}
it is obvious that, if old_index=L0, it has to go thru the remaining 5 if statements which shouldnt be. isnt it be nice and more efficient to chg it to something like below or use switch case instead?
Code:
if (index < L6)
{
if (old_index == L0)
index = L1;
else if (old_index == L1)
index = L2;
else if (old_index == L2)
index = L3;
else if (old_index == L3)
index = L4;
...
...
...
...
}
since we all aim at producing better and faster kernels, i think this is a good practice to clean up the codes while we r modding
thx for your kind attention
and this is the most ridiculous part that i've ever seen in my life, which can be found in I9000 source also. if u have 10 frequencies set, then instead of running the loop 10 times, this will run 50 times in total
arch/arm/mach-s5pv310/cpufreq.c, inside static int s5pv310_update_dvfs_table()
for (i = 1; i < CPUFREQ_LEVEL_END; i++) {
s5pv310_freq_table[i-1].index = s5pv310_lookup_freq_table.index - 1;
s5pv310_freq_table[i-1].frequency = s5pv310_lookup_freq_table.frequency;
printk(KERN_INFO "index = %d, frequency = %d\n",
s5pv310_freq_table[i-1].index, s5pv310_freq_table[i-1].frequency);
}
for (i = 1; i < CPUFREQ_LEVEL_END; i++) {
s5pv310_volt_table[i-1].index = s5pv310_lookup_volt_table.index - 1;
s5pv310_volt_table[i-1].arm_volt = s5pv310_lookup_volt_table.arm_volt;
printk(KERN_INFO "index = %d, arm_volt = %d\n",
s5pv310_volt_table[i-1].index, s5pv310_volt_table[i-1].arm_volt);
}
for (i = 1; i < CPUFREQ_LEVEL_END; i++) {
s5pv310_apll_pms_table[i-1] = s5pv310_lookup_apll_pms_table;
printk(KERN_INFO "apll pms_table = 0x%08x\n", s5pv310_apll_pms_table[i-1]);
}
for (i = 1; i < CPUFREQ_LEVEL_END; i++) {
for (j = 0; j < 7; j++) {
clkdiv_cpu0[i-1][j] = clkdiv_cpu0_lookup[j];
printk("%d, ", clkdiv_cpu0[i-1][j]);
}
printk("\n");
}
for (i = 1; i < CPUFREQ_LEVEL_END; i++) {
for (j = 0; j < 2; j++) {
clkdiv_cpu1[i-1][j] = clkdiv_cpu1_lookup[j];
printk("%d, ", clkdiv_cpu1[i-1][j]);
}
printk("\n");
}
Interesting...
Sent from my GT-I9100 using XDA Premium.
This might be right. My C is bad, but some OC/UV patches look really quite 'whatever works' for me. I dont say its bad - having something is better than nothing.
Its always good if some skilled coders do reviews of such patches.
good finding and the samsung programmers are really ............... bad...
joecisd said:
good finding and the samsung programmers are really ............... bad...
Click to expand...
Click to collapse
i think it's not samsung's problem, instead, it should be unsolved/overlooked problems brought forward from linux kernel
yeaaa Hong Kong
Do you want make a kernel for us?
regards
Nice catches
Hope most devs are already taking care of this!
avetny said:
yeaaa Hong Kong
Do you want make a kernel for us?
regards
Click to expand...
Click to collapse
sorry, but maybe u don know me coz i'm a newbie here in the i9100 section
as in the i9000 forum, i usually prefer not to release files, except some quick fixes like sms sent time mod, but i'll tell u guys my findings, dirty tricks, and how to instead
sorry about that
glad to see that some of you guys already fixed, or started to fix those redundant conditional statements
and ultimately, hope that one day these will be collected as a whole and stored somewhere for everyone like our kernel source code repo here
ykk_five said:
glad to see that some of you guys already fixed, or started to fix those redundant conditional statements
and ultimately, hope that one day these will be collected as a whole and stored somewhere for everyone like our kernel source code repo here
Click to expand...
Click to collapse
I go try to clean up my code.
I only have a little C++ skills and no C but I give it a try ...
netchip said:
I go try to clean up my code.
I only have a little C++ skills and no C but I give it a try ...
Click to expand...
Click to collapse
maybe if you upload the code to somewhere (for example into a wiki, or pastebin???) we can check it. Personally I've 20years of programming exp in 4 languages, and I'm sure a lot of people like me is already here We can't make the ROM "a lot faster", but basic structural bugs can be wiped out in a short period of time (like the "if else if else if else" example in the first post).
PS: sry for my english
I'm also not an expert in C or kernel development, but i'm quite sure, that gcc is smart enough to check that some code is redundant and do that kind of optimizations in compile time (if you enable the optimize flags).
Feel free to give it a try, i'm also curious, but i think the final assembly code will be pretty much similar.
Sent from my GT-I9100 using xda premium
killerjohn said:
maybe if you upload the code to somewhere (for example into a wiki, or pastebin???) we can check it. Personally I've 20years of programming exp in 4 languages, and I'm sure a lot of people like me is already here We can't make the ROM "a lot faster", but basic structural bugs can be wiped out in a short period of time (like the "if else if else if else" example in the first post).
PS: sry for my english
Click to expand...
Click to collapse
Okay, I go.do.that
Sent from my GT-I9100
netchip said:
I go try to clean up my code.
I only have a little C++ skills and no C but I give it a try ...
Click to expand...
Click to collapse
yeah, i know. i was learning from your source in github last nite
killerjohn said:
maybe if you upload the code to somewhere (for example into a wiki, or pastebin???) we can check it. Personally I've 20years of programming exp in 4 languages, and I'm sure a lot of people like me is already here We can't make the ROM "a lot faster", but basic structural bugs can be wiped out in a short period of time (like the "if else if else if else" example in the first post).
PS: sry for my english
Click to expand...
Click to collapse
that's great. yes, most of them are structural problems actually
Guiper said:
I'm also not an expert in C or kernel development, but i'm quite sure, that gcc is smart enough to check that some code is redundant and do that kind of optimizations in compile time (if you enable the optimize flags).
Click to expand...
Click to collapse
i know gcc is quite smart but i doubt if it can handle the conditional statements automatically if something like:
if (a is a male) then a is a boy
if (a is a female) then a is a girl
so actually, a should be checked once only coz we all know that in our daily life. but sometimes we need a bit more complicated logics like:
if (a contains red) then color = red
if (a contains green) then color =green
if (a contains blue) then color =blue
if (a contains blue & green & blue) then color = gray/black/white (by assuming the portions of red, green and blue are equal)
perhaps this is not a good example, but i just want to point out that not every set of conditions are redundant sometimes and hence gcc may not be able to handle it, i think (i'm not a gcc expert neither, pls correct me if i'm wrong )
Feel free to give it a try, i'm also curious, but i think the final assembly code will be pretty much similar.
Click to expand...
Click to collapse
but i've modded some smali before and found that even a very simple for loop in java can produce a lot of goto statements in the assembly code which can be clean up also

[Q] {Q} How can I unpack Boot.img

I want to unpack a Boot.img file to have a look at the Kernel coding. I have been at Google-ing this for about an hour and need some help. I am using windows but could use Ubuntu if need be.
Help would be much appreciated!!!
first of all by unpacking boot.img you won't see actual kernel coding.. it will merely 0.05% give you some idea about coding stuff here..
ketut released some tools which you can find in his kernel thread [not cf-root thread]..
if you wan't code then you will have to download kernel sources from github or samsung site.. and play at own risks
Okay, it looks like I am going to install Ubuntu. I was just hoping there was some way to do it within Windows without running a V.M. or Dual boot.
yes there are two ways of installing it with wubi installer to install within windows.. and one creating separate partition of ext4 to dual boot..
wubi installer seems to be what you are looking for
I am currently looking here https://github.com/ilarrain/kernel_galaxyace/blob/gingerbread/arch/arm/mach-msm/acpuclock.c and trying to understand the references to the frequency table. I want to understand why the table goes to 1036800 (like the CM7 Kernel) but is limited to 902400. It would help if I had the CM7 Kernel source for reference. Do you know where that can be found?
I am pretty sure this is what I need to be looking at:
#ifdef CONFIG_CPU_FREQ_MSM
static struct cpufreq_frequency_table freq_table[20];
static void __init cpufreq_table_init(void)
{
unsigned int i;
unsigned int freq_cnt = 0;
/* Construct the freq_table table from acpu_freq_tbl since the
* freq_table values need to match frequencies specified in
* acpu_freq_tbl and acpu_freq_tbl needs to be fixed up during init.
*/
for (i = 0; acpu_freq_tbl.a11clk_khz != 0
&& freq_cnt < ARRAY_SIZE(freq_table)-1; i++) {
if (acpu_freq_tbl.use_for_scaling) {
freq_table[freq_cnt].index = freq_cnt;
freq_table[freq_cnt].frequency
= acpu_freq_tbl.a11clk_khz;
freq_cnt++;
}
}
/* freq_table not big enough to store all usable freqs. */
BUG_ON(acpu_freq_tbl.a11clk_khz != 0);
freq_table[freq_cnt].index = freq_cnt;
freq_table[freq_cnt].frequency = CPUFREQ_TABLE_END;
pr_info("%d scaling frequencies supported.\n", freq_cnt);
}
#endif
-SGA- said:
I am currently looking here https://github.com/ilarrain/kernel_galaxyace/blob/gingerbread/arch/arm/mach-msm/acpuclock.c and trying to understand the references to the frequency table. I want to understand why the table goes to 1036800 (like the CM7 Kernel) but is limited to 902400. It would help if I had the CM7 Kernel source for reference. Do you know where that can be found?
I am pretty sure this is what I need to be looking at:
#ifdef CONFIG_CPU_FREQ_MSM
static struct cpufreq_frequency_table freq_table[20];
static void __init cpufreq_table_init(void)
{
unsigned int i;
unsigned int freq_cnt = 0;
/* Construct the freq_table table from acpu_freq_tbl since the
* freq_table values need to match frequencies specified in
* acpu_freq_tbl and acpu_freq_tbl needs to be fixed up during init.
*/
for (i = 0; acpu_freq_tbl.a11clk_khz != 0
&& freq_cnt < ARRAY_SIZE(freq_table)-1; i++) {
if (acpu_freq_tbl.use_for_scaling) {
freq_table[freq_cnt].index = freq_cnt;
freq_table[freq_cnt].frequency
= acpu_freq_tbl.a11clk_khz;
freq_cnt++;
}
}
/* freq_table not big enough to store all usable freqs. */
BUG_ON(acpu_freq_tbl.a11clk_khz != 0);
freq_table[freq_cnt].index = freq_cnt;
freq_table[freq_cnt].frequency = CPUFREQ_TABLE_END;
pr_info("%d scaling frequencies supported.\n", freq_cnt);
}
#endif
Click to expand...
Click to collapse
Why not cooper_initramfs ?
Herpderp Adreno + Tegra.
Well..For the history,To unpack boot.img,you need to use cygwin.Here is complete instruction on doing this thing freeyourandroid.com

[ISSUE] Trying to compile kernel but it won't boot.

Okay, let's get the troubleshooting started here. Before any source can even be thought of being released it needs to be properly compiled.
So we're trying that (well, Dees Troy is at the moment) and it compiles.
But it doesn't boot. He's managed to get kernels compiled on other MTK devices that boot, so why does this one not work?
First one with the right answer gets a cupie doll and a million thanks.
Discussion go!
Quick guess: wrong partitioning ?
Sent from my Nexus 5 using Tapatalk
kuronosan said:
Okay, let's get the troubleshooting started here. Before any source can even be thought of being released it needs to be properly compiled.
So we're trying that (well, Dees Troy is at the moment) and it compiles.
But it doesn't boot. He's managed to get kernels compiled on other MTK devices that boot, so why does this one not work?
First one with the right answer gets a cupie doll and a million thanks.
Discussion go!
Click to expand...
Click to collapse
Well i have the same Problem with the released Sources from AlcaTel for the MediaTek 6516. It compiles all fine but when i want boot it on the Watch Phone it fails.
How about if you or somebody else upload here one time the Working Kernel that was shipped by MediaTek and one time the self compiled Kernel so we can do a binary comparison of the Two Builds.
Maybe some Magic Numbers are only missed how knows ?
P.S. Btw i guess you used the same Kernel Configurations like the one used by the Mediatek People? I had some trouble with the Kernel Config file as it exist several Boards for the MTK6516 with different Sensors and Option that needed to be activated deactivated ? Can you ebolorate more on this Point. Maybe post the Kernel Config File here so we can study it. It is full GPL Licensed and has nothing to do with Mediatek itself.
ARAN said:
Well i have the same Problem with the released Sources from AlcaTel for the MediaTek 6516. It compiles all fine but when i want boot it on the Watch Phone it fails.
How about if you or somebody else upload here one time the Working Kernel that was shipped by MediaTek and one time the self compiled Kernel so we can do a binary comparison of the Two Builds.
Maybe some Magic Numbers are only missed how knows ?
P.S. Btw i guess you used the same Kernel Configurations like the one used by the Mediatek People? I had some trouble with the Kernel Config file as it exist several Boards for the MTK6516 with different Sensors and Option that needed to be activated deactivated ? Can you ebolorate more on this Point. Maybe post the Kernel Config File here so we can study it. It is full GPL Licensed and has nothing to do with Mediatek itself.
Click to expand...
Click to collapse
I'll upload one of each.
Try this:
...mediatek/config/mtxxxx/autoconfig/kconfig/platform
Disable:
CONFIG_KPROBES
Compile and test.
If still no go:
Also disable:
CONFIG_KALLSYMS
CONFIG_KALLSYMS_ALL
Compile and test.
How are you repacking the kernel?
There's an specific pack/repack scripts for packing zImage +ramdisk of mtk devices:
http://forum.xda-developers.com/showthread.php?t=1587411
B.regards
superdragonpt said:
Try this:
...mediatek/config/mtxxxx/autoconfig/kconfig/platform
Disable:
CONFIG_KPROBES
Compile and test.
If still no go:
Also disable:
CONFIG_KALLSYMS
CONFIG_KALLSYMS_ALL
Compile and test.
How are you repacking the kernel?
There's an specific pack/repack scripts for packing zImage +ramdisk of mtk devices:
http://forum.xda-developers.com/showthread.php?t=1587411
B.regards
Click to expand...
Click to collapse
edit: Yea forget what I said. I'm dumb for not looking in the right folder.
kuronosan said:
edit: Yea forget what I said. I'm dumb for not looking in the right folder.
Click to expand...
Click to collapse
So I packed and repacked and I still get no boot. There looks to be about a 300kb difference in size between stock kernels and what I end up with.
I don't even get adb.
Original zimage: https://drive.google.com/file/d/0Bxmcjxk_EtPSWnRvbGhraVBoQ2c/edit?usp=sharing
My compiled zimage: https://drive.google.com/file/d/0Bxmcjxk_EtPSV3lYZlpSc0RFT2s/edit?usp=sharing
kuronosan said:
So I packed and repacked and I still get no boot. There looks to be about a 300kb difference in size between stock kernels and what I end up with.
I don't even get adb.
Original zimage: https://drive.google.com/file/d/0Bxmcjxk_EtPSWnRvbGhraVBoQ2c/edit?usp=sharing
My compiled zimage: https://drive.google.com/file/d/0Bxmcjxk_EtPSV3lYZlpSc0RFT2s/edit?usp=sharing
Click to expand...
Click to collapse
Thanks for uploading the Files.
First i am asking how do you come to the Conclusion that the Difference between your Kernel Build and the Original Mediatek Kernel Build is about 300 KB?
When i do compare your Build and the Original Build i see that your Build called "zBuildNew" is over 600KB fat oversized aka bigger than the Original Build.
A Visual Compare with the Linux tool "vbindiff" reveals that the real difference actually is much bigger as it miss nearly everything that exist in the Original Build.
From all the Analysis i get the Impression that you Compiled the Kernel with the wrong Option. Speak you are not using really the Original Kernel Config Options from Mediatek.
The real difference in Size because of this is not 300KB but over >2 Mega Byte as it miss a lot of Information that exist in the Original Build.
You can do itself such a analysis with the Linux Tool vbindiff and you will see itself that a lot of things are missed in your Build!
I asked you last time to Post your Kernel Config file here in the Forum! It can be shared easy without any problems and limitation as it is 100% Full GPL and has nothing to do with MediaTek itself but you did fail on this Point!
ARAN said:
P.S. Btw i guess you used the same Kernel Configurations like the one used by the Mediatek People? Can you ebolorate more on this Point. Maybe post the Kernel Config File here so we can study it. It is full GPL Licensed and has nothing to do with Mediatek itself.
Click to expand...
Click to collapse
This Configuration File is the Most Important File. It is the Kernel Backing Recipe File.
Please post your own Config Kernel File here and also the original Build Kernel Config file.
With this two Files over 90% of the Kernel Compiling Problems can be solved.
Thanks.
Thanks for the response. If you mean the config.gz it doesn't exist. Where else can I find it?
sent from my Galaxy S5 using Tapatalk
kuronosan said:
Thanks for the response. If you mean the config.gz it doesn't exist. Where else can I find it?
sent from my Galaxy S5 using Tapatalk
Click to expand...
Click to collapse
Pull it from your running watch through adb. That's what I did last time I needed one for bdaman80 while he was building a kernel.
kuronosan said:
Thanks for the response. If you mean the config.gz it doesn't exist. Where else can I find it?
sent from my Galaxy S5 using Tapatalk
Click to expand...
Click to collapse
Your Own Kernel Config File can be found in the Directory called "kernel"
It is a hidden file that normally is not showed. You need to activate Hidden Files to be showed.
In the command line the best is if you change to directory with "cd YourPathWhereKernelFilesAre/kernel" and do a "ls -la" this will show also all hidden files including the wanted Kernel Config File ".config"
The Original Config File that MediaTek has used to Compile the Kernel should be shipped in this Directory too and was probably overwritten after the Compilation.
I Myself as a Example have found the Original Config File for the "Z1 Watch Phone" when i accessed the Phone over ADB and looked at all Files including the hidden ones with the Console.
Most of the Times the original Config File can be Found inside Android hidden Directorys. Check all Files and Dirs with the Console over ADB.
Maybe you will have luck like myself.
When you open the Original MediaTek Kernel Config File you will see a lot of specific MediaTEK Options that can be enabled for all
available Boards they Support.
Here a Snipet Example of the Orignal Kernel Config File for the "Z1 Watch Phone" that use the MediaTek for the MT6516 SoC
Code:
# CONFIG_ARCH_MT3351 is not set
CONFIG_ARCH_MT6516=y
#
# MT6516 Board Support Package
#
#
# MT6516 Board Type
#
# CONFIG_MT6516_EVB_BOARD is not set
# CONFIG_MT6516_PHONE_BOARD is not set
# CONFIG_MT6516_GEMINI_BOARD is not set
# CONFIG_MT6516_OPPO_BOARD is not set
CONFIG_MT6516_E1K_BOARD=y
# CONFIG_MT6516_CPU_208MHZ_MCU_104MHZ is not set
CONFIG_MT6516_CPU_416MHZ_MCU_104MHZ=y
# CONFIG_MT6516_CPU_468MHZ_MCU_117MHZ is not set
CONFIG_MAX_DRAM_SIZE_SUPPORT=0x10000000
# CONFIG_CEVA_MT6516 is not set
CONFIG_RESERVED_MEM_SIZE_FOR_PMEM=0x3600000
CONFIG_HAVE_TCM=y
Do you have such Lines in any of your Kernel Configuration Files ?
If not then this will getting really hard to Compile!!!
I would really like to help you but my October DEV Kickstarter Order is since 6 Months not delivered to Switzerland.
If i had my Omate Device i would be the first one to Help you as i am only interessted into the Kernel and the Hardware.
I do not plan to use Andoird on this Device but my own Computer Operating System. So Having a working Open Source Kernel is very Important for me and has a high priority!
ARAN said:
Your Own Kernel Config File can be found in the Directory called "kernel"
It is a hidden file that normally is not showed. You need to activate Hidden Files to be showed.
In the command line the best is if you change to directory with "cd YourPathWhereKernelFilesAre/kernel" and do a "ls -la" this will show also all hidden files including the wanted Kernel Config File ".config"
The Original Config File that MediaTek has used to Compile the Kernel should be shipped in this Directory too and was probably overwritten after the Compilation.
I Myself as a Example have found the Original Config File for the "Z1 Watch Phone" when i accessed the Phone over ADB and looked at all Files including the hidden ones with the Console.
Most of the Times the original Config File can be Found inside Android hidden Directorys. Check all Files and Dirs with the Console over ADB.
Maybe you will have luck like myself.
When you open the Original MediaTek Kernel Config File you will see a lot of specific MediaTEK Options that can be enabled for all
available Boards they Support.
Here a Snipet Example of the Orignal Kernel Config File for the "Z1 Watch Phone" that use the MediaTek for the MT6516 SoC
Code:
# CONFIG_ARCH_MT3351 is not set
CONFIG_ARCH_MT6516=y
#
# MT6516 Board Support Package
#
#
# MT6516 Board Type
#
# CONFIG_MT6516_EVB_BOARD is not set
# CONFIG_MT6516_PHONE_BOARD is not set
# CONFIG_MT6516_GEMINI_BOARD is not set
# CONFIG_MT6516_OPPO_BOARD is not set
CONFIG_MT6516_E1K_BOARD=y
# CONFIG_MT6516_CPU_208MHZ_MCU_104MHZ is not set
CONFIG_MT6516_CPU_416MHZ_MCU_104MHZ=y
# CONFIG_MT6516_CPU_468MHZ_MCU_117MHZ is not set
CONFIG_MAX_DRAM_SIZE_SUPPORT=0x10000000
# CONFIG_CEVA_MT6516 is not set
CONFIG_RESERVED_MEM_SIZE_FOR_PMEM=0x3600000
CONFIG_HAVE_TCM=y
Do you have such Lines in any of your Kernel Configuration Files ?
If not then this will getting really hard to Compile!!!
I would really like to help you but my October DEV Kickstarter Order is since 6 Months not delivered to Switzerland.
If i had my Omate Device i would be the first one to Help you as i am only interessted into the Kernel and the Hardware.
I do not plan to use Andoird on this Device but my own Computer Operating System. So Having a working Open Source Kernel is very Important for me and has a high priority!
Click to expand...
Click to collapse
I found two of such files; one was my compiled .config and the other was for the 2.x kernel in the external directory. I should have thought about searching through this before I tried to compile. I'm guessing hidden files don't get pushed unless you specifically push them?
kuronosan said:
I found two of such files; one was my compiled .config and the other was for the 2.x kernel in the external directory. I should have thought about searching through this before I tried to compile. I'm guessing hidden files don't get pushed unless you specifically push them?
Click to expand...
Click to collapse
I don't understand what you mean with "don't get pushed"
Are you referring to git push?
Hidden Files are similar to normal Files they only are not showed in a File Browser or in the Console as long as you don't explicit want them to show up.
Most of the Time they do the Magic in Linux and are because of this Hidden to be able to prevent Corruption and Damage from the User.
If you are fetching or uploading File Code Sources with GIT then Hidden files are handled also like other files included in the repo.
Hidden files are no Problem for git and are showed always when you checkout a GIT Repo with a Browser in GitHub as a example.
ARAN said:
I don't understand what you mean with "don't get pushed"
Are you referring to git push?
Hidden Files are similar to normal Files they only are not showed in a File Browser or in the Console as long as you don't explicit want them to show up.
Most of the Time they do the Magic in Linux and are because of this Hidden to be able to prevent Corruption and Damage from the User.
If you are fetching or uploading File Code Sources with GIT then Hidden files are handled also like other files included in the repo.
Hidden files are no Problem for git and are showed always when you checkout a GIT Repo with a Browser in GitHub as a example.
Click to expand...
Click to collapse
Yes. I'll double check the source files we were given but I didn't see the config in my tree. I did see it in others, so I might have messed up (I compiled before I pushed).
sent from my Galaxy S5 using Tapatalk
Is this what you're looking for?
https://github.com/kuronosan/mt6572...nfig/ipro72_we_jb3/autoconfig/kconfig/project
kuronosan said:
Is this what you're looking for?
https://github.com/kuronosan/mt6572...nfig/ipro72_we_jb3/autoconfig/kconfig/project
Click to expand...
Click to collapse
Hi Kuronosan!
Thank you a lot for the sharing of this Link!
It looks like that it goes in the right direcrion but it is only a small Part of the Kernel Configuration File.
Normally the full Kernel Config file has about 1000 to 2000 Lines with Option to Turn On or Off.
I downloaded however now the first released and build Firmware from MediaTek for the Omate Truesmart Watchphone
called "Omate_Developer_Truesmart_20131028" from 28 Oktober 2013
I could sucessfull extract the System Image and get very Important Files from this Image which helps as a lot to ReBuild the Kernel and Android.
Here is as a Example the very Important Original Build.Prop File that was used to Build all the Code for the Omate Truesmart
Very Important: I need somebody who can flash this Developer Firmware on his Omate and Pull all Files including the hiddens ones and publish them. Another Possibility is to extract all the Images from this Developer Firmware and publish that way the Files for Download.
Maybe LokFish Marz can do it or somebody else ? Thanks !
Downloading at the moment the Kernel Sources to Study them and try to rebuild the Kernel myself till end of the next Week.
Awaiting all Files from the Developer Firmware to be Published.
Code:
# begin build properties
# autogenerated by buildinfo.sh
ro.build.id=JDQ39
ro.build.display.id=ALPS.JB3.MP.V1.8
ro.build.version.incremental=eng.user.20131028.164738
ro.custom.build.version=20131028.164738
ro.build.version.sdk=17
ro.build.version.codename=REL
ro.build.version.release=4.2.2
ro.build.date=Mon Oct 28 16:50:25 CST 2013
ro.build.date.utc=1382950225
ro.build.type=user
ro.build.user=user
ro.build.host=user-desktop
ro.build.tags=test-keys
ro.product.model=OMATE
ro.product.brand=OMATE
ro.product.name=x201
ro.product.device=x201
ro.product.board=x201
ro.product.cpu.abi=armeabi-v7a
ro.product.cpu.abi2=armeabi
ro.product.manufacturer=alps
ro.product.locale.language=en
ro.product.locale.region=US
ro.wifi.channels=
ro.board.platform=
# ro.build.product is obsolete; use ro.product.device
ro.build.product=x201
# Do not try to parse ro.build.description or .fingerprint
ro.build.description=x201-user 4.2.2 JDQ39 eng.user.20131028.164738 test-keys
ro.build.fingerprint=OMATE/x201/x201:4.2.2/JDQ39/20131028.164738:user/test-keys
ro.build.flavor=
ro.build.characteristics=default
persist.sys.timezone=Africa/Harare
# end build properties
# begin mediatek build properties
ro.mediatek.version.release=ALPS.JB3.MP.V1.8
ro.mediatek.platform=MT6572
ro.mediatek.chip_ver=S01
ro.mediatek.version.branch=ALPS.JB3.MP
ro.mediatek.version.sdk=1
# end mediatek build properties
#
# system.prop for generic sdk
#
rild.libpath=/system/lib/mtk-ril.so
rild.libargs=-d /dev/ttyC0
# MTK, Infinity, 20090720 {
wifi.interface=wlan0
# MTK, Infinity, 20090720 }
# MTK, mtk03034, 20101210 {
ro.mediatek.wlan.wsc=1
# MTK, mtk03034 20101210}
# MTK, mtk03034, 20110318 {
ro.mediatek.wlan.p2p=1
# MTK, mtk03034 20110318}
# MTK, mtk03034, 20101213 {
mediatek.wlan.ctia=0
# MTK, mtk03034 20101213}
#
wifi.tethering.interface=ap0
#
ro.opengles.version=131072
wifi.direct.interface=p2p0
dalvik.vm.heapgrowthlimit=96m
dalvik.vm.heapsize=128m
# USB MTP WHQL
ro.sys.usb.mtp.whql.enable=0
# Power off opt in IPO
sys.ipo.pwrdncap=2
ro.sys.usb.storage.type=mtp,mass_storage
# USB BICR function
ro.sys.usb.bicr=yes
# USB Charge only function
ro.sys.usb.charging.only=yes
# audio
ro.camera.sound.forced=0
ro.audio.silent=0
ro.zygote.preload.enable=0
# temporary enables NAV bar (soft keys)
qemu.hw.mainkeys=0
ro.kernel.zio=38,108,105,16
#
# ADDITIONAL_BUILD_PROPERTIES
#
persist.gemini.sim_num=2
ro.gemini.smart_sim_switch=false
ro.gemini.smart_3g_switch=0
ril.specific.sm_cause=0
bgw.current3gband=0
ril.external.md=0
ro.sf.hwrotation=0
ril.current.share_modem=2
curlockscreen=1
ro.mediatek.gemini_support=true
ro.operator.hwlcm=s6d04d2x01
ro.operator.hwtp=ft5206/msg2133
ro.operator.hwmaincamera=ov3660_yuv
ro.operator.hwgsensor=bma222
ro.operator.hwmsensor=mmc3416x
persist.radio.fd.counter=15
persist.radio.fd.off.counter=5
persist.radio.fd.r8.counter=15
persist.radio.fd.off.r8.counter=5
persist.mtk.wcn.combo.chipid=-1
drm.service.enabled=true
fmradio.driver.enable=0
ril.first.md=1
ril.flightmode.poweroffMD=1
ril.telephony.mode=3
dalvik.vm.mtk-stack-trace-file=/data/anr/mtk_traces.txt
mediatek.wlan.chip=mediatek.wlan.module.postfix=_
ril.radiooff.poweroffMD=0
ro.config.notification_sound=Proxima.ogg
ro.config.alarm_alert=Alarm_Classic.ogg
ro.config.ringtone=Backroad.ogg
custom.hw.version=HW2.0
customize.product.name=Omate3
customize.product.cust=umeox
customize.product.version=M1.0
net.bt.name=Android
dalvik.vm.stack-trace-file=/data/anr/traces.txt
# begin adupsfota properties
ro.adups.fota.oem=umeox72
ro.adups.fota.device=OMATE
ro.adups.fota.version=ALPS.JB3.MP.V1.8
# begin adupsfota properties
LOL. Every firmware in my archive is a test build, Mediatek has not released anything but test builds for every one of the x201 models and board revisions.
I'm not sure where you are going with this build.prop thing. And if you are looking for a /proc/config.gz in the firmware, it's not there, along with media_profiles.xml and a number of other typically expected files. power_profiles.xml is wrong on every MTK firmware I've ever seen, across multiple devices/SOCs, supported clock rates is wrong, I'm pretty sure I never even found a proper voltage table.
And as far as his git, it took multiple people, days to get the files in the right place. It looked like MTK pretty much put source in a blender and gave us the results.
I Downloaded the Sources now and tryed a test run Kernel Compile on my newest Ubuntu Linux Machine.
The Point is that the Sources that were delivered are depending on a 4 Year Old Distro Linux from the Year 2010
I had already to Fix this https://github.com/kuronosan/mt6572_x201/blob/master/mediatek/build/tools/checkEnv.py#L429 File several Times because it fails to Build the Kernel as it use the "GCC --v" option that does not exist any more.
Its pity that the Sources are that outdated or at least require already a 4 Year Old Linux Distro to be build.
The Build.Prop File provide several interesting Information like Drivers, Manufacturer and Compiler Information.
Code:
ro.product.model=OMATE
ro.product.brand=OMATE
ro.product.name=x201
ro.product.device=x201
ro.product.board=x201
[B][U]ro.product.cpu.abi=armeabi-v7a[/U][/B]
ro.product.cpu.abi2=armeabi
[B][U]ro.product.manufacturer=alps[/U][/B]
ro.build.product=x201
[B][U]ro.mediatek.platform=MT6572[/U][/B]
ro.mediatek.chip_ver=S01
[B][U]rild.libpath=/system/lib/mtk-ril.so[/U][/B]
[B][U]ro.operator.hwmaincamera=ov3660_yuv
[/U][/B]
[B][U]ro.operator.hwgsensor=bma222[/U][/B]
[B][U]ro.operator.hwmsensor=mmc3416x[/U][/B]
I have made a Google Search for the Manufacturer ALPS together with the keyword MediaTek "ALPS MediaTek" as a example and found 83 Page Step by Step Official guide Document how to Compile the MediaTek Sources that were Delivered. Its additional Information that are helpful especially in such Situation like yours.
Beside this there is also the very Important File ProjectConfig.mk File that i Could extract from the Developer Firmware that has all the Options that were probably used to Compile the Kernel.
Code:
# = CUSTOM_HAL_MAIN_LENS +CUSTOM_HAL_MAIN_BACKUP_LENS + CUSTOM_HAL_SUB_LENS + CUSTOM_HAL_SUB_BACKUP_LENS
#CUSTOM_HAL_AUDIOFLINGER = audio
#CUSTOM_HAL_IMGSENSOR = imx073_mipi_raw ov3640_yuv_af siv120b_yuv
#CUSTOM_HAL_MAIN_BACKUP_IMGSENSOR =
#CUSTOM_HAL_MAIN_BACKUP_LENS =
#CUSTOM_HAL_MAIN_IMGSENSOR = imx073_mipi_raw
#CUSTOM_HAL_MAIN_LENS = fm50af
#CUSTOM_HAL_MATV =
#CUSTOM_HAL_SUB_BACKUP_IMGSENSOR =
#CUSTOM_HAL_SUB_BACKUP_LENS =
#CUSTOM_HAL_SUB_IMGSENSOR = hi704_yuv
#CUSTOM_KERNEL_ACCELEROMETER =
#CUSTOM_KERNEL_ALSPS =
#CUSTOM_KERNEL_BATTERY = battery
#CUSTOM_KERNEL_IMGSENSOR = imx073_mipi_raw ov3640_yuv_af siv120b_yuv
#CUSTOM_KERNEL_JOGBALL =
#CUSTOM_KERNEL_LCM = nt35582_mcu_6575
#CUSTOM_KERNEL_MAGNETOMETER =
#CUSTOM_KERNEL_MAIN_BACKUP_IMGSENSOR =
#CUSTOM_KERNEL_MAIN_BACKUP_LENS =
#CUSTOM_KERNEL_MAIN_IMGSENSOR = imx073_mipi_raw
#CUSTOM_KERNEL_MAIN_LENS = fm50af
#CUSTOM_KERNEL_MATV =
#CUSTOM_KERNEL_OFN =
#CUSTOM_KERNEL_SUB_BACKUP_IMGSENSOR =
#CUSTOM_KERNEL_SUB_BACKUP_LENS =
#CUSTOM_KERNEL_SUB_IMGSENSOR = hi704_yuv
#CUSTOM_KERNEL_TOUCHPANEL = generic
#CUSTOM_KERNEL_WIFI =
#CUSTOM_MODEM = ipro72_we_jb3_hspa
ADUPS_FOTA_SUPPORT = yes
ADUPS_FOTA_WITH_ICON = no
ALWAYSON_DFOSET = no
ALWAYSON_DFOSET_VALUE = MTK_CTA_SUPPORT
AUTO_ADD_GLOBAL_DEFINE_BY_NAME = MTK_ACMT_DEBUG MTK_BT_PROFILE_AVRCP MTK_NVRAM_SECURITY MTK_MMPROFILE_SUPPORT MTK_GPS_SUPPORT MTK_MULTIBRIDGE_SUPPORT MTK_GEMINI_4SIM_SUPPORT EVDO_DT_SUPPORT MTK_YMAL_SCATTER_FILE_SUPPORT MTK_FM_SUPPORT MTK_USES_HD_VIDEO MTK_TABLET_PLATFORM MTK_DUAL_MIC_SUPPORT MTK_AUTO_DETECT_MAGNETOMETER MTK_AUDIO_ADPCM_SUPPORT MTK_GEMINI_SMART_3G_SWITCH CUSTOM_KERNEL_OFN MTK_BT_PROFILE_MANAGER MTK_ION_SUPPORT MTK_TVOUT_SUPPORT MTK_FM_RECORDING_SUPPORT MTK_DEDICATEDAPN_SUPPORT MTK_DDR3_SUPPORT MTK_LCA_SUPPORT MTK_AUD_LOCK_MD_SLEEP_SUPPORT MTK_IPV6_SUPPORT MTK_MT6572V1_PHONE_POWER_REWORK MTK_DT_SUPPORT MTK_STEREO3D_WALLPAPER_APP MTK_MATV_SERIAL_IF_SUPPORT MTK_BT_FM_OVER_BT_VIA_CONTROLLER MTK_BT_PROFILE_PBAP MTK_FAT_ON_NAND MTK_BT_PROFILE_A2DP MTK_CAMCORDER_PROFILE_MID_MP4 MTK_BT_PROFILE_HFP MTK_BT_PROFILE_AVRCP14 MTK_VOICE_UI_SUPPORT MTK_MASS_STORAGE MTK_BICR_SUPPORT MTK_BT_PROFILE_BIP MTK_BT_PROFILE_BPP MTK_CTPPPOE_SUPPORT MTK_COMBO_QUICK_SLEEP_SUPPORT MTK_THEMEMANAGER_APP MTK_HDR_SUPPORT MTK_TMP103_SUPPORT MTK_BQ24158_SUPPORT MTK_DSPIRDBG MTK_TABLET_DRAM MTK_MT8193_SUPPORT MTK_MERGE_INTERFACE_SUPPORT HAVE_AACENCODE_FEATURE MTK_BT_PROFILE_MAPS MTK_FM_50KHZ_SUPPORT MTK_WIFI_HOTSPOT_SUPPORT MTK_TB_DEBUG_SUPPORT MTK_COMBO_SUPPORT MTK_BT_PROFILE_OPP MTK_2SDCARD_SWAP MTK_FLIGHT_MODE_POWER_OFF_MD MTK_RADIOOFF_POWER_OFF_MD MTK_BT_PROFILE_MAPC MTK_SHARED_SDCARD MTK_EMMC_DISCARD MTK_2IN1_SPK_SUPPORT MTK_MDM_LAWMO MTK_EAP_SIM_AKA MTK_MULTI_STORAGE_SUPPORT MTK_CACHE_MERGE_SUPPORT MTK_MT8193_HDCP_SUPPORT MTK_ENABLE_VIDEO_EDITOR MTK_WFD_SUPPORT MTK_AUDIO_RAW_SUPPORT MTK_WAPI_SUPPORT MTK_FD_SUPPORT MTK_DISPLAY_HIGH_RESOLUTION HAVE_ADPCMENCODE_FEATURE NAND_OTP_SUPPORT MODEM_UMTS_TDD128_MODE MTK_FACEBEAUTY_SUPPORT MTK_AAL_SUPPORT EVDO_DT_VIA_SUPPORT MTK_BT_SUPPORT MTK_YAML_SCATTER_FILE_SUPPORT MTK_BT_40_SUPPORT MTK_BT_PROFILE_FTP MTK_ASF_PLAYBACK_SUPPORT MTK_CAMERA_BSP_SUPPORT MTK_MT8193_HDMI_SUPPORT MTK_HIGH_QUALITY_THUMBNAIL MTK_IPV6_TETHER_NDP_MODE MTK_FM_RX_SUPPORT MTK_IMAGE_LARGE_MEM_LIMIT MTK_FM_TX_SUPPORT MTK_MDM_FUMO MTK_BRAZIL_CUSTOMIZATION_VIVO MTK_BRAZIL_CUSTOMIZATION_CLARO MTK_ENABLE_MD2 MTK_ENABLE_MD1 HAVE_XLOG_FEATURE MTK_LCA_RAM_OPTIMIZE MTK_RMVB_PLAYBACK_SUPPORT MTK_BT_PROFILE_SIMAP MTK_BT_PROFILE_TIMES MTK_NATIVE_3D_SUPPORT MTK_MEM_PRESERVED_MODE_ENABLE MTK_AUTORAMA_SUPPORT MTK_BT_PROFILE_TIMEC MTK_VOICE_UNLOCK_SUPPORT MTK_UMTS_TDD128_MODE MTK_TETHERING_EEM_SUPPORT MTK_MATV_ANALOG_SUPPORT MTK_BSP_PACKAGE MTK_SIM_AUTHENTICATION_SUPPORT MTK_BRAZIL_CUSTOMIZATION CUSTOM_KERNEL_ACCELEROMETER MTK_LCA_ROM_OPTIMIZE MTK_VT3G324M_SUPPORT MTK_KERNEL_POWER_OFF_CHARGING MTK_NFC_SUPPORT MTK_NAND_UBIFS_SUPPORT CUSTOM_KERNEL_GYROSCOPE MTK_MDM_SCOMO MTK_SIM_HOT_SWAP_COMMON_SLOT CUSTOM_KERNEL_MAGNETOMETER MTK_EMULATOR_SUPPORT MTK_BT_PROFILE_HIDH MTK_AUTOIP_SUPPORT MTK_BT_PROFILE_PAN MTK_PRODUCT_INFO_SUPPORT MTK_CAMERA_APP_3DHW_SUPPORT MTK_WLAN_SUPPORT MTK_PQ_SUPPORT MTK_TETHERINGIPV6_SUPPORT MTK_UART_USB_SWITCH MTK_IPOH_SUPPORT MTK_AUTO_DETECT_ACCELEROMETER HAVE_CMMB_FEATURE MTK_USES_VR_DYNAMIC_QUALITY_MECHANISM MTK_EMMC_SUPPORT_OTP MTK_TB_APP_CALL_FORCE_SPEAKER_ON MTK_COMBO_CORE_DUMP_SUPPORT MTK_TB_HW_DEBUG MTK_PLATFORM_OPTIMIZE MTK_MULTISIM_RINGTONE_SUPPORT TELEPHONY_DFOSET MTK_BIP_SCWS MTK_BEAM_PLUS_SUPPORT MTK_QVGA_LANDSCAPE_SUPPORT MTK_FM_SHORT_ANTENNA_SUPPORT MTK_HDMI_SUPPORT MTK_GEMINI_3SIM_SUPPORT MTK_RILD_READ_IMSI MTK_BT_PROFILE_SPP MTK_BT_30_SUPPORT MTK_FAN5405_SUPPORT MTK_MT8193_NFI_SUPPORT MTK_DISABLE_POWER_ON_OFF_VOLTAGE_LIMITATION MTK_HW_ENHANCE MTK_NCP1851_SUPPORT MTK_LCEEFT_SUPPORT MTK_BT_PROFILE_DUN MTK_DHCPV6C_WIFI MTK_BT_PROFILE_PRXM MTK_FSCK_MSDOS_MTK MTK_MAV_SUPPORT MTK_IPV6_TETHER_PD_MODE HAVE_AWBENCODE_FEATURE MTK_BQ24196_SUPPORT MTK_WEB_NOTIFICATION_SUPPORT MTK_MD_SHUT_DOWN_NT MTK_SPH_EHN_CTRL_SUPPORT MTK_WB_SPEECH_SUPPORT CUSTOM_KERNEL_ALSPS MTK_VIBSPK_SUPPORT MTK_BT_PROFILE_PRXR ENCRY_PARTITION_SUPPORT MTK_BQ27541_SUPPORT MTK_SD_REINIT_SUPPORT MTK_SENSOR_SUPPORT MTK_M4U_SUPPORT MTK_EMMC_SUPPORT MTK_BT_21_SUPPORT MTK_S3D_SUPPORT MTK_WLANBT_SINGLEANT SUPPORT_SDCARD2
AUTO_ADD_GLOBAL_DEFINE_BY_NAME_VALUE = MTK_SIM1_SOCKET_TYPE MTK_TOUCH_PHYSICAL_ROTATION_RELATIVE_TO_LCM MTK_LCM_PHYSICAL_ROTATION LCM_HEIGHT EMMC_CHIP CUSTOM_KERNEL_SSW MTK_SINGLE_3DSHOT_SUPPORT MTK_EXTERNAL_MODEM_SLOT MTK_SHARE_MODEM_SUPPORT MTK_NEON_SUPPORT MTK_SHARE_MODEM_CURRENT CUSTOM_KERNEL_MAIN2_IMGSENSOR LCM_WIDTH MTK_SIM2_SOCKET_TYPE
AUTO_ADD_GLOBAL_DEFINE_BY_VALUE = MTK_PLATFORM CUSTOM_KERNEL_LENS CUSTOM_KERNEL_MAIN_BACKUP_LENS BOOT_LOGO CUSTOM_KERNEL_LCM MTK_MODEM_SUPPORT MTK_ATV_CHIP CUSTOM_KERNEL_MAIN_IMGSENSOR MTK_BT_CHIP MTK_WLAN_CHIP CUSTOM_KERNEL_SUB_BACKUP_IMGSENSOR CUSTOM_KERNEL_MAIN2_BACKUP_IMGSENSOR MTK_IME_INPUT_ENGINE CUSTOM_KERNEL_MAIN_BACKUP_IMGSENSOR CUSTOM_KERNEL_FLASHLIGHT CUSTOM_KERNEL_SUB_IMGSENSOR CUSTOM_KERNEL_SUB_LENS MTK_AUDIO_BLOUD_CUSTOMPARAMETER_REV CUSTOM_KERNEL_IMGSENSOR MTK_FM_RX_AUDIO MTK_COMBO_CHIP MTK_GPS_CHIP CUSTOM_KERNEL_SUB_BACKUP_LENS CUSTOM_KERNEL_MAIN_LENS MTK_FM_TX_AUDIO MTK_FM_CHIP CUSTOM_KERNEL_MAIN2_IMGSENSOR MTK_IME_HANDWRITING_ENGINE
BOOT_LOGO = qvga
BUILD_CTS = no
BUILD_KERNEL = yes
BUILD_LK = yes
BUILD_MTK_SDK =
BUILD_PRELOADER = yes
BUILD_UBOOT = no
CUSTOM_BUILD_VERNO =
CUSTOM_HAL_ANT = mt6582_ant_m1
CUSTOM_HAL_AUDIOFLINGER = audio
CUSTOM_HAL_BLUETOOTH = bluetooth
CUSTOM_HAL_CAMERA = camera
CUSTOM_HAL_CAM_CAL = dummy_eeprom
CUSTOM_HAL_COMBO = mt6572_82
CUSTOM_HAL_EEPROM = dummy_eeprom
CUSTOM_HAL_FLASHLIGHT = dummy_flashlight
CUSTOM_HAL_IMGSENSOR = ov3660_yuv #s5k5cagx_yuv #s5k4ecgx_mipi_yuv s5k8aayx_yuv
CUSTOM_HAL_LENS = dummy_lens #sensordrive dummy_lens
CUSTOM_HAL_MAIN2_IMGSENSOR =
CUSTOM_HAL_MAIN_BACKUP_IMGSENSOR =
CUSTOM_HAL_MAIN_BACKUP_LENS =
CUSTOM_HAL_MAIN_IMGSENSOR = ov3660_yuv #s5k5cagx_yuv #s5k4ecgx_mipi_yuv
CUSTOM_HAL_MAIN_LENS = dummy_lens #sensordrive
CUSTOM_HAL_MATV = #matv
CUSTOM_HAL_MSENSORLIB = mmc328x akm8975 ami304 yamaha530 mag3110 akmd8963 bmm050 bmm056 mc6420 mmc3416x s62xd lsm303md hscdtd006
CUSTOM_HAL_SENSORS = sensor
CUSTOM_HAL_SUB_BACKUP_IMGSENSOR =
CUSTOM_HAL_SUB_BACKUP_LENS =
CUSTOM_HAL_SUB_IMGSENSOR = #s5k8aayx_yuv
CUSTOM_HAL_SUB_LENS = #dummy_lens
CUSTOM_KERNEL_ACCELEROMETER = bma222 #bma056 #bma050 #KXTJ2_1009
CUSTOM_KERNEL_ALSPS = #cm36283
CUSTOM_KERNEL_BATTERY = battery
CUSTOM_KERNEL_CAMERA = camera
CUSTOM_KERNEL_CAM_CAL = dummy_eeprom
CUSTOM_KERNEL_CORE = src
CUSTOM_KERNEL_DCT = dct
CUSTOM_KERNEL_EEPROM = dummy_eeprom
CUSTOM_KERNEL_FLASHLIGHT = dummy_flashlight
CUSTOM_KERNEL_GYROSCOPE = #mpu6050c#mpu3050c
CUSTOM_KERNEL_HDMI =
CUSTOM_KERNEL_HEADSET = accdet
CUSTOM_KERNEL_IMGSENSOR = ov3660_yuv #s5k5cagx_yuv #s5k4ecgx_mipi_yuv s5k8aayx_yuv
CUSTOM_KERNEL_KPD = kpd
CUSTOM_KERNEL_LCM = s6d04d2x01 #nt35510_fwvga
CUSTOM_KERNEL_LEDS = mt65xx
CUSTOM_KERNEL_LENS = dummy_lens #sensordrive dummy_lens
CUSTOM_KERNEL_MAGNETOMETER = mmc3416x #bmm056 #bmm050 #akm8963
CUSTOM_KERNEL_MAIN2_BACKUP_IMGSENSOR =
CUSTOM_KERNEL_MAIN2_IMGSENSOR =
CUSTOM_KERNEL_MAIN_BACKUP_IMGSENSOR =
CUSTOM_KERNEL_MAIN_BACKUP_LENS =
CUSTOM_KERNEL_MAIN_IMGSENSOR = ov3660_yuv #s5k5cagx_yuv #s5k4ecgx_mipi_yuv
CUSTOM_KERNEL_MAIN_LENS = dummy_lens #sensordrive
CUSTOM_KERNEL_MATV = #mt5193
CUSTOM_KERNEL_RTC = rtc
CUSTOM_KERNEL_SOUND = amp_6323pmic_spk
CUSTOM_KERNEL_SSW = ssw_single
CUSTOM_KERNEL_SUB_BACKUP_IMGSENSOR =
CUSTOM_KERNEL_SUB_BACKUP_LENS =
CUSTOM_KERNEL_SUB_IMGSENSOR = #s5k8aayx_yuv
CUSTOM_KERNEL_SUB_LENS = #dummy_lens
CUSTOM_KERNEL_TOUCHPANEL = ft5206 msg2133 #GT9XX #ft5206
CUSTOM_KERNEL_USB = mt6577
CUSTOM_KERNEL_VIBRATOR = vibrator
CUSTOM_LK_LCM = s6d04d2x01 #nt35510_fwvga
CUSTOM_MODEM = ipro72_we_jb3_hspa_b15
CUSTOM_PRELOADER_CUSTOM = custom
CUSTOM_SEC_AUTH_SUPPORT = no
CUSTOM_SEC_SIGNTOOL_SUPPORT = no
CUSTOM_UBOOT_LCM = s6d04d2x01 #nt35510_fwvga
DEFAULT_INPUT_METHOD = com.touchtype.swiftkey.micro/com.touchtype.KeyboardService
DEFAULT_LATIN_IME_LANGUAGES = en-US fr ru
DFO_MISC = MTK_ENABLE_MD1 MTK_ENABLE_MD2 MD1_SIZE MD2_SIZE MD1_SMEM_SIZE MD2_SMEM_SIZE MTK_MD1_SUPPORT MTK_MD2_SUPPORT
DFO_NVRAM_SET = TELEPHONY_DFOSET ALWAYSON_DFOSET OP01_CTS_COMPATIBLE_DFOSET
DISABLE_EARPIECE = no
DMNR_TUNNING_AT_MODEMSIDE = yes
ENCRY_PARTITION_SUPPORT = no
EVB = no
EVDO_DT_SUPPORT = no
EVDO_DT_VIA_SUPPORT = no
FEATURE_FTM_AUDIO_TEST = yes
GEMINI = yes
GOOGLE_RELEASE_RIL = no
HAVE_AACENCODE_FEATURE = yes
HAVE_ADPCMENCODE_FEATURE = yes
HAVE_AEE_FEATURE = yes
HAVE_APPC_FEATURE = no
HAVE_AWBENCODE_FEATURE = no
HAVE_CMMB_FEATURE = no
HAVE_GROUP_SCHEDULING = no
HAVE_MATV_FEATURE = no #yes
HAVE_MTKLOUDNESS_EFFECT = yes
HAVE_SRSAUDIOEFFECT_FEATURE = no
HAVE_VORBISENC_FEATURE = yes
HAVE_XLOG_FEATURE = yes
KBUILD_OUTPUT_SUPPORT = yes
LCM_HEIGHT = 240
LCM_WIDTH = 240
MD1_SIZE = ref:chkMDSize.pl md1
MD1_SMEM_SIZE = 0x00200000
MD2_SIZE = ref:chkMDSize.pl md2
MD2_SMEM_SIZE = 0x00200000
MTK_2IN1_SPK_SUPPORT = no
MTK_2SDCARD_SWAP = no
MTK_AAL_SUPPORT = no
MTK_ACMT_DEBUG = no
MTK_ACWFDIALOG_APP = no
MTK_AGPS_APP = yes
MTK_ANDROIDFACTORYMODE_APP = yes
MTK_API_CHECK = yes
MTK_APKINSTALLER_APP = yes
MTK_APPGUIDE_APP = no
MTK_AP_SPEECH_ENHANCEMENT = no
MTK_ASD_SUPPORT = yes
MTK_ASF_PLAYBACK_SUPPORT = no
MTK_ATV_CHIP = #MTK_MT5193
MTK_AUDENH_SUPPORT = no
MTK_AUDIOPROFILE_SELECT_MMS_RINGTONE_SUPPORT = no
MTK_AUDIO_ADPCM_SUPPORT = yes
MTK_AUDIO_APE_SUPPORT = yes
MTK_AUDIO_BLOUD_CUSTOMPARAMETER_REV = MTK_AUDIO_BLOUD_CUSTOMPARAMETER_V4
MTK_AUDIO_HD_REC_SUPPORT = yes
MTK_AUDIO_PROFILES = yes
MTK_AUDIO_RAW_SUPPORT = yes
MTK_AUD_LOCK_MD_SLEEP_SUPPORT = no
MTK_AUTOIP_SUPPORT = no
MTK_AUTORAMA_SUPPORT = no
MTK_AUTO_DETECT_ACCELEROMETER = no
MTK_AUTO_DETECT_MAGNETOMETER = no
MTK_AVI_PLAYBACK_SUPPORT = yes
MTK_BACKUPANDRESTORE_APP = no
MTK_BAIDU_LOCATION_SUPPORT = no
MTK_BAIDU_MAP_SUPPORT = no
MTK_BAIDU_SEARCH_BAR_SUPPORT = no
MTK_BEAM_PLUS_SUPPORT = no
MTK_BENCHMARK_BOOST_TP = no
MTK_BICR_SUPPORT = yes
MTK_BIP_SCWS = no
MTK_BQ24158_SUPPORT = no
MTK_BQ27541_SUPPORT = no
MTK_BRANCH = MAIN2.1
MTK_BRAZIL_CUSTOMIZATION = no
MTK_BRAZIL_CUSTOMIZATION_CLARO = no
MTK_BRAZIL_CUSTOMIZATION_TIM = no
MTK_BRAZIL_CUSTOMIZATION_VIVO = no
MTK_BSP_PACKAGE = no
MTK_BT_21_SUPPORT = yes
MTK_BT_30_HS_SUPPORT = no
MTK_BT_30_SUPPORT = yes
MTK_BT_40_LE_STANDALONE = no
MTK_BT_40_SUPPORT = no
MTK_BT_CHIP = MTK_CONSYS_MT6572
MTK_BT_FM_OVER_BT_VIA_CONTROLLER = no
MTK_BT_POWER_EFFICIENCY_ENHANCEMENT = yes
MTK_BT_PROFILE_A2DP = yes
MTK_BT_PROFILE_AVRCP = yes
MTK_BT_PROFILE_AVRCP13 = no
MTK_BT_PROFILE_AVRCP14 = no
MTK_BT_PROFILE_BIP = no
MTK_BT_PROFILE_BPP = no
MTK_BT_PROFILE_DUN = no
MTK_BT_PROFILE_FTP = no
MTK_BT_PROFILE_HFP = yes
MTK_BT_PROFILE_HIDH = yes
MTK_BT_PROFILE_MANAGER = yes
MTK_BT_PROFILE_MAPC = no
MTK_BT_PROFILE_MAPS = no
MTK_BT_PROFILE_OPP = yes
MTK_BT_PROFILE_PAN = yes
MTK_BT_PROFILE_PBAP = yes
MTK_BT_PROFILE_PRXM = no
MTK_BT_PROFILE_PRXR = no
MTK_BT_PROFILE_SIMAP = no
MTK_BT_PROFILE_SPP = yes
MTK_BT_PROFILE_TIMEC = no
MTK_BT_PROFILE_TIMES = no
MTK_BT_SUPPORT = yes
MTK_BUILD_VERNO = ALPS.JB3.MP.V1.8
MTK_BWC_SUPPORT = yes
MTK_CACHE_MERGE_SUPPORT = no
MTK_CALENDAR_IMPORTER_APP = yes
MTK_CAMCORDER_PROFILE_MID_MP4 = no
MTK_CAMERA_APP = no
MTK_CAMERA_APP_3DHW_SUPPORT = yes
MTK_CAMERA_BSP_SUPPORT = yes
MTK_CDS_EM_SUPPORT = yes
MTK_CELL_BROADCAST_RECEIVER_SUPPORT = no
MTK_CHIP_VER = S01
MTK_CHKIMGSIZE_SUPPORT = yes
MTK_CMAS_SUPPORT = no
MTK_CMCC_MOBILEMARKET_SUPPORT = no
MTK_CMMB_CHIP =
MTK_COMBO_CHIP = MT6572_CONSYS
MTK_COMBO_CORE_DUMP_SUPPORT = no
MTK_COMBO_NAND_SUPPORT = no
MTK_COMBO_QUICK_SLEEP_SUPPORT = no
MTK_COMBO_SUPPORT = yes
MTK_CPU = arm_cortexa7
MTK_CTA_SET = no
MTK_CTA_SUPPORT = no
MTK_CTPPPOE_SUPPORT = no
MTK_DATADIALOG_APP = no
MTK_DATAREG_APP = no
MTK_DATAUSAGELOCKSCREENCLIENT_SUPPORT = no
MTK_DATAUSAGE_SUPPORT = no
MTK_DATA_TRANSFER_APP = yes
MTK_DDR3_SUPPORT = no
MTK_DEDICATEDAPN_SUPPORT = no
MTK_DEFAULT_DATA_OFF = no
MTK_DENA_MINIROSANGUO_APP = no
MTK_DENA_MOBAGE_APP = no
MTK_DHCPV6C_WIFI = yes
MTK_DIALER_SEARCH_SUPPORT = yes
MTK_DIGITAL_MIC_SUPPORT = no
MTK_DISABLE_EFUSE = no
MTK_DISABLE_POWER_ON_OFF_VOLTAGE_LIMITATION = no
MTK_DISPLAY_HIGH_RESOLUTION = no
MTK_DITHERING_SUPPORT = no
MTK_DM_APP = no
MTK_DM_ENTRY_DISPLAY = no
MTK_DP_FRAMEWORK = yes
MTK_DRM_APP = yes
MTK_DSPIRDBG = no
MTK_DT_SUPPORT = no
MTK_DUAL_MIC_SUPPORT = no
MTK_EAP_SIM_AKA = yes
MTK_EMMC_DISCARD = no
MTK_EMMC_SUPPORT = yes
MTK_EMMC_SUPPORT_OTP = no
MTK_EMULATOR_SUPPORT = no
MTK_ENABLE_MD1 = yes
MTK_ENABLE_MD2 = no
MTK_ENABLE_VIDEO_EDITOR = no
MTK_ENGINEERMODE_APP = yes
MTK_ENGINEERMODE_INTERNAL_APP = yes
MTK_ENS_SUPPORT = no
MTK_ETWS_SUPPORT = no
MTK_FACEBEAUTY_SUPPORT = no
MTK_FACTORY_MODE_IN_GB2312 = yes
MTK_FAN5405_SUPPORT = no
MTK_FASTBOOT_SUPPORT = yes
MTK_FAT_ON_NAND = no
MTK_FD_FORCE_REL_SUPPORT = yes
MTK_FD_SUPPORT = yes
MTK_FENCE_SUPPORT = yes
MTK_FILEMANAGER_APP = yes
MTK_FIRST_MD = 1
MTK_FLIGHT_MODE_POWER_OFF_MD = yes
MTK_FLV_PLAYBACK_SUPPORT = yes
MTK_FMRADIO_APP = no#yes
MTK_FM_50KHZ_SUPPORT = no
MTK_FM_CHIP = #MT6627_FM
MTK_FM_RECORDING_SUPPORT = no#yes
MTK_FM_RX_AUDIO = FM_DIGITAL_INPUT
MTK_FM_RX_SUPPORT = no#yes
MTK_FM_SHORT_ANTENNA_SUPPORT = no
MTK_FM_SUPPORT = no#yes
MTK_FM_TX_AUDIO = FM_ANALOG_OUTPUT
MTK_FM_TX_SUPPORT = no
MTK_FOTA_ENTRY = no
MTK_FOTA_SUPPORT = no
MTK_FSCK_MSDOS_MTK = no
MTK_GALLERY3D_APP = yes
MTK_GALLERY_APP = yes
MTK_GAMELOFT_AVENGERS_ULC_CN_APP = no
MTK_GAMELOFT_AVENGERS_ULC_WW_APP = no
MTK_GAMELOFT_GLL_CN_APP = no
MTK_GAMELOFT_GLL_ULC_CN_APP = no
MTK_GAMELOFT_GLL_ULC_WW_APP = no
MTK_GAMELOFT_GLL_WW_APP = no
MTK_GAMELOFT_LBC_CN_APP = no
MTK_GAMELOFT_LBC_ULC_CN_APP = no
MTK_GAMELOFT_LBC_ULC_WW_APP = no
MTK_GAMELOFT_LBC_WW_APP = no
MTK_GAMELOFT_SD_CN_APP = no
MTK_GAMELOFT_SD_WW_APP = no
MTK_GAMELOFT_WONDERZOO_ULC_CN_APP = no
MTK_GAMELOFT_WONDERZOO_ULC_WW_APP = no
MTK_GEMINI_3G_SWITCH = no
MTK_GEMINI_3SIM_SUPPORT = no
MTK_GEMINI_4SIM_SUPPORT = no
MTK_GEMINI_ENHANCEMENT = yes
MTK_GEMINI_SMART_3G_SWITCH = 0
MTK_GOOGLEOTA_SUPPORT = no
MTK_GPS_CHIP = MTK_GPS_MT6572
MTK_GPS_SUPPORT = yes
MTK_GPU_CHIP = MALI400MP1
MTK_GPU_SUPPORT = yes
MTK_HDMI_SUPPORT = no
MTK_HDR_SUPPORT = no
MTK_HEADSET_ICON_SUPPORT = no
MTK_HIGH_QUALITY_THUMBNAIL = yes
MTK_HWC_SUPPORT = yes
MTK_HWC_VERSION = 1.0
MTK_HW_ENHANCE = no
MTK_IMAGE_LARGE_MEM_LIMIT = no
MTK_IMEI_LOCK = no
MTK_IME_ARABIC_SUPPORT = no
MTK_IME_ENGLISH_SUPPORT = yes
MTK_IME_FRENCH_SUPPORT = no
MTK_IME_GERMAN_SUPPORT = no
MTK_IME_HANDWRITING_ENGINE = none
MTK_IME_HANDWRITING_SUPPORT = no
MTK_IME_HINDI_SUPPORT = no
MTK_IME_INDONESIAN_SUPPORT = no
MTK_IME_INPUT_ENGINE = none
MTK_IME_ITALIAN_SUPPORT = no
MTK_IME_MALAY_SUPPORT = no
MTK_IME_PINYIN_SUPPORT = yes
MTK_IME_PORTUGUESE_SUPPORT = no
MTK_IME_RUSSIAN_SUPPORT = no
MTK_IME_SPANISH_SUPPORT = no
MTK_IME_STROKE_SUPPORT = no
MTK_IME_SUPPORT = no
MTK_IME_THAI_SUPPORT = no
MTK_IME_TURKISH_SUPPORT = no
MTK_IME_VIETNAM_SUPPORT = no
MTK_IME_ZHUYIN_SUPPORT = yes
MTK_INCLUDE_MODEM_DB_IN_IMAGE = yes
MTK_INPUTMETHOD_PINYINIME_APP = no
MTK_INTERNAL = no
MTK_INTERNAL_LANG_SET = no
MTK_ION_SUPPORT = yes
MTK_IPOH_SUPPORT = yes
MTK_IPO_SUPPORT = yes
MTK_IPV6_SUPPORT = yes
MTK_IPV6_TETHER_NDP_MODE = no
MTK_IPV6_TETHER_PD_MODE = no
MTK_ISMS_SUPPORT = no
MTK_KERNEL_POWER_OFF_CHARGING = yes
MTK_LAUNCHERPLUS_APP = no
MTK_LAUNCHER_ALLAPPSGRID = no
MTK_LAUNCHER_UNREAD_SUPPORT = yes
MTK_LAUNCH_TIME_OPTIMIZE = yes
MTK_LCA_RAM_OPTIMIZE = no
MTK_LCA_ROM_OPTIMIZE = no
MTK_LCA_SUPPORT = no
MTK_LCEEFT_SUPPORT = yes
MTK_LCM_PHYSICAL_ROTATION = 0
MTK_LIVEWALLPAPER_APP = yes
MTK_LOCKSCREEN_TYPE = 1
MTK_LOG2SERVER_APP = no
MTK_LOG2SERVER_INTERNAL = no
MTK_M4U_SUPPORT = yes
MTK_MASS_STORAGE = yes
MTK_MATV_ANALOG_SUPPORT = no
MTK_MATV_SERIAL_IF_SUPPORT = no #yes
MTK_MAV_PLAYBACK_SUPPORT = no
MTK_MAV_SUPPORT = no
MTK_MD1_SUPPORT = 3
MTK_MD2_SUPPORT = 4
MTK_MDLOGGER_SUPPORT = yes
MTK_MDM_APP = no
MTK_MDM_FUMO = no
MTK_MDM_LAWMO = no
MTK_MDM_SCOMO = no
MTK_MD_SHUT_DOWN_NT = yes
MTK_MEDIA3D_APP = no
MTK_MEMORY_COMPRESSION_SUPPORT = no
MTK_MEM_PRESERVED_MODE_ENABLE = no
MTK_MERGE_INTERFACE_SUPPORT = yes
MTK_MMPROFILE_SUPPORT = no
MTK_MMUMAP_SUPPORT = no
MTK_MODEM_SUPPORT = modem_3g
MTK_MT519X_FM_SUPPORT = no
MTK_MT8193_HDCP_SUPPORT = no
MTK_MT8193_HDMI_SUPPORT = no
MTK_MT8193_NFI_SUPPORT = no
MTK_MT8193_SUPPORT = no
MTK_MTKLOGGER_SUPPORT = yes
MTK_MTKPS_PLAYBACK_SUPPORT = no
MTK_MULTIBRIDGE_SUPPORT = no
MTK_MULTISIM_RINGTONE_SUPPORT = no
MTK_MULTI_STORAGE_SUPPORT = yes
MTK_MUSIC_LRC_SUPPORT = no
MTK_MVNO_SUPPORT = yes
MTK_NAND_PAGE_SIZE = 4K
MTK_NAND_UBIFS_SUPPORT = no
MTK_NATIVE_3D_SUPPORT = no
MTK_NATIVE_FENCE_SUPPORT = no
MTK_NEON_SUPPORT = yes
MTK_NETWORK_TYPE_ALWAYS_ON = no
MTK_NETWORK_TYPE_DISPLAY = no
MTK_NEW_IPTABLES_SUPPORT = yes
MTK_NFC_ADDON_SUPPORT = no
MTK_NFC_APP_SUPPORT = no
MTK_NFC_FW_MSR3110 = no
MTK_NFC_FW_MT6605 = no
MTK_NFC_MSR3110 = no
MTK_NFC_MT6605 = no
MTK_NFC_SE_NUM =
MTK_NFC_SUPPORT = no
MTK_NOTEBOOK_SUPPORT = no
MTK_NVRAM_SECURITY = no
MTK_OGM_PLAYBACK_SUPPORT = no
MTK_OMACP_SUPPORT = yes
MTK_OMA_DOWNLOAD_SUPPORT = yes
MTK_OOBE_APP = no
MTK_PCB_BATTERY_SENSOR = no
MTK_PHONE_NUMBER_GEODESCRIPTION = yes
MTK_PHONE_VOICE_RECORDING = yes
MTK_PHONE_VT_MM_RINGTONE = no
MTK_PHONE_VT_VOICE_ANSWER = no
MTK_PLATFORM = MT6572
MTK_PLATFORM_OPTIMIZE = yes
MTK_POWER_SAVING_SWITCH_UI_SUPPORT = no
MTK_PQ_SUPPORT = yes
MTK_PRODUCT_INFO_SUPPORT = no
MTK_PRODUCT_LOCALES = en_US zh_CN es_ES zh_TW ru_RU pt_BR fr_FR de_DE tr_TR it_IT in_ID ms_MY vi_VN ar_EG th_TH pt_PT nl_NL el_GR hu_HU tl_PH ro_RO cs_CZ iw_IL my_MM km_KH ko_KR ldpi mdpi hdpi
MTK_QQBROWSER_SUPPORT = no
MTK_QVGA_LANDSCAPE_SUPPORT = no
MTK_RADIOOFF_POWER_OFF_MD = no
MTK_RAT_BALANCING = no
MTK_RAT_WCDMA_PREFERRED = yes
MTK_RCSE_SUPPORT = no
MTK_RELEASE_PACKAGE = rel_customer_basic rel_customer_platform rel_customer_operator_cu
MTK_RESOURCE_OPTIMIZATION =
MTK_RILD_READ_IMSI = no
MTK_RSDM_APP = no
MTK_RTP_OVER_RTSP_SUPPORT = yes
MTK_RTSP_BITRATE_ADAPTATION_SUPPORT = no
MTK_S3D_SUPPORT = no
MTK_SCOMO_ENTRY = no
MTK_SCREEN_OFF_WIFI_OFF = no
MTK_SD_REINIT_SUPPORT = no
MTK_SD_SUPPORT = yes
MTK_SEARCH_DB_SUPPORT = yes
MTK_SECURITY_SW_SUPPORT = yes
MTK_SEC_BOOT = ATTR_SBOOT_ONLY_ENABLE_ON_SCHIP
MTK_SEC_CHIP_SUPPORT = yes
MTK_SEC_MODEM_AUTH = no
MTK_SEC_MODEM_ENCODE = no
MTK_SEC_MODEM_NVRAM_ANTI_CLONE = no
MTK_SEC_SECRO_AC_SUPPORT = yes
MTK_SEC_USBDL = ATTR_SUSBDL_ONLY_ENABLE_ON_SCHIP
MTK_SEND_RR_SUPPORT = yes
MTK_SENSOR_SUPPORT = yes
MTK_SHARED_SDCARD = no
MTK_SHARE_MODEM_CURRENT = 2
MTK_SHARE_MODEM_SUPPORT = 2
MTK_SIGNATURE_CUSTOMIZATION = no
MTK_SIGNMODEM_SUPPORT = yes
MTK_SIM1_SOCKET_TYPE = 1
MTK_SIM2_SOCKET_TYPE = 1
MTK_SIM_AUTHENTICATION_SUPPORT = no
MTK_SIM_HOT_SWAP = yes
MTK_SIM_HOT_SWAP_COMMON_SLOT = no
MTK_SIM_RECOVERY = yes
MTK_SINA_WEIBO_SUPPORT = no
MTK_SINGLE_3DSHOT_SUPPORT = no
MTK_SIP_SUPPORT = no
MTK_SMARTSWITCH_SUPPORT = no
MTK_SMSREG_APP = yes
MTK_SMS_FILTER_SUPPORT = yes
MTK_SMS_NATIONAL_LANGUAGE_SUPPORT = no
MTK_SMS_TURKISH_TABLE_ALWAYS_SUPPORT = no
MTK_SNS_FACEBOOK_APP = no
MTK_SNS_FLICKR_APP = no
MTK_SNS_KAIXIN_APP = no
MTK_SNS_RENREN_APP = no
MTK_SNS_SINAWEIBO_APP = no
MTK_SNS_SINAWEIBO_TEST = no
MTK_SOUNDRECORDER_APP = no
MTK_SPECIAL_FACTORY_RESET = no
MTK_SPECIFIC_SM_CAUSE = no
MTK_SPH_EHN_CTRL_SUPPORT = yes
MTK_STEREO3D_WALLPAPER_APP = no
MTK_SUPPORT_MJPEG = yes
MTK_SWIP_AAC = no
MTK_SWIP_VORBIS = yes
MTK_SYSTEM_UPDATE_SUPPORT = yes
MTK_TB_APP_CALL_FORCE_SPEAKER_ON = no
MTK_TB_APP_LANDSCAPE_SUPPORT = no
MTK_TB_DEBUG_SUPPORT = no
MTK_TB_HW_DEBUG = no
MTK_TELEPHONY_MODE = 3
MTK_TENCENT_MOBILE_MANAGER_NORMAL_SUPPORT = no
MTK_TENCENT_MOBILE_MANAGER_SLIM_SUPPORT = no
MTK_TETHERINGIPV6_SUPPORT = yes
MTK_TETHERING_EEM_SUPPORT = no
MTK_THEMEMANAGER_APP = no
MTK_TINY_UTIL = yes
MTK_TLR_SUPPORT = no
MTK_TMP103_SUPPORT = no
MTK_TODOS_APP = no
MTK_TOUCH_PHYSICAL_ROTATION_RELATIVE_TO_LCM = 0
MTK_TTY_SUPPORT = yes
MTK_TVOUT_SUPPORT = no
MTK_UART_USB_SWITCH = yes
MTK_UMTS_TDD128_MODE = no
MTK_USB_AUDIO_SUPPORT = yes
MTK_USES_HD_VIDEO = no
MTK_USES_STAGEFRIGHT_DEFAULT_CODE = no
MTK_USES_VR_DYNAMIC_QUALITY_MECHANISM = yes
MTK_USE_ANDROID_MM_DEFAULT_CODE = no
MTK_USE_RESERVED_EXT_MEM = no
MTK_VIBSPK_SUPPORT = no
MTK_VIDEOWIDGET_APP = no
MTK_VIDEO_1080P = yes
MTK_VIDEO_FAVORITES_WIDGET_APP = no
MTK_VIDEO_THUMBNAIL_PLAY_SUPPORT = no
MTK_VLW_APP = no
MTK_VOICE_UI_SUPPORT = no
MTK_VOICE_UNLOCK_SUPPORT = yes
MTK_VSIM_AUTO_ANSWER = no
MTK_VSS_SUPPORT = no
MTK_VT3G324M_SUPPORT = yes
MTK_WAIT_SYNC_SUPPORT = no
MTK_WAPI_SUPPORT = no
MTK_WAPPUSH_SUPPORT = yes
MTK_WB_SPEECH_SUPPORT = yes
MTK_WCDMA_SUPPORT = no
MTK_WEATHER3D_WIDGET = no
MTK_WEATHER_PROVIDER_APP = no
MTK_WEATHER_WIDGET_APP = no
MTK_WEB_NOTIFICATION_SUPPORT = yes
MTK_WEEK_NO = W10.24
MTK_WFD_SUPPORT = no
MTK_WIFI_HOTSPOT_SUPPORT = yes
MTK_WIFI_P2P_SUPPORT = no
MTK_WLANBT_SINGLEANT = no
MTK_WLAN_CHIP =
MTK_WLAN_SUPPORT = yes
MTK_WML_SUPPORT = yes
MTK_WORLD_CLOCK_WIDGET_APP = yes
MTK_WPA2PSK_SUPPORT = no
MTK_WVDRM_SUPPORT = yes
MTK_YAML_SCATTER_FILE_SUPPORT = yes
MTK_YGPS_APP = yes
MTK_YMCAPROP_SUPPORT = no
MULTI_CH_PLAYBACK_SUPPORT = no
NAND_OTP_SUPPORT = no
NATIVE_AUDIO_PREPROCESS_ENABLE = yes
NO_INIT_PERMISSION_CHECK = yes
OP01_CTS_COMPATIBLE = no
OP01_CTS_COMPATIBLE_DFOSET = no
OP01_CTS_COMPATIBLE_DFOSET_VALUE = OP01_CTS_COMPATIBLE
OPTR_SPEC_SEG_DEF = NONE#OP02_SPEC0200_SEGA
PLATFORM_MTK_SDK_VERSION = 1
RESOURCE_OVERLAY_SUPPORT = generic
SUPPORT_SDCARD2 = yes
TARGET_ARCH_VARIANT = armv7-a-neon
TELEPHONY_DFOSET = no
TELEPHONY_DFOSET_VALUE = MTK_DT_SUPPORT MTK_TELEPHONY_MODE MTK_SHARE_MODEM_SUPPORT MTK_SHARE_MODEM_CURRENT MTK_ENABLE_MD1 MTK_ENABLE_MD2 MTK_FIRST_MD
USE_OPENGL_RENDERER = true
WIFI_WEP_KEY_ID_SET = no
WIFI_WPS_PIN_FROM_AP = no
Did any of you already used this Different Config Settings to Build the Kernel ?
What firmware are you using to pull from?

How to go about patching the kernel to get EHCI(USB 2.0) devices to behave like xHCI?

Basically, there has been an app ported to Android that allows even unrooted(stock) devices to deliver a bootrom exploit to the Nintendo Switch via USB-OTG and a USB cable (or C-to-C). USB 3.0 (xHCI) devices have no issues and deliver the exploit just fine. Apparently it is not even a USB 2.0 problem but rather how the EHCI performs, as certain USB 2.0 phones actually have the xHCI controller and can run the exploit just fine. What happens is that although it can detect the connected Switch in Tegra Recovery Mode, it just doesn't do anything and gives an error in the logs, "SUMBITURB failed".
On Linux desktop systems it is similar, but the exploit can still work with a kernel patch provided by a hacking group that discovered the exploit in the first place:
Code:
--- linux-4.14.27/drivers/usb/host/ehci-hcd.c.old 2018-04-17 18:00:00.000000000 +0000
+++ linux-4.14.27/drivers/usb/host/ehci-hcd.c 2018-04-17 18:00:00.000000000 +0000
@@ -873,14 +873,6 @@
INIT_LIST_HEAD (&qtd_list);
switch (usb_pipetype (urb->pipe)) {
- case PIPE_CONTROL:
- /* qh_completions() code doesn't handle all the fault cases
- * in multi-TD control transfers. Even 1KB is rare anyway.
- */
- if (urb->transfer_buffer_length > (16 * 1024))
- return -EMSGSIZE;
- /* FALLTHROUGH */
- /* case PIPE_BULK: */
default:
if (!qh_urb_transaction (ehci, urb, &qtd_list, mem_flags))
return -ENOMEM;
The author of the Android port had also written a Python "hotpatch" script for desktop Linux systems:
Code:
#!/usr/bin/env python3
import os
"""
Cursed Code.
This code literally patches your kernel memory, proceed at your own risk.
Tested on Ubuntu 17.10 and Arch, x86_64. Should work on other distros, maybe even other architectures!
Run fusee-launcher.py with the "--override-checks" argument.
If you'd rather patch your drivers properly:
https://github.com/fail0verflow/shofel2/blob/master/linux-ehci-enable-large-ctl-xfers.patch
"""
ksyms = {
line[2]: int(line[0], 16)
for line in
map(lambda l: l.strip().split(),
open("/proc/kallsyms", "r").readlines())}
print(hex(ksyms["ehci_urb_enqueue"]))
patch_c = """
#include <linux/module.h>
#include <linux/kernel.h>
#include <asm/pgtable.h>
static u32 ORIG_MAX = 16*1024;
static u32 NEW_MAX = 0x1000000;
/* borrowed from MUSL because I'm lazy AF */
static char *fourbyte_memmem(const unsigned char *h, size_t k, const unsigned char *n)
{
uint32_t nw = n[0]<<24 | n[1]<<16 | n[2]<<8 | n[3];
uint32_t hw = h[0]<<24 | h[1]<<16 | h[2]<<8 | h[3];
for (h+=3, k-=3; k; k--, hw = hw<<8 | *++h)
if (hw == nw) return (char *)h-3;
return 0;
}
static pte_t* (*lookup_addr)(unsigned long, unsigned int*) = (void *) PLACE2;
static void set_addr_rw(unsigned long addr) {
unsigned int level;
pte_t *pte = lookup_addr(addr, &level);
set_pte_atomic(pte, pte_mkwrite(*pte));
}
int init_module(void) {
void * ehci_urb_enqueue_start = (void *) PLACEHOLDER;
u32 * patch_addr;
printk(KERN_INFO "Patch module loaded\\n");
patch_addr = (u32 *) fourbyte_memmem(ehci_urb_enqueue_start, 0x400, (void *)&ORIG_MAX);
if (patch_addr == NULL) {
printk(KERN_INFO "Failed to find patch site :(\\n");
return -1;
}
printk(KERN_INFO "patch_addr: 0x%px\\n", patch_addr);
set_addr_rw((unsigned long)patch_addr);
*patch_addr = NEW_MAX;
printk(KERN_INFO "Patching done!\\n");
return -1;
}
""".replace("PLACEHOLDER", hex(ksyms["ehci_urb_enqueue"])).replace("PLACE2", hex(ksyms["lookup_address"]))
makefile = """
obj-m += patch.o
all:
make -C /lib/modules/$(shell uname -r)/build M=$(PWD) modules
"""
with open("patch.c", "w") as patchfile:
patchfile.write(patch_c)
with open("Makefile", "w") as mf:
mf.write(makefile)
os.system("make")
print("About to insert patch module, 'Operation not permitted' means it probably worked, check dmesg output.")
os.system("insmod patch.ko")
I tried to see if running it in Termux would do anything but I got the following error:
Code:
0x0
Traceback (most recent call last):
File "ehci_patch.py", line 70, in <module>
" " ".replace("PLACEHOLDER", hex(ksyms["ehci_urb_enqueue"])).replace("PLACE2" hex(ksyms["lookup_address"]))
KeyError: 'lookup_address'
I know that script isn't meant for use on Android anyway but maybe it can lead to a solution. The author of it does not know how to go about it at this time either, but believes an entire recompile of the kernel would be necessary. I am hoping that something like a systemless Magisk module would be the easiest solution for users but do not know if that is possible. I am only guessing it might be possible to create a Magisk module because of audio drivers like VIPER4Android. If indeed a custom kernel is needed, does anyone know how to go about it? It could be difficult to implement for everyone because not everyone has a device where the source to the kernel is available, etc. I am willing, however, to test anything on my tablet which is USB 2.0 and gives the error in the app. Any advice for how to go about this will be greatly appreciated.
I feel ya man, i need this stuff too. NXLoader doesn't work on my Galaxy Grand Prime (G530T) and i really need it to Dx

Amlogic .dts editing for LED light

I've got an s905x Amlogic box running SlimBox but the LED light is always on and it's very distracting.
I've extracted the .dts from the original Android 6 .dtb and want to edit SlimBox Android 9 .dts to add proper LED support.
Original Android 6 .dts:
Code:
ledlight {
compatible = "amlogic, ledlight";
dev_name = "ledlight";
status = "okay";
power_gpio_0 = <0x70>;
power_gpio_1 = <0x71>;
power_gpio_g {
led_name = "power_led";
led_gpio = <0x20 0x49 0x0>;
led_active = <0x1>;
led_type = [47 00];
linux,phandle = <0x70>;
phandle = <0x70>;
};
power_gpio_r {
led_name = "power_led";
led_gpio = <0x69 0x6 0x0>;
led_active = <0x1>;
led_type = [52 00];
linux,phandle = <0x71>;
phandle = <0x71>;
};
};
SlimBox Android 9 .dts:
Code:
sysled {
compatible = "amlogic, sysled";
dev_name = "sysled";
status = "okay";
led_gpio = <0x11 0x49 0x0>;
led_active_low = <0x1>;
};
Any ideas?
Hello.
I am also interested in learning how to control the led.
Greetings.
Hello.
I have tried the Khadas Rom from Supurceleron SC_VIM2_USER_NORMAL-v2.0-20210315.img and the definition for the led is the same as in Slimbox android 9. But from the khadas settings you can control the behavior of the LED, always on, always off and flash mode.
So even though the definition in the android 9 .dts is like this, you can somehow control the behavior of the LED, but it's beyond my knowledge.
Greetings.

Categories

Resources