Fex Guide

From linux-sunxi.org
Jump to navigation Jump to search

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 engineered 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.

Sticky-note-pin.png Note: The mainline Linux kernel makes no use of FEX / script.bin, and relies on the device tree model instead (.dtb files).

Port Definitions

Description of the GPIO configuration in the form:

port:<port><mux feature><pullup/down><drive capability><output level>

where:

<port> is the port to configure (ie. PH15)
<mux feature> 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.
<pullup/down> is 0 = disabled; 1 = pullup enabled; 2 = pulldown enabled (only valid when port is an input)
<drive capability> defines the output drive in mA, values are 0-3 corresponding to 10mA, 20mA, 30mA and 40mA.
<output level> sets the initial output level for the port; 0 = low; 1 = high (only valid for outputs)

The <pullup/down> <drive capability> and <output level> can be set to <default> which means don't change. Any trailing <default> options can be omitted.

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

Port AXP20x AXP22x / AXP8xx
0 GPIO0 GPIO0
1 GPIO1 GPIO1
2 GPIO2 DC1SW
3 GPIO3 CHGLED
4 N_VBUSEN
5 WAKEUP (slave PMIC)
6 SWOUT (slave PMIC)

application

[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.

  • 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.
[product]
version = "1.0"
machine = "A10-EVB-V1.2"

system configuration

[target]

Sticky-note-pin.png Note: blue module chip pin configuration, the black module internal control configuration

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><default><default>
sdc_d0 = port:PF01<2><1><default><default>
sdc_clk = port:PF02<2><1><default><default>
sdc_cmd = port:PF03<2><1><default><default>
sdc_d3 = port:PF04<2><1><default><default>
sdc_d2 = port:PF05<2><1><default><default>

[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><default><default>
sdc_d0 = port:PF01<2><1><default><default>
sdc_clk = port:PF02<2><1><default><default>
sdc_cmd = port:PF03<2><1><default><default>
sdc_d3 = port:PF04<2><1><default><default>
sdc_d2 = port:PF05<2><1><default><default>

[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><default><default>
sdc_clk = port:PC07<3><1><default><default>
sdc_d0 = port:PC08<3><1><default><default>
sdc_d1 = port:PC09<3><1><default><default>
sdc_d2 = port:PC10<3><1><default><default>
sdc_d3 = port:PC11<3><1><default><default>

[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><default><default><default>
twi_sda = port:PB01<2><default><default><default>

[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><default><default><default>
jtag_ck = port:PB15<3>default><default><default>
jtag_do = port:PB16<3>default><default><default>
jtag_di = port:PB17<3>default><default><default>

[system]

  • recovery_key: recovery key GPIO configuration

Configuration example:

recovery_key = port:PH16<0><1><default><default>

[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><default><default><0>
gpio_pin_2 = port:PH20<1><default><default><0>
gpio_pin_3 = port:PB03<0><default><default><default>
gpio_pin_4 = port:PH22<1><default><default><0>

[gpio_init]

  • pin_1: Initial pin 1 GPIO configuration

Configuration example:

pin_1 = port:PH10<1><default><default><0>
pin_2 = port:PH20<1><default><default><0>

SDRAM

[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:

[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
g2d_used = 1
g2d_size = 0x1000000

ethernet MAC configuration

[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:

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

i2c configuration

[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:

[twi0_para]
twi0_used = 1
twi0_scl = port:PB00<2><default><default><default>
twi0_sda = port:PB01<2><default><default><default>

[twi1_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:

[tw1_para]
twi1_used = 1
twi1_scl = port:PB18<2><default><default><default>
twi1_sda = port:PB19<2><default><default><default>

[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:

[twi2_para]
twi2_used = 1
twi2_scl = port:PB20<2><default><default><default>
twi2_sda = port:PB21<2><default><default><default>

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:

[uart_para0]
uart_used = 1
uart_port = 0
uart_tx = port:PB22<2><1><default><default>
uart_rx = port:PB23<2><1><default><default>

[uart_para1]

Configuration example:

[uart_para1]
uart_used = 0
uart_port = 1
uart_type = 8
uart_tx = port:PA10<4><1><default><default>
uart_rx = port:PA11<4><1><default><default>
uart_rts = port:PA12<4><1><default><default>
uart_cts = port:PA13<4><1><default><default>
uart_dtr = port:PA14<4><1><default><default>
uart_dsr = port:PA15<4><1><default><default>
uart_dcd = port:PA16<4><1><default><default>
uart_ring = port:PA17<4><1><default><default>

[uart_para2]

Configuration example:

[uart_para2]
uart_used = 0
uart_port = 2
uart_type = 4
uart_tx = port:PI18<3><1><default><default>
uart_rx = port:PI19<3><1><default><default>
uart_rts = port:PI16<3><1><default><default>
uart_cts = port:PI17<3><1><default><default>

[uart_para3]

Configuration example:

[uart_para3]
uart_used = 0
uart_port = 3
uart_type = 4
uart_tx = port:PH00<4><1><default><default>
uart_rx = port:PH01<4><1><default><default>
uart_rts = port:PH02<4><1><default><default>
uart_cts = port:PH03<4><1><default><default>

[uart_para4]

Configuration example:

[Uart_para4]
uart_used = 0
uart_port = 4
uart_type = 2
uart_tx = port:PH04<4><1><default><default>
uart_rx = port:PH05<4><1><default><default>

[uart_para5]

Configuration example:

[uart_para5]
uart_used = 0
uart_port = 5
uart_type = 2
uart_tx = port: PH06<4><1><default><default>
uart_rx = port: PH07<4><1><default><default>

[uart_para6]

Configuration example:

[uart_para6]
uart_used = 0
uart_port = 6
uart_type = 2
uart_tx = port:PA12<4><1><default><default>
uart_rx = port:PA13<4><1><default><default>

[uart_para7]

Configuration example:

[uart_para7]
uart_used = 0
uart_port = 7
uart_type = 2
uart_tx = port:PA14<4><1><default><default>
uart_rx = port:PA15<4><1><default><default>

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

Sticky-note-pin.png Note: Not all spi chip select bits are required to be set

[spi0_para]

Configuration example 1:

[spi0_para]
spi_used = 0
spi_cs_bitmap = 1
spi_cs0 = port:PI10<3><default><default><default>
spi_sclk = port:PI11<3><default><default><default>
spi_mosi = port:PI12<3><default><default><default>
spi_miso = port:PI13<3><default><default><default>
spi_cs1 = port:PI14<3><default><default><default>

Configuration example 2:

[spi0_para]
spi_used = 0
spi_cs_bitmap = 1
spi_mosi = port:PC00<3><default><default><default>
spi_miso = port:PC01<3><default><default><default>
spi_sclk = port:PC02<3><default><default><default>
spi_cs0 = port:PC23<3><default><default><default>

[spi1_para]

Configuration example 1:

[spi1_para]
spi_used = 0
spi_cs_bitmap = 1
spi_cs0 = port:PA00<3><default><default><default>
spi_sclk = port:PA01<3><default><default><default>
spi_mosi = port:PA02<3><default><default><default>
spi_miso = port:PA03<3><default><default><default>
spi_cs1 = port:PA04<3><default><default><default>

Configuration example 2:

[spi1_para]
spi_used = 0
spi_cs_bitmap = 1
spi_cs1 = port:PI15<2><default><default><default>
spi_cs0 = port:PI16<2><default><default><default>
spi_sclk = port:PI17<2><default><default><default>
spi_mosi = port:PI18<2><default><default><default>
spi_miso = port:PI19<2><default><default><default>

[spi2_para]

Configuration example 1:

[spi2_para]
spi_used = 0
spi_cs_bitmap = 1
spi_cs1 = port:PB13<3><default><default><default>
spi_cs0 = port:PB14<3><default><default><default>
spi_sclk = port:PB15<3><default><default><default>
spi_mosi = port:PB16<3><default><default><default>
spi_miso = port:PB17<3><default><default><default>

Configuration example 2:

[spi2_para]
spi_used = 0
spi_cs_bitmap = 1
spi_cs0 = port:PC19<3><default><default><default>
spi_sclk = port:PC20<3><default><default><default>
spi_mosi = port:PC21<3><default><default><default>
spi_miso = port:PC23<3><default><default><default>

[spi3_para]

Configuration example:

[spi3_para]
spi_used = 0
spi_cs_bitmap = 1
spi_cs0 = port:PA05<3><default><default><default>
spi_sclk = port:PA06<3><default><default><default>
spi_mosi = port:PA07<3><default><default><default>
spi_miso = port:PA08<3><default><default><default>
spi_cs1 = port:PA09<3><default><default><default>

external spi device configuration

[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:

[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><default><default><default> 

resistive touch panel configuration

[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:

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

capacitive touch panel configuration

[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:

[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><default><default><default>
ctp_wakeup = port: PB13<1><default><default><1>
ctp_io_port = port: PH21<0><default><default><default>

touch key configuration

[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:

[tkey_para]
tkey_used = 0
tkey_name = "hv_keypad"
tkey_twi_id = 2
tkey_twi_addr = 0x62
tkey_int = port: PI13<6><default><default><default>

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:

[tabletkeys_para]
tabletkeys_used=1
key0_code = 114
key1_code = 115

motor configuration

[motor_para]

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

Configuration example:

[motor_para]
motor_used = 0
motor_shake = port:PB03<1><default><default><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]

  • locks_used: 0 to disable; 1 to enable
  • locks_gpio: switch GPIO configuration

Configuration example:

[locks_para]
locks_used = 0
locks_gpio = port:PH00<0><default><default><0>

nand flash 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:

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

boot disp configuration

[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 configuration

[disp_init]

  • disp_init_enable: 0 to disable; 1 to enable
  • disp_mode: Display mode to use:
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):
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:
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:
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:
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):
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


Configuration example for LCD:

[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:

[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):

[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:
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 pulse width
  • lcd_hv_hspw: hsync pulse 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:
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

[lcd0_para]

Configuration example:

[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><default><1>
lcd_power_used = 1
lcd_power = port: PH08<1><0><default><1>
lcd_pwm_used = 1
lcd_pwm = port:PB02<2><default><default><default>
lcd_gpio_0 =
lcd_gpio_1 =
lcd_gpio_2 =
lcd_gpio_3 =
lcdd0 = port:PD00<2><default><default><default>
lcdd1 = port:PD01<2><default><default><default>
lcdd2 = port:PD02<2><default><default><default>
lcdd3 = port:PD03<2><default><default><default>
lcdd4 = port:PD04<2><default><default><default>
lcdd5 = port:PD05<2><default><default><default>
lcdd6 = port:PD06<2><default><default><default>
lcdd7 = port:PD07<2><default><default><default>
lcdd8 = port:PD08<2><default><default><default>
lcdd9 = port:PD09<2><default><default><default>
lcdd10 = port:PD10<2><default><default><default>
lcdd11 = port:PD11<2><default><default><default>
lcdd12 = port:PD12<2><default><default><default>
lcdd13 = port:PD13<2><default><default><default>
lcdd14 = port:PD14<2><default><default><default>
lcdd15 = port:PD15<2><default><default><default>
lcdd16 = port:PD16<2><default><default><default>
lcdd17 = port:PD17<2><default><default><default>
lcdd18 = port:PD18<2><default><default><default>
lcdd19 = port:PD19<2><default><default><default>
lcdd20 = port:PD20<2><default><default><default>
lcdd21 = port:PD21<2><default><default><default>
lcdd22 = port:PD22<2><default><default><default>
lcdd23 = port:PD23<2><default><default><default>
lcdclk = port:PD24<2><default><default><default>
lcdde = port:PD25<2><default><default><default>
lcdhsync = port:PD26<2><default><default><default>
lcdvsync = port:PD27<2><default><default><default>

Other configuration examples for certain panels:

;lvds 640x480   module name: SG0570EDG
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><default><default>
lcd_pwm_pol              = 0

;RGB 800x480	module name: H-B070D-15C
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 800x600    module name: H-B080D-24F
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 480x272    module name: KD43G18-40NB-A11
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

;lvds 1024x600   module name: CLAP101NC01CW�
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 1024x768   module name: KD080D3-40NA-A2
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: LG-LP097X02
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

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:

[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><default><default>

lcd_gpio_0               = 
lcd_gpio_1               = 
lcd_gpio_2               = 
lcd_gpio_3               = 

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

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:
dac Output source
0 Composite
1 Luma
2 Chroma
3
4 Y
5 Pb
6 Pr
7 None

Configuration example:

[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:
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

[csi0_para]

Configuration example:

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

[csi1_para]

Configuration example:

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

tv configuration

[tvout_para]

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

Configuration example:

tvout_used = 1
tvout_channel_num = 1
tv_en = port:PI12<1><default><default><0>

[tvin_para]

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

Configuration example:

tvin_used = 1
tvin_channel_num = 4

sata configuration

[sata_para]

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

Configuration example:

sata_used = 1
sata_power_en = port:PB08<1><default><default><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 (卡检测模式):
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

[mmc0_para]

Configuration example:

[mmc0_para]
sdc_used = 1
sdc_detmode = 1
bus_width = 4
sdc_d1 = port:PF00<2><1><default><default>
sdc_d0 = port:PF01<2><1><default><default>
sdc_clk = port:PF02<2><1><default><default>
sdc_cmd = port:PF03<2><1><default><default>
sdc_d3 = port:PF04<2><1><default><default>
sdc_d2 = port:PF05<2><1><default><default>
sdc_det = port:PH01<0><1><default><default>
sdc_use_wp = 0
sdc_wp =

[mmc1_para]

Configuration example:

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

[mmc2_para]

Configuration example:

[mmc2_para]              
sdc_used = 0

[mmc3_para]

Configuration example:

                         
[mmc3_para]              
sdc_used = 1
sdc_detmode = 4
bus_width = 4
sdc_cmd = port:PI04<2><1><2><default>
sdc_clk = port:PI05<2><1><2><default>
sdc_d0 = port:PI06<2><1><2><default>
sdc_d1 = port:PI07<2><1><2><default>
sdc_d2 = port:PI08<2><1><2><default>
sdc_d3 = port:PI09<2><1><2><default>
sdc_det = 
sdc_use_wp = 0
sdc_wp =

memory stick configuration

[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:

[ms_para]
ms_used = 1
ms_bs = port:PH06<5><default><default><default>
ms_clk = port:PH07<5><default><default><default>
ms_d0 = port:PH08<5><default><default><default>
ms_d1 = port:PH09<5><default><default><default>
ms_d2 = port:PH10<5><default><default><default>
ms_d3 = port:PH11<5><default><default><default>
ms_det = port:PH2<0><1><default><default>

sim card configuration

[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:

[smc_para]
smc_used = 1
smc_rst = port:PH13<5><default><default><default>
smc_vppen = port:PH14<5><default><default><default>
smc_vppp = port:PH15<5><default><default><default>
smc_det = port:PH16<5><default><default><default>
smc_vccen = port:PH17<5><default><default><default>
smc_sck = port:PH18<5><default><default><default>
smc_sda = port:PH19<5><default><default><default>

ps2 configuration

[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:

[ps2_0_para]
ps2_used = 1
ps2_scl = port:PI20<2><1><default><default>
ps2_sda = port:PI21<2><1><default><default>

[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:

[ps2_1_para]
ps2_used = 1
ps2_scl = port:PI20<2><1><default><default>
ps2_sda = port:PI21<2><1><default><default>

can bus configuration

[can_para]

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

Configuration example:

[Can_para]
can_used = 1
can_tx = port:PA16<3><default><default><default>
can_rx = port:PA17<3><default><default><default>

matrix keyboard

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:

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

USB control flags

  • usb_used: 0 to disable; 1 to enable
  • usb_port_type: USB port type:
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:
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:

[usbc0]

Configuration example:

[usbc0]
usb_used = 1
usb_port_type = 2
usb_detect_type = 1
usb_id_gpio = port:PH04<0><1><default><default>
usb_det_vbus_gpio = port:PH05<0><0><default><default>
usb_drv_vbus_gpio = port:PB09<1><0><default><0>
usb_host_init_state = 0

[usbc1]

Configuration example:

[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><default><0>
usb_host_init_state = 1

[usbc2]

Configuration example:

[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><default><0>
usb_host_init_state = 1

USB Device

[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:

[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:

[msc_feature]
vendor_name = "USB 2.0"
product_name = "USB Flash Driver"
release = 100
luns = 2

G Sensor configuration

[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:

[Gsensor_para]
gsensor_used = 1
gsenser_name = "bma250"
gsensor_twi_id = 1
gsensor_twi_addr = 0x18
gsensor_int1 = port:PH00<6><1><default><default>
gsensor_int2 = port:PI10<6><1><default><default>

Configuration example 2:

[Gsensor_para]
gsensor_used = 1
gsenser_name = "bma222"
gsensor_twi_id = 1
gsensor_twi_addr = 0x08
gsensor_int1 = port:PH00<6><1><default><default>
gsensor_int2 = port:PI10<6><1><default><default>

Configuration example 3:

[Gsensor_para]
gsensor_used = 1
gsenser_name = "mma7660"
gsensor_twi_id = 1
gsensor_twi_addr = 0x4c
gsensor_int1 = port:PH00<6><1><default><default>
gsensor_int2 = port:PI10<6><1><default><default>

gps gpio configuration

[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:

[gps_para]
gps_used = 0
gps_spi_id = 2
gps_spi_cs_num = 0
gps_lradc = 1
gps_clk = port:PI00<2><default><default><default>
gps_sign = port:PI01<2><default><default><default>
gps_mag = port:PI02<2><default><default><default>
gps_vcc_en = port:PC22<1><default><default><0>
gps_osc_en = port:PI14<1><default><default><0>
gps_rx_en = port:PI15<1><default><default><0>

sdio wifi configuration

[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 ):
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

Configuration example:

[Sdio_wifi_para]
sdio_wifi_used = 1
sdio_wifi_sdc_id = 3
sdio_wifi_mod_sel = 1

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

Optionally the following parameters can be used when other/multiple transceivers are installed.

; 1 - samsung swl-n20 sdio wifi gpio config
swl_n20_shdn            = port:PH09<1><default><default><0>
swl_n20_host_wakeup     = port:PH10<1><default><default><1>
swl_n20_vdd_en          = port:PH11<1><default><default><0>
swl_n20_vcc_en          = port:PH12<1><default><default><0>

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

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

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

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

us wifi configuration

[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:

[usb_wifi_para]
usb_wifi_used = 0
usb_wifi_usbc_num = 2

3G configuration

[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:

3g_used = 1
3g_usbc_num = 2
3g_uart_num = 0
3g_pwr = port:PH09<1><default><default><1>
3g_wakeup = port:PH10<1><default><default><1>
3g_int = port:PH11<1><default><default><1>

gyroscope

[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:

[gy_para]
gy_used = 1
gy_twi_id = 1
gy_twi_addr = 0x0a
gy_int1 = port:PH18<6><1><default><default>
gy_int2 = port:PH19<6><1><default><default>

light sensor

[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:

[ls_para]
ls_used = 1
ls_twi_id = 1
ls_twi_addr = 0x0c
ls_int = port:PH20<6><1><default><default>

compass

[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:

[compass_para]
compass_used = 0
compass_twi_id = 1
compass_twi_addr = 0x0d
compass_int = port:PI13<6><1><default><default>

blue tooth

[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:

[Bt_para]
bt_used = 1
bt_uart_id = 2
bt_wakeup = port:PI20<1><default><default><default>
bt_gpio = port:PI21<1><default><default><default>
bt_rst = port:PB05<1><default><default><default>

i2s configuration

[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:

[i2s_para]
i2s_used = 1
i2s_channel = 2
i2s_mclk = port:PB05<2><1><default><default>
i2s_bclk = port:PB06<2><1><default><default>
i2s_lrclk = port:PB07<2><1><default><default>
i2s_dout0 = port:PB08<2><1><default><default>
i2s_dout1 =
i2s_dout2 =
i2s_dout3 =
i2s_din = port:PB12<2><1><default><default>

spdif configuration

[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:

[spdif_para]
spdif_used = 1
spdif_mclk =
spdif_dout = port:PB13<4><1><default><default>
spdif_din =

audio configuration

[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:

[audio_para]
audio_used = 1
audio_pa_ctrl = port:PH15<1><default><default><0>
audio_lr_change = 0
playback_used = 1
capture_used = 1

infrared remote configuration

[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:

ir_used = 1
ir0_tx = port:PB03<2>default<default><default>
ir0_rx = port:PB04<2>default<default><default>

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

pmu configuration

[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
  • 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:

[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><default><default><default>
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 configuration

[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:

key_min	= 4
key_max	= 32

dvfs voltage-frequency table configuration

Define at which frequency what voltage should be set. Recommended defaults:

voltage frequency range
1.50 v 1008 MHz - 1056 MHz
1.40 v 912 MHz - 1008 MHz
1.35 v 864 MHz - 912 MHz
1.30 v 624 MHz - 864 MHz
1.25 v 60 MHz - 624 MHz

[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
[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:

[leds_para]
leds_used = 1
leds_num = 3
leds_pin_1 = port:PH20<1><default><default><0>
leds_name_1 = "ph20:green:led1"
leds_trigger_1 = "heartbeat"
leds_pin_2 = port:PH21<1><default><default><0>
leds_name_2 = "ph21:blue:led2"
leds_trigger_2 = "cpu0"
leds_pin_3 = port:PI12<1><default><default><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

[dynamic]

Configuration example:

[dynamic]
MAC = "000000000000"