[COMMON] fimc-is2: add & fixed a 2x5 3dhdr stat
authorWooyeon Kim <wooy88.kim@samsung.com>
Thu, 14 Mar 2019 08:59:17 +0000 (17:59 +0900)
committerlingsen1 <lingsen1@lenovo.com>
Mon, 10 Jun 2019 03:24:49 +0000 (11:24 +0800)
 - motion stat update interface added
 - fix wrong register update method for some stats

 PR JIRA ID: CPR-828

CRs-fixed: (CR)

Change-Id: Idab1c8dceb671cd8a1f22fa2785455d3d4ea7ba8
Signed-off-by: Wooyeon Kim <wooy88.kim@samsung.com>
Reviewed-on: https://gerrit.mot.com/1323546
SME-Granted: SME Approvals Granted
SLTApproved: Slta Waiver
Tested-by: Jira Key
Reviewed-by: Zhichao Chen <chenzc2@motorola.com>
Submit-Approved: Jira Key

drivers/media/platform/exynos/fimc-is2/sensor/module_framework/cis/fimc-is-cis-2x5sp.c
drivers/media/platform/exynos/fimc-is2/sensor/module_framework/fimc-is-interface-sensor.h

index 8669dac4e05378d859b2de289805fd91d7eb9a63..3425d8e70208c817ade37c9f2dd92a4f4a6cee93 100644 (file)
@@ -2156,6 +2156,67 @@ int sensor_2x5sp_cis_set_3hdr_stat(struct v4l2_subdev *subdev, bool streaming, v
                ret = fimc_is_sensor_write16(client, 0x4E06, y_sum_roi.roi_start_y);
                if (ret < 0)
                        goto p_err;
+       } else {
+               /* update 3hdr motion stat */
+               ret = fimc_is_sensor_write16(client, 0x6028, 0x2001);
+               if (ret < 0)
+                       goto p_err;
+
+               ret |= fimc_is_sensor_write16(client, 0x602A, 0x29D8);
+               ret |= fimc_is_sensor_write16(client, 0x6F12,
+                               (u16)per_frame_stat.motion_indication);
+
+               ret |= fimc_is_sensor_write16(client, 0x602A, 0x2A52);
+               ret |= fimc_is_sensor_write16(client, 0x6F12,
+                               (u16)per_frame_stat.motion_high_end_ty2ty1);
+               ret |= fimc_is_sensor_write16(client, 0x6F12,
+                               (u16)per_frame_stat.motion_high_end_ty3ty2);
+               ret |= fimc_is_sensor_write16(client, 0x6F12,
+                               (u16)per_frame_stat.motion_high_start_ty2ty1);
+               ret |= fimc_is_sensor_write16(client, 0x6F12,
+                               (u16)per_frame_stat.motion_high_start_ty3ty2);
+               ret |= fimc_is_sensor_write16(client, 0x6F12,
+                               (u16)per_frame_stat.motion_low_end_ty2ty1);
+               ret |= fimc_is_sensor_write16(client, 0x6F12,
+                               (u16)per_frame_stat.motion_low_end_ty3ty2);
+               ret |= fimc_is_sensor_write16(client, 0x6F12,
+                               (u16)per_frame_stat.motion_low_start_ty2ty1);
+               ret |= fimc_is_sensor_write16(client, 0x6F12,
+                               (u16)per_frame_stat.motion_low_start_ty3ty2);
+
+               dbg_sensor(2, "[%s] motion idc(%d) high21(e:%d, s:%d), low21(e:%d, s:%d)\n",
+                               __func__,
+                               (u16)per_frame_stat.motion_indication,
+                               (u16)per_frame_stat.motion_high_end_ty2ty1,
+                               (u16)per_frame_stat.motion_high_start_ty2ty1,
+                               (u16)per_frame_stat.motion_low_end_ty2ty1,
+                               (u16)per_frame_stat.motion_low_start_ty2ty1);
+               dbg_sensor(2, "[%s] motion high32(e:%d, s:%d), low32(e:%d, s:%d)\n",
+                               __func__,
+                               (u16)per_frame_stat.motion_high_end_ty3ty2,
+                               (u16)per_frame_stat.motion_high_start_ty3ty2,
+                               (u16)per_frame_stat.motion_low_end_ty3ty2,
+                               (u16)per_frame_stat.motion_low_start_ty3ty2);
+
+               ret |= fimc_is_sensor_write16(client, 0x602A, 0x2A68);
+               ret |= fimc_is_sensor_write16(client, 0x6F12,
+                               (u16)per_frame_stat.decision_thresh_override);
+               ret |= fimc_is_sensor_write16(client, 0x6F12,
+                               (u16)per_frame_stat.motion_abs_high_ty3ty2);
+               ret |= fimc_is_sensor_write16(client, 0x6F12,
+                               (u16)per_frame_stat.motion_abs_low_ty3ty2);
+               ret |= fimc_is_sensor_write16(client, 0x6F12,
+                               (u16)per_frame_stat.motion_abs_high_ty2ty1);
+               ret |= fimc_is_sensor_write16(client, 0x6F12,
+                               (u16)per_frame_stat.motion_abs_low_ty2ty1);
+
+               dbg_sensor(2, "[%s] motion DTO(%d), abs(h32:%d, l32:%d), abs(h21:%d, l21:%d)\n",
+                               __func__,
+                               (u16)per_frame_stat.decision_thresh_override,
+                               (u16)per_frame_stat.motion_abs_high_ty3ty2,
+                               (u16)per_frame_stat.motion_abs_low_ty3ty2,
+                               (u16)per_frame_stat.motion_abs_high_ty2ty1,
+                               (u16)per_frame_stat.motion_abs_low_ty2ty1);
        }
 
        /* restore 0x4000_XXXX */
index 2b92a4fbce953f13b3f3e8e390f1468d51c55314..9cb890392ccc3f0cbf5aa1768b02ccd7a40bc79b 100755 (executable)
@@ -245,6 +245,22 @@ struct sensor_lsi_3hdr_stat_control_per_frame {
        int r_weight;
        int b_weight;
        int g_weight;
+
+       /* stat for 3dhdr motion */
+       u32 motion_indication;
+       u32 motion_high_end_ty2ty1;
+       u32 motion_high_start_ty2ty1;
+       u32 motion_low_end_ty2ty1;
+       u32 motion_low_start_ty2ty1;
+       u32 motion_high_end_ty3ty2;
+       u32 motion_high_start_ty3ty2;
+       u32 motion_low_end_ty3ty2;
+       u32 motion_low_start_ty3ty2;
+       u32 decision_thresh_override;
+       u32 motion_abs_high_ty3ty2;
+       u32 motion_abs_low_ty3ty2;
+       u32 motion_abs_high_ty2ty1;
+       u32 motion_abs_low_ty2ty1;
 };
 
 typedef struct {