From 9370bb92b2d16684ee45cf24e879c93c509162da Mon Sep 17 00:00:00 2001
From: hc <hc@nodka.com>
Date: Thu, 19 Dec 2024 01:47:39 +0000
Subject: [PATCH] add wifi6 8852be driver

---
 kernel/drivers/video/rockchip/rga/RGA_API.c |  400 ++++++++++++++++++++++++++++----------------------------
 1 files changed, 200 insertions(+), 200 deletions(-)

diff --git a/kernel/drivers/video/rockchip/rga/RGA_API.c b/kernel/drivers/video/rockchip/rga/RGA_API.c
index 947a9b9..4359a6d 100644
--- a/kernel/drivers/video/rockchip/rga/RGA_API.c
+++ b/kernel/drivers/video/rockchip/rga/RGA_API.c
@@ -1,201 +1,201 @@
 /* SPDX-License-Identifier: GPL-2.0 */
-
-#include <linux/memory.h>
-#include "RGA_API.h"
-#include "rga.h"
-//#include "rga_angle.h"
-
-#define IS_YUV_420(format) \
-     ((format == RK_FORMAT_YCbCr_420_P) | (format == RK_FORMAT_YCbCr_420_SP) | \
-      (format == RK_FORMAT_YCrCb_420_P) | (format == RK_FORMAT_YCrCb_420_SP))
-
-#define IS_YUV_422(format) \
-     ((format == RK_FORMAT_YCbCr_422_P) | (format == RK_FORMAT_YCbCr_422_SP) | \
-      (format == RK_FORMAT_YCrCb_422_P) | (format == RK_FORMAT_YCrCb_422_SP))
-
-#define IS_YUV(format) \
-     ((format == RK_FORMAT_YCbCr_420_P) | (format == RK_FORMAT_YCbCr_420_SP) | \
-      (format == RK_FORMAT_YCrCb_420_P) | (format == RK_FORMAT_YCrCb_420_SP) | \
-      (format == RK_FORMAT_YCbCr_422_P) | (format == RK_FORMAT_YCbCr_422_SP) | \
-      (format == RK_FORMAT_YCrCb_422_P) | (format == RK_FORMAT_YCrCb_422_SP))
-
-
-extern rga_service_info rga_service;
-
-
-void
-matrix_cal(const struct rga_req *msg, TILE_INFO *tile)
-{
-    uint64_t x_time, y_time;
-    uint64_t sina, cosa;
-
-    int s_act_w, s_act_h, d_act_w, d_act_h;
-
-    s_act_w = msg->src.act_w;
-    s_act_h = msg->src.act_h;
-    d_act_w = msg->dst.act_w;
-    d_act_h = msg->dst.act_h;
-
-    if (s_act_w == 1) s_act_w += 1;
-    if (s_act_h == 1) s_act_h += 1;
-    if (d_act_h == 1) d_act_h += 1;
-    if (d_act_w == 1) d_act_w += 1;
-
-    x_time = ((s_act_w - 1)<<16) / (d_act_w - 1);
-    y_time = ((s_act_h - 1)<<16) / (d_act_h - 1);
-
-    sina = msg->sina;
-    cosa = msg->cosa;
-
-    switch(msg->rotate_mode)
-    {
-        /* 16.16 x 16.16 */
-        /* matrix[] is 64 bit wide */
-        case 1 :
-            tile->matrix[0] =  cosa*x_time;
-            tile->matrix[1] = -sina*y_time;
-            tile->matrix[2] =  sina*x_time;
-            tile->matrix[3] =  cosa*y_time;
-            break;
-        case 2 :
-            tile->matrix[0] = -(x_time<<16);
-            tile->matrix[1] = 0;
-            tile->matrix[2] = 0;
-            tile->matrix[3] = (y_time<<16);
-            break;
-        case 3 :
-            tile->matrix[0] = (x_time<<16);
-            tile->matrix[1] = 0;
-            tile->matrix[2] = 0;
-            tile->matrix[3] = -(y_time<<16);
-            break;
-        default :
-            tile->matrix[0] =  (uint64_t)1<<32;
-            tile->matrix[1] =  0;
-            tile->matrix[2] =  0;
-            tile->matrix[3] =  (uint64_t)1<<32;
-            break;
-    }
-}
-
-
-int32_t RGA_gen_two_pro(struct rga_req *msg, struct rga_req *msg1)
-{
-
-    struct rga_req *mp;
-    uint32_t w_ratio, h_ratio;
-    uint32_t stride;
-
-    uint32_t daw, dah;
-    uint32_t pl;
-
-    daw = dah = 0;
-
-    mp = msg1;
-
-    if(msg->dst.act_w == 0)
-    {
-        printk("%s, [%d] rga dst act_w is zero\n", __FUNCTION__, __LINE__);
-        return -EINVAL;
-    }
-
-    if (msg->dst.act_h == 0)
-    {
-        printk("%s, [%d] rga dst act_w is zero\n", __FUNCTION__, __LINE__);
-        return -EINVAL;
-    }
-    w_ratio = (msg->src.act_w << 16) / msg->dst.act_w;
-    h_ratio = (msg->src.act_h << 16) / msg->dst.act_h;
-
-    memcpy(msg1, msg, sizeof(struct rga_req));
-
-    msg->dst.format = msg->src.format;
-
-    /*pre_scale_w cal*/
-    if ((w_ratio >= (2<<16)) && (w_ratio < (4<<16))) {
-        daw = (msg->src.act_w + 1) >> 1;
-        if((IS_YUV_420(msg->dst.format)) && (daw & 1)) {
-            daw -= 1;
-            msg->src.act_w = daw << 1;
-        }
-    }
-    else if ((w_ratio >= (4<<16)) && (w_ratio < (8<<16))) {
-        daw = (msg->src.act_w + 3) >> 2;
-        if((IS_YUV_420(msg->dst.format)) && (daw & 1)) {
-            daw -= 1;
-            msg->src.act_w = daw << 2;
-        }
-    }
-    else if ((w_ratio >= (8<<16)) && (w_ratio < (16<<16))) {
-        daw = (msg->src.act_w + 7) >> 3;
-        if((IS_YUV_420(msg->dst.format)) && (daw & 1)) {
-            daw -= 1;
-            msg->src.act_w = daw << 3;
-        }
-    }
-    else
-    {
-        daw = msg->src.act_w;
-    }
-
-    pl = (RGA_pixel_width_init(msg->src.format));
-    stride = (pl * daw + 3) & (~3);
-    msg->dst.act_w = daw;
-    msg->dst.vir_w = stride / pl;
-
-    /*pre_scale_h cal*/
-    if ((h_ratio >= (2<<16)) && (h_ratio < (4<<16))) {
-        dah = (msg->src.act_h + 1) >> 1;
-        if((IS_YUV(msg->dst.format)) && (dah & 1)) {
-            dah -= 1;
-            msg->src.act_h = dah << 1;
-        }
-    }
-    else if ((h_ratio >= (4<<16)) && (h_ratio < (8<<16))) {
-        dah = (msg->src.act_h + 3) >> 2;
-        if((IS_YUV(msg->dst.format)) && (dah & 1)) {
-            dah -= 1;
-            msg->src.act_h = dah << 2;
-
-        }
-    }
-    else if ((h_ratio >= (8<<16)) && (h_ratio < (16<<16))) {
-        dah = (msg->src.act_h + 7) >> 3;
-        if((IS_YUV(msg->dst.format)) && (dah & 1)) {
-            dah -= 1;
-            msg->src.act_h = dah << 3;
-        }
-    }
-    else
-    {
-        dah = msg->src.act_h;
-    }
-
-    msg->dst.act_h = dah;
-    msg->dst.vir_h = dah;
-
-    msg->dst.x_offset = 0;
-    msg->dst.y_offset = 0;
-
-    msg->dst.yrgb_addr = (unsigned long)rga_service.pre_scale_buf;
-    msg->dst.uv_addr = msg->dst.yrgb_addr + stride * dah;
-    msg->dst.v_addr = msg->dst.uv_addr + ((stride * dah) >> 1);
-
-    msg->render_mode = pre_scaling_mode;
-
-    msg1->src.yrgb_addr = msg->dst.yrgb_addr;
-    msg1->src.uv_addr = msg->dst.uv_addr;
-    msg1->src.v_addr = msg->dst.v_addr;
-
-    msg1->src.act_w = msg->dst.act_w;
-    msg1->src.act_h = msg->dst.act_h;
-    msg1->src.vir_w = msg->dst.vir_w;
-    msg1->src.vir_h = msg->dst.vir_h;
-
-    msg1->src.x_offset = 0;
-    msg1->src.y_offset = 0;
-
-    return 0;
-}
-
-
+
+#include <linux/memory.h>
+#include "RGA_API.h"
+#include "rga.h"
+//#include "rga_angle.h"
+
+#define IS_YUV_420(format) \
+     ((format == RK_FORMAT_YCbCr_420_P) | (format == RK_FORMAT_YCbCr_420_SP) | \
+      (format == RK_FORMAT_YCrCb_420_P) | (format == RK_FORMAT_YCrCb_420_SP))
+
+#define IS_YUV_422(format) \
+     ((format == RK_FORMAT_YCbCr_422_P) | (format == RK_FORMAT_YCbCr_422_SP) | \
+      (format == RK_FORMAT_YCrCb_422_P) | (format == RK_FORMAT_YCrCb_422_SP))
+
+#define IS_YUV(format) \
+     ((format == RK_FORMAT_YCbCr_420_P) | (format == RK_FORMAT_YCbCr_420_SP) | \
+      (format == RK_FORMAT_YCrCb_420_P) | (format == RK_FORMAT_YCrCb_420_SP) | \
+      (format == RK_FORMAT_YCbCr_422_P) | (format == RK_FORMAT_YCbCr_422_SP) | \
+      (format == RK_FORMAT_YCrCb_422_P) | (format == RK_FORMAT_YCrCb_422_SP))
+
+
+extern rga_service_info rga_service;
+
+
+void
+matrix_cal(const struct rga_req *msg, TILE_INFO *tile)
+{
+    uint64_t x_time, y_time;
+    uint64_t sina, cosa;
+
+    int s_act_w, s_act_h, d_act_w, d_act_h;
+
+    s_act_w = msg->src.act_w;
+    s_act_h = msg->src.act_h;
+    d_act_w = msg->dst.act_w;
+    d_act_h = msg->dst.act_h;
+
+    if (s_act_w == 1) s_act_w += 1;
+    if (s_act_h == 1) s_act_h += 1;
+    if (d_act_h == 1) d_act_h += 1;
+    if (d_act_w == 1) d_act_w += 1;
+
+    x_time = ((s_act_w - 1)<<16) / (d_act_w - 1);
+    y_time = ((s_act_h - 1)<<16) / (d_act_h - 1);
+
+    sina = msg->sina;
+    cosa = msg->cosa;
+
+    switch(msg->rotate_mode)
+    {
+        /* 16.16 x 16.16 */
+        /* matrix[] is 64 bit wide */
+        case 1 :
+            tile->matrix[0] =  cosa*x_time;
+            tile->matrix[1] = -sina*y_time;
+            tile->matrix[2] =  sina*x_time;
+            tile->matrix[3] =  cosa*y_time;
+            break;
+        case 2 :
+            tile->matrix[0] = -(x_time<<16);
+            tile->matrix[1] = 0;
+            tile->matrix[2] = 0;
+            tile->matrix[3] = (y_time<<16);
+            break;
+        case 3 :
+            tile->matrix[0] = (x_time<<16);
+            tile->matrix[1] = 0;
+            tile->matrix[2] = 0;
+            tile->matrix[3] = -(y_time<<16);
+            break;
+        default :
+            tile->matrix[0] =  (uint64_t)1<<32;
+            tile->matrix[1] =  0;
+            tile->matrix[2] =  0;
+            tile->matrix[3] =  (uint64_t)1<<32;
+            break;
+    }
+}
+
+
+int32_t RGA_gen_two_pro(struct rga_req *msg, struct rga_req *msg1)
+{
+
+    struct rga_req *mp;
+    uint32_t w_ratio, h_ratio;
+    uint32_t stride;
+
+    uint32_t daw, dah;
+    uint32_t pl;
+
+    daw = dah = 0;
+
+    mp = msg1;
+
+    if(msg->dst.act_w == 0)
+    {
+        printk("%s, [%d] rga dst act_w is zero\n", __FUNCTION__, __LINE__);
+        return -EINVAL;
+    }
+
+    if (msg->dst.act_h == 0)
+    {
+        printk("%s, [%d] rga dst act_w is zero\n", __FUNCTION__, __LINE__);
+        return -EINVAL;
+    }
+    w_ratio = (msg->src.act_w << 16) / msg->dst.act_w;
+    h_ratio = (msg->src.act_h << 16) / msg->dst.act_h;
+
+    memcpy(msg1, msg, sizeof(struct rga_req));
+
+    msg->dst.format = msg->src.format;
+
+    /*pre_scale_w cal*/
+    if ((w_ratio >= (2<<16)) && (w_ratio < (4<<16))) {
+        daw = (msg->src.act_w + 1) >> 1;
+        if((IS_YUV_420(msg->dst.format)) && (daw & 1)) {
+            daw -= 1;
+            msg->src.act_w = daw << 1;
+        }
+    }
+    else if ((w_ratio >= (4<<16)) && (w_ratio < (8<<16))) {
+        daw = (msg->src.act_w + 3) >> 2;
+        if((IS_YUV_420(msg->dst.format)) && (daw & 1)) {
+            daw -= 1;
+            msg->src.act_w = daw << 2;
+        }
+    }
+    else if ((w_ratio >= (8<<16)) && (w_ratio < (16<<16))) {
+        daw = (msg->src.act_w + 7) >> 3;
+        if((IS_YUV_420(msg->dst.format)) && (daw & 1)) {
+            daw -= 1;
+            msg->src.act_w = daw << 3;
+        }
+    }
+    else
+    {
+        daw = msg->src.act_w;
+    }
+
+    pl = (RGA_pixel_width_init(msg->src.format));
+    stride = (pl * daw + 3) & (~3);
+    msg->dst.act_w = daw;
+    msg->dst.vir_w = stride / pl;
+
+    /*pre_scale_h cal*/
+    if ((h_ratio >= (2<<16)) && (h_ratio < (4<<16))) {
+        dah = (msg->src.act_h + 1) >> 1;
+        if((IS_YUV(msg->dst.format)) && (dah & 1)) {
+            dah -= 1;
+            msg->src.act_h = dah << 1;
+        }
+    }
+    else if ((h_ratio >= (4<<16)) && (h_ratio < (8<<16))) {
+        dah = (msg->src.act_h + 3) >> 2;
+        if((IS_YUV(msg->dst.format)) && (dah & 1)) {
+            dah -= 1;
+            msg->src.act_h = dah << 2;
+
+        }
+    }
+    else if ((h_ratio >= (8<<16)) && (h_ratio < (16<<16))) {
+        dah = (msg->src.act_h + 7) >> 3;
+        if((IS_YUV(msg->dst.format)) && (dah & 1)) {
+            dah -= 1;
+            msg->src.act_h = dah << 3;
+        }
+    }
+    else
+    {
+        dah = msg->src.act_h;
+    }
+
+    msg->dst.act_h = dah;
+    msg->dst.vir_h = dah;
+
+    msg->dst.x_offset = 0;
+    msg->dst.y_offset = 0;
+
+    msg->dst.yrgb_addr = (unsigned long)rga_service.pre_scale_buf;
+    msg->dst.uv_addr = msg->dst.yrgb_addr + stride * dah;
+    msg->dst.v_addr = msg->dst.uv_addr + ((stride * dah) >> 1);
+
+    msg->render_mode = pre_scaling_mode;
+
+    msg1->src.yrgb_addr = msg->dst.yrgb_addr;
+    msg1->src.uv_addr = msg->dst.uv_addr;
+    msg1->src.v_addr = msg->dst.v_addr;
+
+    msg1->src.act_w = msg->dst.act_w;
+    msg1->src.act_h = msg->dst.act_h;
+    msg1->src.vir_w = msg->dst.vir_w;
+    msg1->src.vir_h = msg->dst.vir_h;
+
+    msg1->src.x_offset = 0;
+    msg1->src.y_offset = 0;
+
+    return 0;
+}
+
+

--
Gitblit v1.6.2