手头有一个lichee+5寸屏,一个3.5寸的唱戏机。在使用uboot的时候,发现nano点屏没有问题,唱戏机就不行。
后面去查电路找引脚,发现唱戏机使用PE12控制PWM,nano为低电平,唱戏机为高电平。
按照nano的教程将引脚改为PE12,分辨率改为480*272,然后设置了PWM反转,还是不行。
#define CONFIG_VIDEO_LCD_BL_PWM "PE6"
查看代码,定位到sunxi_display.c中void *video_hw_init(void),初始化屏幕。
*video_hw_init()>sunxi_mode_set(mode, fb_dma_addr)>sunxi_lcdc_backlight_enable()->
sunxi_name_to_gpio(CONFIG_VIDEO_LCD_BL_PWM)->gpio_lookup_name()->dm_gpio_lookup_name()
最后这个函数,ret = dm_gpio_lookup_name(name, &desc);返回失败了。
查资料感觉这个应该跟uboot驱动模型(DM),有关。是不是需要配置设备树啊,请问应该怎么配置?
也就是想通过dm驱动设置对应的PWM引脚的电平。
离线
找下对应的 board.c 文件,或许这里面改。
离线
楼主,你这个问题解决了吗,我也碰到uboot增加GPIO控制,不知道在哪儿添加?
离线
还是我自己来结帖了,一直忙着板砖,没时间好好学习。
lichee nano 使用的是PE6 = 1点屏,由于PE6上电默认为1,所以上述配置不生效也能点屏
修改u-boot/arch/arm/mach-sunxi/board.c
static int sunxi_gpio_output2(u32 pin, u32 val)
{
u32 dat;
u32 bank = GPIO_BANK(pin);
u32 num = GPIO_NUM(pin);
struct sunxi_gpio *pio = BANK_TO_GPIO(bank);
dat = readl(&pio->dat);
if (val)
dat |= 0x1 << num;
else
dat &= ~(0x1 << num);
writel(dat, &pio->dat);
return 0;
}
static int gpio_init(void)
{
//使用非dm驱动直接设置引脚电平
sunxi_gpio_set_cfgpin(SUNXI_GPE(12), SUNXI_GPIO_OUTPUT);
sunxi_gpio_output2(SUNXI_GPE(12), 1);
离线