[COMMON] fimc-is2: fix some wrong print of DW9839 actual position
authorWooyeon Kim <wooy88.kim@samsung.com>
Fri, 25 Jan 2019 07:20:38 +0000 (16:20 +0900)
committerlingsen1 <lingsen1@lenovo.com>
Sun, 7 Feb 2021 09:36:55 +0000 (17:36 +0800)
 - if ADC_MSB register is read wrong, wrong actual position is caculated

 PR JIRA ID: CPR-624

Change-Id: Ib9c0e94729cc08f005df1297a8a0b9f414c4faee
Signed-off-by: Wooyeon Kim <wooy88.kim@samsung.com>
drivers/media/platform/exynos/fimc-is2/sensor/module_framework/actuator/fimc-is-actuator-dw9839.c

index d07f7063c779aede101061a82574df8ff1b8dd03..f3afbb6eb8b56894c58e5f98a89dcd8d60af71c9 100644 (file)
@@ -540,7 +540,8 @@ int sensor_dw9839_actuator_get_actual_position(struct v4l2_subdev *subdev, u32 *
        if (ret < 0)
                goto p_err;
 
-       adc_pos = (pos_msb << 8) | pos_lsb;
+       /* pos_msb uses [1:0] bit */
+       adc_pos = ((pos_msb & 0x3) << 8) | pos_lsb;
 
        /* convert adc_pos to 10bit position
         * ncal <= adc_pos <= pcal ------> 0 <= 10bit_pos <= 1023
@@ -551,8 +552,8 @@ int sensor_dw9839_actuator_get_actual_position(struct v4l2_subdev *subdev, u32 *
        if (*info > 1023)
                *info = 1023;
 
-       dbg_actuator("%s: pcal(%d), ncal(%d), adc_pos(%d) --> target_pos(%d) actual pos(%d)\n",
-                       __func__, actuator_info->pcal, actuator_info->ncal, adc_pos,
+       dbg_actuator("%s: cal(p:%d, n:%d), adc_pos(msb:%d, lsb:%d, sum:%d) -> target_pos(%d) actual pos(%d)\n",
+                       __func__, actuator_info->pcal, actuator_info->ncal, pos_msb & 0x3, pos_lsb, adc_pos,
                        actuator->position, *info);
 
 #ifdef DEBUG_ACTUATOR_TIME