exynos: fimg2d: add g2d_set_direction
This allows setting the two direction registers, which specify how the engine blits pixels. This can be used for overlapping blits, which happen e.g. when 'moving' a rectangular region inside a fixed buffer. Reviewed-by: Hyungwon Hwang <human.hwang@samsung.com> Signed-off-by: Tobias Jakobi <tjakobi@math.uni-bielefeld.de> Signed-off-by: Hyungwon Hwang <human.hwang@samsung.com>main
parent
1b32e5da44
commit
51fd93bc38
|
@ -65,6 +65,44 @@ enum g2d_base_addr_reg {
|
|||
g2d_src
|
||||
};
|
||||
|
||||
enum e_g2d_dir_mode {
|
||||
G2D_DIR_MODE_POSITIVE = 0,
|
||||
G2D_DIR_MODE_NEGATIVE = 1
|
||||
};
|
||||
|
||||
union g2d_direction_val {
|
||||
unsigned int val[2];
|
||||
struct {
|
||||
/* SRC_MSK_DIRECT_REG [0:1] (source) */
|
||||
enum e_g2d_dir_mode src_x_direction:1;
|
||||
enum e_g2d_dir_mode src_y_direction:1;
|
||||
|
||||
/* SRC_MSK_DIRECT_REG [2:3] */
|
||||
unsigned int reversed1:2;
|
||||
|
||||
/* SRC_MSK_DIRECT_REG [4:5] (mask) */
|
||||
enum e_g2d_dir_mode mask_x_direction:1;
|
||||
enum e_g2d_dir_mode mask_y_direction:1;
|
||||
|
||||
/* SRC_MSK_DIRECT_REG [6:31] */
|
||||
unsigned int padding1:26;
|
||||
|
||||
/* DST_PAT_DIRECT_REG [0:1] (destination) */
|
||||
enum e_g2d_dir_mode dst_x_direction:1;
|
||||
enum e_g2d_dir_mode dst_y_direction:1;
|
||||
|
||||
/* DST_PAT_DIRECT_REG [2:3] */
|
||||
unsigned int reversed2:2;
|
||||
|
||||
/* DST_PAT_DIRECT_REG [4:5] (pattern) */
|
||||
enum e_g2d_dir_mode pat_x_direction:1;
|
||||
enum e_g2d_dir_mode pat_y_direction:1;
|
||||
|
||||
/* DST_PAT_DIRECT_REG [6:31] */
|
||||
unsigned int padding2:26;
|
||||
} data;
|
||||
};
|
||||
|
||||
static unsigned int g2d_get_scaling(unsigned int src, unsigned int dst)
|
||||
{
|
||||
/*
|
||||
|
@ -241,6 +279,19 @@ static void g2d_add_base_addr(struct g2d_context *ctx, struct g2d_image *img,
|
|||
g2d_add_cmd(ctx, cmd, img->bo[0]);
|
||||
}
|
||||
|
||||
/*
|
||||
* g2d_set_direction - setup direction register (useful for overlapping blits).
|
||||
*
|
||||
* @ctx: a pointer to g2d_context structure.
|
||||
* @dir: a pointer to the g2d_direction_val structure.
|
||||
*/
|
||||
static void g2d_set_direction(struct g2d_context *ctx,
|
||||
const union g2d_direction_val *dir)
|
||||
{
|
||||
g2d_add_cmd(ctx, SRC_MASK_DIRECT_REG, dir->val[0]);
|
||||
g2d_add_cmd(ctx, DST_PAT_DIRECT_REG, dir->val[1]);
|
||||
}
|
||||
|
||||
/*
|
||||
* g2d_reset - reset fimg2d hardware.
|
||||
*
|
||||
|
|
Loading…
Reference in New Issue