Loading drivers/media/platform/msm/camera_v2/isp/msm_isp40.c +76 −3 Original line number Diff line number Diff line Loading @@ -42,6 +42,15 @@ #define VFE40_PING_PONG_BASE(wm, ping_pong) \ (VFE40_WM_BASE(wm) + 0x4 * (1 + (~(ping_pong >> wm) & 0x1))) #define STATS_IDX_BE 0 #define STATS_IDX_BG 1 #define STATS_IDX_BF 2 #define STATS_IDX_AWB 3 #define STATS_IDX_RS 4 #define STATS_IDX_CS 5 #define STATS_IDX_IHIST 6 #define STATS_IDX_BHIST 7 static uint8_t stats_pingpong_offset_map[] = { 8, 9, 10, 11, 12, 13, 14, 15}; Loading Loading @@ -383,9 +392,6 @@ static void msm_vfe40_init_hardware_reg(struct vfe_device *vfe_dev) msm_vfe40_init_qos_parms(vfe_dev, &qos_parms, &ds_parms); msm_vfe40_init_vbif_parms(vfe_dev, &vbif_parms); /* CGC_OVERRIDE */ msm_camera_io_w(0x3FFFFFFF, vfe_dev->vfe_base + 0x14); msm_camera_io_w(0xC001FF7F, vfe_dev->vfe_base + 0x974); /* BUS_CFG */ msm_camera_io_w(0x10000001, vfe_dev->vfe_base + 0x50); msm_camera_io_w(0xE00000F1, vfe_dev->vfe_base + 0x28); Loading Loading @@ -716,6 +722,20 @@ static void msm_vfe40_axi_reload_wm( msm_camera_io_w_mb(reload_mask, vfe_dev->vfe_base + 0x4C); } static void msm_vfe40_axi_update_cgc_override(struct vfe_device *vfe_dev, uint8_t wm_idx, uint8_t enable) { uint32_t val; /* Change CGC override */ val = msm_camera_io_r(vfe_dev->vfe_base + 0x974); if (enable) val |= (1 << wm_idx); else val &= ~(1 << wm_idx); msm_camera_io_w_mb(val, vfe_dev->vfe_base + 0x974); } static void msm_vfe40_axi_enable_wm(struct vfe_device *vfe_dev, uint8_t wm_idx, uint8_t enable) { Loading Loading @@ -1570,6 +1590,55 @@ static void msm_vfe40_stats_cfg_ub(struct vfe_device *vfe_dev) } } static void msm_vfe40_stats_update_cgc_override(struct vfe_device *vfe_dev, uint32_t stats_mask, uint8_t enable) { int i; uint32_t module_cfg, cgc_mask = 0; for (i = 0; i < VFE40_NUM_STATS_TYPE; i++) { if ((stats_mask >> i) & 0x1) { switch (i) { case STATS_IDX_BE: cgc_mask |= (1 << 8); break; case STATS_IDX_BF: cgc_mask |= (1 << 10); break; case STATS_IDX_BG: cgc_mask |= (1 << 9); break; case STATS_IDX_BHIST: cgc_mask |= (1 << 15); break; case STATS_IDX_AWB: cgc_mask |= (1 << 11); break; case STATS_IDX_RS: cgc_mask |= (1 << 12); break; case STATS_IDX_CS: cgc_mask |= (1 << 13); break; case STATS_IDX_IHIST: cgc_mask |= (1 << 14); break; default: pr_err("%s: Invalid stats mask\n", __func__); return; } } } /* CGC override */ module_cfg = msm_camera_io_r(vfe_dev->vfe_base + 0x974); if (enable) module_cfg |= cgc_mask; else module_cfg &= ~cgc_mask; msm_camera_io_w(module_cfg, vfe_dev->vfe_base + 0x974); } static void msm_vfe40_stats_enable_module(struct vfe_device *vfe_dev, uint32_t stats_mask, uint8_t enable) { Loading Loading @@ -1805,6 +1874,8 @@ struct msm_vfe_hardware_info vfe40_hw_info = { .get_pingpong_status = msm_vfe40_get_pingpong_status, .halt = msm_vfe40_axi_halt, .restart = msm_vfe40_axi_restart, .update_cgc_override = msm_vfe40_axi_update_cgc_override, }, .core_ops = { .reg_update = msm_vfe40_reg_update, Loading Loading @@ -1843,6 +1914,8 @@ struct msm_vfe_hardware_info vfe40_hw_info = { .get_wm_mask = msm_vfe40_stats_get_wm_mask, .get_frame_id = msm_vfe40_stats_get_frame_id, .get_pingpong_status = msm_vfe40_get_pingpong_status, .update_cgc_override = msm_vfe40_stats_update_cgc_override, }, }, .dmi_reg_offset = 0x918, Loading Loading
drivers/media/platform/msm/camera_v2/isp/msm_isp40.c +76 −3 Original line number Diff line number Diff line Loading @@ -42,6 +42,15 @@ #define VFE40_PING_PONG_BASE(wm, ping_pong) \ (VFE40_WM_BASE(wm) + 0x4 * (1 + (~(ping_pong >> wm) & 0x1))) #define STATS_IDX_BE 0 #define STATS_IDX_BG 1 #define STATS_IDX_BF 2 #define STATS_IDX_AWB 3 #define STATS_IDX_RS 4 #define STATS_IDX_CS 5 #define STATS_IDX_IHIST 6 #define STATS_IDX_BHIST 7 static uint8_t stats_pingpong_offset_map[] = { 8, 9, 10, 11, 12, 13, 14, 15}; Loading Loading @@ -383,9 +392,6 @@ static void msm_vfe40_init_hardware_reg(struct vfe_device *vfe_dev) msm_vfe40_init_qos_parms(vfe_dev, &qos_parms, &ds_parms); msm_vfe40_init_vbif_parms(vfe_dev, &vbif_parms); /* CGC_OVERRIDE */ msm_camera_io_w(0x3FFFFFFF, vfe_dev->vfe_base + 0x14); msm_camera_io_w(0xC001FF7F, vfe_dev->vfe_base + 0x974); /* BUS_CFG */ msm_camera_io_w(0x10000001, vfe_dev->vfe_base + 0x50); msm_camera_io_w(0xE00000F1, vfe_dev->vfe_base + 0x28); Loading Loading @@ -716,6 +722,20 @@ static void msm_vfe40_axi_reload_wm( msm_camera_io_w_mb(reload_mask, vfe_dev->vfe_base + 0x4C); } static void msm_vfe40_axi_update_cgc_override(struct vfe_device *vfe_dev, uint8_t wm_idx, uint8_t enable) { uint32_t val; /* Change CGC override */ val = msm_camera_io_r(vfe_dev->vfe_base + 0x974); if (enable) val |= (1 << wm_idx); else val &= ~(1 << wm_idx); msm_camera_io_w_mb(val, vfe_dev->vfe_base + 0x974); } static void msm_vfe40_axi_enable_wm(struct vfe_device *vfe_dev, uint8_t wm_idx, uint8_t enable) { Loading Loading @@ -1570,6 +1590,55 @@ static void msm_vfe40_stats_cfg_ub(struct vfe_device *vfe_dev) } } static void msm_vfe40_stats_update_cgc_override(struct vfe_device *vfe_dev, uint32_t stats_mask, uint8_t enable) { int i; uint32_t module_cfg, cgc_mask = 0; for (i = 0; i < VFE40_NUM_STATS_TYPE; i++) { if ((stats_mask >> i) & 0x1) { switch (i) { case STATS_IDX_BE: cgc_mask |= (1 << 8); break; case STATS_IDX_BF: cgc_mask |= (1 << 10); break; case STATS_IDX_BG: cgc_mask |= (1 << 9); break; case STATS_IDX_BHIST: cgc_mask |= (1 << 15); break; case STATS_IDX_AWB: cgc_mask |= (1 << 11); break; case STATS_IDX_RS: cgc_mask |= (1 << 12); break; case STATS_IDX_CS: cgc_mask |= (1 << 13); break; case STATS_IDX_IHIST: cgc_mask |= (1 << 14); break; default: pr_err("%s: Invalid stats mask\n", __func__); return; } } } /* CGC override */ module_cfg = msm_camera_io_r(vfe_dev->vfe_base + 0x974); if (enable) module_cfg |= cgc_mask; else module_cfg &= ~cgc_mask; msm_camera_io_w(module_cfg, vfe_dev->vfe_base + 0x974); } static void msm_vfe40_stats_enable_module(struct vfe_device *vfe_dev, uint32_t stats_mask, uint8_t enable) { Loading Loading @@ -1805,6 +1874,8 @@ struct msm_vfe_hardware_info vfe40_hw_info = { .get_pingpong_status = msm_vfe40_get_pingpong_status, .halt = msm_vfe40_axi_halt, .restart = msm_vfe40_axi_restart, .update_cgc_override = msm_vfe40_axi_update_cgc_override, }, .core_ops = { .reg_update = msm_vfe40_reg_update, Loading Loading @@ -1843,6 +1914,8 @@ struct msm_vfe_hardware_info vfe40_hw_info = { .get_wm_mask = msm_vfe40_stats_get_wm_mask, .get_frame_id = msm_vfe40_stats_get_frame_id, .get_pingpong_status = msm_vfe40_get_pingpong_status, .update_cgc_override = msm_vfe40_stats_update_cgc_override, }, }, .dmi_reg_offset = 0x918, Loading