Loading drivers/media/platform/msm/camera_v2/isp/msm_isp40.c +32 −0 Original line number Diff line number Diff line Loading @@ -1154,6 +1154,9 @@ static void msm_vfe40_cfg_camif(struct vfe_device *vfe_dev, uint16_t first_pixel, last_pixel, first_line, last_line; struct msm_vfe_camif_cfg *camif_cfg = &pix_cfg->camif_cfg; uint32_t val, subsample_period, subsample_pattern; struct msm_vfe_camif_subsample_cfg *subsample_cfg = &pix_cfg->camif_cfg.subsample_cfg; uint16_t bus_sub_en = 0; msm_camera_io_w(pix_cfg->input_mux << 16 | pix_cfg->pixel_pattern, vfe_dev->vfe_base + 0x1C); Loading Loading @@ -1189,6 +1192,35 @@ static void msm_vfe40_cfg_camif(struct vfe_device *vfe_dev, val = msm_camera_io_r(vfe_dev->vfe_base + 0x2E8); val |= camif_cfg->camif_input; msm_camera_io_w(val, vfe_dev->vfe_base + 0x2E8); switch (pix_cfg->input_mux) { case CAMIF: val = 0x01; msm_camera_io_w(val, vfe_dev->vfe_base + 0x2F4); if (subsample_cfg->pixel_skip || subsample_cfg->line_skip) { bus_sub_en = 1; val = msm_camera_io_r(vfe_dev->vfe_base + 0x2F8); val &= 0xFFFFFFDF; val = val | bus_sub_en << 5; msm_camera_io_w(val, vfe_dev->vfe_base + 0x2F8); subsample_cfg->pixel_skip &= 0x0000FFFF; subsample_cfg->line_skip &= 0x0000FFFF; msm_camera_io_w((subsample_cfg->line_skip << 16) | subsample_cfg->pixel_skip, vfe_dev->vfe_base + 0x30C); } break; case TESTGEN: val = 0x01; msm_camera_io_w(val, vfe_dev->vfe_base + 0x93C); break; case EXTERNAL_READ: return; default: pr_err("%s: not supported input_mux %d\n", __func__, pix_cfg->input_mux); break; } } static void msm_vfe40_cfg_input_mux(struct vfe_device *vfe_dev, Loading drivers/media/platform/msm/camera_v2/isp/msm_isp44.c +15 −0 Original line number Diff line number Diff line Loading @@ -977,6 +977,9 @@ static void msm_vfe44_cfg_camif(struct vfe_device *vfe_dev, uint16_t first_pixel, last_pixel, first_line, last_line; struct msm_vfe_camif_cfg *camif_cfg = &pix_cfg->camif_cfg; uint32_t val, subsample_period, subsample_pattern; struct msm_vfe_camif_subsample_cfg *subsample_cfg = &pix_cfg->camif_cfg.subsample_cfg; uint16_t bus_sub_en = 0; msm_camera_io_w(pix_cfg->input_mux << 16 | pix_cfg->pixel_pattern, vfe_dev->vfe_base + 0x1C); Loading @@ -985,6 +988,18 @@ static void msm_vfe44_cfg_camif(struct vfe_device *vfe_dev, case CAMIF: val = 0x01; msm_camera_io_w(val, vfe_dev->vfe_base + 0x2F4); if (subsample_cfg->pixel_skip || subsample_cfg->line_skip) { bus_sub_en = 1; val = msm_camera_io_r(vfe_dev->vfe_base + 0x2F8); val &= 0xFFFFFFDF; val = val | bus_sub_en << 5; msm_camera_io_w(val, vfe_dev->vfe_base + 0x2F8); subsample_cfg->pixel_skip &= 0x0000FFFF; subsample_cfg->line_skip &= 0x0000FFFF; msm_camera_io_w((subsample_cfg->line_skip << 16) | subsample_cfg->pixel_skip, vfe_dev->vfe_base + 0x30C); } break; case TESTGEN: val = 0x01; Loading drivers/media/platform/msm/camera_v2/isp/msm_isp46.c +19 −0 Original line number Diff line number Diff line Loading @@ -1013,6 +1013,14 @@ static void msm_vfe46_cfg_camif(struct vfe_device *vfe_dev, uint16_t first_pixel, last_pixel, first_line, last_line; struct msm_vfe_camif_cfg *camif_cfg = &pix_cfg->camif_cfg; uint32_t val, subsample_period, subsample_pattern; struct msm_vfe_camif_subsample_cfg *subsample_cfg = &pix_cfg->camif_cfg.subsample_cfg; uint16_t bus_sub_en = 0; if (subsample_cfg->pixel_skip || subsample_cfg->line_skip) bus_sub_en = 1; else bus_sub_en = 0; msm_camera_io_w(pix_cfg->input_mux << 5 | pix_cfg->pixel_pattern, vfe_dev->vfe_base + 0x50); Loading @@ -1024,6 +1032,17 @@ static void msm_vfe46_cfg_camif(struct vfe_device *vfe_dev, subsample_period = camif_cfg->subsample_cfg.irq_subsample_period; subsample_pattern = camif_cfg->subsample_cfg.irq_subsample_pattern; if (bus_sub_en) { val = msm_camera_io_r(vfe_dev->vfe_base + 0x3AC); val &= 0xFFFFFFDF; val = val | bus_sub_en << 5; msm_camera_io_w(val, vfe_dev->vfe_base + 0x3AC); subsample_cfg->pixel_skip &= 0x0000FFFF; subsample_cfg->line_skip &= 0x0000FFFF; msm_camera_io_w((subsample_cfg->line_skip << 16) | subsample_cfg->pixel_skip, vfe_dev->vfe_base + 0x3C0); } msm_camera_io_w(camif_cfg->lines_per_frame << 16 | camif_cfg->pixels_per_line, vfe_dev->vfe_base + 0x3B4); Loading drivers/media/platform/msm/camera_v2/isp/msm_isp47.c +18 −0 Original line number Diff line number Diff line Loading @@ -935,6 +935,13 @@ static void msm_vfe47_cfg_camif(struct vfe_device *vfe_dev, uint32_t val, subsample_period, subsample_pattern; uint32_t irq_sub_period = 32; uint32_t frame_sub_period = 32; struct msm_vfe_camif_subsample_cfg *subsample_cfg = &pix_cfg->camif_cfg.subsample_cfg; uint16_t bus_sub_en = 0; if (subsample_cfg->pixel_skip || subsample_cfg->line_skip) bus_sub_en = 1; else bus_sub_en = 0; msm_camera_io_w(pix_cfg->input_mux << 5 | pix_cfg->pixel_pattern, vfe_dev->vfe_base + 0x50); Loading @@ -948,6 +955,17 @@ static void msm_vfe47_cfg_camif(struct vfe_device *vfe_dev, msm_camera_io_w(camif_cfg->lines_per_frame << 16 | camif_cfg->pixels_per_line, vfe_dev->vfe_base + 0x484); if (bus_sub_en) { val = msm_camera_io_r(vfe_dev->vfe_base + 0x47C); val &= 0xFFFFFFDF; val = val | bus_sub_en << 5; msm_camera_io_w(val, vfe_dev->vfe_base + 0x47C); subsample_cfg->pixel_skip &= 0x0000FFFF; subsample_cfg->line_skip &= 0x0000FFFF; msm_camera_io_w((subsample_cfg->line_skip << 16) | subsample_cfg->pixel_skip, vfe_dev->vfe_base + 0x490); } msm_camera_io_w(first_pixel << 16 | last_pixel, vfe_dev->vfe_base + 0x488); Loading include/media/msmb_isp.h +2 −0 Original line number Diff line number Diff line Loading @@ -160,6 +160,8 @@ struct msm_vfe_camif_subsample_cfg { uint32_t irq_subsample_period; uint32_t irq_subsample_pattern; uint32_t sof_counter_step; uint32_t pixel_skip; uint32_t line_skip; }; /* Loading Loading
drivers/media/platform/msm/camera_v2/isp/msm_isp40.c +32 −0 Original line number Diff line number Diff line Loading @@ -1154,6 +1154,9 @@ static void msm_vfe40_cfg_camif(struct vfe_device *vfe_dev, uint16_t first_pixel, last_pixel, first_line, last_line; struct msm_vfe_camif_cfg *camif_cfg = &pix_cfg->camif_cfg; uint32_t val, subsample_period, subsample_pattern; struct msm_vfe_camif_subsample_cfg *subsample_cfg = &pix_cfg->camif_cfg.subsample_cfg; uint16_t bus_sub_en = 0; msm_camera_io_w(pix_cfg->input_mux << 16 | pix_cfg->pixel_pattern, vfe_dev->vfe_base + 0x1C); Loading Loading @@ -1189,6 +1192,35 @@ static void msm_vfe40_cfg_camif(struct vfe_device *vfe_dev, val = msm_camera_io_r(vfe_dev->vfe_base + 0x2E8); val |= camif_cfg->camif_input; msm_camera_io_w(val, vfe_dev->vfe_base + 0x2E8); switch (pix_cfg->input_mux) { case CAMIF: val = 0x01; msm_camera_io_w(val, vfe_dev->vfe_base + 0x2F4); if (subsample_cfg->pixel_skip || subsample_cfg->line_skip) { bus_sub_en = 1; val = msm_camera_io_r(vfe_dev->vfe_base + 0x2F8); val &= 0xFFFFFFDF; val = val | bus_sub_en << 5; msm_camera_io_w(val, vfe_dev->vfe_base + 0x2F8); subsample_cfg->pixel_skip &= 0x0000FFFF; subsample_cfg->line_skip &= 0x0000FFFF; msm_camera_io_w((subsample_cfg->line_skip << 16) | subsample_cfg->pixel_skip, vfe_dev->vfe_base + 0x30C); } break; case TESTGEN: val = 0x01; msm_camera_io_w(val, vfe_dev->vfe_base + 0x93C); break; case EXTERNAL_READ: return; default: pr_err("%s: not supported input_mux %d\n", __func__, pix_cfg->input_mux); break; } } static void msm_vfe40_cfg_input_mux(struct vfe_device *vfe_dev, Loading
drivers/media/platform/msm/camera_v2/isp/msm_isp44.c +15 −0 Original line number Diff line number Diff line Loading @@ -977,6 +977,9 @@ static void msm_vfe44_cfg_camif(struct vfe_device *vfe_dev, uint16_t first_pixel, last_pixel, first_line, last_line; struct msm_vfe_camif_cfg *camif_cfg = &pix_cfg->camif_cfg; uint32_t val, subsample_period, subsample_pattern; struct msm_vfe_camif_subsample_cfg *subsample_cfg = &pix_cfg->camif_cfg.subsample_cfg; uint16_t bus_sub_en = 0; msm_camera_io_w(pix_cfg->input_mux << 16 | pix_cfg->pixel_pattern, vfe_dev->vfe_base + 0x1C); Loading @@ -985,6 +988,18 @@ static void msm_vfe44_cfg_camif(struct vfe_device *vfe_dev, case CAMIF: val = 0x01; msm_camera_io_w(val, vfe_dev->vfe_base + 0x2F4); if (subsample_cfg->pixel_skip || subsample_cfg->line_skip) { bus_sub_en = 1; val = msm_camera_io_r(vfe_dev->vfe_base + 0x2F8); val &= 0xFFFFFFDF; val = val | bus_sub_en << 5; msm_camera_io_w(val, vfe_dev->vfe_base + 0x2F8); subsample_cfg->pixel_skip &= 0x0000FFFF; subsample_cfg->line_skip &= 0x0000FFFF; msm_camera_io_w((subsample_cfg->line_skip << 16) | subsample_cfg->pixel_skip, vfe_dev->vfe_base + 0x30C); } break; case TESTGEN: val = 0x01; Loading
drivers/media/platform/msm/camera_v2/isp/msm_isp46.c +19 −0 Original line number Diff line number Diff line Loading @@ -1013,6 +1013,14 @@ static void msm_vfe46_cfg_camif(struct vfe_device *vfe_dev, uint16_t first_pixel, last_pixel, first_line, last_line; struct msm_vfe_camif_cfg *camif_cfg = &pix_cfg->camif_cfg; uint32_t val, subsample_period, subsample_pattern; struct msm_vfe_camif_subsample_cfg *subsample_cfg = &pix_cfg->camif_cfg.subsample_cfg; uint16_t bus_sub_en = 0; if (subsample_cfg->pixel_skip || subsample_cfg->line_skip) bus_sub_en = 1; else bus_sub_en = 0; msm_camera_io_w(pix_cfg->input_mux << 5 | pix_cfg->pixel_pattern, vfe_dev->vfe_base + 0x50); Loading @@ -1024,6 +1032,17 @@ static void msm_vfe46_cfg_camif(struct vfe_device *vfe_dev, subsample_period = camif_cfg->subsample_cfg.irq_subsample_period; subsample_pattern = camif_cfg->subsample_cfg.irq_subsample_pattern; if (bus_sub_en) { val = msm_camera_io_r(vfe_dev->vfe_base + 0x3AC); val &= 0xFFFFFFDF; val = val | bus_sub_en << 5; msm_camera_io_w(val, vfe_dev->vfe_base + 0x3AC); subsample_cfg->pixel_skip &= 0x0000FFFF; subsample_cfg->line_skip &= 0x0000FFFF; msm_camera_io_w((subsample_cfg->line_skip << 16) | subsample_cfg->pixel_skip, vfe_dev->vfe_base + 0x3C0); } msm_camera_io_w(camif_cfg->lines_per_frame << 16 | camif_cfg->pixels_per_line, vfe_dev->vfe_base + 0x3B4); Loading
drivers/media/platform/msm/camera_v2/isp/msm_isp47.c +18 −0 Original line number Diff line number Diff line Loading @@ -935,6 +935,13 @@ static void msm_vfe47_cfg_camif(struct vfe_device *vfe_dev, uint32_t val, subsample_period, subsample_pattern; uint32_t irq_sub_period = 32; uint32_t frame_sub_period = 32; struct msm_vfe_camif_subsample_cfg *subsample_cfg = &pix_cfg->camif_cfg.subsample_cfg; uint16_t bus_sub_en = 0; if (subsample_cfg->pixel_skip || subsample_cfg->line_skip) bus_sub_en = 1; else bus_sub_en = 0; msm_camera_io_w(pix_cfg->input_mux << 5 | pix_cfg->pixel_pattern, vfe_dev->vfe_base + 0x50); Loading @@ -948,6 +955,17 @@ static void msm_vfe47_cfg_camif(struct vfe_device *vfe_dev, msm_camera_io_w(camif_cfg->lines_per_frame << 16 | camif_cfg->pixels_per_line, vfe_dev->vfe_base + 0x484); if (bus_sub_en) { val = msm_camera_io_r(vfe_dev->vfe_base + 0x47C); val &= 0xFFFFFFDF; val = val | bus_sub_en << 5; msm_camera_io_w(val, vfe_dev->vfe_base + 0x47C); subsample_cfg->pixel_skip &= 0x0000FFFF; subsample_cfg->line_skip &= 0x0000FFFF; msm_camera_io_w((subsample_cfg->line_skip << 16) | subsample_cfg->pixel_skip, vfe_dev->vfe_base + 0x490); } msm_camera_io_w(first_pixel << 16 | last_pixel, vfe_dev->vfe_base + 0x488); Loading
include/media/msmb_isp.h +2 −0 Original line number Diff line number Diff line Loading @@ -160,6 +160,8 @@ struct msm_vfe_camif_subsample_cfg { uint32_t irq_subsample_period; uint32_t irq_subsample_pattern; uint32_t sof_counter_step; uint32_t pixel_skip; uint32_t line_skip; }; /* Loading