mirror of
https://github.com/hardkernel/linux.git
synced 2026-06-07 19:30:30 +09:00
media: rockchip: isp: fix lsc error when ldch is on
Signed-off-by: Hu Kejun <william.hu@rock-chips.com> Change-Id: I51c31edbf098367b9917170b3611de4c597fd7ca
This commit is contained in:
@@ -506,14 +506,9 @@ void rkisp_trigger_read_back(struct rkisp_csi_device *csi, u8 dma2frm, u32 mode)
|
||||
|
||||
if (!hw->is_single) {
|
||||
rkisp_update_regs(dev, CTRL_VI_ISP_PATH, SUPER_IMP_COLOR_CR);
|
||||
rkisp_update_regs(dev, ISP_ACQ_PROP, CSI2RX_VERSION);
|
||||
rkisp_update_regs(dev, ISP_ACQ_PROP, ISP_LSC_CTRL);
|
||||
rkisp_update_regs(dev, ISP_LSC_XGRAD_01, ISP_RAWAWB_RAM_DATA);
|
||||
|
||||
val = rkisp_read(dev, ISP_LSC_CTRL, false);
|
||||
if (val & ISP_LSC_EN) {
|
||||
val = ISP_LSC_LUT_EN | ISP_LSC_EN;
|
||||
rkisp_set_bits(dev, ISP_LSC_CTRL, val, val, true);
|
||||
}
|
||||
rkisp_params_cfgsram(params_vdev);
|
||||
is_upd = true;
|
||||
}
|
||||
if (is_upd) {
|
||||
|
||||
@@ -297,6 +297,12 @@ void rkisp_params_cfg(struct rkisp_isp_params_vdev *params_vdev,
|
||||
rdbk_times, RKISP_PARAMS_IMD);
|
||||
}
|
||||
|
||||
void rkisp_params_cfgsram(struct rkisp_isp_params_vdev *params_vdev)
|
||||
{
|
||||
if (params_vdev->ops->param_cfgsram)
|
||||
params_vdev->ops->param_cfgsram(params_vdev);
|
||||
}
|
||||
|
||||
void rkisp_params_isr(struct rkisp_isp_params_vdev *params_vdev,
|
||||
u32 isp_mis)
|
||||
{
|
||||
|
||||
@@ -24,6 +24,7 @@ struct rkisp_isp_params_ops {
|
||||
void (*isr_hdl)(struct rkisp_isp_params_vdev *params_vdev, u32 isp_mis);
|
||||
void (*param_cfg)(struct rkisp_isp_params_vdev *params_vdev, u32 frame_id,
|
||||
u32 rdbk_times, enum rkisp_params_type type);
|
||||
void (*param_cfgsram)(struct rkisp_isp_params_vdev *params_vdev);
|
||||
};
|
||||
|
||||
/*
|
||||
@@ -65,6 +66,7 @@ struct rkisp_isp_params_vdev {
|
||||
struct isp2x_hdrmge_cfg last_hdrmge;
|
||||
struct isp2x_hdrtmo_cfg cur_hdrtmo;
|
||||
struct isp2x_hdrmge_cfg cur_hdrmge;
|
||||
struct isp2x_lsc_cfg cur_lsccfg;
|
||||
};
|
||||
|
||||
/* config params before ISP streaming */
|
||||
@@ -84,4 +86,6 @@ void rkisp_params_isr(struct rkisp_isp_params_vdev *params_vdev, u32 isp_mis);
|
||||
void rkisp_params_cfg(struct rkisp_isp_params_vdev *params_vdev,
|
||||
u32 frame_id, u32 rdbk_times);
|
||||
|
||||
void rkisp_params_cfgsram(struct rkisp_isp_params_vdev *params_vdev);
|
||||
|
||||
#endif /* _RKISP_ISP_PARAM_H */
|
||||
|
||||
@@ -559,7 +559,7 @@ isp_sihst_enable(struct rkisp_isp_params_vdev *params_vdev,
|
||||
|
||||
static void __maybe_unused
|
||||
isp_lsc_matrix_cfg_sram(struct rkisp_isp_params_vdev *params_vdev,
|
||||
const struct isp2x_lsc_cfg *pconfig)
|
||||
const struct isp2x_lsc_cfg *pconfig, bool is_direct)
|
||||
{
|
||||
int i, j;
|
||||
unsigned int sram_addr;
|
||||
@@ -567,10 +567,10 @@ isp_lsc_matrix_cfg_sram(struct rkisp_isp_params_vdev *params_vdev,
|
||||
|
||||
/* CIF_ISP_LSC_TABLE_ADDRESS_153 = ( 17 * 18 ) >> 1 */
|
||||
sram_addr = CIF_ISP_LSC_TABLE_ADDRESS_0;
|
||||
rkisp_iowrite32(params_vdev, sram_addr, ISP_LSC_R_TABLE_ADDR);
|
||||
rkisp_iowrite32(params_vdev, sram_addr, ISP_LSC_GR_TABLE_ADDR);
|
||||
rkisp_iowrite32(params_vdev, sram_addr, ISP_LSC_GB_TABLE_ADDR);
|
||||
rkisp_iowrite32(params_vdev, sram_addr, ISP_LSC_B_TABLE_ADDR);
|
||||
rkisp_write(params_vdev->dev, ISP_LSC_R_TABLE_ADDR, sram_addr, is_direct);
|
||||
rkisp_write(params_vdev->dev, ISP_LSC_GR_TABLE_ADDR, sram_addr, is_direct);
|
||||
rkisp_write(params_vdev->dev, ISP_LSC_GB_TABLE_ADDR, sram_addr, is_direct);
|
||||
rkisp_write(params_vdev->dev, ISP_LSC_B_TABLE_ADDR, sram_addr, is_direct);
|
||||
|
||||
/* program data tables (table size is 9 * 17 = 153) */
|
||||
for (i = 0; i < CIF_ISP_LSC_SECTORS_MAX * CIF_ISP_LSC_SECTORS_MAX;
|
||||
@@ -583,51 +583,43 @@ isp_lsc_matrix_cfg_sram(struct rkisp_isp_params_vdev *params_vdev,
|
||||
data = ISP_ISP_LSC_TABLE_DATA(
|
||||
pconfig->r_data_tbl[i + j],
|
||||
pconfig->r_data_tbl[i + j + 1]);
|
||||
rkisp_iowrite32(params_vdev, data,
|
||||
ISP_LSC_R_TABLE_DATA);
|
||||
rkisp_write(params_vdev->dev, ISP_LSC_R_TABLE_DATA, data, is_direct);
|
||||
|
||||
data = ISP_ISP_LSC_TABLE_DATA(
|
||||
pconfig->gr_data_tbl[i + j],
|
||||
pconfig->gr_data_tbl[i + j + 1]);
|
||||
rkisp_iowrite32(params_vdev, data,
|
||||
ISP_LSC_GR_TABLE_DATA);
|
||||
rkisp_write(params_vdev->dev, ISP_LSC_GR_TABLE_DATA, data, is_direct);
|
||||
|
||||
data = ISP_ISP_LSC_TABLE_DATA(
|
||||
pconfig->gb_data_tbl[i + j],
|
||||
pconfig->gb_data_tbl[i + j + 1]);
|
||||
rkisp_iowrite32(params_vdev, data,
|
||||
ISP_LSC_GB_TABLE_DATA);
|
||||
rkisp_write(params_vdev->dev, ISP_LSC_GB_TABLE_DATA, data, is_direct);
|
||||
|
||||
data = ISP_ISP_LSC_TABLE_DATA(
|
||||
pconfig->b_data_tbl[i + j],
|
||||
pconfig->b_data_tbl[i + j + 1]);
|
||||
rkisp_iowrite32(params_vdev, data,
|
||||
ISP_LSC_B_TABLE_DATA);
|
||||
rkisp_write(params_vdev->dev, ISP_LSC_B_TABLE_DATA, data, is_direct);
|
||||
}
|
||||
|
||||
data = ISP_ISP_LSC_TABLE_DATA(
|
||||
pconfig->r_data_tbl[i + j],
|
||||
0);
|
||||
rkisp_iowrite32(params_vdev, data,
|
||||
ISP_LSC_R_TABLE_DATA);
|
||||
rkisp_write(params_vdev->dev, ISP_LSC_R_TABLE_DATA, data, is_direct);
|
||||
|
||||
data = ISP_ISP_LSC_TABLE_DATA(
|
||||
pconfig->gr_data_tbl[i + j],
|
||||
0);
|
||||
rkisp_iowrite32(params_vdev, data,
|
||||
CIF_ISP_LSC_GR_TABLE_DATA);
|
||||
rkisp_write(params_vdev->dev, ISP_LSC_GR_TABLE_DATA, data, is_direct);
|
||||
|
||||
data = ISP_ISP_LSC_TABLE_DATA(
|
||||
pconfig->gb_data_tbl[i + j],
|
||||
0);
|
||||
rkisp_iowrite32(params_vdev, data,
|
||||
ISP_LSC_GB_TABLE_DATA);
|
||||
rkisp_write(params_vdev->dev, ISP_LSC_GB_TABLE_DATA, data, is_direct);
|
||||
|
||||
data = ISP_ISP_LSC_TABLE_DATA(
|
||||
pconfig->b_data_tbl[i + j],
|
||||
0);
|
||||
rkisp_iowrite32(params_vdev, data,
|
||||
ISP_LSC_B_TABLE_DATA);
|
||||
rkisp_write(params_vdev->dev, ISP_LSC_B_TABLE_DATA, data, is_direct);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -709,15 +701,17 @@ static void
|
||||
isp_lsc_config(struct rkisp_isp_params_vdev *params_vdev,
|
||||
const struct isp2x_lsc_cfg *arg)
|
||||
{
|
||||
int i;
|
||||
u32 lsc_ctrl;
|
||||
struct rkisp_hw_dev *hw = params_vdev->dev->hw_dev;
|
||||
unsigned int data;
|
||||
u32 lsc_ctrl;
|
||||
int i;
|
||||
|
||||
/* To config must be off , store the current status firstly */
|
||||
lsc_ctrl = rkisp_ioread32(params_vdev, ISP_LSC_CTRL);
|
||||
isp_param_clear_bits(params_vdev, ISP_LSC_CTRL,
|
||||
ISP_LSC_EN);
|
||||
isp_lsc_matrix_cfg_ddr(params_vdev, arg);
|
||||
if (hw->is_single)
|
||||
isp_lsc_matrix_cfg_ddr(params_vdev, arg);
|
||||
|
||||
for (i = 0; i < 4; i++) {
|
||||
/* program x size tables */
|
||||
@@ -755,21 +749,24 @@ isp_lsc_config(struct rkisp_isp_params_vdev *params_vdev,
|
||||
ISP_LSC_CTRL,
|
||||
ISP_LSC_EN);
|
||||
}
|
||||
|
||||
params_vdev->cur_lsccfg = *arg;
|
||||
}
|
||||
|
||||
static void
|
||||
isp_lsc_enable(struct rkisp_isp_params_vdev *params_vdev,
|
||||
bool en)
|
||||
{
|
||||
if (en) {
|
||||
isp_param_set_bits(params_vdev,
|
||||
ISP_LSC_CTRL,
|
||||
ISP_LSC_LUT_EN | ISP_LSC_EN);
|
||||
} else {
|
||||
isp_param_clear_bits(params_vdev,
|
||||
ISP_LSC_CTRL,
|
||||
ISP_LSC_EN);
|
||||
}
|
||||
struct rkisp_hw_dev *hw = params_vdev->dev->hw_dev;
|
||||
u32 val = ISP_LSC_EN;
|
||||
|
||||
if (hw->is_single)
|
||||
val |= ISP_LSC_LUT_EN;
|
||||
|
||||
if (en)
|
||||
isp_param_set_bits(params_vdev, ISP_LSC_CTRL, val);
|
||||
else
|
||||
isp_param_clear_bits(params_vdev, ISP_LSC_CTRL, ISP_LSC_EN);
|
||||
}
|
||||
|
||||
static void
|
||||
@@ -4135,6 +4132,13 @@ void __preisp_isr_update_hdrae_para(struct rkisp_isp_params_vdev *params_vdev,
|
||||
{
|
||||
}
|
||||
|
||||
static
|
||||
void rkisp_params_cfgsram_v2x(struct rkisp_isp_params_vdev *params_vdev)
|
||||
{
|
||||
isp_lsc_matrix_cfg_sram(params_vdev,
|
||||
¶ms_vdev->cur_lsccfg, true);
|
||||
}
|
||||
|
||||
/* Not called when the camera active, thus not isr protection. */
|
||||
static void
|
||||
rkisp_params_first_cfg_v2x(struct rkisp_isp_params_vdev *params_vdev)
|
||||
@@ -4327,6 +4331,7 @@ static struct rkisp_isp_params_ops rkisp_isp_params_ops_tbl = {
|
||||
.disable_isp = rkisp_params_disable_isp_v2x,
|
||||
.isr_hdl = rkisp_params_isr_v2x,
|
||||
.param_cfg = rkisp_params_cfg_v2x,
|
||||
.param_cfgsram = rkisp_params_cfgsram_v2x,
|
||||
};
|
||||
|
||||
int rkisp_init_params_vdev_v2x(struct rkisp_isp_params_vdev *params_vdev)
|
||||
|
||||
Reference in New Issue
Block a user