在展锐sc9820e的代码包中,有些没有在用的代码模块功能是不确定是否OK的,比如这里的PWM模块,在默认的代码里的配置是有问题的,需要花不少时间来调试,才能把功能调正常。
默认的背光是使用PMIC sc2721g的IB0~IB2,最大能输出83mA的总电流,但有些要求更大电流的话,内部PMIC就无能为力了,需要借用外部背光IC了,这里是讲由内部PMIC的改为PWM方式的背光方式。本文讲述的PWM使能引脚选用的是GPIO131/PWMBG1,可以看到该GPIO口的PWM模式为模式1
首先要注意的是,背光的修改是包含uboot和kernel部分的,所以首选修改uboot
u-boot15\include\configs\sp9820e_1h10.h注释掉背光相关宏,如下:
//#define CONFIG_BACKLIGHT_WHTLED
在u-boot15\board\spreadtrum\sp9820e_1h10\sprd_bl.c
中修改#define PWM_INDEX 的值,如果PWM使能引脚使用的是PWMGB0或PWMBG1,则表明使用的是第0 1 2 这几级PWM中的第1组,则上述这个应定义为1
#define PWM_INDEX 1
pinmap文件注意修改,u-boot15\board\spreadtrum\sp9820e_1h10\pinmap-sp9820e.c
{REG_PIN_GPIO33, BITS_PIN_AF(1)},
{REG_MISC_PIN_GPIO33, BITS_PIN_DS(1)|BIT_PIN_NULL|BIT_PIN_NUL|BIT_PIN_SLP_AP|BIT_PIN_SLP_NUL|BIT_PIN_SLP_OE},
下面讲在kernel部分的修改方法及修改过程中遇到问题的分析解决过程
先是在kernel\arch\arm\configs\sprd_sharkle_fp_defconfig中打开pwm的背光,然后再关闭原来的sc2721_bltcled方式的背光,并手动删除out目录下面的out\target\product\sp9820e_1h10ll\obj\KERNEL\drivers\video\backlight文件夹,让生成的目录更干净。
CONFIG_BACKLIGHT_PWM=y
# CONFIG_BACKLIGHT_SC2721_BLTCLED is not set
然后在sp9820e-common.dtsi中添加pwm部分的sprd_backlight内容:
adf: sprd-adf {
compatible = "sprd-adf";
status = "okay";
sprd,display-mode = <3>;
sprd,dispc = <&swdispc>;
};
sprd_backlight {
compatible = "pwm-backlight";
pwms = <&pwms 0 20000>;
pwm-names = "backlight";
brightness_max = <256>;
brightness-levels = <
6 6 6 6
6 6 6 6 6 6 6 7 8 9
10 11 12 13 14 15 16 17 18 19
20 21 22 23 24 25 26 27 28 29
30