[PATCH] media: rockchip: rga: fix offset lookup

John Keeping jkeeping at inmusicbrands.com
Sat Aug 10 06:00:36 PDT 2024


Hi Michael,

On Fri, Aug 09, 2024 at 04:31:43PM +0200, Michael Tretter wrote:
> On Tue, 06 Aug 2024 10:48:41 +0100, John Keeping wrote:
> > The rot_mir_point_matrix is arranged with the rotation values in rows
> > and mirror settings in the columns.  Fix the order of indexing to match
> > this so that the correct values are used.
> 
> The table and indexing is correct. The rows (second index) contain the
> mirror modes and the columns (first index) contain the rotation modes,
> and the table and the indexing are correct. If you read the columns, the
> corner moves clockwise, but if you read the rows, the corner moves in a
> z or s form, indicating that these are the mirror modes.
> 
> It's probably worth documenting, how the table works.
> 
> However, there is a mixup of the arguments between the call to
> rga_lookup_draw_pos() and the use in the function.
> 
> The function definition is
> 
> static struct rga_addr_offset *
> rga_lookup_draw_pos(struct rga_corners_addr_offset * offsets,
>                     u32 rotate_mode, u32 mirr_mode)
> 
> but it is called as
> 
> rga_lookup_draw_pos(&offsets, mir_mode, rot_mode);
> 
> I think, fixing the order of the arguments in the function call is the
> correct fix to your observed bug.

Ah, yes.  I'm not sure how I missed that.

I have confirmed your suggested change works and will send an updated
patch.


Thanks,
John

> > 
> > Signed-off-by: John Keeping <jkeeping at inmusicbrands.com>
> > ---
> >  drivers/media/platform/rockchip/rga/rga-hw.c | 2 +-
> >  1 file changed, 1 insertion(+), 1 deletion(-)
> > 
> > diff --git a/drivers/media/platform/rockchip/rga/rga-hw.c b/drivers/media/platform/rockchip/rga/rga-hw.c
> > index 11c3d72347572..b7d51ddb10fa4 100644
> > --- a/drivers/media/platform/rockchip/rga/rga-hw.c
> > +++ b/drivers/media/platform/rockchip/rga/rga-hw.c
> > @@ -97,7 +97,7 @@ static struct rga_addr_offset *rga_lookup_draw_pos(struct
> >  	if (!offsets)
> >  		return NULL;
> >  
> > -	switch (rot_mir_point_matrix[rotate_mode][mirr_mode]) {
> > +	switch (rot_mir_point_matrix[mirr_mode][rotate_mode]) {
> >  	case LT:
> >  		return &offsets->left_top;
> >  	case LB:
> > -- 
> > 2.45.2



More information about the Linux-rockchip mailing list