开发板部分总结

Android开发板

Android开发板主要有Qualcomm, MTK, HiSilicon, Samsung SOC平台.

96boards开发板

开发板 DragonBoard 410C Mediatek X20 Hikey 960
SOC平台 Snapdragon 410C, MSM8916 Helio X20, MT6797 Hisi Kirin 960
Kernel Linux 3.18 Linux 3.18 Linux 4.4
Android Lollipop/Marshmallow Marshmallow Oreo

详情请见:

  • https://www.96boards.org/products/ce/
  • https://www.alpha-star.org/hikey960
  • https://www.alpha-star.org/mediatek-x20-development-board

Intrinsyc开发板

开发板 Open Q820 Development Kit
SOC Snapdragon 820, MSM8996, APQ8096
Kernel Linux 3.18
Android Oreo

详情请见:

https://www.intrinsyc.com/snapdragon-embedded-development-kits/snapdragon-820-development-kit/

FriendlyARM友善之臂开发板

开发板 Tiny4412
SOC Samsung Exynos 4412
Kernel Linux 3.0
Android Lollipop

详情请见:

http://www.arm9.net/tiny4412.asp

主要文件路径

开发板 Dragonboard 410C
LK bootable\bootloader\lk\target\msm8916
DSI kernel\drivers\video\msm\mdss
DTS kernel\arch\arm64\boot\dts\qcom\apq8016-sbc.dtsi
TP kernel\drivers\input\touchscreen
开发板 Mediatek X20
LK vendor\mediatek\proprietary\bootable\bootloader\lk\dev\lcm
vendor\mediatek\proprietary\bootable\bootloader\lk\project\amt6797_64_open.mk
LCM kernel-3.18\drivers\misc\mediatek\lcm
kernel-3.18\drivers\misc\mediatek\video\mt6797
DTS kernel-3.18\arch\arm64\boot\dts\amt6797_64_open.dts
kernel-3.18\drivers\misc\mediatek\dws\mt6797\amt6797_64_open.dws
TP kernel-3.18\drivers\input\touchscreen\mediatek
开发板 Open Q820 Development Kit
LK LOCKED!
DSI kernel\msm-3.18\drivers\video\msm\mdss
DTS kernel\msm-3.18\arch\arm64\boot\dts\qcom\apq8096-dragonboard.dtsi
TP kernel\msm-3.18\drivers\input\touchscreen
开发板 Hikey 960
DTS hikey-linaro\arch\arm64\boot\dts\hisilicon\hi3660.dtsi
TP hikey-linaro\drivers\input\touchscreen
Android LCD点亮
开机: LK点亮 LCD
  • 如果失败, Kernel点亮LCD
  • 成功,则直到下一次灭屏
开机后灭亮屏: Kernel点亮


LCD手动亮灭屏
1.Qualcomm手动亮灭屏

mdss_fb.c:

void mdss_fb_my_blank(void)
{
    struct fb_info *fbi = fbi_list[0];
    pr_info("[FB]%s called\n", __func__);
    mdss_fb_blank_sub(FB_BLANK_POWERDOWN, fbi, 1);
}

void mdss_fb_my_unblank(void) 
{
    struct fb_info *fbi = fbi_list[0];
    pr_info("[FB]%s called\n", __func__);
    mdss_fb_blank_sub(FB_BLANK_UNBLANK, fbi, 1);
}

mdss_dsi_panel.c:

void mdss_fb_my_blank(void);
void mdss_fb_my_unblank(void);

int mdss_dsi_panel_my_init_(void *dir)
{
    mdelay(1000);
    while (1) {
        if (!mdss_fb_panel_registered(0)) {
            mdelay(500);
            continue;
        }
        mdss_fb_my_blank();
        mdelay(100);
        mdss_fb_my_unblank();
        return 0;
    }
    return 0;
}

void mdss_dsi_panel_my_init(void)
{

    struct task_struct *thread = NULL;
    thread = kthread_run(mdss_dsi_panel_my_init_, (void*)NULL, "my_init");
    if (IS_ERR(thread)) {
        pr_err("failed to create thread for my_init init\n");
        return;
    }    
}

mdss_mdp_intf_video.c

void mdss_dsi_panel_my_init(void);
int mdss_mdp_video_reconfigure_splash_done(struct mdss_mdp_ctl *ctl,
    bool handoff)
{
    //...
    mdss_dsi_panel_my_init();
}
2. MTK开机kernel点屏

disp_lcm.c:

int disp_lcm_init(disp_lcm_handle *plcm, int force)
{
    LCM_DRIVER *lcm_drv = NULL;

    DISPFUNC();
    if (_is_lcm_inited(plcm)) {
        lcm_drv = plcm->drv;

        if (lcm_drv->init_power) {
            if (!disp_lcm_is_inited(plcm) || force) {
                pr_debug("lcm init power()\n");
                lcm_drv->init_power();
            }
        }

        if (lcm_drv->init) {
            if (!disp_lcm_is_inited(plcm) || force) {
                pr_debug("lcm init()\n");
                lcm_drv->init();
            }
        } else {
            DISPERR("FATAL ERROR, lcm_drv->init is null\n");
            return -1;
        }
    }
    //...
}

lk LCM驱动 lcm_driver.c

LCM_DRIVER my_lcm_drv = {
    //.init = lcm_init,
    //.init_power = lcm_init_power,
};

kernel primary_display.c:

force: 0 -> 1

int primary_display_init(char *lcm_name, unsigned int lcm_fps, int is_lcm_inited)
{
    // ...
    if (is_lcm_inited) {
        ret = disp_lcm_init(pgc->plcm, /*0*/1); /* no need lcm power on,because lk power on lcm */
    } else {
        ret = disp_lcm_init(pgc->plcm, 1);

        if (primary_display_is_video_mode())
            dpmgr_path_trigger(pgc->dpmgr_handle, NULL, 0);
    }
    // ...
}

你可能感兴趣的:(Android)