Fex Guide

FEX Description
A FEX file defines various aspects of how the SoC works. It configures the GPIO pins and sets up DRAM, Display, etc parameters. It is Allwinners predecessor for the devicetree.

Each line consists of a key = value pair combination under a [sectionheader]. All three, [sectionheader], key and value are case-sensitive. For comments a semi-colon (;) is used and everything following a semi-colon is ignored. The chip does not parse a textual version of a fex file, it gets cleaned and compiled by a fex-compiler. A reverse engineerd open source version exists in the sunxi-tools repository. Also a de-compiler which takes a binary script.bin and creates a textual script.fex. Usually, script.bin can be found on the nanda boot partition on A10 devices.

Port Definitions
Description of the GPIO configuration in the form:


 * port: 

where:


 *   is the port to configure (ie. PH15)


 *   is the function to configure the port for, mux 0 is as input, mux 1 as output and for 2-7 see A10/PIO, A13/PIO, or A20/PIO for details.


 *  is 0 = disabled; 1 = pullup enabled; 2 = pulldown enabled (only valid when port is an input)


 *   defines the output drive in mA, values are 0-3 corresponding to 10mA, 20mA, 30mA and 40mA.


 *   sets the initial output level for the port; 0 = low; 1 = high (only valid for outputs)

The  and can be set to which means don't change. Any trailing options can be omitted.

This can also be used to specify various pins on the AXP PMIC. The syntax is "power:portN".

[product]
Product version and description. It seems all fex files at this moment are at version 1.0 and use the default evaluation board name. It doesn't appear to be used internally, but requires further investigation.

 [product] version = "1.0" machine = "A10-EVB-V1.2"
 * version: string indicating fex file version.
 * machine: string indicating the board name. "A10-EVB-V1.2" appears to be a common one, seemingly to refer to the A10 Evaluation board v1.2.

[target]
Configuration items to configure the meaning of
 * boot_clock: Initial boot frequency in MHz.
 * dcdc2_vol: Dcdc2 output voltage in mV.
 * dcdc3_vol: Dcdc3 output voltage in mV.
 * ldo2_vol: Ldo2 output voltage in mV.
 * ldo3_vol: Ldo3 output voltage in mV.
 * ldo4_vol: Ldo4 output voltage in mV.
 * power_start: 0 or 1.
 * storage_type: 0 = nand, 1 = SDCard, 2 = SPI-nor

Configuration example:  [target] boot_clock = 1008 dcdc2_vol = 1400 dcdc3_vol = 1250 ldo2_vol = 3000 ldo3_vol = 2800 ldo4_vol = 2800 pll4_freq = 960 pll6_freq = 960 power_start = 1 storage_type = 0

[card_burn_para]
Configuration example:  [card_burn_para] card_no = 0 card_line = 4 card_mode = 0 sdc_d1 = port:PF00<2><1> sdc_d0 = port:PF01<2><1> sdc_clk = port:PF02<2><1> sdc_cmd = port:PF03<2><1> sdc_d3 = port:PF04<2><1> sdc_d2 = port:PF05<2><1>

[card_boot]

 * logical_start: logical starting address when booting from SD-Card.
 * sprite_gpio0:

Configuration example:  [Card_boot] logical_start = 40960 sprite_gpio0 =

[card_boot0_para]

 * card_ctrl: card controller to be used
 * card_high_speed: 0 for low speed, 1 for high-speed
 * card_line: Number of card data lines
 * sdc_ cmd: SD-Card command signals GPIO configuration
 * sdc_ clk: SD-Card clock signal GPIO configuration
 * sdc_ d0: SD-Card data 0 line signal GPIO configuration
 * sdc_ d1: SD-Card data 1 line signal GPIO configuration
 * sdc_d2: SD-Card data 2 line signal GPIO configuration
 * sdc_d3: SD-Card data 3 line signal GPIO configuration

Configuration example:  [card_boot0_para] card_ctrl = 0 card_high_speed = 1 card_line = 4 sdc_d1 = port:PF00<2><1> sdc_d0 = port:PF01<2><1> sdc_clk = port:PF02<2><1> sdc_cmd = port:PF03<2><1> sdc_d3 = port:PF04<2><1> sdc_d2 = port:PF05<2><1>

[card_boot2_para]

 * card_ctrl: card controller to be used
 * card_high_speed: 0 for low speed, 1 for high-speed
 * card_line: number of card data lines
 * sdc_ cmd: SD-Card command signals GPIO configuration
 * sdc_ clk: SD-Card clock signal GPIO configuration
 * sdc_ d0: SD-Card data 0 line signal GPIO configuration
 * sdc_ d1: SD-Card data 1 line signal GPIO configuration
 * sdc_d2: SD-Card data 2 line signal GPIO configuration
 * sdc_d3: SD-Card data 3 line signal GPIO configuration

Configuration example:  [card_boot2_para] card_ctrl = 2 card_high_speed = 1 card_line = 4 sdc_cmd = port:PC06<3><1> sdc_clk = port:PC07<3><1> sdc_d0 = port:PC08<3><1> sdc_d1 = port:PC09<3><1> sdc_d2 = port:PC10<3><1> sdc_d3 = port:PC11<3><1>

[twi_para]
twi controller to enable during/for boot.


 * twi_port: twi controller to configure
 * twi_scl: twi Serial CLock line GPIO configuration
 * twi_sda: = twi Serial DAta line GPIO configuration

Configuration example:  [twi_para] twi_port = 0 twi_scl = port:PB00<2> twi_sda = port:PB01<2>

[uart_para]
Serial port to be enabled during/for boot.


 * uart_debug_port: serial controller number
 * uart_debug_tx: serial port TX line GPIO configuration
 * uart_debug_rx: serial port RX line GPIO configuration

Configuration example:  [uart_para] uart_debug_port = 0 uart_debug_tx = port:PB22<2> uart_debug_rx = port:PB23<2>

[jtag_para]
JTAG port to be enabled during/for boot.


 * jtag_enable: 0 to disable JTAG, 1 to enable JTAG
 * jtag_ms: JTAG Test Mode Select (TMS) GPIO configuration
 * jtag_ck: JTAG Test Clock (TCK) GPIO configuration
 * jtag_do: JTAG Test Data Output (TDO) GPIO configuration
 * jtag_di: JTAG Test Data Input (TDI) GPIO configuration

Configuration example:  [jtag_para] jtag_enable = 1 jtag_ms = port:PB14<3> jtag_ck = port:PB15<3>default> jtag_do = port:PB16<3>default> jtag_di = port:PB17<3>default>

[system]

 * recovery_key: recovery key GPIO configuration

Configuration example:  recovery_key = port:PH16<0><1>

[gpio_para]

 * gpio_used: 0 to disable; 1 to enable
 * gpio_num: number mapped GPIO's
 * gpio_pin_1: first GPIO pin

Configuration example:  gpio_used = 0 gpio_num = 4 gpio_pin_1 = port:PH10<1> <0> gpio_pin_2 = port:PH20<1>  <0> gpio_pin_3 = port:PB03<0>   gpio_pin_4 = port:PH22<1>  <0>

[gpio_init]

 * pin_1: Initial pin 1 GPIO configuration

Configuration example:  pin_1 = port:PH10<1> <0> pin_2 = port:PH20<1>  <0>

[dram_para]
SD-Ram is usually configured via livesuit when flashing. Livesuit probes the hardware or knows about the hardware and its configuration and configures the SoC accordingly. This luxury is not available from Linux and thus sdram parameters have to be set up by hand.


 * dram_baseaddr: DRAM physical start address, fixed at 0x40000000
 * dram_clk: DRAM clock frequency in MHz; it must be an integer multiple of 24, minimally 120, maximally 480 MHz
 * dram_type: DRAM type; Set to 2 for DDR2; 3 for DDR3
 * dram_rank_num: DRAM chip select; 1 is a chip select; 2 election for two tablets
 * dram_chip_density: monolithic DRAM capacity in Mbit
 * dram_io_width: monolithic DRAM bus width in bits
 * dram_bus_width: DRAM bus width in bits, such as two 16-bit DRAM banks make up a 32 bit bus width
 * dram_cas: DRAM CAS latency
 * dram_zq: DRAM controller internal parameters
 * dram_odt_en: ODT 0 to disable; 1 to enable
 * dram_size: DRAM total capacity in MB
 * dram_tpr0: DRAM controller internal parameter
 * dram_tpr1: DRAM controller internal parameter
 * dram_tpr2: DRAM controller internal parameter
 * dram_tpr3: DRAM controller internal parameter
 * dram_tpr4: DRAM controller internal parameter
 * dram_tpr5: DRAM controller internal parameter
 * dram_emr1: DRAM controller internal parameter
 * dram_emr2: DRAM controller internal parameter
 * dram_emr3: DRAM controller internal parameter

Configuration example:  [dram_para] dram_baseaddr = 0x40000000 dram_clk = 360 dram_type = 3 dram_rank_num = 1 dram_chip_density = 2048 dram_io_width = 16 dram_bus_width = 32 dram_cas = 6 dram_zq = 0x7b dram_odt_en = 0 dram_size = 512 dram_tpr0 = 0x30926692 dram_tpr1 = 0x1090 dram_tpr2 = 0x1a0c8 dram_tpr3 = 0x0 dram_tpr4 = 0x0 dram_tpr5 = 0x0 dram_emr1 = 0x0 dram_emr2 = 0x0 dram_emr3 = 0x0

mali configuration
Mali is the name of the GPU on the A10, A10s, A13, A20, A23, and A33 SoC's

[mali_para]

 * mali_used: 0 to disable; 1 to enable Mali module
 * mali_clkdiv: Mali clock divisor. Clock is obtained by devising PLL4 with mali_clkdiv

Configuration example: <pre class="brush: ini"> [mali_para] mali_used = 1 mali_clkdiv = 3

[g2d_para]
G2D is the 2D graphic display engine on the Allwinner SoC


 * g2d_used: 0 to disable; 1 to enable the g2d module
 * g2d_size: memory size for g2d

<pre class="brush: ini"> g2d_used = 1 g2d_size = 0x1000000

[emac_para]
Ethernet configuration for the integrated ethernet IP. It still requires an external PHY


 * emac_used: 0 to disable; 1 to enable the ethernet MAC
 * emac_rxd0: RX data line 0 GPIO configuration
 * emac_rxd1: RX data line 1 GPIO configuration
 * emac_rxd2: RX data line 2 GPIO configuration
 * emac_rxd3: RX data line 3 GPIO configuration
 * emac_txd0: TX data line 0 GPIO configuration
 * emac_txd1: TX data line 1 GPIO configuration
 * emac_txd2: TX data line 2 GPIO configuration
 * emac_txd3: TX data line 3 GPIO configuration
 * emac_rxclk: RX clock GPIO configuration
 * emac_rxerr: RX error GPIO configuration
 * emac_rxdV: RX enabled GPIO configuration
 * emac_mdc: MII clock GPIO configuration
 * emac_mdio: MII data I/O GPIO configuration
 * emac_txen: TX enabled GPIO configuration
 * emac_txclk: TX clock GPIO configuration
 * emac_crs: Carrier Status of GPIO configuration
 * emac_col: Collision Detection GPIO configuration
 * emac_reset: PHY reset signal GPIO configuration
 * emac_power:
 * emac_link:

Configuration example: <pre class="brush: ini"> [Emac_para] emac_used = 1 emac_rxd3 = port:PA00<2> emac_rxd2 = port:PA01<2> emac_rxd1 = port:PA02<2> emac_rxd0 = port:PA03<2> emac_txd3 = port:PA04<2> emac_txd2 = port:PA05<2> emac_txd1 = port:PA06<2> emac_txd0 = port:PA07<2> emac_rxclk = port:PA08<2> emac_rxerr = port:PA09<2> emac_rxdV = port:PA10<2> emac_mdc = port:PA11<2> emac_mdio = port:PA12<2> emac_txen = port:PA13<2> emac_txclk = port:PA14<2> emac_crs = port:PA15<2> emac_col = port:PA16<2> emac_reset = port:PA17<1>

[twi0_para]
Two Wire Interface (i²c) configuration for TWI port 0


 * twi0_used: 0 to disable; 1 to enable
 * twi0_scl: TWI Serial CLock GPIO configuration
 * twi0_sda: TWI Serial Data GPIO configuration

Configuration example: <pre class="brush: ini"> [twi0_para] twi0_used = 1 twi0_scl = port:PB00<2> twi0_sda = port:PB01<2>

[twi0_para]
Two Wire Interface (i²c) configuration for TWI port 1


 * twi1_used: 0 to disable; 1 to enable
 * twi1_scl: TWI Serial CLock GPIO configuration
 * twi1_sda: TWI Serial Data GPIO configuration

Configuration example: <pre class="brush: ini"> [tw1_para] twi1_used = 1 twi1_scl = port:PB18<2> twi1_sda = port:PB19<2>

[twi2_para]
Two Wire Interface (i²c) configuration for TWI port 2


 * twi2_used: 0 to disable; 1 to enable
 * twi2_scl: TWI Serial CLock GPIO configuration
 * twi2_sda: TWI Serial Data GPIO configuration

Configuration example: <pre class="brush: ini"> [twi2_para] twi2_used = 1 twi2_scl = port:PB20<2> twi2_sda = port:PB21<2>

uart configuration
Any of the 8 UART ports can be configured to be either 2 (Only TX/RX) wires, 4 wires (TX, RX, RTS and CTS) or 8 (Full function) ports.


 * uart_used: 0 to disable; 1 to enable
 * uart_port: UART port number
 * uart_type: UART type, 2, 4 or 8 wires
 * uart_tx: UART TX data line GPIO configuration
 * uart_rx: UART RX data line GPIO configuration
 * uart_rts: UART Ready to Send line GPIO configuration, only for 4 and 8 wire modes
 * uart_cts: UART Clear to Send line GPIO configuration, only for 4 and 8 wire modes
 * uart_dtr: UART Data Terminal Ready GPIO configuration, only for 8 wire modes
 * uart_dsr: UART Data Set Ready GPIO configuration, only for 8 wire modes
 * uart_dcd: UART Data Carrier Detect GPIO configuration, only for 8 wire modes
 * uart_ring: UART Ring Indicator GPIO configuration, only for 8 wire modes

[uart_para0]
Configuration example: <pre class="brush: ini"> [uart_para0] uart_used = 1 uart_port = 0 uart_tx = port:PB22<2><1> uart_rx = port:PB23<2><1>

[uart_para1]
Configuration example: <pre class="brush: ini"> [uart_para1] uart_used = 0 uart_port = 1 uart_type = 8 uart_tx = port:PA10<4><1> uart_rx = port:PA11<4><1> uart_rts = port:PA12<4><1> uart_cts = port:PA13<4><1> uart_dtr = port:PA14<4><1> uart_dsr = port:PA15<4><1> uart_dcd = port:PA16<4><1> uart_ring = port:PA17<4><1>

[uart_para2]
Configuration example: <pre class="brush: ini"> [uart_para2] uart_used = 0 uart_port = 2 uart_type = 4 uart_tx = port:PI18<3><1> uart_rx = port:PI19<3><1> uart_rts = port:PI16<3><1> uart_cts = port:PI17<3><1>

[uart_para3]
Configuration example: <pre class="brush: ini"> [uart_para3] uart_used = 0 uart_port = 3 uart_type = 4 uart_tx = port:PH00<4><1> uart_rx = port:PH01<4><1> uart_rts = port:PH02<4><1> uart_cts = port:PH03<4><1>

[uart_para4]
Configuration example: <pre class="brush: ini"> [Uart_para4] uart_used = 0 uart_port = 4 uart_type = 2 uart_tx = port:PH04<4><1> uart_rx = port:PH05<4><1>

[uart_para5]
Configuration example: <pre class="brush: ini"> [uart_para5] uart_used = 0 uart_port = 5 uart_type = 2 uart_tx = port: PH06<4><1> uart_rx = port: PH07<4><1>

[uart_para6]
Configuration example: <pre class="brush: ini"> [uart_para6] uart_used = 0 uart_port = 6 uart_type = 2 uart_tx = port:PA12<4><1> uart_rx = port:PA13<4><1>

[uart_para7]
Configuration example: <pre class="brush: ini"> [uart_para7] uart_used = 0 uart_port = 7 uart_type = 2 uart_tx = port:PA14<4><1> uart_rx = port:PA15<4><1>

spi configuration

 * spi_used: 0 to disable; 1 to enable
 * spi_cs_bitmap: 1 use cs0, 2 use cs1, 3 use cs0 & cs1
 * spi_cs0: Chip Select bit 0 GPIO configuration
 * spi_cs1: Chip Select bit 1 GPIO configuration
 * spi_sclk: clock GPIO configuration
 * spi_mosi: MOSI GPIO configuration
 * spi_miso: MISO GPIO configuration

[spi0_para]
Configuration example 1: <pre class="brush: ini"> [spi0_para] spi_used = 0 spi_cs_bitmap = 1 spi_cs0 = port:PI10<3> spi_sclk = port:PI11<3> spi_mosi = port:PI12<3> spi_miso = port:PI13<3> spi_cs1 = port:PI14<3>

Configuration example 2: <pre class="brush: ini"> [spi0_para] spi_used = 0 spi_cs_bitmap = 1 spi_mosi = port:PC00<3> spi_miso = port:PC01<3> spi_sclk = port:PC02<3> spi_cs0 = port:PC23<3>

[spi1_para]
Configuration example 1: <pre class="brush: ini"> [spi1_para] spi_used = 0 spi_cs_bitmap = 1 spi_cs0 = port:PA00<3> spi_sclk = port:PA01<3> spi_mosi = port:PA02<3> spi_miso = port:PA03<3> spi_cs1 = port:PA04<3> Configuration example 2: <pre class="brush: ini"> [spi1_para] spi_used = 0 spi_cs_bitmap = 1 spi_cs1 = port:PI15<2> spi_cs0 = port:PI16<2> spi_sclk = port:PI17<2> spi_mosi = port:PI18<2> spi_miso = port:PI19<2>

[spi2_para]
Configuration example 1: <pre class="brush: ini"> [spi2_para] spi_used = 0 spi_cs_bitmap = 1 spi_cs1 = port:PB13<3> spi_cs0 = port:PB14<3> spi_sclk = port:PB15<3> spi_mosi = port:PB16<3> spi_miso = port:PB17<3> Configuration example 2: <pre class="brush: ini"> [spi2_para] spi_used = 0 spi_cs_bitmap = 1 spi_cs0 = port:PC19<3> spi_sclk = port:PC20<3> spi_mosi = port:PC21<3> spi_miso = port:PC23<3>

[spi3_para]
Configuration example: <pre class="brush: ini"> [spi3_para] spi_used = 0 spi_cs_bitmap = 1 spi_cs0 = port:PA05<3> spi_sclk = port:PA06<3> spi_mosi = port:PA07<3> spi_miso = port:PA08<3> spi_cs1 = port:PA09<3>

[spi_devices]

 * spi_dev_num: number of external SPI devices connected to the SoC. For each external SPI device N, a board define [spi_boardM] with M = N - 1 needs to be created

[spi_board0]

 * modalias: Alias
 * '''max_speed_hz: Maximum speed in Hz
 * bus_num: Bus number of SPI controller
 * mode: SPI mode, bitfield defined in spi.h
 * full_duplex: 0 for half-duplex; 1 for full-duplex mode
 * manual_cs: manually control Chip Select level (unsupported for now)
 * irq_gpio: Some SPI boards should need a IRQ to work properly and register the irq handler inside the device driver

Configuration example: <pre class="brush: ini"> [spi_board0] modalias = "External SPI connection" max_speed_hz = 12000000 bus_num = 1 chip_select = 0 mode = 3 full_duplex = 0 manual_cs = 0 irq_gpio = 1

[gpio_para] gpio_used = 1 gpio_num = 1 gpio_pin_1 = port:PB04<6>

[rtp_para]

 * rtp_used: 0 to disable; 1 to enable
 * rtp_screen_size: diagonal screen size rounded to full inches
 * rtp_regidity_level: touchscreen regidty in 10 ms units
 * rtp_press_threshold_enable: 0 to disable; 1 to enable
 * rtp_press_threshold: defines the press-threshold sensitivity; (0x0 is least sensitive, 0xffffff is most sensitive) using TP Pressure Management threshold control (PRE_MEA_THRE_CNT register in A20 User Manual)
 * rtp_sensitive_level: defines the sensitivity (0x0 is least sensitive, 0xf is most sensitive) using internal pull-up resistor control (TP_SENSITIVE_ADJUST register in A20 User Manual)
 * rtp_exchange_x_y_flag: 0 for normal operation; 1 to flip X and Y coordinates

Configuration example: <pre class="brush: ini"> rtp_used = 0 rtp_screen_size = 7 rtp_regidity_level = 7 rtp_press_threshold_enable = 0 rtp_press_threshold = 0x1f40 rtp_sensitive_level = 0xf rtp_exchange_x_y_flag = 0

[ctp_para]
Several touch panel's can be configured. Their name must match to the linux ctp-driver!


 * ctp_used: 0 to disable; 1 to enable
 * ctp_name: Name of the touch panel driver to use
 * ctp_twi_id: twi controller to use
 * ctp_twi_addr: hardware specfic twi address in hex
 * ctp_screen_rotate: 0 for normal operation; 1 for 180° rotation
 * ctp_screen_max_x: Maximum X screen resolution
 * ctp_screen_max_y: Maximum Y screen resolution
 * ctp_revert_x_flag: 0 for normal operation; 1 to flip the X axis
 * ctp_revert_y_flag: 0 for normal operation; 1 to flip the Y axis
 * ctp_havekey: 0 for normal operation; 1 if the touch panel also has touch-keys.
 * ctp_int_port: interrupt line GPIO configuration
 * ctp_wakeup: screen wake up GPIO configuration
 * ctp_io_port: I/O port GPIO configuration

Configuration example: <pre class="brush: ini"> [ctp_para] ctp_used = 1 ctp_twi_id = 2 ctp_name = "ft5x_ts" ctp_twi_addr = 0x38

ctp1_used = 1 ctp1_name = "Goodix-TS" ctp1_twi_addr = 0x55

ctp2_used = 1 ctp2_name = "ssd253x-ts" ctp2_twi_addr = 0x48

ctp3_used = 1 ctp3_name = "novatek-ts" ctp3_twi_addr = 0x09

ctp4_used = 1 ctp4_name = "zet622x-ts" ctp4_twi_addr = 0x76

ctp5_used = 1 ctp5_name = "byd693x-ts" ctp5_twi_addr = 0x52

ctp6_used = 0 ctp6_name = "gt82x" ctp6_twi_addr = 0x5d

ctp7_used = 0 ctp7_name = "px811" ctp7_twi_addr = 0x5c

ctp_screen_rotate = 0 ctp_screen_max_x = 800 ctp_screen_max_y = 480 ctp_revert_x_flag = 0 ctp_revert_y_flag = 0 ctp_exchange_x_y_flag = 0 ctp_havekey = 0 ctp_int_port = port: PH21<6> ctp_wakeup = port: PB13<1> <1> ctp_io_port = port: PH21<0>

[tkey_para]
Touch 'key', only for "hv_keypad" for now


 * tkey_used: 0 to disable; 1 to enable
 * tkey_name: driver name, must match linux driver name
 * tkey_twi_id: twi controller to use
 * tkey_twi_addr: hardware specfic twi address in hex
 * tkey_int: interrupt line GPIO configuration

Configuration example: <pre class="brush: ini"> [tkey_para] tkey_used = 0 tkey_name = "hv_keypad" tkey_twi_id = 2 tkey_twi_addr = 0x62 tkey_int = port: PI13<6>

tablet key configuration
Configures tablet physical buttons - usually Vol+ and Vol-, may have Home, Back and others.

Power key is usually handled by the AXP PMU. Buttons like reset and FEL are special and should work without a driver.

[tabletkeys_para]

 * tabletkeys_used: 0 to disable; 1 to enable
 * keyN_code: numeric keycode - easily found with evtest. N seems to be 0-4 by default.

Configuration example: <pre class="brush: ini"> [tabletkeys_para] tabletkeys_used=1 key0_code = 114 key1_code = 115

[motor_para]

 * motor_used: 0 to disable; 1 to enable
 * motor_shake: motor control pin GPIO configuration

Configuration example: <pre class="brush: ini"> [motor_para] motor_used = 0 motor_shake = port:PB03<1> <1>

lock configuration
Locks are either very new or really old as nothing can be found in any fex file in git. It seems reasonable to believe that this would be a screen lock 'button'.

[locks_para]
Configuration example: <pre class="brush: ini"> [locks_para] locks_used = 0 locks_gpio = port:PH00<0> <0>
 * locks_used: 0 to disable; 1 to enable
 * locks_gpio: switch GPIO configuration

[nand_para]

 * nand_used: 0 to disable; 1 to enable
 * nand_we: Write Enable GPIO configuration
 * nand_ale: Address Latch Enable GPIO configuration
 * nand_cle: Command Latch Enable GPIO configuration
 * nand_ce0: Chip sElect bit 0 GPIO configuration
 * nand_ce1: Chip sElect bit 1 GPIO configuration
 * nand_ce2: Chip sElect bit 2 GPIO configuration
 * nand_ce3: Chip sElect bit 3 GPIO configuration
 * nand_ce4: Chip sElect bit 4 GPIO configuration
 * nand_ce5: Chip sElect bit 5 GPIO configuration
 * nand_ce6: Chip sElect bit 6 GPIO configuration
 * nand_ce7: Chip sElect bit 7 GPIO configuration
 * nand_nre: Nand Read Enable GPIO configuration
 * nand_rb0: Read / Busy bit 0 GPIO configuration
 * nand_rb1: Read / Busy bit 1 GPIO configuration
 * nand_d0: data bus bit 0 GPIO configuration
 * nand_d1: data bus bit 1 GPIO configuration
 * nand_d2: data bus bit 2 GPIO configuration
 * nand_d3: data bus bit 3 GPIO configuration
 * nand_d4: data bus bit 4 GPIO configuration
 * nand_d5: data bus bit 5 GPIO configuration
 * nand_d6: data bus bit 6 GPIO configuration
 * nand_d7: data bus bit 7 GPIO configuration
 * nand_wp: Write Protect GPIO configuration
 * nand_spi: SPI data line GPIO configuration
 * nand_ndqs: nand ddr clock signal GPIO configuration

Configuration example: <pre class="brush: ini"> [Nand_para] nand_used = 1 nand_we = port:PC00<2> nand_ale = port:PC01<2> nand_cle = port:PC02<2> nand_ce1 = port:PC03<2> nand_ce0 = port:PC04<2> nand_nre = port:PC05<2> nand_rb0 = port:PC06<2> nand_rb1 = port:PC07<2> nand_d0 = port:PC08<2> nand_d1 = port:PC09<2> nand_d2 = port:PC10<2> nand_d3 = port:PC11<2> nand_d4 = port:PC12<2> nand_d5 = port:PC13<2> nand_d6 = port:PC14<2> nand_d7 = port:PC15<2> nand_wp = port:PC16<2> nand_ce2 = port:PC17<2> nand_ce3 = port:PC18<2> nand_ce4 = port:PC19<2> nand_ce5 = port:PC20<2> nand_ce6 = port:PC21<2> nand_ce7 = port:PC22<2> nand_spi = port:PC23<3> nand_ndqs = port:PC24<2>

[boot_disp]
This section can be found in vendor fex files for H3 devices and is only used by Allwinner's BSP u-boot (eg. to display a boot logo which might require further patches)

[disp_init]

 * disp_init_enable: 0 to disable; 1 to enable
 * disp_mode: Display mode to use:
 * {| class="wikitable"

! mode ! display mode
 * 0
 * screen0(screen0, fb0)
 * 1
 * screen1(screen1, fb0)
 * 2
 * dualhead(screen0, screen1, fb0, fb1) (2 screens, 2 framebuffers)
 * 3
 * xinerama(screen0, screen1, fb0) (2 screens, one big framebuffer)
 * 4
 * clone(screen0, screen1, fb0) (2 screens, one standard framebuffer)
 * }
 * screen0_out_color_range: Output color range for HDMI (applies to both screen0/screen1 - there is no screen1_out_color_range):
 * {| class="wikitable"
 * 4
 * clone(screen0, screen1, fb0) (2 screens, one standard framebuffer)
 * }
 * screen0_out_color_range: Output color range for HDMI (applies to both screen0/screen1 - there is no screen1_out_color_range):
 * {| class="wikitable"

! type ! output color range
 * 0
 * 16-255 Limited Range (Default)
 * 1
 * 0-255 Full Range - PC Level
 * 2
 * 16-235 Limited Range - Video Level
 * }
 * screen0_output_type: Output type for screen0:
 * screen1_output_type: Output type for screen1:
 * {| class="wikitable"
 * screen0_output_type: Output type for screen0:
 * screen1_output_type: Output type for screen1:
 * {| class="wikitable"

! type ! Output type
 * 0
 * NONE
 * 1
 * LCD
 * 2
 * TV
 * 3
 * HDMI
 * 4
 * VGA
 * }
 * screen0_output_mode: Output mode for screen0:
 * screen1_output_mode: Output mode for screen1:
 * {| class="wikitable"
 * VGA
 * }
 * screen0_output_mode: Output mode for screen0:
 * screen1_output_mode: Output mode for screen1:
 * {| class="wikitable"

! mode ! used for tv/hdmi output ! used for vga output
 * 0
 * 480i
 * 1680*1050
 * 1
 * 576i
 * 1440*900
 * 2
 * 480p
 * 1360*768
 * 3
 * 576p
 * 1280*1024
 * 4
 * 720p50
 * 1024*768
 * 5
 * 720p60
 * 800*600
 * 6
 * 1080i50
 * 640*480
 * 7
 * 1080i60
 * 8
 * 1080p24
 * 9
 * 1080p50
 * 10
 * 1080p60
 * 1920*1080
 * 11
 * pal
 * 1280*720
 * 14
 * ntsc
 * }
 * fb0_framebuffer_num: fb0 buffer number, use 2 for double buffering
 * fb1_framebuffer_num: fb1 buffer number, use 2 for double buffering
 * fb0_format: pixel format for fb0:
 * fb1_format: pixel format for fb1:
 * {| class="wikitable"
 * 10
 * 1080p60
 * 1920*1080
 * 11
 * pal
 * 1280*720
 * 14
 * ntsc
 * }
 * fb0_framebuffer_num: fb0 buffer number, use 2 for double buffering
 * fb1_framebuffer_num: fb1 buffer number, use 2 for double buffering
 * fb0_format: pixel format for fb0:
 * fb1_format: pixel format for fb1:
 * {| class="wikitable"
 * fb0_format: pixel format for fb0:
 * fb1_format: pixel format for fb1:
 * {| class="wikitable"

! format ! fb0_format
 * 4
 * RGB655
 * 5
 * RGB565
 * 6
 * RGB556
 * 7
 * ARGB1555
 * 8
 * RGBA5551
 * 9
 * RGB888
 * 10
 * ARGB8888
 * 12
 * ARGB4444
 * }
 * fb0_pixel_sequence: fb0 pixel sequence (0 generally for linux, 2 for android):
 * fb1_pixel_sequence: fb1 pixel sequence (0 generally for linux, 2 for android):
 * {| class="wikitable"
 * ARGB8888
 * 12
 * ARGB4444
 * }
 * fb0_pixel_sequence: fb0 pixel sequence (0 generally for linux, 2 for android):
 * fb1_pixel_sequence: fb1 pixel sequence (0 generally for linux, 2 for android):
 * {| class="wikitable"
 * {| class="wikitable"

! sequence ! fb0_pixel_sequence
 * 0
 * ARGB
 * 2
 * BGRA
 * }
 * fb0_scaler_mode_enable: 0 to disable; 1 to enable
 * fb1_scaler_mode_enable: 0 to disable; 1 to enable
 * lcd0_backlight: value to 240 sets PWM rate on selected PWM gpio
 * lcd1_backlight: value to 240 sets PWM rate on selected PWM gpio
 * lcd0_backlight: value to 240 sets PWM rate on selected PWM gpio
 * lcd1_backlight: value to 240 sets PWM rate on selected PWM gpio

Configuration example for LCD: <pre class="brush: ini"> [disp_init] disp_init_enable = 1 disp_mode = 0

screen0_output_type = 1 screen0_output_mode = 4

screen1_output_type = 1 screen1_output_mode = 4

fb0_framebuffer_num = 2 fb0_format = 10 fb0_pixel_sequence = 0 fb0_scaler_mode_enable = 0

fb1_framebuffer_num = 2 fb1_format = 10 fb1_pixel_sequence = 0 fb1_scaler_mode_enable = 0

Configuration example for VGA: <pre class="brush: ini"> [disp_init] disp_init_enable = 1 disp_mode = 0

screen0_output_type = 4 screen0_output_mode = 4

screen1_output_type = 2 screen1_output_mode = 14

fb0_framebuffer_num = 2 fb0_format = 10 fb0_pixel_sequence = 0 fb0_scaler_mode_enable = 1

fb1_framebuffer_num = 2 fb1_format = 10 fb1_pixel_sequence = 0 fb1_scaler_mode_enable = 1 Configuration example for Composite TV on an old TV (PAL mode): <pre class="brush: ini"> [disp_init] disp_init_enable = 1 disp_mode = 0

screen0_output_type = 2 screen0_output_mode = 11

screen1_output_type = 2 screen1_output_mode = 11

fb0_framebuffer_num = 2 fb0_format = 10 fb0_pixel_sequence = 0 fb0_scaler_mode_enable = 1

fb1_framebuffer_num = 2 fb1_format = 10 fb1_pixel_sequence = 0 fb1_scaler_mode_enable = 1

lcd[0/1] configuration
lcd0 is used when lcd output is selected by display screen0, lcd1 by display screen1.


 * lcd_used: 0 to disable; 1 to enable
 * lcd_pwm_not_used: 0 to enable PWM; 1 to disable
 * lcd_pwm_ch: PWM channel
 * lcd_pwm_freq: PWM frequency in Hz
 * lcd_pwm_pol: PWM polarity; 0 is pulse LOW for lcd[0|1]_backlight periods, 1 is pulse HIGH.
 * lcd_x: X-axis active width
 * lcd_y: Y-axis active height
 * lcd_dclk_freq: pixel clock frequency in MHz
 * lcd_if: lcd interface:
 * {| class="wikitable"

! interface ! lcd_interface
 * 0
 * hv (sync + de)
 * 1
 * 8080
 * 2
 * ttl
 * 3
 * lvds
 * 4
 * dsi (on A20 it means the use of SSD2828 bridge chip, on A31 it might really mean native DSI)
 * 5
 * edp
 * 6
 * external dsi (the use of SSD2828 bridge chip on A31 and onwards)
 * }
 * lcd_hbp: hsync back porch
 * lcd_ht: hsync total cycle
 * lcd_vbp: vsync back porch
 * lcd_vt: vsync total cycle * 2
 * lcd_hv_if: 0 for parallel hv interface; 1: for serial hv interface
 * lcd_hv_smode: 0 for RGB888 serial interface mode; 1 for CCIR656
 * lcd_hv_s888_if: serial RGB format
 * lcd_hv_syuv_if: serial YUV format
 * lcd_hv_vspw: vysnc plus width
 * lcd_hv_hspw: hsync plus width
 * lcd_hv_lde_used: 0 to disable; 1 to enable
 * lcd_hv_lde_iovalue: HV LDE iovalue
 * lcd_lvds_ch: 0 for single channel; 1 for dual channel
 * lcd_lvds_mode: 0 for NS mode; 1 for JEIDA mode
 * lcd_lvds_bitwidth: 0 for 24 bit; 1 for 18 bit
 * lcd_io_cfg0: lcd IO configuration
 * lcd_lvds_io_cross: 0 for normal; 1 for pn cross
 * lcd_cpu_if: cpu if mode:
 * lcd_hv_lde_iovalue: HV LDE iovalue
 * lcd_lvds_ch: 0 for single channel; 1 for dual channel
 * lcd_lvds_mode: 0 for NS mode; 1 for JEIDA mode
 * lcd_lvds_bitwidth: 0 for 24 bit; 1 for 18 bit
 * lcd_io_cfg0: lcd IO configuration
 * lcd_lvds_io_cross: 0 for normal; 1 for pn cross
 * lcd_cpu_if: cpu if mode:


 * {| class="wikitable"

! mode ! cpu_if
 * 0
 * 18 bit
 * 1
 * 16 bit mode0
 * 2
 * 16 bit mode1
 * 3
 * 16 bit mode2
 * 4
 * 16 bit mode3
 * 5
 * 9 bit
 * 6
 * 8 bit, 256k
 * 7
 * 8 bit, 65k
 * }
 * lcd_gamma_correction_en: 0 to disable; 1 to enable
 * lcd_gamma_tbl_[0-255]: Gamma table 0 through 255
 * lcd_frm: 0 to disable dither; 1 to enable enable rgb666 dither; 2 to enable rgb656 dither
 * lcd_io_cfg0: lcd io inv
 * lcd_bl_en_used: 0 to disable; 1 to enable
 * lcd_bl_en: LCD BackLight GPIO configuration
 * lcd_power_used: 0 to disable; 1 to enable
 * lcd_power: LCD_VCC Voltage control GPIO configuration
 * lcd_pwm_used: 0 to disable; 1 to enable
 * lcd_pwm: lcd PWM, GPIO configuration (PWM0 fixed using the PB02 PWM1 fixed PI03 without user modification)
 * lcd_gpio_0: 2/3-wire SCL GPIO configuration
 * lcd_gpio_1: 2/3-wire SDA GPIO configuration
 * lcd_gpio_2: 2/3-wire SCEN GPIO configuration
 * lcd_gpio_3: LCD module RESET GPIO configuration
 * lcdd0: data bit 0 GPIO configuration
 * lcdd1: data bit 1 GPIO configuration
 * lcdd2: data bit 2 GPIO configuration
 * lcdd3: data bit 3 GPIO configuration
 * lcdd4: data bit 4 GPIO configuration
 * lcdd5: data bit 5 GPIO configuration
 * lcdd6: data bit 6 GPIO configuration
 * lcdd7: data bit 7 GPIO configuration
 * lcdd8: data bit 8 GPIO configuration
 * lcdd9: data bit 9 GPIO configuration
 * lcdd10: data bit 10 GPIO configuration
 * lcdd11: data bit 11 GPIO configuration
 * lcdd12: data bit 12 GPIO configuration
 * lcdd13: data bit 13 GPIO configuration
 * lcdd14: data bit 14 GPIO configuration
 * lcdd15: data bit 15 GPIO configuration
 * lcdd16: data bit 16 GPIO configuration
 * lcdd17: data bit 17 GPIO configuration
 * lcdd18: data bit 18 GPIO configuration
 * lcdd19: data bit 19 GPIO configuration
 * lcdd20: data bit 20 GPIO configuration
 * lcdd21: data bit 21 GPIO configuration
 * lcdd22: data bit 22 GPIO configuration
 * lcdd23: data bit 23 GPIO configuration
 * lcdclk: LCD Clock GPIO configuration
 * lcdde: LCD de GPIO configuration
 * lcdhsync: H sync GPIO configuration
 * lcdvsync: V sync GPIO configuration
 * lcdd20: data bit 20 GPIO configuration
 * lcdd21: data bit 21 GPIO configuration
 * lcdd22: data bit 22 GPIO configuration
 * lcdd23: data bit 23 GPIO configuration
 * lcdclk: LCD Clock GPIO configuration
 * lcdde: LCD de GPIO configuration
 * lcdhsync: H sync GPIO configuration
 * lcdvsync: V sync GPIO configuration

[lcd0_para]
Configuration example: <pre class="brush: ini"> [lcd0_para] lcd_used = 1 lcd_x = 800 lcd_y = 480 lcd_dclk_freq = 33 lcd_pwm_freq = 1000 lcd_pwm_pol = 0 lcd_swap = 0 lcd_if = 0 lcd_hbp = 215 lcd_ht = 1055 lcd_vbp = 34 lcd_vt = 1050 lcd_hv_if = 0 lcd_hv_smode = 0 lcd_hv_s888_if = 0 lcd_hv_syuv_if = 0 lcd_hv_vspw = 0 lcd_hv_hspw = 0 lcd_hv_lde_used = 0 lcd_hv_lde_iovalue = 0 lcd_lvds_ch = 0 lcd_lvds_mode = 0 lcd_lvds_bitwidth = 0 lcd_lvds_io_cross = 0 lcd_cpu_if = 0 lcd_cpu_da = 0 lcd_frm = 0 lcd_io_cfg0 = 0x10000000 lcd_io_cfg1 = 0 lcd_io_strength = 0 lcd_bl_en_used = 1 lcd_bl_en = port: PH07<1><0> <1> lcd_power_used = 1 lcd_power = port: PH08<1><0> <1> lcd_pwm_used = 1 lcd_pwm = port:PB02<2> lcd_gpio_0 = lcd_gpio_1 = lcd_gpio_2 = lcd_gpio_3 = lcdd0 = port:PD00<2> lcdd1 = port:PD01<2> lcdd2 = port:PD02<2> lcdd3 = port:PD03<2> lcdd4 = port:PD04<2> lcdd5 = port:PD05<2> lcdd6 = port:PD06<2> lcdd7 = port:PD07<2> lcdd8 = port:PD08<2> lcdd9 = port:PD09<2> lcdd10 = port:PD10<2> lcdd11 = port:PD11<2> lcdd12 = port:PD12<2> lcdd13 = port:PD13<2> lcdd14 = port:PD14<2> lcdd15 = port:PD15<2> lcdd16 = port:PD16<2> lcdd17 = port:PD17<2> lcdd18 = port:PD18<2> lcdd19 = port:PD19<2> lcdd20 = port:PD20<2> lcdd21 = port:PD21<2> lcdd22 = port:PD22<2> lcdd23 = port:PD23<2> lcdclk = port:PD24<2> lcdde = port:PD25<2> lcdhsync = port:PD26<2> lcdvsync = port:PD27<2>

Other configuration examples for certain panels: <pre class="brush: ini"> lcd_x                   = 640 lcd_y                   = 480 lcd_dclk_freq           = 25 lcd_if                  = 3 lcd_hbp                 = 114 lcd_ht                  = 800 lcd_vt                  = 1050 lcd_vbp                 = 34 lcd_pwm_freq            = 20000 lcd_lvds_bitwidth       = 1 lcd_pwm_used            = 1 lcd_pwm                 = port:PB02<2><0> lcd_pwm_pol             = 0
 * lvds 640x480  module name: SG0570EDG

lcd_x                   = 800 lcd_y                   = 480 lcd_dclk_freq           = 33 lcd_if                  = 0 lcd_hbp                 = 46 lcd_ht                  = 1055 lcd_vbp                 = 23 lcd_vt                  = 1050
 * RGB 800x480	module name: H-B070D-15C

lcd_x                   = 800 lcd_y                   = 600 lcd_dclk_freq           = 40 lcd_if                  = 0 lcd_hbp                 = 46 lcd_ht                  = 1056 lcd_vbp                 = 23 lcd_vt                  = 1270
 * RGB 800x600   module name: H-B080D-24F

lcd_x                   = 480 lcd_y                   = 272 lcd_dclk_freq           = 9 lcd_if                  = 0 lcd_hbp                 = 2 lcd_ht                  = 525 lcd_vbp                 = 2 lcd_vt                  = 572
 * RGB 480x272   module name: KD43G18-40NB-A11

lcd_x                   = 1024 lcd_y                   = 600 lcd_dclk_freq           = 52 lcd_if                  = 3 lcd_hbp                 = 33 lcd_ht                  = 1344 lcd_vbp                 = 23 lcd_vt                  = 1270
 * lvds 1024x600  module name: CLAP101NC01CW�

lcd_x                   = 1024 lcd_y                   = 768 lcd_dclk_freq           = 65 lcd_if                  = 3 lcd_hbp                 = 160 lcd_ht                  = 1344 lcd_vbp                 = 23 lcd_vt                  = 1612
 * lvds 1024x768  module name: KD080D3-40NA-A2

lcd_x                   = 1024 lcd_y                   = 768 lcd_dclk_freq           = 100 lcd_if                  = 3 lcd_hbp                 = 480 lcd_ht                  = 2084 lcd_vbp                 = 6 lcd_vt                  = 1600 lcd_lvds_bitwidth       = 1 lcd_io_cfg0             = 0x04000000 lcd_frm                 = 1
 * lvds 1024x768  module name: LG-LP097X02

lcd_io_cfg0             = 0x10000000 lcd_gamma_correction_en = 0 lcd_gamma_tbl_0         = 0x00000000 lcd_gamma_tbl_1         = 0x00010101 lcd_gamma_tbl_255       = 0x00ffffff

[lcd1_para]
Configuration example: <pre class="brush: ini"> [lcd1_para] lcd_used                = 0

lcd_x                   = 0 lcd_y                   = 0 lcd_dclk_freq           = 0 lcd_pwm_not_used        = 0 lcd_pwm_ch              = 0 lcd_pwm_freq            = 0 lcd_pwm_pol             = 0 lcd_if                  = 0 lcd_hbp                 = 0 lcd_ht                  = 0 lcd_vbp                 = 0 lcd_vt                  = 0 lcd_hv_if               = 0 lcd_hv_smode            = 0 lcd_hv_s888_if          = 0 lcd_hv_syuv_if          = 0 lcd_hv_vspw             = 0 lcd_hv_hspw             = 0 lcd_lvds_ch             = 0 lcd_lvds_mode           = 0 lcd_lvds_bitwidth       = 0 lcd_lvds_io_cross       = 0 lcd_cpu_if              = 0 lcd_frm                 = 0 lcd_io_cfg0             = 0 lcd_gamma_correction_en = 0 lcd_gamma_tbl_0         = 0x00000000 lcd_gamma_tbl_1         = 0x00010101 lcd_gamma_tbl_255       = 0x00ffffff

lcd_bl_en_used          = 0 lcd_bl_en               =

lcd_power_used          = 0 lcd_power               =

lcd_pwm_used            = 0 lcd_pwm                 = port:PI03<2><0>

lcd_gpio_0              = lcd_gpio_1              = lcd_gpio_2              = lcd_gpio_3              =

lcdd0                   = port:PH00<2><0> lcdd1                   = port:PH01<2><0> lcdd2                   = port:PH02<2><0> lcdd3                   = port:PH03<2><0> lcdd4                   = port:PH04<2><0> lcdd5                   = port:PH05<2><0> lcdd6                   = port:PH06<2><0> lcdd7                   = port:PH07<2><0> lcdd8                   = port:PH08<2><0> lcdd9                   = port:PH09<2><0> lcdd10                  = port:PH10<2><0> lcdd11                  = port:PH11<2><0> lcdd12                  = port:PH12<2><0> lcdd13                  = port:PH13<2><0> lcdd14                  = port:PH14<2><0> lcdd15                  = port:PH15<2><0> lcdd16                  = port:PH16<2><0> lcdd17                  = port:PH17<2><0> lcdd18                  = port:PH18<2><0> lcdd19                  = port:PH19<2><0> lcdd20                  = port:PH20<2><0> lcdd21                  = port:PH21<2><0> lcdd22                  = port:PH22<2><0> lcdd23                  = port:PH23<2><0> lcdclk                  = port:PH24<2><0> lcdde                   = port:PH25<2><0> lcdhsync                = port:PH26<2><0> lcdvsync                = port:PH27<2><0>

tv out dac configuration
The TV-Out Digital Analog Converter (DAC) modules the framebuffer to a signal suitable for a TV

[tv_out_dac_para]

 * dac_used: 0 to disable; 1 to enable
 * dac0_src: Output source for the DAC:
 * dac1_src: Output source for the DAC:
 * dac2_src: Output source for the DAC:
 * dac3_src: Output source for the DAC:
 * {| class="wikitable"

! dac ! Output source
 * 0
 * Composite
 * 1
 * Luma
 * 2
 * Chroma
 * 3
 * 4
 * Y
 * 5
 * Pb
 * 6
 * Pr
 * 7
 * None
 * }
 * 5
 * Pb
 * 6
 * Pr
 * 7
 * None
 * }
 * None
 * }

Configuration example: <pre class="brush: ini"> [tv_out_dac_para] dac_used = 1 dac0_src = 4 dac1_src = 5 dac2_src = 6 dac3_src = 0

csi gpio configuration

 * csi_used: 0 to enable; 1 to disable
 * csi_mode: 0 to sample one csi to one buffer; 1 to sample two csi to one buffer
 * csi_dev_qty: Quantity of devices linked to the csi interface
 * csi_twi_id: TWI controller to use
 * csi_twi_id_b: TWI controller to use for second device
 * csi_mname: Module name to match the csi device; currently known to work:
 * csi_mname_b: Module name to match the second csi device; currently known to work:
 * ov7670
 * gc0308
 * gt2005
 * hi704
 * hi253


 * csi_twi_addr: TWI address for the used camera
 * csi_twi_addr_b: TWI address for the used camera for second device
 * csi_if: interface:
 * csi_if_b: interface for second device:
 * {| class="wikitable"

! if ! csi interface
 * 0
 * hv_8bit
 * 1
 * hv_16bit
 * 2
 * hv_24bit
 * 3
 * bt656 1ch
 * 4
 * bt656 2ch
 * 5
 * bt656 4ch
 * }
 * csi_pck: p clock GPIO configuration
 * csi_ck: clock GPIO configuration
 * csi_hsync: H-sync GPIO configuration
 * csi_vsync: V-sync GPIO configuration
 * csi_hflip: Horizontal frame flip
 * csi_hflip_b: Horizontal frame flip for second device
 * csi_vflip: Vertical frame flip
 * csi_vflip_b: Vertical frame flip for second device
 * csi_d0: data bit 0 GPIO configuration
 * csi_d1: data bit 1 GPIO configuration
 * csi_d2: data bit 2 GPIO configuration
 * csi_d3: data bit 3 GPIO configuration
 * csi_d4: data bit 4 GPIO configuration
 * csi_d5: data bit 5 GPIO configuration
 * csi_d6: data bit 6 GPIO configuration
 * csi_d7: data bit 7 GPIO configuration
 * csi_d8: data bit 8 GPIO configuration
 * csi_d9: data bit 9 GPIO configuration
 * csi_d10: data bit 10 GPIO configuration
 * csi_d11: data bit 11 GPIO configuration
 * csi_d12: data bit 12 GPIO configuration
 * csi_d13: data bit 13 GPIO configuration
 * csi_d14: data bit 14 GPIO configuration
 * csi_d15: data bit 15 GPIO configuration
 * csi_reset: Camera reset; the default value, high or low ,depends on the module
 * csi_power_en: Power enable GPIO configuration
 * csi_stby: Camera standby GPIO configuration; the default value, high or low ,depends on the module
 * csi_stby_b: Camera standby GPIO configuration for second device; the default value, high or low ,depends on the module
 * csi_stby_mode: 0 to not shutdown power at standby; 1 shutdown power at standby
 * csi_facing: Tells the device if the camera is facing or otherwise. 0 for the back, 1 for the front camera.
 * csi_facing_b: Same as above.
 * csi_vflip: Vertical flip; 0: disabled, 1: enabled
 * csi_hflip: Horizontal flip; 0: disabled, 1: enabled
 * csi_flash: Camera Flash GPIO configuration
 * csi_flash_b: Camera Flash GPIO configuration for second device
 * csi_flash_pol: Flash polarity of flash light; 0 for active low; 1 for active high
 * csi_flash_pol_b: Flash polarity of flash light for second device; 0 for active low; 1 for active high
 * csi_af_en: Autofocus enable GPIO configuration
 * csi_iovdd: Camera module IO power, PMU power supply
 * csi_iovdd_b: Camera module IO power, PMU power supply for second device
 * csi_avdd: Camera analog power, PMU power supply
 * csi_avdd_b: Camera analog power, PMU power supply for second device
 * csi_dvdd: Camera digital power, PMU power supply
 * csi_dvdd_b: Camera digital power, PMU power supply for second device
 * pmu_ldo3: "axp20_pll" or leave empty empty when not using any PMU power supply
 * pmu_ldo4: "axp20_hdmi" or empty when not using any PMU power supply
 * csi_avdd: Camera analog power, PMU power supply
 * csi_avdd_b: Camera analog power, PMU power supply for second device
 * csi_dvdd: Camera digital power, PMU power supply
 * csi_dvdd_b: Camera digital power, PMU power supply for second device
 * pmu_ldo3: "axp20_pll" or leave empty empty when not using any PMU power supply
 * pmu_ldo4: "axp20_hdmi" or empty when not using any PMU power supply

[csi0_para]
Configuration example: <pre class="brush: ini"> [csi0_para] csi_used = 1 csi_mode = 0 csi_dev_qty = 1 csi_stby_mode = 1

csi_mname = "gc0308" csi_twi_id = 1 csi_twi_addr =0x42 csi_if = 0 csi_vflip = 0 csi_hflip = 1 csi_iovdd = "" csi_avdd = "" csi_dvdd = "" csi_flash_pol = 1

csi_mname_b = "gt2005" csi_twi_id_b = 1 csi_twi_addr_b = 0x78 csi_if_b = 0 csi_vflip_b = 0 csi_hflip_b = 0 csi_iovdd_b = "" csi_avdd_b = "" csi_dvdd_b = "" csi_flash_pol_b = 1

csi_pck = port:PE00<3> csi_ck = port:PE01<3> csi_hsync = port:PE02<3> csi_vsync= port:PE03<3> csi_d0 = port:PE04<3> csi_d1 = port:PE05<3> csi_d2 = port:PE06<3> csi_d3 = port:PE07<3> csi_d4 = port:PE08<3> csi_d5 = port:PE09<3> csi_d6 = port:PE10<3> csi_d7 = port:PE11<3> csi_d8 = port:PG04<5> csi_d9 = port:PG05<5> csi_d10 = port:PG06<5> csi_d11 = port:PG07<5> csi_d12 = port:PG08<5> csi_d13 = port:PG09<5> csi_d14 = port:PG10<5> csi_d15 = port:PG11<5> csi_reset = port:PH13<1> <0> csi_power_en = port:PH16<1> <0> csi_stby = port:PH18<1> <0> csi_flash = csi_af_en = csi_reset_b = port:PH13<1> <0> csi_power_en_b = port:PH16<1> <0> csi_stby_b = port:PH19<1> <0> csi_flash_b = csi_af_en_b =

[csi1_para]
Configuration example: <pre class="brush: ini"> [csi1_para] csi_used = 1 csi_mode = 0 csi_dev_qty = 1 csi_stby_mode = 1

csi_mname = "gc0308" csi_twi_id = 1 csi_twi_addr =0x42 csi_if = 0 csi_vflip = 0 csi_hflip = 1 csi_iovdd = "" csi_avdd = "" csi_dvdd = "" csi_flash_pol = 1

csi_mname_b = "gt2005" csi_twi_id_b = 1 csi_twi_addr_b = 0x78 csi_if_b = 0 csi_vflip_b = 0 csi_hflip_b = 0 csi_iovdd_b = "" csi_avdd_b = "" csi_dvdd_b = "" csi_flash_pol_b = 1

csi_pck = port:PG00<3> csi_ck = port:PG01<3> csi_d0 = port:PH00<7> csi_d1 = port:PH01<7> csi_d2 = port:PH02<7> csi_d3 = port:PH03<7> csi_d4 = port:PH04<7> csi_d5 = port:PH05<7> csi_d6 = port:PH06<7> csi_d7 = port:PH07<7> csi_d8 = port:PH08<7> csi_d9 = port:PH09<7> csi_d10 = port:PH10<7> csi_d11 = port:PH11<7> csi_d12 = port:PH12<7> csi_d13 = port:PH13<7> csi_d14 = port:PH14<7> csi_d15 = port:PH15<7> csi_d16 = port:PH16<7> csi_d17 = port:PH17<7> csi_d18 = port:PH18<7> csi_d19 = port:PH19<7> csi_d20 = port:PH20<7> csi_d21 = port:PH21<7> csi_d22 = port:PH22<7> csi_d23 = port:PH23<7> csi_hsync = port:PH26<7> csi_vsync= port:PH27<7> csi_reset = port:PG13<1> <0> csi_power_en = port:PG16<1> <0> csi_stby = port:PG18<1> <0> csi_flash = csi_af_en = csi_reset_b = port:PG13<1> <0> csi_power_en_b = port:PG16<1> <0> csi_stby_b = port:PG19<1> <0> csi_flash_b = csi_af_en_b =

[tvout_para]

 * tvout_used: 0 to disable; 1 to enable
 * tvout_channel_num: Channel number
 * tv_en: TV encoder GPIO configuration

Configuration example: <pre class="brush: ini"> tvout_used = 1 tvout_channel_num = 1 tv_en = port:PI12<1> <0>

[tvin_para]

 * tvin_used: 0 to disable; 1 to enable
 * tvin_channel_num: channel number

Configuration example: <pre class="brush: ini"> tvin_used = 1 tvin_channel_num = 4

[sata_para]

 * sata_used: 0 to disable; 1 to enable
 * sata_power_en: Sata power enable GPIO configuration

Configuration example: <pre class="brush: ini"> sata_used = 1 sata_power_en = port:PB08<1> <0>

sdmmc configuration
There are several things to notice when configuring the sdmmc controller.
 * sdc_used: 0 to disable; 1 to enable;（0=不使用，1=使用）
 * sdc_detmode: detection mode （卡检测模式）:
 * {| class="wikitable"

! mode ! detection mode ! note
 * 0
 * 1
 * GPIO detection
 * Also configure sdc_det to map to a GPIO （GPIO检测模式，需在sdc_det配置一个GPIO口）
 * 2
 * sdc_d3 detection
 * sdc_d3 must be configured as HiZ GPIO and have an external 1 MΩ pull-down resistor （SD卡D3数据口检测模式，需配置GPIO口为高阻，并使用1M欧下拉）
 * 3
 * polling (card cannot be swapped)
 * 不检测，卡常在
 * 4
 * manually (via the proc file system node)
 * }
 * bus_width: 1 for 1bit; 4 for 4bit (may also be called sdc_bwid?!? verify please)
 * sdc_d0: data line 0 GPIO configuration
 * sdc_d1: data line 1 GPIO configuration
 * sdc_d2: data line 2 GPIO configuration
 * sdc_d3: data line 3 GPIO configuration
 * sdc_clk: CLK GPIO configuration
 * sdc_cmd: CMD GPIO configuration
 * sdc_det: DET GPIO configuration
 * sdc_use_wp: 0 is normal operation; 1 is write protect
 * sdc_wp: Write Protect the GPIO configuration
 * sdc_d1: data line 1 GPIO configuration
 * sdc_d2: data line 2 GPIO configuration
 * sdc_d3: data line 3 GPIO configuration
 * sdc_clk: CLK GPIO configuration
 * sdc_cmd: CMD GPIO configuration
 * sdc_det: DET GPIO configuration
 * sdc_use_wp: 0 is normal operation; 1 is write protect
 * sdc_wp: Write Protect the GPIO configuration

[mmc0_para]
Configuration example: <pre class="brush: ini"> [mmc0_para] sdc_used = 1 sdc_detmode = 1 bus_width = 4 sdc_d1 = port:PF00<2><1> sdc_d0 = port:PF01<2><1> sdc_clk = port:PF02<2><1> sdc_cmd = port:PF03<2><1> sdc_d3 = port:PF04<2><1> sdc_d2 = port:PF05<2><1> sdc_det = port:PH01<0><1> sdc_use_wp = 0 sdc_wp =

[mmc1_para]
Configuration example: <pre class="brush: ini"> [mmc1_para] sdc_used = 1 sdc_detmode = 1 bus_width = 4 sdc_cmd = port:PH22<5><1><2> sdc_clk = port:PH23<5><1><2> sdc_d0 = port:PH24<5><1><2> sdc_d1 = port:PH25<5><1><2> sdc_d2 = port:PH26<5><1><2> sdc_d3 = port:PH27<5><1><2> sdc_det = port:PH2<0><1> sdc_use_wp = 0 sdc_wp =

[mmc2_para]
Configuration example: <pre class="brush: ini"> [mmc2_para] sdc_used = 0

[mmc3_para]
Configuration example: <pre class="brush: ini"> [mmc3_para] sdc_used = 1 sdc_detmode = 4 bus_width = 4 sdc_cmd = port:PI04<2><1><2> sdc_clk = port:PI05<2><1><2> sdc_d0 = port:PI06<2><1><2> sdc_d1 = port:PI07<2><1><2> sdc_d2 = port:PI08<2><1><2> sdc_d3 = port:PI09<2><1><2> sdc_det = sdc_use_wp = 0 sdc_wp =

[ms_para]

 * ms_used: 0 to disable; 1 to enable
 * ms_bs: Bus State signal GPIO configuration
 * ms_clk: Clock GPIO configuration
 * ms_d0: Data line 0 GPIO Configuration
 * ms_d1: Data line 1 GPIO Configuration
 * ms_d2: Data line 2 GPIO Configuration
 * ms_d3: Data line 3 GPIO Configuration
 * ms_det: Stick detection GPIO Configuration

Configuration example: <pre class="brush: ini"> [ms_para] ms_used = 1 ms_bs = port:PH06<5> ms_clk = port:PH07<5> ms_d0 = port:PH08<5> ms_d1 = port:PH09<5> ms_d2 = port:PH10<5> ms_d3 = port:PH11<5> ms_det = port:PH2<0><1>

[smc_para]

 * smc_used: 0 to disable; 1 to enable
 * smc_rst: Reset GPIO configuration
 * smc_vppen: VPP enable GPIO configuration
 * smc_vppp: Programming VPP GPIO configuration
 * smc_det: SIM Card detect GPIO configuration
 * smc_vccen: VCC enable GPIO configuration
 * smc_sck: Serial clock GPIO configuration
 * smc_sda: Serial data GPIO configurion

Configuration example: <pre class="brush: ini"> [smc_para] smc_used = 1 smc_rst = port:PH13<5> smc_vppen = port:PH14<5> smc_vppp = port:PH15<5> smc_det = port:PH16<5> smc_vccen = port:PH17<5> smc_sck = port:PH18<5> smc_sda = port:PH19<5>

[ps2_0_para]

 * ps2_used: 0 to disable; 1 to enable
 * ps2_scl: Serial clock GPIO configuration
 * ps2_sda: Serial data GPIO configuration

Configuration example: <pre class="brush: ini"> [ps2_0_para] ps2_used = 1 ps2_scl = port:PI20<2><1> ps2_sda = port:PI21<2><1>

[ps2_1_para]

 * ps2_used: 0 to disable; 1 to enable
 * ps2_scl: Serial clock GPIO configuration
 * ps2_sda: Serial data GPIO configuration

Configuration example: <pre class="brush: ini"> [ps2_1_para] ps2_used = 1 ps2_scl = port:PI20<2><1> ps2_sda = port:PI21<2><1>

[can_para]

 * can_used: 0 to disable; 1 to enable it
 * can_tx: transmit GPIO Configuration
 * can_rx: receive GPIO configuration

Configuration example: <pre class="brush: ini"> [Can_para] can_used = 1 can_tx = port:PA16<3> can_rx = port:PA17<3>

23.1 [keypad_para]

 * kp_used: 0 to disable; 1 to enable
 * kp_in_size: column width
 * kp_out_size: row width
 * kp_in0: column 0 GPIO Configuration
 * kp_in1: column 1 GPIO Configuration
 * kp_in2: column 2 GPIO Configuration
 * kp_in3: column 3 GPIO Configuration
 * kp_in4: column 4 GPIO configuration
 * kp_in5: column 5 GPIO configuration
 * kp_in6: column 6 GPIO Configuration
 * kp_in7: column 7 GPIO configuration
 * kp_out0: row 0 GPIO Configuration
 * kp_out1: row 1 GPIO Configuration
 * kp_out2: row 2 GPIO Configuration
 * kp_out3: row 3 GPIO Configuration
 * kp_out4: row 4 GPIO configuration
 * kp_out5: row 5 GPIO configuration
 * kp_out6: row 6 GPIO Configuration
 * kp_out7: row 7 GPIO configuration

Configuration example: <pre class="brush: ini"> [Keypad_para] kp_used = 1 kp_in_size = 8 kp_out_size = 8 kp_in0 = port:PH08<4><1> kp_in1 = port:PH09<4><1> kp_in2 = port:PH10<4><1> kp_in3 = port:PH11<4><1> kp_in4 = port:PH14<4><1> kp_in5 = port:PH15<4><1> kp_in6 = port:PH16<4><1> kp_in7 = port:PH17<4><1> kp_out0 = port:PH18<4><1> kp_out1 = port:PH19<4><1> kp_out2 = port:PH22<4><1> kp_out3 = port:PH23<4><1> kp_out4 = port:PH24<4><1> kp_out5 = port:PH25<4><1> kp_out6 = port:PH26<4><1> kp_out7 = port:PH27<4><1>

USB control flags

 * usb_used: 0 to disable; 1 to enable
 * usb_port_type: USB port type:
 * {| class="wikitable"

! type ! usb port type
 * 0
 * device only
 * 1
 * host only
 * 2
 * OTG
 * }
 * usb_detect_type: 0 = no checking; 1 = VBus / id check
 * usb_controller_type: USB controller type:
 * {| class="wikitable"
 * usb_detect_type: 0 = no checking; 1 = VBus / id check
 * usb_controller_type: USB controller type:
 * {| class="wikitable"

! type ! usb controller type
 * 0
 * Unknown
 * 1
 * EHCI
 * 2
 * OHCI
 * }
 * usb_id_gpio:USB ID pin GPIO configuration
 * usb_det_vbus_gpio: USB detect VBus pin GPIO configuration (VBus is USB speak for the +5V line)
 * usb_drv_vbus_gpio: USB drive VBus pin GPIO configuration
 * usb_restrict_gpio:
 * usb_host_init_state: In host only mode, host port initialization state; 0 do not initialize; 1 initializatie USB
 * usb_restric_flag:
 * usb_restrict_gpio:
 * usb_host_init_state: In host only mode, host port initialization state; 0 do not initialize; 1 initializatie USB
 * usb_restric_flag:

[usbc0]
Configuration example: <pre class="brush: ini"> [usbc0] usb_used = 1 usb_port_type = 2 usb_detect_type = 1 usb_id_gpio = port:PH04<0><1> usb_det_vbus_gpio = port:PH05<0><0> usb_drv_vbus_gpio = port:PB09<1><0> <0> usb_host_init_state = 0

[usbc1]
Configuration example: <pre class="brush: ini"> [usbc1] usb_used = 1 usb_port_type = 1 usb_detect_type = 0 usb_id_gpio = usb_det_vbus_gpio = usb_drv_vbus_gpio = port:PH06<1><0> <0> usb_host_init_state = 1

[usbc2]
Configuration example: <pre class="brush: ini"> [usbc2] usb_used = 1 usb_port_type = 1 usb_detect_type = 0 usb_id_gpio = usb_det_vbus_gpio = usb_drv_vbus_gpio = port:PH03<1><0> <0> usb_host_init_state = 1

[usb_feature]

 * vendor_id: vendor ID
 * mass_storage_id: mass storage ID
 * adb_id: android debug bridge ID
 * manufacturer_name: vendor name
 * product_name: = product name
 * serial_number: = serial number

Configuration example: <pre class="brush: ini"> [usb_feature] vendor_id = 0x18d1 mass_storage_id = 0x0001 adb_id = 0x0002 manufacturer_name = "USB Developer" product_name = "Android" serial_number = "20080411"

[msc_feature]

 * vendor_name: vendor name
 * product_name: product name
 * release: release version
 * luns: number of logical units

Configuration example: <pre class="brush: ini"> [msc_feature] vendor_name = "USB 2.0" product_name = "USB Flash Driver" release = 100 luns = 2

[gsensor_para]

 * gsensor_used: 0 to disable; 1 to enable
 * gsensor_name: linux kernel module name to match configuration
 * gsensor_twi_id: TWI bus ID
 * gsensor_twi_addr: TWI address
 * gsensor_int1: interrupt 1 GPIO configuration
 * gsensor_int2: interrupt 2 GPIO configuration
 * gsensor_revert_x_flag: (untested)
 * gsensor_revert_y_flag: (untested)
 * gsensor_revert_z_flag: (untested)
 * gsensor_exchange_x_y_flag: (untested)

Configuration example 1: <pre class="brush: ini"> [Gsensor_para] gsensor_used = 1 gsenser_name = "bma250" gsensor_twi_id = 1 gsensor_twi_addr = 0x18 gsensor_int1 = port:PH00<6><1> gsensor_int2 = port:PI10<6><1>

Configuration example 2: <pre class="brush: ini"> [Gsensor_para] gsensor_used = 1 gsenser_name = "bma222" gsensor_twi_id = 1 gsensor_twi_addr = 0x08 gsensor_int1 = port:PH00<6><1> gsensor_int2 = port:PI10<6><1>

Configuration example 3: <pre class="brush: ini"> [Gsensor_para] gsensor_used = 1 gsenser_name = "mma7660" gsensor_twi_id = 1 gsensor_twi_addr = 0x4c gsensor_int1 = port:PH00<6><1> gsensor_int2 = port:PI10<6><1>

[gps_para]

 * gps_used: 0 to disable; 1 to enable
 * gps_spi_id: SPI controller; 0 - 2 for SPI0, SPI1 or SPI2; 15 if no SPI is used
 * gps_spi_cs_num: chip select SPI controller; 0 = SPI0, 1 = SPI1
 * gps_lradc: 0 or 1 for Low Rate ADC Format; 2 for no Low Rate ADC Format
 * gps_clk: Clock GPIO configuration
 * gps_sign: GPS sign GPIO configuration
 * gps_mag: GPS Magnitude GPIO configuration
 * gps_vcc_en: GPS VCC enable GPIO configuration
 * gps_osc_en: GPS Oscillator enable GPIO configuration
 * gps_rx_en: GPS receive enable GPIO configuration

Configuration example: <pre class="brush: ini"> [gps_para] gps_used = 0 gps_spi_id = 2 gps_spi_cs_num = 0 gps_lradc = 1 gps_clk = port:PI00<2> gps_sign = port:PI01<2> gps_mag = port:PI02<2> gps_vcc_en = port:PC22<1> <0> gps_osc_en = port:PI14<1> <0> gps_rx_en = port:PI15<1> <0>

[sdio_wifi_para]

 * sdio_wifi_used: 0 to disable; 1 to enable
 * sdio_wifi_sdc_id: SD controller ID to use
 * sdio_wifi_mod_sel: SDI module selection (see mmc_pm.c ):
 * {| class="wikitable"

! mode ! wifi selection mode ! note
 * 0
 * none
 * 1
 * swl-n20
 * WiFi
 * 2
 * usi bm-01
 * WiFi - Bluetooth - FM radio
 * 3
 * ar6302qfn
 * 4
 * apm6xxx
 * 5
 * swb b23
 * WiFi - Bluetooth - FM radio
 * 6
 * hw-mw269x
 * Huawei wifi driver
 * 7
 * bcm40181
 * 8
 * bcm40183
 * BCM40183(BCM4330)
 * 9
 * rtl8723as
 * RTL8723AS(RF-SM02B)
 * 10
 * rtl8189es
 * RTL8189ES(SM89E00)
 * }
 * sdio_wifi_shdn: SHDN GPIO configuration
 * sdio_wifi_host_wakeup: WiFi wakeup GPIO Configuration
 * sdio_wifi_vdd_en: VDD enable GPIO configuration
 * sdio_wifi_vcc_en: VCC enable GPIO configuration
 * BCM40183(BCM4330)
 * 9
 * rtl8723as
 * RTL8723AS(RF-SM02B)
 * 10
 * rtl8189es
 * RTL8189ES(SM89E00)
 * }
 * sdio_wifi_shdn: SHDN GPIO configuration
 * sdio_wifi_host_wakeup: WiFi wakeup GPIO Configuration
 * sdio_wifi_vdd_en: VDD enable GPIO configuration
 * sdio_wifi_vcc_en: VCC enable GPIO configuration
 * sdio_wifi_vdd_en: VDD enable GPIO configuration
 * sdio_wifi_vcc_en: VCC enable GPIO configuration

Configuration example: <pre class="brush: ini"> [Sdio_wifi_para] sdio_wifi_used = 1 sdio_wifi_sdc_id = 3 sdio_wifi_mod_sel = 1

sdio_wifi_shdn = port:PH09<1> <0> sdio_wifi_host_wakeup = port:PH10<1> <1> sdio_wifi_vdd_en = port:PH11<1> <0> sdio_wifi_vcc_en = port:PH12<1> <0>

Optionally the following parameters can be used when other/multiple transceivers are installed. <pre class="brush: ini"> swl_n20_shdn           = port:PH09<1>  <0> swl_n20_host_wakeup    = port:PH10<1>  <1> swl_n20_vdd_en         = port:PH11<1>  <0> swl_n20_vcc_en         = port:PH12<1>  <0>
 * 1 - samsung swl-n20 sdio wifi gpio config

usi_bm01a_wl_pwr       = port:PH12<1>  <0> usi_bm01a_wlbt_regon   = port:PI11<1>  <0> usi_bm01a_wl_rst       = port:PI10<1>  <0> usi_bm01a_wl_wake      = port:PI12<1>  <0> usi_bm01a_bt_rst       = port:PB05<1>  <0> usi_bm01a_bt_wake      = port:PI20<1>  <0> usi_bm01a_bt_hostwake  = port:PI21<0>  <0>
 * 2 - usi bm01a sdio wifi gpio config

ar6302_qfn_pwr         = port:PH12<1>  <0> ar6302_qfn_shdn_n      = port:PH09<1>  <0>
 * 3 - ar6302qfn sdio wifi gpio config

apm_6981_vcc_en        = port:PA09<1>  <0> apm_6981_vdd_en        = port:PA10<1>  <0> apm_6981_wakeup        = port:PA11<1>  <0> apm_6981_rst_n         = port:PA12<1>  <0> apm_6981_pwd_n         = port:PA13<1>  <0>
 * 4 - apm sdio wifi gpio config

hw_mw269x_wl_pwr       = port:PH12<1>  <0> hw_mw269x_wl_enb       = port:PH11<1>  <0> hw_mw269x_wl_hostwake  = port:PH10<0>  <0> hw_mw269x_wl_wake      = port:PH09<1>  <0> hw_mw269x_bt_enb       = port:PB05<1>  <0> hw_mw269x_bt_wake      = port:PI20<1>  <0> hw_mw269x_bt_hostwake  = port:PI21<0>  <0>
 * 6 - huawei mw269x(v1/v2) sdio wifi gpio config

[usb_wifi_para]

 * usb_wifi_used: 0 to disable; 1 to enable
 * usb_wifi_usbc_num: USB controller to which USB wifi module is connected
 * usb_host_init_state: used together, such as xx = 2. Then usbc2 the usb_host_init_state 0

Configuration example: <pre class="brush: ini"> [usb_wifi_para] usb_wifi_used = 0 usb_wifi_usbc_num = 2

[3g_para]

 * 3g_used: 0 to disable; 1 to enable
 * 3g_usbc_num: USB controller to which the 3G module is connected
 * 3g_uart_num: UART controller to which the 3G module is connected
 * 3g_pwr: power enable GPIO configuration
 * 3g_wakeup: wakeup GPIO configuration
 * 3g_int: interrupt GPIO configuration

Configuration example: <pre class="brush: ini"> 3g_used = 1 3g_usbc_num = 2 3g_uart_num = 0 3g_pwr = port:PH09<1> <1> 3g_wakeup = port:PH10<1> <1> 3g_int = port:PH11<1> <1>

[gy_para]

 * gy_used: 0 to disable; 1 to enable
 * gy_twi_id: TWI controller to use
 * gy_twi_addr: TWI address to use
 * gy_int1: interrupt 1 GPIO configuration
 * gy_int2: interrupt 2 GPIO configuration

Configuration example: <pre class="brush: ini"> [gy_para] gy_used = 1 gy_twi_id = 1 gy_twi_addr = 0x0a gy_int1 = port:PH18<6><1> gy_int2 = port:PH19<6><1>

[ls_para]

 * ls_used: 0 to disable; 1 to enable
 * ls_twi_id: TWI controller to use
 * ls_twi_addr: TWI address
 * ls_int: interrupt GPIO configuration

Configuration example: <pre class="brush: ini"> [ls_para] ls_used = 1 ls_twi_id = 1 ls_twi_addr = 0x0c ls_int = port:PH20<6><1>

[compass_para]

 * compass_used: 0 to disable; 1 to enable
 * compass_twi_id: TWI controller to use
 * compass_twi_addr: TWI address to use
 * compass_int: interrupt GPIO configuration

Configuration example: <pre class="brush: ini"> [compass_para] compass_used = 0 compass_twi_id = 1 compass_twi_addr = 0x0d compass_int = port:PI13<6><1>

[bt_para]

 * bt_used: 0 to disable; 1 to enable
 * bt_uart_id: UART controller to use
 * bt_wakeup: wakeup GPIO configuration
 * bt_gpio: optional bluetooth pin GPIO configuration
 * bt_rst: = reset GPIO configuration

Configuration example: <pre class="brush: ini"> [Bt_para] bt_used = 1 bt_uart_id = 2 bt_wakeup = port:PI20<1> bt_gpio = port:PI21<1> bt_rst = port:PB05<1>

[i2s_para]

 * i2s_used: 0 to disable; 1 to enable
 * i2s_channel: channel control; 1 for one, 2 for two channels
 * i2s_mclk: master clock signal GPIO configuration
 * i2s_bclk: bit clock signal GPIO configuration
 * i2s_lrclk: word clock (left/right) signal GPIO configuration
 * i2s_dout0: digital out 0 GPIO configuration
 * i2s_dout1: (optional) digital out 1 GPIO configuration
 * i2s_dout2: (optional) digital out 2 GPIO configuration
 * i2s_dout3: (optional) digital out 3 GPIO configuration
 * i2s_din: multiplexed in signal GPIO configuration

Configuration example: <pre class="brush: ini"> [i2s_para] i2s_used = 1 i2s_channel = 2 i2s_mclk = port:PB05<2><1> i2s_bclk = port:PB06<2><1> i2s_lrclk = port:PB07<2><1> i2s_dout0 = port:PB08<2><1> i2s_dout1 = i2s_dout2 = i2s_dout3 = i2s_din = port:PB12<2><1>

[spdif_para]

 * spdif_used: 0 to disable; 1 to enable
 * spdif_mclk: optional master clock GPIO configuration
 * spdif_dout: digital out GPIO configuration
 * spdif_din: digital in GPIO configuration

Configuration example: <pre class="brush: ini"> [spdif_para] spdif_used = 1 spdif_mclk = spdif_dout = port:PB13<4><1> spdif_din =

[audio_para]

 * audio_used: 0 to disable; 1 to enable
 * audio_pa_ctrl: External Amp shutdown GPIO configuration
 * audio_lr_change: 0 for normal operation; 1 to swap left and right channels
 * playback_used: 0 to disable; 1 to enable This is a linux-sunxi specific extention
 * capture_used: 0 to dissable; 1 to enable This is a linux-sunxi specific extention

Some extra settings were introduced with the A31:
 * audio_mute_ctrl: External Amp mute GPIO configuration
 * cap_vol: ???
 * headphone_vol: Internal headphone amp volume (0 ~ 0x3f: 0 .. -62 dB)
 * headphone_direct_used: 1 for headphone DC direct drive (no coupling capacitors)
 * headset_mic_vol: Headset microphone boost gain (0 ~ 0x7: 0 dB, 24 .. 42 dB)
 * main_mic_vol: Main microphone boost gain (0 ~ 0x7: 0 dB, 24 .. 42 dB)
 * pa_double_used: 0 for mono differential output; 1 for stereo output
 * pa_double_vol: Line out volume for Stereo output mode
 * pa_single_vol: Line out volume for Mono differential output mode

Configuration example: <pre class="brush: ini"> [audio_para] audio_used = 1 audio_pa_ctrl = port:PH15<1> <0> audio_lr_change = 0 playback_used = 1 capture_used = 1

[ir_para]

 * ir_used: 0 to disable; 1 to enable
 * ir0_rx: receiver GPIO configuration
 * ir0_tx: transmitter GPIO configuration
 * ir1_rx: receiver GPIO configuration
 * ir1_tx: transmitter GPIO configuration

Configuration example: <pre class="brush: ini"> ir_used = 1 ir0_tx = port:PB03<2>default ir0_rx = port:PB04<2>default

ir1_tx = port:PB22<2>default ir1_rx = port:PB23<2>default

[pmu_para]

 * pmu_used: 0 to disable; 1 to enable
 * pmu_used2: 0 to disable; 1 to enable secondary PMU
 * pmu_twi_id: TWI controller to use
 * pmu_twi_addr: TWI address to use
 * pmu_irq_id: interrupt to use; 0 = NMI; 1 - 15 = interrupt 1 to 15
 * pmu_battery_rdc: battery internal resistance in mΩ
 * pmu_battery_cap: battery capacity in mAh
 * pmu_init_chgcur: initial charging current in mA; 300, 400 ... 1800
 * pmu_init_chgcur2: initial charging current in mA for secondary PMU; 300, 400 ... 1800
 * pmu_earlysuspend_chgcur2 early suspend charging current in mA; 300, 400 ... 1800
 * pmu_suspend_chgcur: suspended charging current in mA; 300, 400 ... 1800
 * pmu_suspend_chgcur2: suspended charging current in mA for secondary PMU; 300, 400 ... 1800
 * pmu_resume_chgcur: normal charging current in mA; 300, 400 ... 1800
 * pmu_resume_chgcur2: normal charging current in mA for secondary PMU; 300, 400 ... 1800
 * pmu_shutdown_chgcur: powered down charge current in mA; 300, 400 ... 1800
 * pmu_shutdown_chgcur2: powered down charge current in mA for secondary PMU; 300, 400 ... 1800
 * pmu_init_chgvol: initial charging target voltage in mV; 4100/4150/4200/4360
 * pmu_init_chgend_rate: initial charging current ratio in %; 10, 15
 * pmu_init_chg_enabled: 0 to disable; 1 to enable
 * pmu_init_adc_freq: initial ADC sampling rate in Hz; 25/50/100/200
 * pmu_init_adc_freqc: initial ADC coulomb meter sampling rate in Hz; 25/50/100/200
 * pmu_init_chg_pretime: initial precharge timeout in minutes; 40/50/60/70
 * pmu_init_chg_csttime: initial constant charging current timeout in minutes; 360/480/600/720
 * pmu_bat_para1: = battery charge LUT in %
 * pmu_bat_para2: = battery charge LUT in %
 * pmu_bat_para3: = battery charge LUT in %
 * pmu_bat_para4: = battery charge LUT in %
 * pmu_bat_para5: = battery charge LUT in %
 * pmu_bat_para6: = battery charge LUT in %
 * pmu_bat_para7: = battery charge LUT in %
 * pmu_bat_para8: = battery charge LUT in %
 * pmu_bat_para9: = battery charge LUT in %
 * pmu_bat_para10: = battery charge LUT in %
 * pmu_bat_para11: = battery charge LUT in %
 * pmu_bat_para12: = battery charge LUT in %
 * pmu_bat_para13: = battery charge LUT in %
 * pmu_bat_para14: = battery charge LUT in %
 * pmu_bat_para15: = battery charge LUT in %
 * pmu_bat_para16: = battery charge LUT in %; should always be 100
 * pmu_usbvol_limit: 0 no USB voltage limiter; 1 = limit USB voltage
 * usb pmu_usbvol: USB voltage limit in mV; 4000, 4100 ... 4700
 * pmu_usbcur_limit: 0 no USB current limiter; 1 = limit USB current
 * pmu_usbcur: USB current limit in mA; 100/500/900
 * pmu_pwroff_vol: boot hardware protection voltage in mV; 2600, 2700 ... 3300
 * pmu_pwron_vol: running hardware protection voltage in mV; 2600, 2700 ... 3300
 * pmu_pekoff_time: Power Enable Key, short power button off delay in ms; 4000, 6000, 8000, 10000
 * pmu_pekoff_en: 0 to disable; 1 to enable power button power off
 * pmu_peklong_time: long power off button delay in ms; 1000, 1500, 2000, 2500
 * pmu_pekon_time: power on button delay in ms; 128, 1000, 2000, 3000
 * pmu_pwrok_time: power 'ok' delay in ms; 8, 64
 * pmu_pwrnoe_time: n_oe from low to high shutdown delay time in ms; 128, 1000, 2000, 3000
 * pmu_intotp_en: 0 to disable; 1 to enable over temperature protection
 * pmu_suspendpwroff_vol: shutdown voltage when suspended and battery is low
 * pmu_batdeten: Battery detection enabled
 * pmu_adpdet: adapter detect GPIO configuration
 * pmu_backupen: 1 to enable RTC/backup battery charging

Configuration example: <pre class="brush: ini"> [pmu_para] pmu_used = 1 pmu_twi_addr = 0x34 pmu_twi_id = 0 pmu_irq_id = 0 pmu_battery_rdc = 200 pmu_battery_cap = 2600 pmu_init_chgcur = 300 pmu_suspend_chgcur = 1000 pmu_resume_chgcur = 300 pmu_shutdown_chgcur = 1000 pmu_init_chgvol = 4200 pmu_init_chgend_rate = 15 pmu_init_chg_enabled = 1 pmu_init_adc_freq = 100 pmu_init_adc_freqc = 100 pmu_init_chg_pretime = 50 pmu_init_chg_csttime = 720 pmu_bat_para1 = 0 pmu_bat_para2 = 0 pmu_bat_para3 = 1 pmu_bat_para4 = 5 pmu_bat_para5 = 7 pmu_bat_para6 = 13 pmu_bat_para7 = 16 pmu_bat_para8 = 26 pmu_bat_para9 = 36 pmu_bat_para10 = 46 pmu_bat_para11 = 53 pmu_bat_para12 = 61 pmu_bat_para13 = 73 pmu_bat_para14 = 84 pmu_bat_para15 = 92 pmu_bat_para16 = 100 pmu_usbvol_limit = 1 pmu_usbvol = 4400 pmu_usbcur_limit = 1 pmu_usbcur = 900 pmu_pwroff_vol = 3300 pmu_pwron_vol = 2900 pmu_pekoff_time = 6000 pmu_pekoff_en = 1 pmu_peklong_time = 1500 pmu_pekon_time = 1000 pmu_pwrok_time = 64 pmu_pwrnoe_time = 2000 pmu_intotp_en = 1 pmu_adpdet = port:PH02<0> pmu_batdeten = 1 pmu_suspendpwroff_vol = 3500

pmu_used2 = 0 pmu_init_chgcur2 = 400 pmu_suspend_chgcur2 = 1200 pmu_resume_chgcur2 = 400 pmu_shutdown_chgcur2 = 1200

[recovery_key]

 * key_min: minimal length for the key to be depressed in seconds
 * key_max: maximal length for the key to be depressed in seconds

Example configuration: <pre class="brush: ini"> key_min	= 4 key_max	= 32

dvfs voltage-frequency table configuration
Define at which frequency what voltage should be set. Recommended defaults:

[dvfs_table]

 * max_freq: cpu maximum frequency in Hz; can not be more than 1008 MHz
 * min_freq: cpu minimum frequency in Hz; can not be less than 60 MHz
 * lv_count: number of lv_freq/lv_volt pairs; must be < 16
 * lv1_freq: state 1 frequency
 * lv1_volt: state 1 voltage

<pre class="brush: ini"> [dvfs_table] max_freq = 1008000000 min_freq = 60000000 lv_count = 5

lv1_freq = 1056000000 lv1_volt = 1500

lv2_freq = 1008000000 lv2_volt = 1400

lv3_freq = 912000000 lv3_volt = 1350

lv4_freq = 864000000 lv4_volt = 1300

lv5_freq = 624000000 lv5_volt = 1250

led configuration
LEDs are accessible via sys-fs; for example on the cubietruck you can find the following directory: /sys/class/leds/blue\:ph21\:led1 `cat` the file trigger to see the triggers that can be set in .fex files. Currently these are
 * none (kinda defeats the purpose of setting a trigger)
 * rfkill0
 * battery-charging-or-full
 * battery-charging
 * battery-full
 * battery-charging-blink-full-solid
 * ac-online
 * usb-online
 * mmc0
 * mmc1
 * timer
 * heartbeat
 * cpu0
 * cpu1
 * default-on
 * rfkill1
 * rfkill2

How much they make sense - experiment. I'd be especially curious about the effects of rfkill settings.

Please note that depending on the trigger in question the sysfs will be populated with even more pseudo files. When you choose timer for example then you get a constant blinking led and two more files: delay_on and delay_off with which you can specify how many milliseconds will the LED stay in on/off state. Very convenient to indicate eg. disk usage or average load with higher blinking frequency and stuff like that.

[leds_para]
Configuration example: <pre class="brush: ini"> [leds_para] leds_used = 1 leds_num = 3 leds_pin_1 = port:PH20<1> <0> leds_name_1 = "ph20:green:led1" leds_trigger_1 = "heartbeat" leds_pin_2 = port:PH21<1> <0> leds_name_2 = "ph21:blue:led2" leds_trigger_2 = "cpu0" leds_pin_3 = port:PI12<1> <0> leds_name_3 = "red:pi12:led3" leds_trigger_3 = "cpu1"

external leds
External LEDs that are connected to one of the GPIO pins (don't forget to add a resistor!) can also be defined in the fex file and used like internal ones afterwards. You have to check which GPIO pin is connected to which SoC pin and use this in the definition. As an example a 3rd led on a Banana Pro connected to GPIO pin 19 (PI12) in the config above. This will lead to a sysfs entry /sys/class/leds/red:pi12:led3 where everything works just like with internal leds.

[dynamic]
Configuration example: <pre class="brush: ini"> [dynamic] MAC = "000000000000"