7.3 KiB
OpenIPC Wiki
Ingenic SoC research and debugging notes
Control PWM channels on ingenic devices using ingenic-pwm
utility included with OpenIPC:
INGENIC PWM Control Version: Oct 19 2023_18:01:16_latest-2294-g72f266e7
Usage: ingenic-pwm [options]
Options:
-c, --channel=<0-7> Specify PWM channel number
-q, --query Query channel state
-e, --enable Enable channel
-d, --disable Disable channel
-p, --polarity=<0|1> Set polarity (0: Inversed, 1: Normal)
-D, --duty=<duty_ns> Set duty cycle in ns
-P, --period=<period_ns> Set period in ns
-r, --ramp=<value> Ramp PWM (+value: Ramp up, -value: Ramp down)
-x, --max_duty=<max_duty_ns> Set max duty for ramping
-n, --min_duty=<min_duty_ns> Set min duty for ramping
-h, --help Display this help message
Example commands:
Turn on LED, Dim ON: Set PWM Channel 3 enabled, Period to 1000000, min Duty 0, max Duty 1000000, ramp rate + Dim Up, - to Dim down
ingenic-pwm -c 3 -e -p 1 -P 1000000 -n 0 -x 1000000 -r 50000
ingenic-pwm -c 3 -e -p 1 -P 1000000 -n 0 -x 1000000 -r -50000
Enable full engineering debuging
Enable: Run switch_debug on
to enable debugging
Disable: Run switch debug off
or switch_debug
to surpress debugging output
Enabling will enable FULL engineering debuging output in dmesg.
Dynamic Debugging
Dynamic Debugging has been enabled on the Linux Kernel for the Ingenic platforms to surpress excess engineering debugging.
https://www.kernel.org/doc/html/v4.14/admin-guide/dynamic-debug-howto.html
Mount debugfs first:
mount -t debugfs none /sys/kernel/debug
Check entries:
cat /sys/kernel/debug/dynamic_debug/control
Example output:
../ingenic-opensdk/kernel/avpu/t31/avpu_main.c:314 [avpu]write_reg =_ "Out-of-range register write: 0x%.4X\012"
../ingenic-opensdk/kernel/avpu/t31/avpu_main.c:304 [avpu]write_reg =_ "Reg write: 0x%.4X: 0x%.8x\012"
../ingenic-opensdk/kernel/avpu/t31/avpu_main.c:302 [avpu]write_reg =_ "Reg write: 0x%.4X: 0x%.8x\012"
../ingenic-opensdk/kernel/avpu/t31/avpu_main.c:290 [avpu]read_reg =_ "Reg read: 0x%.4X: 0x%.8x\012"
../ingenic-opensdk/kernel/avpu/t31/avpu_main.c:234 [avpu]wait_irq =_ "Unblocking channel\012"
../ingenic-opensdk/kernel/avpu/t31/avpu_ip.c:128 [avpu]avpu_hardirq_handler =_ "ENOMEM: Missed interrupt\012"
../ingenic-opensdk/kernel/avpu/t31/avpu_ip.c:117 [avpu]avpu_hardirq_handler =_ "bitfield is 0\012"
/mnt/mips/external_utilities/OpenIPC/openingenic/kernel/sensors/t31/gc2053/gc2053.c:1860 [sensor_gc2053_t31]gc2053_probe =p "probe ok ------->gc2053\012"
/mnt/mips/external_utilities/OpenIPC/openingenic/kernel/sensors/t31/gc2053/gc2053.c:1422 [sensor_gc2053_t31]gc2053_s_stream =p "gc2053 stream off\012"
/mnt/mips/external_utilities/OpenIPC/openingenic/kernel/sensors/t31/gc2053/gc2053.c:1415 [sensor_gc2053_t31]gc2053_s_stream =p "gc2053 stream on\012"
/mnt/mips/external_utilities/OpenIPC/openingenic/kernel/sensors/t31/gc2053/gc2053.c:1288 [sensor_gc2053_t31]gc2053_detect =p "-----%s: %d ret = %d, v = 0x%02x\012"
/mnt/mips/external_utilities/OpenIPC/openingenic/kernel/sensors/t31/gc2053/gc2053.c:1282 [sensor_gc2053_t31]gc2053_detect =p "-----%s: %d ret = %d, v = 0x%02x\012"
=_
means debugging output is disabled
, while =P
will indcate that debugging output is enabled
.
Check dmesg
for output
Note: Some old kernel modules may complain about missing symbols relating to dynamic debugging:
[ 4.357160] sample_core: Unknown symbol __dynamic_dev_dbg (err 1)
[ 4.361299] sample_hal: Unknown symbol __dynamic_dev_dbg (err 1)
To resolve this, make sure you update your entire OpenIPC installation to the latest versions after 10-20-2023, or try to update the individual kernel modules experiencing issues. As a last restort, you can also disable CONFIG_DYNAMIC_DEBUG
in your kernel config, but extensive testing has not shown this to be an issue.
Change sensor clock rate dynamically
echo "30000000" > /proc/jz/clock/cgu_cim/rate
This may be used to change the MCLK clockrate setting for image sensors. You can use this to get more bandwidth for higher resoluitons for FPS rates.
Dynamically insert or remove SDIO device
Use these commands to enable or disable SDIO devices after the system has already booted.
echo "INSERT" > /sys/devices/platform/jzmmc_v1.2.X/present
echo "REMOVE" > /sys/devices/platform/jzmmc_v1.2.X/present
Where X = the MMC device you want to control MSC0=0 MSC1=1
IMP-Control
IMP-Control is a versatile tool designed for controlling and configuring a wide range of parameters in the Ingenic IMP library, within the Majestic streamer. This tool allows for fine-tuning of both audio and video settings to achieve optimal performance in various environments.
Key Features and Functionalities
-
Audio Adjustments:
aihpf
: High Pass Filter toggle (on/off).aiagc
: Auto Gain Control with adjustable gain levels and compensation.ains
: Noise Suppression with intensity levels.aiaec
: Echo Cancellation toggle.aivol
andaovol
: Adjusts audio input and output volume respectively.aigain
andaogain
: Sets audio input and output gain.aialc
: Audio Input Automatic Level Control gain setting.
-
Video Enhancements:
flip
: Manipulate image orientation.contrast
,brightness
,saturation
,sharpness
: Adjust basic image qualities.sinter
,temper
: Enhance image with sinter and temper strength adjustments.aecomp
: Auto Exposure Compensation.dpc
,drc
: Control DPC and DRC strengths.hilight
: Adjust highlight intensity.again
,dgain
: Set analog and digital gains.hue
: Modify color hue.ispmode
: Switch between day and night modes.flicker
: Anti-flicker settings.
-
Advanced Controls:
whitebalance
: Adjust white balance with modes, red and blue gains.sensorfps
: Configure the sensor frames per second.backlightcomp
: Backlight Compensation Strength.defogstrength
: Control defog strength for clearer images.framerate
,gopattr
: Manage frame rates and Group of Pictures (GOP) attributes.setbitrate
,setgoplength
,setqp
,setqpbounds
,setqpipdelta
: Detailed encoder settings.rcmode
: Set or get the Rate Control Mode.aemin
: Set Auto Exposure minimum parameters.autozoom
,frontcrop
: Adjust zoom and crop settings.mask
: Set masking parameters for privacy or emphasis.
-
OSD and Analytics:
getosdattr
,getosdgrpattr
: Retrieve On-Screen Display (OSD) attributes.getgamma
,getevattr
,getaeluma
,getawbct
,getafmetrics
,gettotalgain
,getaeattr
: Fetch various image processing metrics.
-
System Information:
getimpversion
: Get the IMP version.getcpuinfo
: Retrieve CPU information.
-
Demonstration and Testing:
full_demo
: Runs a comprehensive demonstration of various functionalities.
How to Use
The general usage syntax is:
imp-control [command] [parameters]
Parameters vary based on the command, and in some cases, they are optional to retrieve current values.
To get help and see the list of available commands, use:
imp-control help