分享

mtk lcm driver

 RK34 2014-07-23
ProjectConfig.mk
CUSTOM_LK_LCM=hx8394a_hd720_dsi_vdo_tianma
CUSTOM_KERNEL_LCM=hx8394a_hd720_dsi_vdo_tianma
CUSTOM_UBOOT_LCM=hx8394a_hd720_dsi_vdo_tianma
LCM_HEIGHT=1280
LCM_WIDTH=720

PLL CLOCK:25M~625M.
PLL CLOCK=Frame_length x FPS/2;

mediatek/custom/common/kernel/lcm/

mt65xx_lcm_list.c
extern LCM_DRIVER hx8394a_hd720_dsi_vdo_tianma_lcm_drv;

LCM_DRIVER* lcm_driver_list[] =
{
#if defined(HX8394A_HD720_DSI_VDO_TIANMA)
    &hx8394a_hd720_dsi_vdo_tianma_lcm_drv,
#endif
}

lcm_drv.h
typedef struct
{
    const char* name;
    void (*set_util_funcs)(const LCM_UTIL_FUNCS *util);
    void (*get_params)(LCM_PARAMS *params);

    void (*init)(void);
    void (*suspend)(void);
    void (*resume)(void);

    // for power-on sequence refinement
    void (*init_power)(void);
    void (*suspend_power)(void);
    void (*resume_power)(void);

    void (*update)(unsigned int x, unsigned int y,
                   unsigned int width, unsigned int height);
    unsigned int (*compare_id)(void);
} LCM_DRIVER;

typedef struct
{
    LCM_TYPE type;
    LCM_CTRL ctrl;  //! how to control LCM registers

    /* common parameters */
    unsigned int width;
    unsigned int height;
    unsigned int io_select_mode; //DBI or DPI should select IO mode according to chip spec
    /* particular parameters */
    LCM_DBI_PARAMS dbi;
    LCM_DPI_PARAMS dpi;
    LCM_DSI_PARAMS dsi;
    unsigned int physical_width;
    unsigned int physical_height;
} LCM_PARAMS;

typedef enum
{
    LCM_TYPE_DBI = 0,
    LCM_TYPE_DPI,
    LCM_TYPE_DSI
} LCM_TYPE;


typedef struct
{
    void (*set_reset_pin)(unsigned int value);
    int  (*set_gpio_out)(unsigned int gpio, unsigned int value);

    void (*udelay)(unsigned int us);
    void (*mdelay)(unsigned int ms);

    void (*send_cmd)(unsigned int cmd);
    void (*send_data)(unsigned int data);
    unsigned int (*read_data)(void);

    void (*dsi_set_cmdq_V3)(LCM_setting_table_V3 *para_list, unsigned int size, unsigned char force_update);
    void (*dsi_set_cmdq_V2)(unsigned cmd, unsigned char count, unsigned char *para_list, unsigned char force_update);
    void (*dsi_set_cmdq)(unsigned int *pdata, unsigned int queue_size, unsigned char force_update);
    void (*dsi_write_cmd)(unsigned int cmd);
    void (*dsi_write_regs)(unsigned int addr, unsigned int *para, unsigned int nums);
    unsigned int (*dsi_read_reg)(void);
    unsigned int (*dsi_dcs_read_lcm_reg)(unsigned char cmd);
    unsigned int (*dsi_dcs_read_lcm_reg_v2)(unsigned char cmd, unsigned char *buffer, unsigned char buffer_size);
    void (*wait_transfer_done)(void);

    /** FIXME: GPIO mode should not be configured in lcm driver
               REMOVE ME after GPIO customization is done
    */
    int (*set_gpio_mode)(unsigned int pin, unsigned int mode);
    int (*set_gpio_dir)(unsigned int pin, unsigned int dir);
    int (*set_gpio_pull_enable)(unsigned int pin, unsigned char pull_en);

} LCM_UTIL_FUNCS;


    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约