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
|
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)
|
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_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.
|
* g2d_reset - reset fimg2d hardware.
|
||||||
*
|
*
|
||||||
|
|
Loading…
Reference in New Issue