/*
 * Copyright 2023 Google LLC
 * Copyright lowRISC contributors
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */


#include "sw/device/lib/dif/dif_isp_wrapper.h"

#include <stddef.h>

#include "sw/device/lib/base/bitfield.h"
#include "sw/device/lib/base/macros.h"
#include "sw/device/lib/dif/dif_base.h"

#include "external/isp_yocto/include/yocto_isp_register_address.h"
#include "isp_wrapper_regs.h"  // Generated.

// ISP configuration:
// TPG 128 * 64, raw, bypass modes
dif_result_t dif_isp_wrapper_set_en(const dif_isp_wrapper_t *isp_wrapper) {
  if (isp_wrapper == NULL) {
    return kDifBadArg;
  }
  mmio_region_write32(isp_wrapper->base_addr, ISP_IMSC, 0xffffffff);
  mmio_region_write32(isp_wrapper->base_addr, MI_IMSC, 0xffffffff);
  mmio_region_write32(isp_wrapper->base_addr, VI_CCL, 0x00000002);
  mmio_region_write32(isp_wrapper->base_addr, VI_ICCL, 0x00000059);
  mmio_region_write32(isp_wrapper->base_addr, VI_IRCL, 0x00000000);
  mmio_region_write32(isp_wrapper->base_addr, ISP_ACQ_H_OFFS, 0x00000000);
  mmio_region_write32(isp_wrapper->base_addr, ISP_ACQ_V_OFFS, 0x00000000);
  mmio_region_write32(isp_wrapper->base_addr, ISP_ACQ_H_SIZE, 0x00000080);
  mmio_region_write32(isp_wrapper->base_addr, ISP_ACQ_V_SIZE, 0x00000040);
  mmio_region_write32(isp_wrapper->base_addr, ISP_TPG_TOTAL_IN, 0x00bfc25f);
  mmio_region_write32(isp_wrapper->base_addr, ISP_TPG_ACT_IN, 0x00200040);
  mmio_region_write32(isp_wrapper->base_addr, ISP_TPG_FP_IN, 0x002bc11b);
  mmio_region_write32(isp_wrapper->base_addr, ISP_TPG_BP_IN, 0x0039c0a7);
  mmio_region_write32(isp_wrapper->base_addr, ISP_TPG_W_IN, 0x003a405d);
  mmio_region_write32(isp_wrapper->base_addr, ISP_TPG_GAP_IN, 0x000a8015);
  mmio_region_write32(isp_wrapper->base_addr, ISP_TPG_GAP_STD_IN, 0x00000010);
  mmio_region_write32(isp_wrapper->base_addr, ISP_TPG_RANDOM_SEED, 0xb6ccff1c);
  mmio_region_write32(isp_wrapper->base_addr, ISP_TPG_FRAME_NUM, 0x00000001);
  mmio_region_write32(isp_wrapper->base_addr, ISP_OUT_H_OFFS, 0x00000000);
  mmio_region_write32(isp_wrapper->base_addr, ISP_OUT_V_OFFS, 0x00000000);
  mmio_region_write32(isp_wrapper->base_addr, ISP_OUT_H_SIZE, 0x00000080);
  mmio_region_write32(isp_wrapper->base_addr, ISP_OUT_V_SIZE, 0x00000040);
  mmio_region_write32(isp_wrapper->base_addr, ISP_BLS_CTRL, 0x00000001);
  mmio_region_write32(isp_wrapper->base_addr, ISP_BLS_A_FIXED, 0x00000000);
  mmio_region_write32(isp_wrapper->base_addr, ISP_BLS_B_FIXED, 0x00000000);
  mmio_region_write32(isp_wrapper->base_addr, ISP_BLS_C_FIXED, 0x00000000);
  mmio_region_write32(isp_wrapper->base_addr, ISP_BLS_D_FIXED, 0x00000000);
  mmio_region_write32(isp_wrapper->base_addr, ISP_EXP_CONF, 0x00000000);
  mmio_region_write32(isp_wrapper->base_addr, ISP_EXP_H_OFFSET, 0x00000012);
  mmio_region_write32(isp_wrapper->base_addr, ISP_EXP_V_OFFSET, 0x0000001f);
  mmio_region_write32(isp_wrapper->base_addr, ISP_EXP_H_SIZE, 0x00000012);
  mmio_region_write32(isp_wrapper->base_addr, ISP_EXP_V_SIZE, 0x00000004);
  mmio_region_write32(isp_wrapper->base_addr, ISP_DGAIN_RB, 0x006600ba);
  mmio_region_write32(isp_wrapper->base_addr, ISP_DGAIN_G, 0x00dd00e3);
  mmio_region_write32(isp_wrapper->base_addr, ISP_DEMOSAIC, 0x00000462);
  mmio_region_write32(isp_wrapper->base_addr, ISP_FILT_MODE, 0x00000a12);
  mmio_region_write32(isp_wrapper->base_addr, ISP_FILT_THRES_BL0, 0x0000036d);
  mmio_region_write32(isp_wrapper->base_addr, ISP_FILT_THRES_BL1, 0x0000028e);
  mmio_region_write32(isp_wrapper->base_addr, ISP_FILT_THRES_SH0, 0x000003c8);
  mmio_region_write32(isp_wrapper->base_addr, ISP_FILT_THRES_SH1, 0x000003e2);
  mmio_region_write32(isp_wrapper->base_addr, ISP_FILT_LUM_WEIGHT, 0x000259b5);
  mmio_region_write32(isp_wrapper->base_addr, ISP_FILT_FAC_SH1, 0x0000003e);
  mmio_region_write32(isp_wrapper->base_addr, ISP_FILT_FAC_SH0, 0x0000003d);
  mmio_region_write32(isp_wrapper->base_addr, ISP_FILT_FAC_MID, 0x0000002c);
  mmio_region_write32(isp_wrapper->base_addr, ISP_FILT_FAC_BL0, 0x00000021);
  mmio_region_write32(isp_wrapper->base_addr, ISP_FILT_FAC_BL1, 0x0000000c);
  mmio_region_write32(isp_wrapper->base_addr, ISP_CAC_CTRL, 0x0000000a);
  mmio_region_write32(isp_wrapper->base_addr, ISP_CAC_COUNT_START, 0x00200040);
  mmio_region_write32(isp_wrapper->base_addr, ISP_CAC_A, 0x01f4018c);
  mmio_region_write32(isp_wrapper->base_addr, ISP_CAC_B, 0x012e01ca);
  mmio_region_write32(isp_wrapper->base_addr, ISP_CAC_C, 0x003401a4);
  mmio_region_write32(isp_wrapper->base_addr, ISP_CAC_X_NORM, 0x00030008);
  mmio_region_write32(isp_wrapper->base_addr, ISP_CAC_Y_NORM, 0x00020015);
  mmio_region_write32(isp_wrapper->base_addr, ISP_GAMMA_OUT_MODE, 0x00000001);
  mmio_region_write32(isp_wrapper->base_addr, ISP_GAMMA_OUT_Y_0, 0x000001ae);
  mmio_region_write32(isp_wrapper->base_addr, ISP_GAMMA_OUT_Y_1, 0x000002b0);
  mmio_region_write32(isp_wrapper->base_addr, ISP_GAMMA_OUT_Y_2, 0x000002db);
  mmio_region_write32(isp_wrapper->base_addr, ISP_GAMMA_OUT_Y_3, 0x000002f9);
  mmio_region_write32(isp_wrapper->base_addr, ISP_GAMMA_OUT_Y_4, 0x000002fd);
  mmio_region_write32(isp_wrapper->base_addr, ISP_GAMMA_OUT_Y_5, 0x000002fe);
  mmio_region_write32(isp_wrapper->base_addr, ISP_GAMMA_OUT_Y_6, 0x000002fe);
  mmio_region_write32(isp_wrapper->base_addr, ISP_GAMMA_OUT_Y_7, 0x000002fe);
  mmio_region_write32(isp_wrapper->base_addr, ISP_GAMMA_OUT_Y_8, 0x000002fe);
  mmio_region_write32(isp_wrapper->base_addr, ISP_GAMMA_OUT_Y_9, 0x000002fe);
  mmio_region_write32(isp_wrapper->base_addr, ISP_GAMMA_OUT_Y_10, 0x000002fe);
  mmio_region_write32(isp_wrapper->base_addr, ISP_GAMMA_OUT_Y_11, 0x000002fe);
  mmio_region_write32(isp_wrapper->base_addr, ISP_GAMMA_OUT_Y_12, 0x000002fe);
  mmio_region_write32(isp_wrapper->base_addr, ISP_GAMMA_OUT_Y_13, 0x000002fe);
  mmio_region_write32(isp_wrapper->base_addr, ISP_GAMMA_OUT_Y_14, 0x000002fe);
  mmio_region_write32(isp_wrapper->base_addr, ISP_GAMMA_OUT_Y_15, 0x000002fe);
  mmio_region_write32(isp_wrapper->base_addr, ISP_GAMMA_OUT_Y_16, 0x000002fe);
  mmio_region_write32(isp_wrapper->base_addr, ISP_AWB_PROP, 0x80000007);
  mmio_region_write32(isp_wrapper->base_addr, ISP_AWB_H_OFFS, 0x0000005b);
  mmio_region_write32(isp_wrapper->base_addr, ISP_AWB_V_OFFS, 0x00000022);
  mmio_region_write32(isp_wrapper->base_addr, ISP_AWB_H_SIZE, 0x00000005);
  mmio_region_write32(isp_wrapper->base_addr, ISP_AWB_V_SIZE, 0x00000009);
  mmio_region_write32(isp_wrapper->base_addr, ISP_AWB_FRAMES, 0x00000000);
  mmio_region_write32(isp_wrapper->base_addr, ISP_AWB_REF, 0x00006b55);
  mmio_region_write32(isp_wrapper->base_addr, ISP_AWB_THRESH, 0xeaef51fa);
  mmio_region_write32(isp_wrapper->base_addr, ISP_CC_COEFF_0, 0x00000004);
  mmio_region_write32(isp_wrapper->base_addr, ISP_CC_COEFF_1, 0x0000011b);
  mmio_region_write32(isp_wrapper->base_addr, ISP_CC_COEFF_2, 0x000001af);
  mmio_region_write32(isp_wrapper->base_addr, ISP_CC_COEFF_3, 0x000001e0);
  mmio_region_write32(isp_wrapper->base_addr, ISP_CC_COEFF_4, 0x00000020);
  mmio_region_write32(isp_wrapper->base_addr, ISP_CC_COEFF_5, 0x00000140);
  mmio_region_write32(isp_wrapper->base_addr, ISP_CC_COEFF_6, 0x00000053);
  mmio_region_write32(isp_wrapper->base_addr, ISP_CC_COEFF_7, 0x0000002e);
  mmio_region_write32(isp_wrapper->base_addr, ISP_CC_COEFF_8, 0x000001b7);
  mmio_region_write32(isp_wrapper->base_addr, FORMAT_CONV_CTRL, 0x00000001);
  mmio_region_write32(isp_wrapper->base_addr, ISP_CT_COEFF_0, 0x00000588);
  mmio_region_write32(isp_wrapper->base_addr, ISP_CT_COEFF_1, 0x000005d9);
  mmio_region_write32(isp_wrapper->base_addr, ISP_CT_COEFF_2, 0x000004ea);
  mmio_region_write32(isp_wrapper->base_addr, ISP_CT_COEFF_3, 0x000004f9);
  mmio_region_write32(isp_wrapper->base_addr, ISP_CT_COEFF_4, 0x0000031e);
  mmio_region_write32(isp_wrapper->base_addr, ISP_CT_COEFF_5, 0x000006db);
  mmio_region_write32(isp_wrapper->base_addr, ISP_CT_COEFF_6, 0x000004f6);
  mmio_region_write32(isp_wrapper->base_addr, ISP_CT_COEFF_7, 0x00000307);
  mmio_region_write32(isp_wrapper->base_addr, ISP_CT_COEFF_8, 0x00000085);
  mmio_region_write32(isp_wrapper->base_addr, ISP_CT_OFFSET_R, 0x00000310);
  mmio_region_write32(isp_wrapper->base_addr, ISP_CT_OFFSET_G, 0x00000592);
  mmio_region_write32(isp_wrapper->base_addr, ISP_CT_OFFSET_B, 0x00000d58);
  mmio_region_write32(isp_wrapper->base_addr, ISP_IMSC, 0x000400fc);
  mmio_region_write32(isp_wrapper->base_addr, ISP_ERR_CLR, 0x00000001);
  mmio_region_write32(isp_wrapper->base_addr, MI_MP_Y_BASE_AD_INIT, 0x5a000000);
  mmio_region_write32(isp_wrapper->base_addr, MI_MP_Y_SIZE_INIT, 0x0000a800);
  mmio_region_write32(isp_wrapper->base_addr, MI_MP_Y_OFFS_CNT_INIT, 0x00000000);
  mmio_region_write32(isp_wrapper->base_addr, MI_MP_Y_IRQ_OFFS_INIT, 0x00000000);
  mmio_region_write32(isp_wrapper->base_addr, MI_MP_CB_BASE_AD_INIT, 0x5a00a800);
  mmio_region_write32(isp_wrapper->base_addr, MI_MP_CB_SIZE_INIT, 0x00005400);
  mmio_region_write32(isp_wrapper->base_addr, MI_MP_CB_OFFS_CNT_INIT, 0x00000000);
  mmio_region_write32(isp_wrapper->base_addr, MI_MP_CR_BASE_AD_INIT, 0x5a00a800);
  mmio_region_write32(isp_wrapper->base_addr, MI_MP_CR_SIZE_INIT, 0x00005400);
  mmio_region_write32(isp_wrapper->base_addr, MI_MP_CR_OFFS_CNT_INIT, 0x00000000);
  mmio_region_write32(isp_wrapper->base_addr, MI_IMSC, 0x000003ff);
  mmio_region_write32(isp_wrapper->base_addr, MI_STATUS_CLR, 0x00000053);
  mmio_region_write32(isp_wrapper->base_addr, MI_MP_Y_BASE_AD_INIT2, 0x5a01f800);
  mmio_region_write32(isp_wrapper->base_addr, MI_MP_CB_BASE_AD_INIT2, 0x5a02a000);
  mmio_region_write32(isp_wrapper->base_addr, MI_MP_CR_BASE_AD_INIT2, 0x5a02f800);
  mmio_region_write32(isp_wrapper->base_addr, MI_MP_Y_LLENGTH, 0x00000080);
  mmio_region_write32(isp_wrapper->base_addr, MI_OUTPUT_ALIGN_FORMAT, 0x00000401);
  mmio_region_write32(isp_wrapper->base_addr, MI_MP_OUTPUT_FIFO_SIZE, 0x00000000);
  mmio_region_write32(isp_wrapper->base_addr, MI_MP_Y_PIC_WIDTH, 0x00000080);
  mmio_region_write32(isp_wrapper->base_addr, MI_MP_Y_PIC_HEIGHT, 0x00000040);
  mmio_region_write32(isp_wrapper->base_addr, MI_MP_Y_PIC_SIZE, 0x00002000);
  mmio_region_write32(isp_wrapper->base_addr, SRSZ_CTRL, 0x0000011c);
  mmio_region_write32(isp_wrapper->base_addr, SRSZ_SCALE_HY, 0x0000c177);
  mmio_region_write32(isp_wrapper->base_addr, SRSZ_SCALE_HCB, 0x0000ec82);
  mmio_region_write32(isp_wrapper->base_addr, SRSZ_SCALE_HCR, 0x00000057);
  mmio_region_write32(isp_wrapper->base_addr, SRSZ_SCALE_VY, 0x000075d8);
  mmio_region_write32(isp_wrapper->base_addr, SRSZ_SCALE_VC, 0x000075d8);
  mmio_region_write32(isp_wrapper->base_addr, SRSZ_PHASE_HY, 0x00000000);
  mmio_region_write32(isp_wrapper->base_addr, SRSZ_PHASE_HC, 0x00000000);
  mmio_region_write32(isp_wrapper->base_addr, SRSZ_PHASE_VY, 0x00000000);
  mmio_region_write32(isp_wrapper->base_addr, SRSZ_PHASE_VC, 0x00000000);
  mmio_region_write32(isp_wrapper->base_addr, SRSZ_FORMAT_CONV_CTRL, 0x000000fa);
  mmio_region_write32(isp_wrapper->base_addr, MI_SP_Y_BASE_AD_INIT, 0x2354d5f8);
  mmio_region_write32(isp_wrapper->base_addr, MI_SP_Y_SIZE_INIT, 0x00008000);
  mmio_region_write32(isp_wrapper->base_addr, MI_SP_Y_OFFS_CNT_INIT, 0x00000000);
  mmio_region_write32(isp_wrapper->base_addr, MI_SP_Y_LLENGTH, 0x00000080);
  mmio_region_write32(isp_wrapper->base_addr, MI_SP_CB_BASE_AD_INIT, 0x9fff2d98);
  mmio_region_write32(isp_wrapper->base_addr, MI_SP_CB_SIZE_INIT, 0x01673858);
  mmio_region_write32(isp_wrapper->base_addr, MI_SP_CB_OFFS_CNT_INIT, 0x00000000);
  mmio_region_write32(isp_wrapper->base_addr, MI_SP_CR_BASE_AD_INIT, 0xd3bbca68);
  mmio_region_write32(isp_wrapper->base_addr, MI_SP_CR_SIZE_INIT, 0x0f8bf230);
  mmio_region_write32(isp_wrapper->base_addr, MI_SP_CR_OFFS_CNT_INIT, 0x00000000);
  mmio_region_write32(isp_wrapper->base_addr, MI_SP_Y_PIC_WIDTH, 0x00000080);
  mmio_region_write32(isp_wrapper->base_addr, MI_SP_Y_PIC_HEIGHT, 0x00000040);
  mmio_region_write32(isp_wrapper->base_addr, MI_SP_Y_PIC_SIZE, 0x00002000);
  mmio_region_write32(isp_wrapper->base_addr, MI_SP_Y_BASE_AD_INIT2, 0x1939f6d8);
  mmio_region_write32(isp_wrapper->base_addr, MI_SP_CB_BASE_AD_INIT2, 0xf9f91948);
  mmio_region_write32(isp_wrapper->base_addr, MI_SP_CR_BASE_AD_INIT2, 0x8335a0b0);
  mmio_region_write32(isp_wrapper->base_addr, ISP_ACQ_PROP, 0x00000089);
  mmio_region_write32(isp_wrapper->base_addr, SRSZ_CTRL, 0x0000011c);
  mmio_region_write32(isp_wrapper->base_addr, ISP_CTRL, 0x80007250);
  mmio_region_write32(isp_wrapper->base_addr, ISP_TPG_CTRL, 0x00000d95);
  mmio_region_write32(isp_wrapper->base_addr, MI_CTRL, 0x68360808);
  mmio_region_write32(isp_wrapper->base_addr, MI_INIT, 0x000000b0);

  return kDifOk;
}

// ISP configuration:
// raw:320x240, byp:320x240
dif_result_t dif_isp_wrapper_set_raw_320x240_byp_320x240_en(
    const dif_isp_wrapper_t *isp_wrapper) {
  return _dif_isp_wrapper_set_raw_320x240_byp_320x240_en(
      isp_wrapper, 0x5a000000, 0x5a01a000, 0x5a01a000, 0x5a020000, 0x5a03a000,
      0x5a03a000);
}

// ISP configuration:
// raw:320x240, byp:320x240, hps image address: 0x00300000
dif_result_t dif_isp_wrapper_set_ml_mem_byp_320x240_en(
    const dif_isp_wrapper_t *isp_wrapper) {
  return _dif_isp_wrapper_set_raw_320x240_byp_320x240_en(
      isp_wrapper, 0x5a300000, 0x5a320000, 0x5a320000, 0x5a340000, 0x5a360000,
      0x5a360000);
}

// TODO(ykwang): Remove the code duplication in this library. Use a config
// variable to describe which field to set and implement an initialization
// to setup ISP with the config. Unify all *_en functions in this library.
dif_result_t _dif_isp_wrapper_set_raw_320x240_byp_320x240_en(
    const dif_isp_wrapper_t *isp_wrapper,
    // TODO(ykwang): put these variables into a config variable.
    const uint32_t y_base_ad_init_addr, const uint32_t cb_base_ad_init_addr,
    const uint32_t cr_base_ad_init_addr, const uint32_t y_base_ad_init2_addr,
    const uint32_t cb_base_ad_init2_addr,
    const uint32_t cr_base_ad_init2_addr) {
  if (isp_wrapper == NULL) {
    return kDifBadArg;
  }
  mmio_region_write32(isp_wrapper->base_addr, VI_CCL, 0x00000000);
  mmio_region_write32(isp_wrapper->base_addr, VI_ICCL, 0x00000049);
  mmio_region_write32(isp_wrapper->base_addr, VI_IRCL, 0x00000000);
  mmio_region_write32(isp_wrapper->base_addr, ISP_CTRL, 0x00206010);
  mmio_region_write32(isp_wrapper->base_addr, ISP_ACQ_PROP, 0x00040011);
  mmio_region_write32(isp_wrapper->base_addr, ISP_ACQ_H_OFFS, 0x00000002);
  mmio_region_write32(isp_wrapper->base_addr, ISP_ACQ_V_OFFS, 0x00000002);
  mmio_region_write32(isp_wrapper->base_addr, ISP_ACQ_H_SIZE, 0x00000140);
  mmio_region_write32(isp_wrapper->base_addr, ISP_ACQ_V_SIZE, 0x000000f0);
  mmio_region_write32(isp_wrapper->base_addr, ISP_TPG_TOTAL_IN, 0x00ad3f05);
  mmio_region_write32(isp_wrapper->base_addr, ISP_TPG_ACT_IN, 0x00510144);
  mmio_region_write32(isp_wrapper->base_addr, ISP_TPG_FP_IN, 0x0d6e000f);
  mmio_region_write32(isp_wrapper->base_addr, ISP_TPG_BP_IN, 0x028b8004);
  mmio_region_write32(isp_wrapper->base_addr, ISP_TPG_W_IN, 0x0bad0001);
  mmio_region_write32(isp_wrapper->base_addr, ISP_TPG_GAP_IN, 0x04a1415b);
  mmio_region_write32(isp_wrapper->base_addr, ISP_TPG_GAP_STD_IN, 0x00002a97);
  mmio_region_write32(isp_wrapper->base_addr, ISP_TPG_RANDOM_SEED, 0x4d777439);
  mmio_region_write32(isp_wrapper->base_addr, ISP_TPG_FRAME_NUM, 0x00000001);
  mmio_region_write32(isp_wrapper->base_addr, ISP_FRAME_RATE, 0x00000000);
  mmio_region_write32(isp_wrapper->base_addr, ISP_OUT_H_OFFS, 0x00000000);
  mmio_region_write32(isp_wrapper->base_addr, ISP_OUT_V_OFFS, 0x00000000);
  mmio_region_write32(isp_wrapper->base_addr, ISP_OUT_H_SIZE, 0x00000140);
  mmio_region_write32(isp_wrapper->base_addr, ISP_OUT_V_SIZE, 0x000000f0);
  mmio_region_write32(isp_wrapper->base_addr, ISP_BINNING_BASE, 0x00010001);
  mmio_region_write32(isp_wrapper->base_addr, ISP_BINNING_NUM, 0x01580393);
  mmio_region_write32(isp_wrapper->base_addr, ISP_BLS_CTRL, 0x00000000);
  mmio_region_write32(isp_wrapper->base_addr, ISP_BLS_A_FIXED, 0x00000000);
  mmio_region_write32(isp_wrapper->base_addr, ISP_BLS_B_FIXED, 0x00000000);
  mmio_region_write32(isp_wrapper->base_addr, ISP_BLS_C_FIXED, 0x00000000);
  mmio_region_write32(isp_wrapper->base_addr, ISP_BLS_D_FIXED, 0x00000000);
  mmio_region_write32(isp_wrapper->base_addr, ISP_EXP_CONF, 0x80000001);
  mmio_region_write32(isp_wrapper->base_addr, ISP_EXP_H_OFFSET, 0x00000020);
  mmio_region_write32(isp_wrapper->base_addr, ISP_EXP_V_OFFSET, 0x00000028);
  mmio_region_write32(isp_wrapper->base_addr, ISP_EXP_H_SIZE, 0x00000030);
  mmio_region_write32(isp_wrapper->base_addr, ISP_EXP_V_SIZE, 0x00000036);
  mmio_region_write32(isp_wrapper->base_addr, ISP_DGAIN_RB, 0x011a00d1);
  mmio_region_write32(isp_wrapper->base_addr, ISP_DGAIN_G, 0x01260109);
  mmio_region_write32(isp_wrapper->base_addr, ISP_DEMOSAIC, 0x00000414);
  mmio_region_write32(isp_wrapper->base_addr, ISP_FILT_MODE, 0x00000692);
  mmio_region_write32(isp_wrapper->base_addr, ISP_FILT_THRES_BL0, 0x00000167);
  mmio_region_write32(isp_wrapper->base_addr, ISP_FILT_THRES_BL1, 0x00000142);
  mmio_region_write32(isp_wrapper->base_addr, ISP_FILT_THRES_SH0, 0x00000177);
  mmio_region_write32(isp_wrapper->base_addr, ISP_FILT_THRES_SH1, 0x000001c7);
  mmio_region_write32(isp_wrapper->base_addr, ISP_FILT_LUM_WEIGHT, 0x0006698a);
  mmio_region_write32(isp_wrapper->base_addr, ISP_FILT_FAC_SH1, 0x00000032);
  mmio_region_write32(isp_wrapper->base_addr, ISP_FILT_FAC_SH0, 0x00000023);
  mmio_region_write32(isp_wrapper->base_addr, ISP_FILT_FAC_MID, 0x00000019);
  mmio_region_write32(isp_wrapper->base_addr, ISP_FILT_FAC_BL0, 0x0000000f);
  mmio_region_write32(isp_wrapper->base_addr, ISP_FILT_FAC_BL1, 0x00000006);
  mmio_region_write32(isp_wrapper->base_addr, ISP_CAC_CTRL, 0x0000000a);
  mmio_region_write32(isp_wrapper->base_addr, ISP_CAC_COUNT_START, 0x00a200a2);
  mmio_region_write32(isp_wrapper->base_addr, ISP_CAC_A, 0x00170118);
  mmio_region_write32(isp_wrapper->base_addr, ISP_CAC_B, 0x01d101ed);
  mmio_region_write32(isp_wrapper->base_addr, ISP_CAC_C, 0x01c100f8);
  mmio_region_write32(isp_wrapper->base_addr, ISP_CAC_X_NORM, 0x00020005);
  mmio_region_write32(isp_wrapper->base_addr, ISP_CAC_Y_NORM, 0x00050019);
  mmio_region_write32(isp_wrapper->base_addr, ISP_GAMMA_OUT_MODE, 0x00000000);
  mmio_region_write32(isp_wrapper->base_addr, ISP_GAMMA_OUT_Y_0, 0x000002f4);
  mmio_region_write32(isp_wrapper->base_addr, ISP_GAMMA_OUT_Y_1, 0x0000024e);
  mmio_region_write32(isp_wrapper->base_addr, ISP_GAMMA_OUT_Y_2, 0x00000083);
  mmio_region_write32(isp_wrapper->base_addr, ISP_GAMMA_OUT_Y_3, 0x000001af);
  mmio_region_write32(isp_wrapper->base_addr, ISP_GAMMA_OUT_Y_4, 0x00000346);
  mmio_region_write32(isp_wrapper->base_addr, ISP_GAMMA_OUT_Y_5, 0x000000a5);
  mmio_region_write32(isp_wrapper->base_addr, ISP_GAMMA_OUT_Y_6, 0x00000304);
  mmio_region_write32(isp_wrapper->base_addr, ISP_GAMMA_OUT_Y_7, 0x00000111);
  mmio_region_write32(isp_wrapper->base_addr, ISP_GAMMA_OUT_Y_8, 0x000003b9);
  mmio_region_write32(isp_wrapper->base_addr, ISP_GAMMA_OUT_Y_9, 0x00000383);
  mmio_region_write32(isp_wrapper->base_addr, ISP_GAMMA_OUT_Y_10, 0x00000018);
  mmio_region_write32(isp_wrapper->base_addr, ISP_GAMMA_OUT_Y_11, 0x0000028c);
  mmio_region_write32(isp_wrapper->base_addr, ISP_GAMMA_OUT_Y_12, 0x0000001e);
  mmio_region_write32(isp_wrapper->base_addr, ISP_GAMMA_OUT_Y_13, 0x00000087);
  mmio_region_write32(isp_wrapper->base_addr, ISP_GAMMA_OUT_Y_14, 0x00000047);
  mmio_region_write32(isp_wrapper->base_addr, ISP_GAMMA_OUT_Y_15, 0x000001a4);
  mmio_region_write32(isp_wrapper->base_addr, ISP_GAMMA_OUT_Y_16, 0x000002bc);
  mmio_region_write32(isp_wrapper->base_addr, ISP_AWB_PROP, 0x80000007);
  mmio_region_write32(isp_wrapper->base_addr, ISP_AWB_H_OFFS, 0x0000011c);
  mmio_region_write32(isp_wrapper->base_addr, ISP_AWB_V_OFFS, 0x000000c1);
  mmio_region_write32(isp_wrapper->base_addr, ISP_AWB_H_SIZE, 0x0000001e);
  mmio_region_write32(isp_wrapper->base_addr, ISP_AWB_V_SIZE, 0x00000078);
  mmio_region_write32(isp_wrapper->base_addr, ISP_AWB_FRAMES, 0x00000002);
  mmio_region_write32(isp_wrapper->base_addr, ISP_AWB_REF, 0x0000c2e6);
  mmio_region_write32(isp_wrapper->base_addr, ISP_AWB_THRESH, 0x8ef9ad1e);
  mmio_region_write32(isp_wrapper->base_addr, ISP_CC_COEFF_0, 0x00000026);
  mmio_region_write32(isp_wrapper->base_addr, ISP_CC_COEFF_1, 0x0000004b);
  mmio_region_write32(isp_wrapper->base_addr, ISP_CC_COEFF_2, 0x0000000f);
  mmio_region_write32(isp_wrapper->base_addr, ISP_CC_COEFF_3, 0x000001ea);
  mmio_region_write32(isp_wrapper->base_addr, ISP_CC_COEFF_4, 0x000001d6);
  mmio_region_write32(isp_wrapper->base_addr, ISP_CC_COEFF_5, 0x00000040);
  mmio_region_write32(isp_wrapper->base_addr, ISP_CC_COEFF_6, 0x00000040);
  mmio_region_write32(isp_wrapper->base_addr, ISP_CC_COEFF_7, 0x000001ca);
  mmio_region_write32(isp_wrapper->base_addr, ISP_CC_COEFF_8, 0x000001f6);
  mmio_region_write32(isp_wrapper->base_addr, FORMAT_CONV_CTRL, 0x00000000);
  mmio_region_write32(isp_wrapper->base_addr, ISP_CT_COEFF_0, 0x000000dd);
  mmio_region_write32(isp_wrapper->base_addr, ISP_CT_COEFF_1, 0x000007c6);
  mmio_region_write32(isp_wrapper->base_addr, ISP_CT_COEFF_2, 0x000007df);
  mmio_region_write32(isp_wrapper->base_addr, ISP_CT_COEFF_3, 0x000007bf);
  mmio_region_write32(isp_wrapper->base_addr, ISP_CT_COEFF_4, 0x000000ec);
  mmio_region_write32(isp_wrapper->base_addr, ISP_CT_COEFF_5, 0x000007de);
  mmio_region_write32(isp_wrapper->base_addr, ISP_CT_COEFF_6, 0x00000002);
  mmio_region_write32(isp_wrapper->base_addr, ISP_CT_COEFF_7, 0x000007ae);
  mmio_region_write32(isp_wrapper->base_addr, ISP_CT_COEFF_8, 0x000000e0);
  mmio_region_write32(isp_wrapper->base_addr, ISP_CT_OFFSET_R, 0x00000000);
  mmio_region_write32(isp_wrapper->base_addr, ISP_CT_OFFSET_G, 0x00000000);
  mmio_region_write32(isp_wrapper->base_addr, ISP_CT_OFFSET_B, 0x00000000);
  mmio_region_write32(isp_wrapper->base_addr, ISP_IMSC, 0x00000020);
  mmio_region_write32(isp_wrapper->base_addr, ISP_ICR, 0x00000000);
  mmio_region_write32(isp_wrapper->base_addr, ISP_ISR, 0x00000000);
  mmio_region_write32(isp_wrapper->base_addr, ISP_ERR_CLR, 0x00000000);
  mmio_region_write32(isp_wrapper->base_addr, ISP_MRSZ_SCALE_HY, 0x00008469);
  mmio_region_write32(isp_wrapper->base_addr, ISP_MRSZ_SCALE_HCB, 0x0000a674);
  mmio_region_write32(isp_wrapper->base_addr, ISP_MRSZ_SCALE_HCR, 0x0000fa3d);
  mmio_region_write32(isp_wrapper->base_addr, ISP_MRSZ_SCALE_VY, 0x0000ef61);
  mmio_region_write32(isp_wrapper->base_addr, ISP_MRSZ_SCALE_VC, 0x0000f9b7);
  mmio_region_write32(isp_wrapper->base_addr, ISP_MRSZ_PHASE_HY, 0x00000000);
  mmio_region_write32(isp_wrapper->base_addr, ISP_MRSZ_PHASE_HC, 0x00000000);
  mmio_region_write32(isp_wrapper->base_addr, ISP_MRSZ_PHASE_VY, 0x00000000);
  mmio_region_write32(isp_wrapper->base_addr, ISP_MRSZ_PHASE_VC, 0x00000000);
  mmio_region_write32(isp_wrapper->base_addr, ISP_MRSZ_FORMAT_CONV_CTRL, 0x000000fa);
  mmio_region_write32(isp_wrapper->base_addr, MI_MP_Y_BASE_AD_INIT,
                      y_base_ad_init_addr);
  mmio_region_write32(isp_wrapper->base_addr, MI_MP_Y_SIZE_INIT, 0x00012c00);
  mmio_region_write32(isp_wrapper->base_addr, MI_MP_Y_OFFS_CNT_INIT, 0x00000000);
  mmio_region_write32(isp_wrapper->base_addr, MI_MP_Y_IRQ_OFFS_INIT, 0x00000000);
  mmio_region_write32(isp_wrapper->base_addr, MI_MP_CB_BASE_AD_INIT,
                      cb_base_ad_init_addr);
  mmio_region_write32(isp_wrapper->base_addr, MI_MP_CB_SIZE_INIT, 0x00000000);
  mmio_region_write32(isp_wrapper->base_addr, MI_MP_CB_OFFS_CNT_INIT, 0x00000000);
  mmio_region_write32(isp_wrapper->base_addr, MI_MP_CR_BASE_AD_INIT,
                      cr_base_ad_init_addr);
  mmio_region_write32(isp_wrapper->base_addr, MI_MP_CR_SIZE_INIT, 0x00000000);
  mmio_region_write32(isp_wrapper->base_addr, MI_MP_CR_OFFS_CNT_INIT, 0x00000000);
  mmio_region_write32(isp_wrapper->base_addr, MI_IMSC, 0x00000000);
  mmio_region_write32(isp_wrapper->base_addr, MI_ICR, 0x00000000);
  mmio_region_write32(isp_wrapper->base_addr, MI_ISR, 0x00000000);
  mmio_region_write32(isp_wrapper->base_addr, MI_STATUS_CLR, 0x00000003);
  mmio_region_write32(isp_wrapper->base_addr, MI_MP_Y_BASE_AD_INIT2,
                      y_base_ad_init2_addr);
  mmio_region_write32(isp_wrapper->base_addr, MI_MP_CB_BASE_AD_INIT2,
                      cb_base_ad_init2_addr);
  mmio_region_write32(isp_wrapper->base_addr, MI_MP_CR_BASE_AD_INIT2,
                      cr_base_ad_init2_addr);
  mmio_region_write32(isp_wrapper->base_addr, MI_MP_Y_LLENGTH, 0x00000144);
  mmio_region_write32(isp_wrapper->base_addr, MI_OUTPUT_ALIGN_FORMAT, 0x00000001);
  mmio_region_write32(isp_wrapper->base_addr, MI_MP_OUTPUT_FIFO_SIZE, 0x00000000);
  mmio_region_write32(isp_wrapper->base_addr, MI_MP_Y_PIC_WIDTH, 0x00000140);
  mmio_region_write32(isp_wrapper->base_addr, MI_MP_Y_PIC_HEIGHT, 0x000000f0);
  mmio_region_write32(isp_wrapper->base_addr, MI_MP_Y_PIC_SIZE, 0x00012c00);
  mmio_region_write32(isp_wrapper->base_addr, MI_CTRL, 0x003a2808);
  mmio_region_write32(isp_wrapper->base_addr, ISP_TPG_CTRL, 0x00000868);
  mmio_region_write32(isp_wrapper->base_addr, ISP_CTRL, 0x00207251);
  mmio_region_write32(isp_wrapper->base_addr, ISP_MRSZ_BASE, 0x00000190);
  mmio_region_write32(isp_wrapper->base_addr, MI_INIT, 0x000000b0);
  return kDifOk;
}

// ISP configuration:
// raw:324x324, byp:324x324
dif_result_t dif_isp_wrapper_set_raw_324x324_byp_324x324_en(
    const dif_isp_wrapper_t *isp_wrapper) {
  if (isp_wrapper == NULL) {
    return kDifBadArg;
  }
  mmio_region_write32(isp_wrapper->base_addr, VI_CCL, 0x00000000);
  mmio_region_write32(isp_wrapper->base_addr, VI_ICCL, 0x00000049);
  mmio_region_write32(isp_wrapper->base_addr, VI_IRCL, 0x00000000);
  mmio_region_write32(isp_wrapper->base_addr, ISP_CTRL, 0x00206018);
  mmio_region_write32(isp_wrapper->base_addr, ISP_ACQ_PROP, 0x00040011);
  mmio_region_write32(isp_wrapper->base_addr, ISP_ACQ_H_OFFS, 0x00000000);
  mmio_region_write32(isp_wrapper->base_addr, ISP_ACQ_V_OFFS, 0x00000000);
  mmio_region_write32(isp_wrapper->base_addr, ISP_ACQ_H_SIZE, 0x00000144);
  mmio_region_write32(isp_wrapper->base_addr, ISP_ACQ_V_SIZE, 0x00000144);
  mmio_region_write32(isp_wrapper->base_addr, ISP_TPG_TOTAL_IN, 0x00ad3f05);
  mmio_region_write32(isp_wrapper->base_addr, ISP_TPG_ACT_IN, 0x00510144);
  mmio_region_write32(isp_wrapper->base_addr, ISP_TPG_FP_IN, 0x0d6e000f);
  mmio_region_write32(isp_wrapper->base_addr, ISP_TPG_BP_IN, 0x028b8004);
  mmio_region_write32(isp_wrapper->base_addr, ISP_TPG_W_IN, 0x0bad0001);
  mmio_region_write32(isp_wrapper->base_addr, ISP_TPG_GAP_IN, 0x04a1415b);
  mmio_region_write32(isp_wrapper->base_addr, ISP_TPG_GAP_STD_IN, 0x00002a97);
  mmio_region_write32(isp_wrapper->base_addr, ISP_TPG_RANDOM_SEED, 0x4d777439);
  mmio_region_write32(isp_wrapper->base_addr, ISP_TPG_FRAME_NUM, 0x00000001);
  mmio_region_write32(isp_wrapper->base_addr, ISP_FRAME_RATE, 0x00000000);
  mmio_region_write32(isp_wrapper->base_addr, ISP_OUT_H_OFFS, 0x00000000);
  mmio_region_write32(isp_wrapper->base_addr, ISP_OUT_V_OFFS, 0x00000000);
  mmio_region_write32(isp_wrapper->base_addr, ISP_OUT_H_SIZE, 0x00000144);
  mmio_region_write32(isp_wrapper->base_addr, ISP_OUT_V_SIZE, 0x00000144);
  mmio_region_write32(isp_wrapper->base_addr, ISP_BINNING_BASE, 0x00010001);
  mmio_region_write32(isp_wrapper->base_addr, ISP_BINNING_NUM, 0x01580393);
  mmio_region_write32(isp_wrapper->base_addr, ISP_BLS_CTRL, 0x00000000);
  mmio_region_write32(isp_wrapper->base_addr, ISP_BLS_A_FIXED, 0x00000000);
  mmio_region_write32(isp_wrapper->base_addr, ISP_BLS_B_FIXED, 0x00000000);
  mmio_region_write32(isp_wrapper->base_addr, ISP_BLS_C_FIXED, 0x00000000);
  mmio_region_write32(isp_wrapper->base_addr, ISP_BLS_D_FIXED, 0x00000000);
  mmio_region_write32(isp_wrapper->base_addr, ISP_EXP_CONF, 0x80000001);
  mmio_region_write32(isp_wrapper->base_addr, ISP_EXP_H_OFFSET, 0x00000020);
  mmio_region_write32(isp_wrapper->base_addr, ISP_EXP_V_OFFSET, 0x00000028);
  mmio_region_write32(isp_wrapper->base_addr, ISP_EXP_H_SIZE, 0x00000030);
  mmio_region_write32(isp_wrapper->base_addr, ISP_EXP_V_SIZE, 0x00000036);
  mmio_region_write32(isp_wrapper->base_addr, ISP_DGAIN_RB, 0x011a00d1);
  mmio_region_write32(isp_wrapper->base_addr, ISP_DGAIN_G, 0x01260109);
  mmio_region_write32(isp_wrapper->base_addr, ISP_DEMOSAIC, 0x00000414);
  mmio_region_write32(isp_wrapper->base_addr, ISP_FILT_MODE, 0x00000692);
  mmio_region_write32(isp_wrapper->base_addr, ISP_FILT_THRES_BL0, 0x00000167);
  mmio_region_write32(isp_wrapper->base_addr, ISP_FILT_THRES_BL1, 0x00000142);
  mmio_region_write32(isp_wrapper->base_addr, ISP_FILT_THRES_SH0, 0x00000177);
  mmio_region_write32(isp_wrapper->base_addr, ISP_FILT_THRES_SH1, 0x000001c7);
  mmio_region_write32(isp_wrapper->base_addr, ISP_FILT_LUM_WEIGHT, 0x0006698a);
  mmio_region_write32(isp_wrapper->base_addr, ISP_FILT_FAC_SH1, 0x00000032);
  mmio_region_write32(isp_wrapper->base_addr, ISP_FILT_FAC_SH0, 0x00000023);
  mmio_region_write32(isp_wrapper->base_addr, ISP_FILT_FAC_MID, 0x00000019);
  mmio_region_write32(isp_wrapper->base_addr, ISP_FILT_FAC_BL0, 0x0000000f);
  mmio_region_write32(isp_wrapper->base_addr, ISP_FILT_FAC_BL1, 0x00000006);
  mmio_region_write32(isp_wrapper->base_addr, ISP_CAC_CTRL, 0x0000000a);
  mmio_region_write32(isp_wrapper->base_addr, ISP_CAC_COUNT_START, 0x00a200a2);
  mmio_region_write32(isp_wrapper->base_addr, ISP_CAC_A, 0x00170118);
  mmio_region_write32(isp_wrapper->base_addr, ISP_CAC_B, 0x01d101ed);
  mmio_region_write32(isp_wrapper->base_addr, ISP_CAC_C, 0x01c100f8);
  mmio_region_write32(isp_wrapper->base_addr, ISP_CAC_X_NORM, 0x00020005);
  mmio_region_write32(isp_wrapper->base_addr, ISP_CAC_Y_NORM, 0x00050019);
  mmio_region_write32(isp_wrapper->base_addr, ISP_GAMMA_OUT_MODE, 0x00000000);
  mmio_region_write32(isp_wrapper->base_addr, ISP_GAMMA_OUT_Y_0, 0x000002f4);
  mmio_region_write32(isp_wrapper->base_addr, ISP_GAMMA_OUT_Y_1, 0x0000024e);
  mmio_region_write32(isp_wrapper->base_addr, ISP_GAMMA_OUT_Y_2, 0x00000083);
  mmio_region_write32(isp_wrapper->base_addr, ISP_GAMMA_OUT_Y_3, 0x000001af);
  mmio_region_write32(isp_wrapper->base_addr, ISP_GAMMA_OUT_Y_4, 0x00000346);
  mmio_region_write32(isp_wrapper->base_addr, ISP_GAMMA_OUT_Y_5, 0x000000a5);
  mmio_region_write32(isp_wrapper->base_addr, ISP_GAMMA_OUT_Y_6, 0x00000304);
  mmio_region_write32(isp_wrapper->base_addr, ISP_GAMMA_OUT_Y_7, 0x00000111);
  mmio_region_write32(isp_wrapper->base_addr, ISP_GAMMA_OUT_Y_8, 0x000003b9);
  mmio_region_write32(isp_wrapper->base_addr, ISP_GAMMA_OUT_Y_9, 0x00000383);
  mmio_region_write32(isp_wrapper->base_addr, ISP_GAMMA_OUT_Y_10, 0x00000018);
  mmio_region_write32(isp_wrapper->base_addr, ISP_GAMMA_OUT_Y_11, 0x0000028c);
  mmio_region_write32(isp_wrapper->base_addr, ISP_GAMMA_OUT_Y_12, 0x0000001e);
  mmio_region_write32(isp_wrapper->base_addr, ISP_GAMMA_OUT_Y_13, 0x00000087);
  mmio_region_write32(isp_wrapper->base_addr, ISP_GAMMA_OUT_Y_14, 0x00000047);
  mmio_region_write32(isp_wrapper->base_addr, ISP_GAMMA_OUT_Y_15, 0x000001a4);
  mmio_region_write32(isp_wrapper->base_addr, ISP_GAMMA_OUT_Y_16, 0x000002bc);
  mmio_region_write32(isp_wrapper->base_addr, ISP_AWB_PROP, 0x80000007);
  mmio_region_write32(isp_wrapper->base_addr, ISP_AWB_H_OFFS, 0x0000011c);
  mmio_region_write32(isp_wrapper->base_addr, ISP_AWB_V_OFFS, 0x000000c1);
  mmio_region_write32(isp_wrapper->base_addr, ISP_AWB_H_SIZE, 0x0000001e);
  mmio_region_write32(isp_wrapper->base_addr, ISP_AWB_V_SIZE, 0x00000078);
  mmio_region_write32(isp_wrapper->base_addr, ISP_AWB_FRAMES, 0x00000002);
  mmio_region_write32(isp_wrapper->base_addr, ISP_AWB_REF, 0x0000c2e6);
  mmio_region_write32(isp_wrapper->base_addr, ISP_AWB_THRESH, 0x8ef9ad1e);
  mmio_region_write32(isp_wrapper->base_addr, ISP_CC_COEFF_0, 0x00000026);
  mmio_region_write32(isp_wrapper->base_addr, ISP_CC_COEFF_1, 0x0000004b);
  mmio_region_write32(isp_wrapper->base_addr, ISP_CC_COEFF_2, 0x0000000f);
  mmio_region_write32(isp_wrapper->base_addr, ISP_CC_COEFF_3, 0x000001ea);
  mmio_region_write32(isp_wrapper->base_addr, ISP_CC_COEFF_4, 0x000001d6);
  mmio_region_write32(isp_wrapper->base_addr, ISP_CC_COEFF_5, 0x00000040);
  mmio_region_write32(isp_wrapper->base_addr, ISP_CC_COEFF_6, 0x00000040);
  mmio_region_write32(isp_wrapper->base_addr, ISP_CC_COEFF_7, 0x000001ca);
  mmio_region_write32(isp_wrapper->base_addr, ISP_CC_COEFF_8, 0x000001f6);
  mmio_region_write32(isp_wrapper->base_addr, FORMAT_CONV_CTRL, 0x00000000);
  mmio_region_write32(isp_wrapper->base_addr, ISP_CT_COEFF_0, 0x000000dd);
  mmio_region_write32(isp_wrapper->base_addr, ISP_CT_COEFF_1, 0x000007c6);
  mmio_region_write32(isp_wrapper->base_addr, ISP_CT_COEFF_2, 0x000007df);
  mmio_region_write32(isp_wrapper->base_addr, ISP_CT_COEFF_3, 0x000007bf);
  mmio_region_write32(isp_wrapper->base_addr, ISP_CT_COEFF_4, 0x000000ec);
  mmio_region_write32(isp_wrapper->base_addr, ISP_CT_COEFF_5, 0x000007de);
  mmio_region_write32(isp_wrapper->base_addr, ISP_CT_COEFF_6, 0x00000002);
  mmio_region_write32(isp_wrapper->base_addr, ISP_CT_COEFF_7, 0x000007ae);
  mmio_region_write32(isp_wrapper->base_addr, ISP_CT_COEFF_8, 0x000000e0);
  mmio_region_write32(isp_wrapper->base_addr, ISP_CT_OFFSET_R, 0x00000000);
  mmio_region_write32(isp_wrapper->base_addr, ISP_CT_OFFSET_G, 0x00000000);
  mmio_region_write32(isp_wrapper->base_addr, ISP_CT_OFFSET_B, 0x00000000);
  mmio_region_write32(isp_wrapper->base_addr, ISP_IMSC, 0x00000020);
  mmio_region_write32(isp_wrapper->base_addr, ISP_ICR, 0x00000000);
  mmio_region_write32(isp_wrapper->base_addr, ISP_ISR, 0x00000000);
  mmio_region_write32(isp_wrapper->base_addr, ISP_ERR_CLR, 0x00000000);
  mmio_region_write32(isp_wrapper->base_addr, ISP_MRSZ_SCALE_HY, 0x00008469);
  mmio_region_write32(isp_wrapper->base_addr, ISP_MRSZ_SCALE_HCB, 0x0000a674);
  mmio_region_write32(isp_wrapper->base_addr, ISP_MRSZ_SCALE_HCR, 0x0000fa3d);
  mmio_region_write32(isp_wrapper->base_addr, ISP_MRSZ_SCALE_VY, 0x0000ef61);
  mmio_region_write32(isp_wrapper->base_addr, ISP_MRSZ_SCALE_VC, 0x0000f9b7);
  mmio_region_write32(isp_wrapper->base_addr, ISP_MRSZ_PHASE_HY, 0x00000000);
  mmio_region_write32(isp_wrapper->base_addr, ISP_MRSZ_PHASE_HC, 0x00000000);
  mmio_region_write32(isp_wrapper->base_addr, ISP_MRSZ_PHASE_VY, 0x00000000);
  mmio_region_write32(isp_wrapper->base_addr, ISP_MRSZ_PHASE_VC, 0x00000000);
  mmio_region_write32(isp_wrapper->base_addr, ISP_MRSZ_FORMAT_CONV_CTRL, 0x000000fa);
  mmio_region_write32(isp_wrapper->base_addr, MI_MP_Y_BASE_AD_INIT, 0x5a000000);
  mmio_region_write32(isp_wrapper->base_addr, MI_MP_Y_SIZE_INIT, 0x00019f20);
  mmio_region_write32(isp_wrapper->base_addr, MI_MP_Y_OFFS_CNT_INIT, 0x00000000);
  mmio_region_write32(isp_wrapper->base_addr, MI_MP_Y_IRQ_OFFS_INIT, 0x00000000);
  mmio_region_write32(isp_wrapper->base_addr, MI_MP_CB_BASE_AD_INIT, 0x5a01a000);
  mmio_region_write32(isp_wrapper->base_addr, MI_MP_CB_SIZE_INIT, 0x00000000);
  mmio_region_write32(isp_wrapper->base_addr, MI_MP_CB_OFFS_CNT_INIT, 0x00000000);
  mmio_region_write32(isp_wrapper->base_addr, MI_MP_CR_BASE_AD_INIT, 0x5a01a000);
  mmio_region_write32(isp_wrapper->base_addr, MI_MP_CR_SIZE_INIT, 0x00000000);
  mmio_region_write32(isp_wrapper->base_addr, MI_MP_CR_OFFS_CNT_INIT, 0x00000000);
  mmio_region_write32(isp_wrapper->base_addr, MI_IMSC, 0x00000000);
  mmio_region_write32(isp_wrapper->base_addr, MI_ICR, 0x00000000);
  mmio_region_write32(isp_wrapper->base_addr, MI_ISR, 0x00000000);
  mmio_region_write32(isp_wrapper->base_addr, MI_STATUS_CLR, 0x00000003);
  mmio_region_write32(isp_wrapper->base_addr, MI_MP_Y_BASE_AD_INIT2, 0x5a034000);
  mmio_region_write32(isp_wrapper->base_addr, MI_MP_CB_BASE_AD_INIT2, 0x5a04e000);
  mmio_region_write32(isp_wrapper->base_addr, MI_MP_CR_BASE_AD_INIT2, 0x5a04e000);
  mmio_region_write32(isp_wrapper->base_addr, MI_MP_Y_LLENGTH, 0x00000144);
  mmio_region_write32(isp_wrapper->base_addr, MI_OUTPUT_ALIGN_FORMAT, 0x00000001);
  mmio_region_write32(isp_wrapper->base_addr, MI_MP_OUTPUT_FIFO_SIZE, 0x00000000);
  mmio_region_write32(isp_wrapper->base_addr, MI_MP_Y_PIC_WIDTH, 0x00000144);
  mmio_region_write32(isp_wrapper->base_addr, MI_MP_Y_PIC_HEIGHT, 0x00000144);
  mmio_region_write32(isp_wrapper->base_addr, MI_MP_Y_PIC_SIZE, 0x00019a10);
  mmio_region_write32(isp_wrapper->base_addr, MI_CTRL, 0x003a2808);
  mmio_region_write32(isp_wrapper->base_addr, ISP_TPG_CTRL, 0x00000868);
  mmio_region_write32(isp_wrapper->base_addr, ISP_CTRL, 0x00207259);
  mmio_region_write32(isp_wrapper->base_addr, ISP_MRSZ_BASE, 0x00000190);
  mmio_region_write32(isp_wrapper->base_addr, MI_INIT, 0x000000b0);
  return kDifOk;
}

dif_result_t dif_isp_wrapper_clear_en(const dif_isp_wrapper_t *isp_wrapper) {
  if (isp_wrapper == NULL) {
    return kDifBadArg;
  }
  //TODO(Ray): not used currently, will update to real interrupt clear registers
  mmio_region_write32(isp_wrapper->base_addr, 0xb00, 0x00040000);
  return kDifOk;
}

// TODO(ykwang): replace mask function with done which clears status registers.
dif_result_t dif_isp_wrapper_isp_irq_mask(const dif_isp_wrapper_t *isp_wrapper) {
  if (isp_wrapper == NULL) {
    return kDifBadArg;
  }
  //ISP_IMSC Interrupt mask, 0 active
  mmio_region_write32(isp_wrapper->base_addr, 0xb00, 0x00000000);
  return kDifOk;
}

dif_result_t dif_isp_wrapper_mi_irq_mask(const dif_isp_wrapper_t *isp_wrapper) {
  if (isp_wrapper == NULL) {
    return kDifBadArg;
  }
  //MI_IMSC Interrupt mask, 0 active
  mmio_region_write32(isp_wrapper->base_addr, 0xef8, 0x00000000);
  return kDifOk;
}

dif_result_t dif_isp_wrapper_isp_irq_done(
    const dif_isp_wrapper_t *isp_wrapper) {
  if (isp_wrapper == NULL) {
    return kDifBadArg;
  }
  uint32_t irq_status = mmio_region_read32(isp_wrapper->base_addr, ISP_MIS);
  mmio_region_write32(isp_wrapper->base_addr, ISP_ICR, irq_status);
  return kDifOk;
}

dif_result_t dif_isp_wrapper_mi_irq_done(const dif_isp_wrapper_t *isp_wrapper) {
  if (isp_wrapper == NULL) {
    return kDifBadArg;
  }
  uint32_t irq_status =
      mmio_region_read32(isp_wrapper->base_addr, MI_MIS);
  mmio_region_write32(isp_wrapper->base_addr, MI_ICR, irq_status);
  return kDifOk;
}

dif_result_t dif_isp_wrapper_read_en(const dif_isp_wrapper_t *isp_wrapper,
                                     uint32_t *result) {
  if (isp_wrapper == NULL) {
    return kDifBadArg;
  }
  //MI_MIS Masked Interrupt Status
  *result = mmio_region_read32(isp_wrapper->base_addr, 0xf00);
  return kDifOk;
}

dif_result_t dif_isp_wrapper_read_mi_mis(const dif_isp_wrapper_t *isp_wrapper, uint32_t *result) {
  if (isp_wrapper == NULL) {
    return kDifBadArg;
  }
  *result = mmio_region_read32(isp_wrapper->base_addr, MI_MIS);
  return kDifOk;
}

dif_result_t dif_isp_wrapper_read_isp_mis(const dif_isp_wrapper_t *isp_wrapper, uint32_t *result) {
  if (isp_wrapper == NULL) {
    return kDifBadArg;
  }
  *result = mmio_region_read32(isp_wrapper->base_addr, ISP_MIS);
  return kDifOk;
}

dif_result_t dif_isp_wrapper_write_isp_icr(const dif_isp_wrapper_t *isp_wrapper, uint32_t val) {
  if (isp_wrapper == NULL) {
    return kDifBadArg;
  }
  mmio_region_write32(isp_wrapper->base_addr, ISP_ICR, val);
  return kDifOk;
}

dif_result_t dif_isp_wrapper_write_mi_icr(const dif_isp_wrapper_t *isp_wrapper, uint32_t val) {
  if (isp_wrapper == NULL) {
    return kDifBadArg;
  }
  mmio_region_write32(isp_wrapper->base_addr, MI_ICR, val);
  return kDifOk;
}
