120 lines
3.1 KiB
C
120 lines
3.1 KiB
C
// SPDX-License-Identifier: GPL-2.0
|
|
/*
|
|
* Copyright (c) 2020 Rockchip Electronics Co., Ltd.
|
|
*
|
|
* Author: Zorro Liu <zorro.liu@rock-chips.com>
|
|
*/
|
|
|
|
#ifndef _EBC_TCON_H_
|
|
#define _EBC_TCON_H_
|
|
|
|
#include "../ebc_panel.h"
|
|
|
|
//update mode define
|
|
#define NORMAL_UPDATE 0
|
|
#define DIFF_UPDATE 1
|
|
|
|
//display mode define
|
|
#define DIRECT_MODE 0
|
|
#define LUT_MODE 1
|
|
#define THREE_WIN_MODE 1
|
|
#define EINK_MODE 1
|
|
|
|
struct ebc_tcon {
|
|
struct device *dev;
|
|
void __iomem *regs;
|
|
unsigned int len;
|
|
int irq;
|
|
|
|
struct clk *hclk;
|
|
struct clk *dclk;
|
|
struct regmap *regmap_base;
|
|
|
|
int (*enable)(struct ebc_tcon *tcon, struct ebc_panel *panel);
|
|
void (*disable)(struct ebc_tcon *tcon);
|
|
void (*dsp_mode_set)(struct ebc_tcon *tcon, int update_mode, int display_mode, int three_win_mode, int eink_mode);
|
|
void (*image_addr_set)(struct ebc_tcon *tcon, u32 pre_image_addr, u32 cur_image_addr);
|
|
void (*frame_addr_set)(struct ebc_tcon *tcon, u32 frame_addr);
|
|
int (*lut_data_set)(struct ebc_tcon *tcon, unsigned int *lut_data, int frame_count, int lut_32);
|
|
void (*frame_start)(struct ebc_tcon *tcon, int frame_total);
|
|
|
|
void (*dsp_end_callback)(void);
|
|
};
|
|
|
|
static inline int ebc_tcon_enable(struct ebc_tcon *tcon, struct ebc_panel *panel)
|
|
{
|
|
return tcon->enable(tcon, panel);
|
|
}
|
|
|
|
static inline void ebc_tcon_disable(struct ebc_tcon *tcon)
|
|
{
|
|
tcon->disable(tcon);
|
|
}
|
|
|
|
static inline void ebc_tcon_dsp_mode_set(struct ebc_tcon *tcon, int update_mode,
|
|
int display_mode, int three_win_mode, int eink_mode)
|
|
{
|
|
return tcon->dsp_mode_set(tcon, update_mode, display_mode, three_win_mode, eink_mode);
|
|
}
|
|
|
|
static inline void ebc_tcon_image_addr_set(struct ebc_tcon *tcon, u32 pre_image_addr, u32 cur_image_addr)
|
|
{
|
|
tcon->image_addr_set(tcon, pre_image_addr, cur_image_addr);
|
|
}
|
|
|
|
static inline void ebc_tcon_frame_addr_set(struct ebc_tcon *tcon, u32 frame_addr)
|
|
{
|
|
tcon->frame_addr_set(tcon, frame_addr);
|
|
}
|
|
|
|
static inline int ebc_tcon_lut_data_set(struct ebc_tcon *tcon, unsigned int *lut_data, int frame_count, int lut_32)
|
|
{
|
|
return tcon->lut_data_set(tcon, lut_data, frame_count, lut_32);
|
|
}
|
|
|
|
static inline void ebc_tcon_frame_start(struct ebc_tcon *tcon, int frame_total)
|
|
{
|
|
tcon->frame_start(tcon, frame_total);
|
|
}
|
|
|
|
struct eink_tcon {
|
|
struct device *dev;
|
|
void __iomem *regs;
|
|
unsigned int len;
|
|
int irq;
|
|
|
|
struct clk *hclk;
|
|
struct clk *pclk;
|
|
struct regmap *regmap_base;
|
|
|
|
int (*enable)(struct eink_tcon *tcon, struct ebc_panel *panel);
|
|
void (*disable)(struct eink_tcon *tcon);
|
|
void (*image_addr_set)(struct eink_tcon *tcon, u32 pre_image_buf_addr,
|
|
u32 cur_image_buf_addr, u32 image_process_buf_addr);
|
|
void (*frame_start)(struct eink_tcon *tcon);
|
|
|
|
void (*dsp_end_callback)(void);
|
|
};
|
|
|
|
static inline int eink_tcon_enable(struct eink_tcon *tcon, struct ebc_panel *panel)
|
|
{
|
|
return tcon->enable(tcon, panel);
|
|
}
|
|
|
|
static inline void eink_tcon_disable(struct eink_tcon *tcon)
|
|
{
|
|
tcon->disable(tcon);
|
|
}
|
|
|
|
static inline void eink_tcon_image_addr_set(struct eink_tcon *tcon, u32 pre_image_buf_addr,
|
|
u32 cur_image_buf_addr, u32 image_process_buf_addr)
|
|
{
|
|
tcon->image_addr_set(tcon, pre_image_buf_addr, cur_image_buf_addr, image_process_buf_addr);
|
|
}
|
|
|
|
static inline void eink_tcon_frame_start(struct eink_tcon *tcon)
|
|
{
|
|
tcon->frame_start(tcon);
|
|
}
|
|
#endif
|