mirror of
https://github.com/torvalds/linux.git
synced 2026-11-07 06:17:02 +01:00
media: rockchip: rga: fix rotation on rev0 hardware
On RK3288 where the RGA reports version zero [1], rotating a buffer gives corrupt output where one edge will be truncated. This is a result of some adjustment done specifically for hardware revision zero. But it seems this is not necessary and there is no evidence for why this adjustment should be applied on these hardware revisions. Comparing the TRMs between RK3288 with revision zero and RK3588 with revision 3.2 there is evidence of new features supported by later hardware, but nothing indicating any difference in behaviour for rotation which is supported by all hardware revisions. The logic here looks wrong anyway, since it's bizarre that minor revision zero would need the adjustment for _all_ major revisions. This was added with the initial version of the driver in commitf7e7b48e6d("[media] rockchip/rga: v4l2 m2m support") so there is no detail in the Git history to indicate why this special-case might be needed. [1] Comparing with the vendor code, it seems this is actually 1.3 with the hardware reporting zero more by coincidence than design since the version register is not defined for RK3288. Fixes:f7e7b48e6d("[media] rockchip/rga: v4l2 m2m support") Cc: stable@vger.kernel.org Signed-off-by: John Keeping <jkeeping@inmusicbrands.com> Reviewed-by: Nicolas Dufresne <nicolas.dufresne@collabora.com> Signed-off-by: Nicolas Dufresne <nicolas.dufresne@collabora.com> Signed-off-by: Hans Verkuil <hverkuil+cisco@kernel.org>
This commit is contained in:
parent
b3a805dd5a
commit
a67578c017
|
|
@ -158,7 +158,6 @@ static void rga_cmd_set_dst_addr(struct rga_ctx *ctx, dma_addr_t dma_addr)
|
|||
|
||||
static void rga_cmd_set_trans_info(struct rga_ctx *ctx)
|
||||
{
|
||||
struct rockchip_rga *rga = ctx->rga;
|
||||
u32 *dest = ctx->cmdbuf_virt;
|
||||
unsigned int scale_dst_w, scale_dst_h;
|
||||
unsigned int src_h, src_w, dst_h, dst_w;
|
||||
|
|
@ -251,13 +250,6 @@ static void rga_cmd_set_trans_info(struct rga_ctx *ctx)
|
|||
*/
|
||||
if (src_info.data.rot_mode == RGA_SRC_ROT_MODE_90_DEGREE ||
|
||||
src_info.data.rot_mode == RGA_SRC_ROT_MODE_270_DEGREE) {
|
||||
if (rga->version.major == 0 || rga->version.minor == 0) {
|
||||
if (dst_w == src_h)
|
||||
src_h -= 8;
|
||||
if (abs(src_w - dst_h) < 16)
|
||||
src_w -= 16;
|
||||
}
|
||||
|
||||
scale_dst_h = dst_w;
|
||||
scale_dst_w = dst_h;
|
||||
} else {
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user