目前由于要针对多种屏幕,所以需要在lk里读取panel id信息传给kernel使用,也就是通过cmd line来做
首先获取gpio信息
lcd_id = (gpio_get(41)<<1) | (gpio_get(48));
这里获取了当前gpio的电平状态
sprintf(cmd_lcd_id, " LCD_ID=%d ", lcd_id);
把值写到cmd_lcd_id里
然后到
Aboot.c (bootloader\lk\app\aboot):extern char cmd_lcd_id[64];
const char *src;
unsigned char *dst;
cmdline_final = (unsigned char*) malloc((cmdline_len + 4) & (~3));
ASSERT(cmdline_final != NULL);
memset((void *)cmdline_final, 0, sizeof(*cmdline_final));
dst = cmdline_final;
cmdline_len += strlen(cmd_lcd_id);
Aboot.c (bootloader\lk\app\aboot): src = cmd_lcd_id;
src = cmd_lcd_id;
if (have_cmdline) --dst;
have_cmdline = 1;
while ((*dst++ = *src++));
然后到了kernel中
char lcd_id[2] = {0};
EXPORT_SYMBOL(lcd_id);
static int get_lcd_id(char *str)
{
strcpy(lcd_id,str);
printk("matt-lcd_id = %s\n ", lcd_id);
return 0;
}
__setup("LCD_ID=", get_lcd_id); //从cmd line中获取参数
然后到具体的driver里使用
extern char asus_lcd_id[2];
ftxxxx_ts->lcd_vendor=lcd_id[0]; //这里传过来的其实是对应的数字的ack||码,也就是说lk里是3的话这边就是3的码0x33.