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

Commit 82a82030 authored by qctecmdr's avatar qctecmdr Committed by Gerrit - the friendly Code Review server
Browse files

Merge "msm: camera: isp: Fix overwriting of WM data on reg_update"

parents c166b827 9fdb84b2
Loading
Loading
Loading
Loading
+17 −9
Original line number Diff line number Diff line
/* Copyright (c) 2018-2019, The Linux Foundation. All rights reserved.
/* Copyright (c) 2018-2020, The Linux Foundation. All rights reserved.
 *
 * This program is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License version 2 and
@@ -113,6 +113,8 @@ struct cam_vfe_bus_ver2_common_data {
	void                                       *vfe_irq_controller;
	struct cam_vfe_bus_ver2_reg_offset_common  *common_reg;
	struct cam_vfe_bus_ver2_reg_data           *reg_data;
	uint32_t                                    io_buf_update[
		MAX_REG_VAL_PAIR_SIZE];
	struct cam_vfe_bus_irq_evt_payload          evt_payload[
		CAM_VFE_BUS_VER2_PAYLOAD_MAX];
	struct list_head                            free_payload_list;
@@ -3074,6 +3076,7 @@ static int cam_vfe_bus_update_wm(void *priv, void *cmd_args,
	}

	io_cfg = update_buf->wm_update->io_cfg;
	reg_val_pair = &vfe_out_data->common_data->io_buf_update[0];

	for (i = 0, j = 0; i < vfe_out_data->num_wm; i++) {
		if (j >= (MAX_REG_VAL_PAIR_SIZE - MAX_BUF_UPDATE_REG_NUM * 2)) {
@@ -3084,9 +3087,16 @@ static int cam_vfe_bus_update_wm(void *priv, void *cmd_args,
		}

		wm_data = vfe_out_data->wm_res[i]->res_priv;
		reg_val_pair = &wm_data->io_buf_update[0];
		ubwc_client = wm_data->hw_regs->ubwc_regs;

		if (wm_data->index < 3 ||
			(wm_data->is_lite && wm_data->index == 3)) {
			reg_val_pair = &wm_data->io_buf_update[0];
			loop_size = wm_data->irq_subsample_period + 1;
		} else {
			loop_size = 1;
		}

		/* update width register */
		CAM_VFE_ADD_REG_VAL_PAIR(reg_val_pair, j,
			wm_data->hw_regs->buffer_width_cfg,
@@ -3151,12 +3161,6 @@ static int cam_vfe_bus_update_wm(void *priv, void *cmd_args,
				io_cfg->planes[i].slice_height;
		}

		if (wm_data->index < 3 ||
			(wm_data->is_lite && wm_data->index == 3))
			loop_size = wm_data->irq_subsample_period + 1;
		else
			loop_size = 1;

		/* WM Image address */
		for (k = 0; k < loop_size; k++) {
			if (wm_data->en_ubwc)
@@ -3229,6 +3233,7 @@ static int cam_vfe_bus_update_hfr(void *priv, void *cmd_args,
	}

	hfr_cfg = update_hfr->hfr_update;
	reg_val_pair = &vfe_out_data->common_data->io_buf_update[0];

	for (i = 0, j = 0; i < vfe_out_data->num_wm; i++) {
		if (j >= (MAX_REG_VAL_PAIR_SIZE - MAX_BUF_UPDATE_REG_NUM * 2)) {
@@ -3239,6 +3244,9 @@ static int cam_vfe_bus_update_hfr(void *priv, void *cmd_args,
		}

		wm_data = vfe_out_data->wm_res[i]->res_priv;

		if (wm_data->index < 3 ||
			(wm_data->is_lite && wm_data->index == 3))
			reg_val_pair = &wm_data->io_buf_update[0];

		if (wm_data->index <= 2 && hfr_cfg->subsample_period > 3) {