@@ -703,11 +703,26 @@ s32 RGA_set_dst(u8 *base, const struct rga_req *msg)
703703
704704 * bRGA_DST_UV_MST = 0 ;
705705 * bRGA_YUV_OUT_CFG = 0 ;
706+
707+ if (msg -> rotate_mode == 1 ) {
708+ if (msg -> sina == 65536 && msg -> cosa == 0 ) {
709+ /* rotate 90 */
710+ x_off = msg -> dst .x_offset - msg -> dst .act_h + 1 ;
711+ } else if (msg -> sina == 0 && msg -> cosa == -65536 ) {
712+ /* rotate 180 */
713+ x_off = msg -> dst .x_offset - msg -> dst .act_w + 1 ;
714+ y_off = msg -> dst .y_offset - msg -> dst .act_h + 1 ;
715+ } else if (msg -> sina == -65536 && msg -> cosa == 0 ) {
716+ /* totate 270 */
717+ y_off = msg -> dst .y_offset - msg -> dst .act_w + 1 ;
718+ }
719+ }
720+
706721 switch (msg -> dst .format )
707722 {
708723 case RK_FORMAT_YCbCr_422_SP :
709724 * bRGA_PRESCL_CB_MST = (u32 )msg -> dst .uv_addr + ((y_off ) * stride ) + ((x_off ) * pw );
710- * bRGA_DST_UV_MST = (u32 )msg -> dst .uv_addr ;
725+ * bRGA_DST_UV_MST = (u32 )msg -> dst .uv_addr + ( y_off * stride ) + x_off ;
711726 * bRGA_YUV_OUT_CFG |= (((msg -> yuv2rgb_mode >> 4 ) & 3 ) << 4 ) | (0 << 3 ) | (0 << 1 ) | 1 ;
712727 break ;
713728 case RK_FORMAT_YCbCr_422_P :
@@ -716,7 +731,7 @@ s32 RGA_set_dst(u8 *base, const struct rga_req *msg)
716731 break ;
717732 case RK_FORMAT_YCbCr_420_SP :
718733 * bRGA_PRESCL_CB_MST = (u32 )msg -> dst .uv_addr + ((y_off >>1 ) * stride ) + ((x_off ) * pw );
719- * bRGA_DST_UV_MST = (u32 )msg -> dst .uv_addr ;
734+ * bRGA_DST_UV_MST = (u32 )msg -> dst .uv_addr + (( y_off >> 1 ) * stride ) + x_off ;
720735 * bRGA_YUV_OUT_CFG |= (((msg -> yuv2rgb_mode >> 4 ) & 3 ) << 4 ) | (0 << 3 ) | (1 << 1 ) | 1 ;
721736 break ;
722737 case RK_FORMAT_YCbCr_420_P :
@@ -725,7 +740,7 @@ s32 RGA_set_dst(u8 *base, const struct rga_req *msg)
725740 break ;
726741 case RK_FORMAT_YCrCb_422_SP :
727742 * bRGA_PRESCL_CB_MST = (u32 )msg -> dst .uv_addr + ((y_off ) * stride ) + ((x_off ) * pw );
728- * bRGA_DST_UV_MST = (u32 )msg -> dst .uv_addr ;
743+ * bRGA_DST_UV_MST = (u32 )msg -> dst .uv_addr + ( y_off * stride ) + x_off ;
729744 * bRGA_YUV_OUT_CFG |= (((msg -> yuv2rgb_mode >> 4 ) & 3 ) << 4 ) | (1 << 3 ) | (0 << 1 ) | 1 ;
730745 break ;
731746 case RK_FORMAT_YCrCb_422_P :
@@ -734,7 +749,7 @@ s32 RGA_set_dst(u8 *base, const struct rga_req *msg)
734749 break ;
735750 case RK_FORMAT_YCrCb_420_SP :
736751 * bRGA_PRESCL_CB_MST = (u32 )msg -> dst .uv_addr + ((y_off >>1 ) * stride ) + ((x_off ) * pw );
737- * bRGA_DST_UV_MST = (u32 )msg -> dst .uv_addr ;
752+ * bRGA_DST_UV_MST = (u32 )msg -> dst .uv_addr + (( y_off >> 1 ) * stride ) + x_off ;
738753 * bRGA_YUV_OUT_CFG |= (((msg -> yuv2rgb_mode >> 4 ) & 3 ) << 4 ) | (1 << 3 ) | (1 << 1 ) | 1 ;
739754 break ;
740755 case RK_FORMAT_YCrCb_420_P :
0 commit comments