Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit b4c8da31 authored by Linux Build Service Account's avatar Linux Build Service Account Committed by Gerrit - the friendly Code Review server
Browse files

Merge "msm: isp: CAMIF subsample skip patterns"

parents f6dce04f c8124229
Loading
Loading
Loading
Loading
+32 −0
Original line number Diff line number Diff line
@@ -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);
@@ -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,
+15 −0
Original line number Diff line number Diff line
@@ -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);
@@ -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;
+19 −0
Original line number Diff line number Diff line
@@ -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);
@@ -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);

+18 −0
Original line number Diff line number Diff line
@@ -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);
@@ -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);
+2 −0
Original line number Diff line number Diff line
@@ -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;
};

/*