Merge "msm: camera isp: Control camif interrupts on camif enable/disable"
This commit is contained in:
commit
a092b9d11e
6 changed files with 199 additions and 264 deletions
|
@ -101,29 +101,21 @@ static void msm_vfe40_config_irq(struct vfe_device *vfe_dev,
|
|||
uint32_t irq0_mask, uint32_t irq1_mask,
|
||||
enum msm_isp_irq_operation oper)
|
||||
{
|
||||
uint32_t val;
|
||||
|
||||
switch (oper) {
|
||||
case MSM_ISP_IRQ_ENABLE:
|
||||
val = msm_camera_io_r(vfe_dev->vfe_base + 0x28);
|
||||
val |= irq0_mask;
|
||||
msm_camera_io_w_mb(val, vfe_dev->vfe_base + 0x28);
|
||||
val = msm_camera_io_r(vfe_dev->vfe_base + 0x2C);
|
||||
val |= irq1_mask;
|
||||
msm_camera_io_w_mb(val, vfe_dev->vfe_base + 0x2C);
|
||||
vfe_dev->irq0_mask |= irq0_mask;
|
||||
vfe_dev->irq1_mask |= irq1_mask;
|
||||
break;
|
||||
case MSM_ISP_IRQ_DISABLE:
|
||||
val = msm_camera_io_r(vfe_dev->vfe_base + 0x28);
|
||||
val &= ~irq0_mask;
|
||||
msm_camera_io_w_mb(val, vfe_dev->vfe_base + 0x28);
|
||||
val = msm_camera_io_r(vfe_dev->vfe_base + 0x2C);
|
||||
val &= ~irq1_mask;
|
||||
msm_camera_io_w_mb(val, vfe_dev->vfe_base + 0x2C);
|
||||
vfe_dev->irq0_mask &= ~irq0_mask;
|
||||
vfe_dev->irq1_mask &= ~irq1_mask;
|
||||
break;
|
||||
case MSM_ISP_IRQ_SET:
|
||||
msm_camera_io_w_mb(irq0_mask, vfe_dev->vfe_base + 0x28);
|
||||
msm_camera_io_w_mb(irq1_mask, vfe_dev->vfe_base + 0x2C);
|
||||
vfe_dev->irq0_mask = irq0_mask;
|
||||
vfe_dev->irq1_mask = irq1_mask;
|
||||
}
|
||||
msm_camera_io_w_mb(vfe_dev->irq0_mask, vfe_dev->vfe_base + 0x28);
|
||||
msm_camera_io_w_mb(vfe_dev->irq1_mask, vfe_dev->vfe_base + 0x2C);
|
||||
}
|
||||
|
||||
static int32_t msm_vfe40_init_qos_parms(struct vfe_device *vfe_dev,
|
||||
|
@ -335,10 +327,8 @@ static void msm_vfe40_init_hardware_reg(struct vfe_device *vfe_dev)
|
|||
msm_vfe40_init_vbif_parms(vfe_dev, &vbif_parms);
|
||||
/* BUS_CFG */
|
||||
msm_camera_io_w(0x10000001, vfe_dev->vfe_base + 0x50);
|
||||
vfe_dev->irq0_mask = 0xE00000F1;
|
||||
vfe_dev->irq1_mask = 0xFEFFFFFF;
|
||||
msm_vfe40_config_irq(vfe_dev, vfe_dev->irq0_mask, vfe_dev->irq1_mask,
|
||||
MSM_ISP_IRQ_SET);
|
||||
msm_vfe40_config_irq(vfe_dev, 0x800000E0, 0xFEFFFF7E,
|
||||
MSM_ISP_IRQ_ENABLE);
|
||||
msm_camera_io_w(0xFFFFFFFF, vfe_dev->vfe_base + 0x30);
|
||||
msm_camera_io_w_mb(0xFEFFFFFF, vfe_dev->vfe_base + 0x34);
|
||||
msm_camera_io_w(1, vfe_dev->vfe_base + 0x24);
|
||||
|
@ -346,15 +336,13 @@ static void msm_vfe40_init_hardware_reg(struct vfe_device *vfe_dev)
|
|||
msm_camera_io_w(0, vfe_dev->vfe_base + 0x30);
|
||||
msm_camera_io_w_mb(0, vfe_dev->vfe_base + 0x34);
|
||||
msm_camera_io_w(1, vfe_dev->vfe_base + 0x24);
|
||||
msm_vfe40_config_irq(vfe_dev, vfe_dev->irq0_mask, vfe_dev->irq1_mask,
|
||||
MSM_ISP_IRQ_SET);
|
||||
}
|
||||
|
||||
static void msm_vfe40_clear_status_reg(struct vfe_device *vfe_dev)
|
||||
{
|
||||
vfe_dev->irq0_mask = (1 << 31);
|
||||
vfe_dev->irq1_mask = 0;
|
||||
msm_vfe40_config_irq(vfe_dev, vfe_dev->irq0_mask, vfe_dev->irq1_mask,
|
||||
msm_vfe40_config_irq(vfe_dev, (1 << 31), 0,
|
||||
MSM_ISP_IRQ_SET);
|
||||
msm_camera_io_w(0xFFFFFFFF, vfe_dev->vfe_base + 0x30);
|
||||
msm_camera_io_w_mb(0xFFFFFFFF, vfe_dev->vfe_base + 0x34);
|
||||
|
@ -589,7 +577,6 @@ static void msm_vfe40_read_irq_status(struct vfe_device *vfe_dev,
|
|||
if (*irq_status1 & (1 << 0)) {
|
||||
vfe_dev->error_info.camif_status =
|
||||
msm_camera_io_r(vfe_dev->vfe_base + 0x31C);
|
||||
vfe_dev->irq1_mask &= ~(1 << 0);
|
||||
msm_vfe40_config_irq(vfe_dev, 0, (1 << 0), MSM_ISP_IRQ_DISABLE);
|
||||
}
|
||||
|
||||
|
@ -812,11 +799,9 @@ static void msm_vfe40_axi_cfg_comp_mask(struct vfe_device *vfe_dev,
|
|||
comp_mask |= (axi_data->composite_info[comp_mask_index].
|
||||
stream_composite_mask << (comp_mask_index * 8));
|
||||
|
||||
vfe_dev->irq0_mask |= 1 << (comp_mask_index + 25);
|
||||
|
||||
msm_camera_io_w(comp_mask, vfe_dev->vfe_base + 0x40);
|
||||
msm_vfe40_config_irq(vfe_dev, vfe_dev->irq0_mask, vfe_dev->irq1_mask,
|
||||
MSM_ISP_IRQ_SET);
|
||||
msm_vfe40_config_irq(vfe_dev, 1 << (comp_mask_index + 25), 0,
|
||||
MSM_ISP_IRQ_ENABLE);
|
||||
}
|
||||
|
||||
static void msm_vfe40_axi_clear_comp_mask(struct vfe_device *vfe_dev,
|
||||
|
@ -828,27 +813,24 @@ static void msm_vfe40_axi_clear_comp_mask(struct vfe_device *vfe_dev,
|
|||
comp_mask = msm_camera_io_r(vfe_dev->vfe_base + 0x40);
|
||||
comp_mask &= ~(0x7F << (comp_mask_index * 8));
|
||||
|
||||
vfe_dev->irq0_mask &= ~(1 << (comp_mask_index + 25));
|
||||
|
||||
msm_camera_io_w(comp_mask, vfe_dev->vfe_base + 0x40);
|
||||
msm_vfe40_config_irq(vfe_dev, vfe_dev->irq0_mask, vfe_dev->irq1_mask,
|
||||
MSM_ISP_IRQ_SET);
|
||||
msm_vfe40_config_irq(vfe_dev, (1 << (comp_mask_index + 25)), 0,
|
||||
MSM_ISP_IRQ_DISABLE);
|
||||
}
|
||||
|
||||
static void msm_vfe40_axi_cfg_wm_irq_mask(struct vfe_device *vfe_dev,
|
||||
struct msm_vfe_axi_stream *stream_info)
|
||||
{
|
||||
vfe_dev->irq0_mask |= 1 << (stream_info->wm[0] + 8);
|
||||
msm_vfe40_config_irq(vfe_dev, vfe_dev->irq0_mask, vfe_dev->irq1_mask,
|
||||
MSM_ISP_IRQ_SET);
|
||||
msm_vfe40_config_irq(vfe_dev, 1 << (stream_info->wm[0] + 8), 0,
|
||||
MSM_ISP_IRQ_ENABLE);
|
||||
}
|
||||
|
||||
static void msm_vfe40_axi_clear_wm_irq_mask(struct vfe_device *vfe_dev,
|
||||
struct msm_vfe_axi_stream *stream_info)
|
||||
{
|
||||
vfe_dev->irq0_mask &= ~(1 << (stream_info->wm[0] + 8));
|
||||
msm_vfe40_config_irq(vfe_dev, vfe_dev->irq0_mask, vfe_dev->irq1_mask,
|
||||
MSM_ISP_IRQ_SET);
|
||||
msm_vfe40_config_irq(vfe_dev, (1 << (stream_info->wm[0] + 8)), 0,
|
||||
MSM_ISP_IRQ_DISABLE);
|
||||
}
|
||||
|
||||
static void msm_vfe40_cfg_framedrop(void __iomem *vfe_base,
|
||||
|
@ -1088,10 +1070,8 @@ static void msm_vfe40_cfg_fetch_engine(struct vfe_device *vfe_dev,
|
|||
temp |= (1 << 1);
|
||||
msm_camera_io_w(temp, vfe_dev->vfe_base + 0x50);
|
||||
|
||||
vfe_dev->irq0_mask &= 0xFEFFFFFF;
|
||||
vfe_dev->irq0_mask |= (1 << 24);
|
||||
msm_vfe40_config_irq(vfe_dev, vfe_dev->irq0_mask, vfe_dev->irq1_mask,
|
||||
MSM_ISP_IRQ_SET);
|
||||
msm_vfe40_config_irq(vfe_dev, (1 << 24), 0,
|
||||
MSM_ISP_IRQ_ENABLE);
|
||||
|
||||
msm_camera_io_w((fe_cfg->fetch_height - 1),
|
||||
vfe_dev->vfe_base + 0x238);
|
||||
|
@ -1382,13 +1362,11 @@ static void msm_vfe40_update_camif_state(struct vfe_device *vfe_dev,
|
|||
return;
|
||||
|
||||
if (update_state == ENABLE_CAMIF) {
|
||||
msm_camera_io_w(0xFFFFFFFF, vfe_dev->vfe_base + 0x30);
|
||||
msm_camera_io_w_mb(0xFFFFFFFF, vfe_dev->vfe_base + 0x34);
|
||||
msm_camera_io_w(0x0, vfe_dev->vfe_base + 0x30);
|
||||
msm_camera_io_w_mb(0x81, vfe_dev->vfe_base + 0x34);
|
||||
msm_camera_io_w_mb(0x1, vfe_dev->vfe_base + 0x24);
|
||||
vfe_dev->irq0_mask |= 0xF7;
|
||||
msm_vfe40_config_irq(vfe_dev, vfe_dev->irq0_mask,
|
||||
vfe_dev->irq1_mask,
|
||||
MSM_ISP_IRQ_SET);
|
||||
msm_vfe40_config_irq(vfe_dev, 0xF7, 0x81,
|
||||
MSM_ISP_IRQ_ENABLE);
|
||||
msm_camera_io_w_mb(0x140000, vfe_dev->vfe_base + 0x318);
|
||||
|
||||
bus_en =
|
||||
|
@ -1413,8 +1391,8 @@ static void msm_vfe40_update_camif_state(struct vfe_device *vfe_dev,
|
|||
|
||||
if (vfe_dev->axi_data.src_info[VFE_PIX_0].input_mux == TESTGEN)
|
||||
update_state = DISABLE_CAMIF;
|
||||
msm_vfe40_config_irq(vfe_dev, 0, 0,
|
||||
MSM_ISP_IRQ_SET);
|
||||
msm_vfe40_config_irq(vfe_dev, 0, 0x81,
|
||||
MSM_ISP_IRQ_DISABLE);
|
||||
val = msm_camera_io_r(vfe_dev->vfe_base + 0x464);
|
||||
/* disable danger signal */
|
||||
msm_camera_io_w_mb(val & ~(1 << 8), vfe_dev->vfe_base + 0x464);
|
||||
|
@ -1897,6 +1875,9 @@ static void msm_vfe40_stats_cfg_comp_mask(struct vfe_device *vfe_dev,
|
|||
comp_mask_reg |= mask_bf_scale << (16 + request_comp_index * 8);
|
||||
atomic_set(stats_comp_mask, stats_mask |
|
||||
atomic_read(stats_comp_mask));
|
||||
msm_vfe40_config_irq(vfe_dev,
|
||||
1 << (request_comp_index + 29), 0,
|
||||
MSM_ISP_IRQ_ENABLE);
|
||||
} else {
|
||||
if (!(atomic_read(stats_comp_mask) & stats_mask))
|
||||
return;
|
||||
|
@ -1904,6 +1885,9 @@ static void msm_vfe40_stats_cfg_comp_mask(struct vfe_device *vfe_dev,
|
|||
~stats_mask & atomic_read(stats_comp_mask));
|
||||
comp_mask_reg &= ~(mask_bf_scale <<
|
||||
(16 + request_comp_index * 8));
|
||||
msm_vfe40_config_irq(vfe_dev,
|
||||
1 << (request_comp_index + 29), 0,
|
||||
MSM_ISP_IRQ_DISABLE);
|
||||
}
|
||||
msm_camera_io_w(comp_mask_reg, vfe_dev->vfe_base + 0x44);
|
||||
|
||||
|
@ -1919,20 +1903,18 @@ static void msm_vfe40_stats_cfg_wm_irq_mask(
|
|||
struct vfe_device *vfe_dev,
|
||||
struct msm_vfe_stats_stream *stream_info)
|
||||
{
|
||||
vfe_dev->irq0_mask |=
|
||||
1 << (STATS_IDX(stream_info->stream_handle) + 16);
|
||||
msm_vfe40_config_irq(vfe_dev, vfe_dev->irq0_mask, vfe_dev->irq1_mask,
|
||||
MSM_ISP_IRQ_SET);
|
||||
msm_vfe40_config_irq(vfe_dev,
|
||||
1 << (STATS_IDX(stream_info->stream_handle) + 16), 0,
|
||||
MSM_ISP_IRQ_ENABLE);
|
||||
}
|
||||
|
||||
static void msm_vfe40_stats_clear_wm_irq_mask(
|
||||
struct vfe_device *vfe_dev,
|
||||
struct msm_vfe_stats_stream *stream_info)
|
||||
{
|
||||
vfe_dev->irq0_mask &=
|
||||
~(1 << (STATS_IDX(stream_info->stream_handle) + 16));
|
||||
msm_vfe40_config_irq(vfe_dev, vfe_dev->irq0_mask, vfe_dev->irq1_mask,
|
||||
MSM_ISP_IRQ_SET);
|
||||
msm_vfe40_config_irq(vfe_dev,
|
||||
(1 << (STATS_IDX(stream_info->stream_handle) + 16)), 0,
|
||||
MSM_ISP_IRQ_DISABLE);
|
||||
}
|
||||
|
||||
static void msm_vfe40_stats_cfg_wm_reg(
|
||||
|
|
|
@ -70,30 +70,22 @@ static void msm_vfe44_config_irq(struct vfe_device *vfe_dev,
|
|||
uint32_t irq0_mask, uint32_t irq1_mask,
|
||||
enum msm_isp_irq_operation oper)
|
||||
{
|
||||
uint32_t val;
|
||||
|
||||
switch (oper) {
|
||||
case MSM_ISP_IRQ_ENABLE:
|
||||
val = msm_camera_io_r(vfe_dev->vfe_base + 0x28);
|
||||
val |= irq0_mask;
|
||||
msm_camera_io_w_mb(val, vfe_dev->vfe_base + 0x28);
|
||||
val = msm_camera_io_r(vfe_dev->vfe_base + 0x2C);
|
||||
val |= irq1_mask;
|
||||
msm_camera_io_w_mb(val, vfe_dev->vfe_base + 0x2C);
|
||||
vfe_dev->irq0_mask |= irq0_mask;
|
||||
vfe_dev->irq1_mask |= irq1_mask;
|
||||
break;
|
||||
case MSM_ISP_IRQ_DISABLE:
|
||||
val = msm_camera_io_r(vfe_dev->vfe_base + 0x28);
|
||||
val &= ~irq0_mask;
|
||||
msm_camera_io_w_mb(val, vfe_dev->vfe_base + 0x28);
|
||||
val = msm_camera_io_r(vfe_dev->vfe_base + 0x2C);
|
||||
val &= ~irq1_mask;
|
||||
msm_camera_io_w_mb(val, vfe_dev->vfe_base + 0x2C);
|
||||
vfe_dev->irq0_mask &= ~irq0_mask;
|
||||
vfe_dev->irq1_mask &= ~irq1_mask;
|
||||
break;
|
||||
case MSM_ISP_IRQ_SET:
|
||||
msm_camera_io_w_mb(irq0_mask, vfe_dev->vfe_base + 0x28);
|
||||
msm_camera_io_w_mb(irq1_mask, vfe_dev->vfe_base + 0x2C);
|
||||
vfe_dev->irq0_mask = irq0_mask;
|
||||
vfe_dev->irq1_mask = irq1_mask;
|
||||
break;
|
||||
}
|
||||
msm_camera_io_w_mb(irq0_mask, vfe_dev->vfe_base + 0x28);
|
||||
msm_camera_io_w_mb(irq1_mask, vfe_dev->vfe_base + 0x2C);
|
||||
}
|
||||
|
||||
static int32_t msm_vfe44_init_dt_parms(struct vfe_device *vfe_dev,
|
||||
|
@ -181,10 +173,8 @@ static void msm_vfe44_init_hardware_reg(struct vfe_device *vfe_dev)
|
|||
|
||||
/* BUS_CFG */
|
||||
msm_camera_io_w(0x10000001, vfe_dev->vfe_base + 0x50);
|
||||
vfe_dev->irq0_mask = 0xE00000F1;
|
||||
vfe_dev->irq1_mask = 0xFFFFFFFF;
|
||||
msm_vfe44_config_irq(vfe_dev, vfe_dev->irq0_mask, vfe_dev->irq1_mask,
|
||||
MSM_ISP_IRQ_SET);
|
||||
msm_vfe44_config_irq(vfe_dev, 0x800000E0, 0xFFFFFF7E,
|
||||
MSM_ISP_IRQ_ENABLE);
|
||||
msm_camera_io_w(0xFFFFFFFF, vfe_dev->vfe_base + 0x30);
|
||||
msm_camera_io_w_mb(0xFFFFFFFF, vfe_dev->vfe_base + 0x34);
|
||||
msm_camera_io_w_mb(0x1, vfe_dev->vfe_base + 0x24);
|
||||
|
@ -193,9 +183,7 @@ static void msm_vfe44_init_hardware_reg(struct vfe_device *vfe_dev)
|
|||
|
||||
static void msm_vfe44_clear_status_reg(struct vfe_device *vfe_dev)
|
||||
{
|
||||
vfe_dev->irq0_mask = 0x80000000;
|
||||
vfe_dev->irq1_mask = 0;
|
||||
msm_vfe44_config_irq(vfe_dev, vfe_dev->irq0_mask, vfe_dev->irq1_mask,
|
||||
msm_vfe44_config_irq(vfe_dev, 0x80000000, 0,
|
||||
MSM_ISP_IRQ_SET);
|
||||
msm_camera_io_w(0xFFFFFFFF, vfe_dev->vfe_base + 0x30);
|
||||
msm_camera_io_w_mb(0xFFFFFFFF, vfe_dev->vfe_base + 0x34);
|
||||
|
@ -419,7 +407,6 @@ static void msm_vfe44_read_irq_status(struct vfe_device *vfe_dev,
|
|||
if (*irq_status1 & (1 << 0)) {
|
||||
vfe_dev->error_info.camif_status =
|
||||
msm_camera_io_r(vfe_dev->vfe_base + 0x31C);
|
||||
vfe_dev->irq1_mask &= ~(1 << 0);
|
||||
msm_vfe44_config_irq(vfe_dev, 0, (1 << 0), MSM_ISP_IRQ_DISABLE);
|
||||
}
|
||||
|
||||
|
@ -650,9 +637,8 @@ static void msm_vfe44_axi_cfg_comp_mask(struct vfe_device *vfe_dev,
|
|||
stream_composite_mask << (comp_mask_index * 8));
|
||||
msm_camera_io_w(comp_mask, vfe_dev->vfe_base + 0x40);
|
||||
|
||||
vfe_dev->irq0_mask |= 1 << (comp_mask_index + 25);
|
||||
msm_vfe44_config_irq(vfe_dev, vfe_dev->irq0_mask, vfe_dev->irq1_mask,
|
||||
MSM_ISP_IRQ_SET);
|
||||
msm_vfe44_config_irq(vfe_dev, 1 << (comp_mask_index + 25), 0,
|
||||
MSM_ISP_IRQ_ENABLE);
|
||||
}
|
||||
|
||||
static void msm_vfe44_axi_clear_comp_mask(struct vfe_device *vfe_dev,
|
||||
|
@ -664,25 +650,22 @@ static void msm_vfe44_axi_clear_comp_mask(struct vfe_device *vfe_dev,
|
|||
comp_mask &= ~(0x7F << (comp_mask_index * 8));
|
||||
msm_camera_io_w(comp_mask, vfe_dev->vfe_base + 0x40);
|
||||
|
||||
vfe_dev->irq0_mask &= ~(1 << (comp_mask_index + 25));
|
||||
msm_vfe44_config_irq(vfe_dev, vfe_dev->irq0_mask, vfe_dev->irq1_mask,
|
||||
MSM_ISP_IRQ_SET);
|
||||
msm_vfe44_config_irq(vfe_dev, (1 << (comp_mask_index + 25)), 0,
|
||||
MSM_ISP_IRQ_DISABLE);
|
||||
}
|
||||
|
||||
static void msm_vfe44_axi_cfg_wm_irq_mask(struct vfe_device *vfe_dev,
|
||||
struct msm_vfe_axi_stream *stream_info)
|
||||
{
|
||||
vfe_dev->irq0_mask |= 1 << (stream_info->wm[0] + 8);
|
||||
msm_vfe44_config_irq(vfe_dev, vfe_dev->irq0_mask, vfe_dev->irq1_mask,
|
||||
MSM_ISP_IRQ_SET);
|
||||
msm_vfe44_config_irq(vfe_dev, 1 << (stream_info->wm[0] + 8), 0,
|
||||
MSM_ISP_IRQ_ENABLE);
|
||||
}
|
||||
|
||||
static void msm_vfe44_axi_clear_wm_irq_mask(struct vfe_device *vfe_dev,
|
||||
struct msm_vfe_axi_stream *stream_info)
|
||||
{
|
||||
vfe_dev->irq0_mask &= ~(1 << (stream_info->wm[0] + 8));
|
||||
msm_vfe44_config_irq(vfe_dev, vfe_dev->irq0_mask, vfe_dev->irq1_mask,
|
||||
MSM_ISP_IRQ_SET);
|
||||
msm_vfe44_config_irq(vfe_dev, (1 << (stream_info->wm[0] + 8)), 0,
|
||||
MSM_ISP_IRQ_DISABLE);
|
||||
}
|
||||
|
||||
static void msm_vfe44_cfg_framedrop(void __iomem *vfe_base,
|
||||
|
@ -918,10 +901,8 @@ static void msm_vfe44_cfg_fetch_engine(struct vfe_device *vfe_dev,
|
|||
temp |= (1 << 1);
|
||||
msm_camera_io_w(temp, vfe_dev->vfe_base + 0x50);
|
||||
|
||||
vfe_dev->irq0_mask &= 0xFEFFFFFF;
|
||||
vfe_dev->irq0_mask |= (1 << 24);
|
||||
msm_vfe44_config_irq(vfe_dev, vfe_dev->irq0_mask,
|
||||
vfe_dev->irq1_mask, MSM_ISP_IRQ_SET);
|
||||
msm_vfe44_config_irq(vfe_dev, (1 << 24), 0,
|
||||
MSM_ISP_IRQ_SET);
|
||||
msm_camera_io_w((fe_cfg->fetch_height - 1) & 0xFFF,
|
||||
vfe_dev->vfe_base + 0x238);
|
||||
|
||||
|
@ -1045,13 +1026,12 @@ static void msm_vfe44_update_camif_state(struct vfe_device *vfe_dev,
|
|||
return;
|
||||
|
||||
if (update_state == ENABLE_CAMIF) {
|
||||
msm_camera_io_w(0xFFFFFFFF, vfe_dev->vfe_base + 0x30);
|
||||
msm_camera_io_w_mb(0xFFFFFFFF, vfe_dev->vfe_base + 0x34);
|
||||
msm_camera_io_w(0x0, vfe_dev->vfe_base + 0x30);
|
||||
msm_camera_io_w_mb(0x81, vfe_dev->vfe_base + 0x34);
|
||||
msm_camera_io_w_mb(0x1, vfe_dev->vfe_base + 0x24);
|
||||
|
||||
vfe_dev->irq0_mask |= 0xF7;
|
||||
msm_vfe44_config_irq(vfe_dev, vfe_dev->irq0_mask,
|
||||
vfe_dev->irq1_mask, MSM_ISP_IRQ_SET);
|
||||
msm_vfe44_config_irq(vfe_dev, 0xF7, 0x81,
|
||||
MSM_ISP_IRQ_ENABLE);
|
||||
msm_camera_io_w_mb(0x140000, vfe_dev->vfe_base + 0x318);
|
||||
|
||||
bus_en =
|
||||
|
@ -1075,7 +1055,7 @@ static void msm_vfe44_update_camif_state(struct vfe_device *vfe_dev,
|
|||
if (vfe_dev->axi_data.src_info[VFE_PIX_0].input_mux == TESTGEN)
|
||||
update_state = DISABLE_CAMIF;
|
||||
msm_vfe44_config_irq(vfe_dev, 0,
|
||||
0, MSM_ISP_IRQ_SET);
|
||||
0x81, MSM_ISP_IRQ_DISABLE);
|
||||
val = msm_camera_io_r(vfe_dev->vfe_base + 0xC18);
|
||||
/* disable danger signal */
|
||||
msm_camera_io_w_mb(val & ~(1 << 8), vfe_dev->vfe_base + 0xC18);
|
||||
|
@ -1526,6 +1506,9 @@ static void msm_vfe44_stats_cfg_comp_mask(
|
|||
comp_mask_reg |= mask_bf_scale << (16 + request_comp_index * 8);
|
||||
atomic_set(stats_comp_mask, stats_mask |
|
||||
atomic_read(stats_comp_mask));
|
||||
msm_vfe44_config_irq(vfe_dev,
|
||||
1 << (request_comp_index + 29), 0,
|
||||
MSM_ISP_IRQ_ENABLE);
|
||||
} else {
|
||||
if (!(atomic_read(stats_comp_mask) & stats_mask))
|
||||
return;
|
||||
|
@ -1540,6 +1523,9 @@ static void msm_vfe44_stats_cfg_comp_mask(
|
|||
~stats_mask & atomic_read(stats_comp_mask));
|
||||
comp_mask_reg &= ~(mask_bf_scale <<
|
||||
(16 + request_comp_index * 8));
|
||||
msm_vfe44_config_irq(vfe_dev,
|
||||
1 << (request_comp_index + 29), 0,
|
||||
MSM_ISP_IRQ_DISABLE);
|
||||
}
|
||||
msm_camera_io_w(comp_mask_reg, vfe_dev->vfe_base + 0x44);
|
||||
|
||||
|
@ -1555,20 +1541,18 @@ static void msm_vfe44_stats_cfg_wm_irq_mask(
|
|||
struct vfe_device *vfe_dev,
|
||||
struct msm_vfe_stats_stream *stream_info)
|
||||
{
|
||||
vfe_dev->irq0_mask |=
|
||||
1 << (STATS_IDX(stream_info->stream_handle) + 15);
|
||||
msm_vfe44_config_irq(vfe_dev, vfe_dev->irq0_mask, vfe_dev->irq1_mask,
|
||||
MSM_ISP_IRQ_SET);
|
||||
msm_vfe44_config_irq(vfe_dev,
|
||||
1 << (STATS_IDX(stream_info->stream_handle) + 15), 0,
|
||||
MSM_ISP_IRQ_ENABLE);
|
||||
}
|
||||
|
||||
static void msm_vfe44_stats_clear_wm_irq_mask(
|
||||
struct vfe_device *vfe_dev,
|
||||
struct msm_vfe_stats_stream *stream_info)
|
||||
{
|
||||
vfe_dev->irq0_mask &=
|
||||
~(1 << (STATS_IDX(stream_info->stream_handle) + 15));
|
||||
msm_vfe44_config_irq(vfe_dev, vfe_dev->irq0_mask, vfe_dev->irq1_mask,
|
||||
MSM_ISP_IRQ_SET);
|
||||
msm_vfe44_config_irq(vfe_dev,
|
||||
(1 << (STATS_IDX(stream_info->stream_handle) + 15)), 0,
|
||||
MSM_ISP_IRQ_DISABLE);
|
||||
}
|
||||
|
||||
static void msm_vfe44_stats_cfg_wm_reg(
|
||||
|
|
|
@ -92,30 +92,24 @@ static void msm_vfe46_config_irq(struct vfe_device *vfe_dev,
|
|||
uint32_t irq0_mask, uint32_t irq1_mask,
|
||||
enum msm_isp_irq_operation oper)
|
||||
{
|
||||
uint32_t val;
|
||||
|
||||
switch (oper) {
|
||||
case MSM_ISP_IRQ_ENABLE:
|
||||
val = msm_camera_io_r(vfe_dev->vfe_base + 0x5C);
|
||||
val |= irq0_mask;
|
||||
msm_camera_io_w_mb(val, vfe_dev->vfe_base + 0x5C);
|
||||
val = msm_camera_io_r(vfe_dev->vfe_base + 0x60);
|
||||
val |= irq1_mask;
|
||||
msm_camera_io_w_mb(val, vfe_dev->vfe_base + 0x60);
|
||||
vfe_dev->irq0_mask |= irq0_mask;
|
||||
vfe_dev->irq1_mask |= irq1_mask;
|
||||
break;
|
||||
case MSM_ISP_IRQ_DISABLE:
|
||||
val = msm_camera_io_r(vfe_dev->vfe_base + 0x5C);
|
||||
val &= ~irq0_mask;
|
||||
msm_camera_io_w_mb(val, vfe_dev->vfe_base + 0x5C);
|
||||
val = msm_camera_io_r(vfe_dev->vfe_base + 0x60);
|
||||
val &= ~irq1_mask;
|
||||
msm_camera_io_w_mb(val, vfe_dev->vfe_base + 0x60);
|
||||
vfe_dev->irq0_mask &= ~irq0_mask;
|
||||
vfe_dev->irq1_mask &= ~irq1_mask;
|
||||
break;
|
||||
case MSM_ISP_IRQ_SET:
|
||||
msm_camera_io_w_mb(irq0_mask, vfe_dev->vfe_base + 0x5C);
|
||||
msm_camera_io_w_mb(irq1_mask, vfe_dev->vfe_base + 0x60);
|
||||
vfe_dev->irq0_mask = irq0_mask;
|
||||
vfe_dev->irq1_mask = irq1_mask;
|
||||
break;
|
||||
}
|
||||
msm_camera_io_w_mb(vfe_dev->irq0_mask,
|
||||
vfe_dev->vfe_base + 0x5C);
|
||||
msm_camera_io_w_mb(vfe_dev->irq1_mask,
|
||||
vfe_dev->vfe_base + 0x60);
|
||||
}
|
||||
|
||||
static int32_t msm_vfe46_init_dt_parms(struct vfe_device *vfe_dev,
|
||||
|
@ -208,20 +202,16 @@ static void msm_vfe46_init_hardware_reg(struct vfe_device *vfe_dev)
|
|||
/* BUS_CFG */
|
||||
msm_camera_io_w(0x00000001, vfe_dev->vfe_base + 0x84);
|
||||
/* IRQ_MASK/CLEAR */
|
||||
vfe_dev->irq0_mask = 0xE00000F1;
|
||||
vfe_dev->irq1_mask = 0xE1FFFFFF;
|
||||
msm_vfe46_config_irq(vfe_dev, vfe_dev->irq0_mask, vfe_dev->irq1_mask,
|
||||
MSM_ISP_IRQ_SET);
|
||||
msm_vfe46_config_irq(vfe_dev, 0x810000E0, 0xFFFFFF7E,
|
||||
MSM_ISP_IRQ_ENABLE);
|
||||
msm_camera_io_w(0xFFFFFFFF, vfe_dev->vfe_base + 0x64);
|
||||
msm_camera_io_w_mb(0xFFFFFFFF, vfe_dev->vfe_base + 0x68);
|
||||
msm_camera_io_w_mb(0x1, vfe_dev->vfe_base + 0x58);
|
||||
}
|
||||
|
||||
static void msm_vfe46_clear_status_reg(struct vfe_device *vfe_dev)
|
||||
{
|
||||
vfe_dev->irq0_mask = 0x80000000;
|
||||
vfe_dev->irq1_mask = 0x0;
|
||||
msm_vfe46_config_irq(vfe_dev, vfe_dev->irq0_mask, vfe_dev->irq1_mask,
|
||||
MSM_ISP_IRQ_SET);
|
||||
msm_vfe46_config_irq(vfe_dev, 0x80000000, 0, MSM_ISP_IRQ_SET);
|
||||
msm_camera_io_w(0xFFFFFFFF, vfe_dev->vfe_base + 0x64);
|
||||
msm_camera_io_w_mb(0xFFFFFFFF, vfe_dev->vfe_base + 0x68);
|
||||
msm_camera_io_w_mb(0x1, vfe_dev->vfe_base + 0x58);
|
||||
|
@ -355,7 +345,6 @@ static void msm_vfe46_read_irq_status(struct vfe_device *vfe_dev,
|
|||
if (*irq_status1 & (1 << 0)) {
|
||||
vfe_dev->error_info.camif_status =
|
||||
msm_camera_io_r(vfe_dev->vfe_base + 0x3D0);
|
||||
vfe_dev->irq1_mask &= ~(1 << 0);
|
||||
msm_vfe46_config_irq(vfe_dev, 0, (1 << 0), MSM_ISP_IRQ_DISABLE);
|
||||
}
|
||||
|
||||
|
@ -587,9 +576,8 @@ static void msm_vfe46_axi_cfg_comp_mask(struct vfe_device *vfe_dev,
|
|||
stream_composite_mask << (comp_mask_index * 8));
|
||||
msm_camera_io_w(comp_mask, vfe_dev->vfe_base + 0x74);
|
||||
|
||||
vfe_dev->irq0_mask |= 1 << (comp_mask_index + 25);
|
||||
msm_vfe46_config_irq(vfe_dev, vfe_dev->irq0_mask, vfe_dev->irq1_mask,
|
||||
MSM_ISP_IRQ_SET);
|
||||
msm_vfe46_config_irq(vfe_dev, 1 << (comp_mask_index + 25), 0,
|
||||
MSM_ISP_IRQ_ENABLE);
|
||||
}
|
||||
|
||||
static void msm_vfe46_axi_clear_comp_mask(struct vfe_device *vfe_dev,
|
||||
|
@ -601,25 +589,22 @@ static void msm_vfe46_axi_clear_comp_mask(struct vfe_device *vfe_dev,
|
|||
comp_mask &= ~(0x7F << (comp_mask_index * 8));
|
||||
msm_camera_io_w(comp_mask, vfe_dev->vfe_base + 0x74);
|
||||
|
||||
vfe_dev->irq0_mask |= 1 << (comp_mask_index + 25);
|
||||
msm_vfe46_config_irq(vfe_dev, vfe_dev->irq0_mask, vfe_dev->irq1_mask,
|
||||
MSM_ISP_IRQ_SET);
|
||||
msm_vfe46_config_irq(vfe_dev, 1 << (comp_mask_index + 25), 0,
|
||||
MSM_ISP_IRQ_DISABLE);
|
||||
}
|
||||
|
||||
static void msm_vfe46_axi_cfg_wm_irq_mask(struct vfe_device *vfe_dev,
|
||||
struct msm_vfe_axi_stream *stream_info)
|
||||
{
|
||||
vfe_dev->irq0_mask |= 1 << (stream_info->wm[0] + 8);
|
||||
msm_vfe46_config_irq(vfe_dev, vfe_dev->irq0_mask, vfe_dev->irq1_mask,
|
||||
MSM_ISP_IRQ_SET);
|
||||
msm_vfe46_config_irq(vfe_dev, 1 << (stream_info->wm[0] + 8), 0,
|
||||
MSM_ISP_IRQ_ENABLE);
|
||||
}
|
||||
|
||||
static void msm_vfe46_axi_clear_wm_irq_mask(struct vfe_device *vfe_dev,
|
||||
struct msm_vfe_axi_stream *stream_info)
|
||||
{
|
||||
vfe_dev->irq0_mask &= ~(1 << (stream_info->wm[0] + 8));
|
||||
msm_vfe46_config_irq(vfe_dev, vfe_dev->irq0_mask, vfe_dev->irq1_mask,
|
||||
MSM_ISP_IRQ_SET);
|
||||
msm_vfe46_config_irq(vfe_dev, (1 << (stream_info->wm[0] + 8)), 0,
|
||||
MSM_ISP_IRQ_DISABLE);
|
||||
}
|
||||
|
||||
static void msm_vfe46_cfg_framedrop(void __iomem *vfe_base,
|
||||
|
@ -857,10 +842,8 @@ static void msm_vfe46_cfg_fetch_engine(struct vfe_device *vfe_dev,
|
|||
temp |= (1 << 1);
|
||||
msm_camera_io_w(temp, vfe_dev->vfe_base + 0x84);
|
||||
|
||||
vfe_dev->irq0_mask &= 0xFEFFFFFF;
|
||||
vfe_dev->irq0_mask |= (1 << 24);
|
||||
msm_vfe46_config_irq(vfe_dev, vfe_dev->irq0_mask,
|
||||
vfe_dev->irq1_mask, MSM_ISP_IRQ_SET);
|
||||
msm_vfe46_config_irq(vfe_dev, 1 << 24, 0,
|
||||
MSM_ISP_IRQ_ENABLE);
|
||||
|
||||
temp = fe_cfg->fetch_height - 1;
|
||||
msm_camera_io_w(temp & 0x3FFF, vfe_dev->vfe_base + 0x278);
|
||||
|
@ -1120,9 +1103,11 @@ static void msm_vfe46_update_camif_state(struct vfe_device *vfe_dev,
|
|||
return;
|
||||
|
||||
if (update_state == ENABLE_CAMIF) {
|
||||
vfe_dev->irq0_mask |= 0xF5;
|
||||
msm_vfe46_config_irq(vfe_dev, vfe_dev->irq0_mask,
|
||||
vfe_dev->irq1_mask, MSM_ISP_IRQ_SET);
|
||||
msm_camera_io_w(0x0, vfe_dev->vfe_base + 0x64);
|
||||
msm_camera_io_w(0x81, vfe_dev->vfe_base + 0x68);
|
||||
msm_camera_io_w(0x1, vfe_dev->vfe_base + 0x58);
|
||||
msm_vfe46_config_irq(vfe_dev, 0x15, 0x81,
|
||||
MSM_ISP_IRQ_ENABLE);
|
||||
|
||||
bus_en =
|
||||
((vfe_dev->axi_data.
|
||||
|
@ -1148,7 +1133,8 @@ static void msm_vfe46_update_camif_state(struct vfe_device *vfe_dev,
|
|||
|
||||
if (vfe_dev->axi_data.src_info[VFE_PIX_0].input_mux == TESTGEN)
|
||||
update_state = DISABLE_CAMIF;
|
||||
msm_vfe46_config_irq(vfe_dev, 0, 0, MSM_ISP_IRQ_SET);
|
||||
msm_vfe46_config_irq(vfe_dev, 0, 0x81,
|
||||
MSM_ISP_IRQ_DISABLE);
|
||||
/* disable danger signal */
|
||||
val = msm_camera_io_r(vfe_dev->vfe_base + 0xC18);
|
||||
val &= ~(1 << 8);
|
||||
|
@ -1611,6 +1597,9 @@ static void msm_vfe46_stats_cfg_comp_mask(
|
|||
comp_mask_reg |= mask_bf_scale << (16 + request_comp_index * 8);
|
||||
atomic_set(stats_comp_mask, stats_mask |
|
||||
atomic_read(stats_comp_mask));
|
||||
msm_vfe46_config_irq(vfe_dev,
|
||||
1 << (request_comp_index + 29), 0,
|
||||
MSM_ISP_IRQ_ENABLE);
|
||||
} else {
|
||||
if (!(atomic_read(stats_comp_mask) & stats_mask))
|
||||
return;
|
||||
|
@ -1625,6 +1614,9 @@ static void msm_vfe46_stats_cfg_comp_mask(
|
|||
~stats_mask & atomic_read(stats_comp_mask));
|
||||
comp_mask_reg &= ~(mask_bf_scale <<
|
||||
(16 + request_comp_index * 8));
|
||||
msm_vfe46_config_irq(vfe_dev,
|
||||
1 << (request_comp_index + 29), 0,
|
||||
MSM_ISP_IRQ_DISABLE);
|
||||
}
|
||||
msm_camera_io_w(comp_mask_reg, vfe_dev->vfe_base + 0x78);
|
||||
|
||||
|
@ -1640,19 +1632,18 @@ static void msm_vfe46_stats_cfg_wm_irq_mask(
|
|||
struct vfe_device *vfe_dev,
|
||||
struct msm_vfe_stats_stream *stream_info)
|
||||
{
|
||||
vfe_dev->irq0_mask |= 1 << (STATS_IDX(stream_info->stream_handle) + 15);
|
||||
msm_vfe46_config_irq(vfe_dev, vfe_dev->irq0_mask, vfe_dev->irq1_mask,
|
||||
MSM_ISP_IRQ_SET);
|
||||
msm_vfe46_config_irq(vfe_dev,
|
||||
1 << (STATS_IDX(stream_info->stream_handle) + 15), 0,
|
||||
MSM_ISP_IRQ_ENABLE);
|
||||
}
|
||||
|
||||
static void msm_vfe46_stats_clear_wm_irq_mask(
|
||||
struct vfe_device *vfe_dev,
|
||||
struct msm_vfe_stats_stream *stream_info)
|
||||
{
|
||||
vfe_dev->irq0_mask &=
|
||||
~(1 << (STATS_IDX(stream_info->stream_handle) + 15));
|
||||
msm_vfe46_config_irq(vfe_dev, vfe_dev->irq0_mask, vfe_dev->irq1_mask,
|
||||
MSM_ISP_IRQ_SET);
|
||||
msm_vfe46_config_irq(vfe_dev,
|
||||
1 << (STATS_IDX(stream_info->stream_handle) + 15), 0,
|
||||
MSM_ISP_IRQ_DISABLE);
|
||||
}
|
||||
|
||||
static void msm_vfe46_stats_cfg_wm_reg(
|
||||
|
|
|
@ -149,30 +149,24 @@ void msm_vfe47_config_irq(struct vfe_device *vfe_dev,
|
|||
uint32_t irq0_mask, uint32_t irq1_mask,
|
||||
enum msm_isp_irq_operation oper)
|
||||
{
|
||||
uint32_t val;
|
||||
|
||||
switch (oper) {
|
||||
case MSM_ISP_IRQ_ENABLE:
|
||||
val = msm_camera_io_r(vfe_dev->vfe_base + 0x5C);
|
||||
val |= irq0_mask;
|
||||
msm_camera_io_w_mb(val, vfe_dev->vfe_base + 0x5C);
|
||||
val = msm_camera_io_r(vfe_dev->vfe_base + 0x60);
|
||||
val |= irq1_mask;
|
||||
msm_camera_io_w_mb(val, vfe_dev->vfe_base + 0x60);
|
||||
vfe_dev->irq0_mask |= irq0_mask;
|
||||
vfe_dev->irq1_mask |= irq1_mask;
|
||||
break;
|
||||
case MSM_ISP_IRQ_DISABLE:
|
||||
val = msm_camera_io_r(vfe_dev->vfe_base + 0x5C);
|
||||
val &= ~irq0_mask;
|
||||
msm_camera_io_w_mb(val, vfe_dev->vfe_base + 0x5C);
|
||||
val = msm_camera_io_r(vfe_dev->vfe_base + 0x60);
|
||||
val &= ~irq1_mask;
|
||||
msm_camera_io_w_mb(val, vfe_dev->vfe_base + 0x60);
|
||||
vfe_dev->irq0_mask &= ~irq0_mask;
|
||||
vfe_dev->irq1_mask &= ~irq1_mask;
|
||||
break;
|
||||
case MSM_ISP_IRQ_SET:
|
||||
msm_camera_io_w_mb(irq0_mask, vfe_dev->vfe_base + 0x5C);
|
||||
msm_camera_io_w_mb(irq1_mask, vfe_dev->vfe_base + 0x60);
|
||||
vfe_dev->irq0_mask = irq0_mask;
|
||||
vfe_dev->irq1_mask = irq1_mask;
|
||||
break;
|
||||
}
|
||||
msm_camera_io_w_mb(vfe_dev->irq0_mask,
|
||||
vfe_dev->vfe_base + 0x5C);
|
||||
msm_camera_io_w_mb(vfe_dev->irq1_mask,
|
||||
vfe_dev->vfe_base + 0x60);
|
||||
}
|
||||
|
||||
static int32_t msm_vfe47_init_dt_parms(struct vfe_device *vfe_dev,
|
||||
|
@ -382,19 +376,16 @@ void msm_vfe47_init_hardware_reg(struct vfe_device *vfe_dev)
|
|||
/* BUS_CFG */
|
||||
msm_camera_io_w(0x00000101, vfe_dev->vfe_base + 0x84);
|
||||
/* IRQ_MASK/CLEAR */
|
||||
vfe_dev->irq0_mask = 0xE00000F3;
|
||||
vfe_dev->irq1_mask = 0xFFFFFFFF;
|
||||
msm_vfe47_config_irq(vfe_dev, vfe_dev->irq0_mask, vfe_dev->irq1_mask,
|
||||
MSM_ISP_IRQ_SET);
|
||||
msm_vfe47_config_irq(vfe_dev, 0x810000E0, 0xFFFFFF7E,
|
||||
MSM_ISP_IRQ_ENABLE);
|
||||
msm_camera_io_w(0xFFFFFFFF, vfe_dev->vfe_base + 0x64);
|
||||
msm_camera_io_w_mb(0xFFFFFFFF, vfe_dev->vfe_base + 0x68);
|
||||
msm_camera_io_w_mb(0x1, vfe_dev->vfe_base + 0x58);
|
||||
}
|
||||
|
||||
void msm_vfe47_clear_status_reg(struct vfe_device *vfe_dev)
|
||||
{
|
||||
vfe_dev->irq0_mask = 0x80000000;
|
||||
vfe_dev->irq1_mask = 0x0;
|
||||
msm_vfe47_config_irq(vfe_dev, vfe_dev->irq0_mask, vfe_dev->irq1_mask,
|
||||
msm_vfe47_config_irq(vfe_dev, 0x80000000, 0x0,
|
||||
MSM_ISP_IRQ_SET);
|
||||
msm_camera_io_w(0xFFFFFFFF, vfe_dev->vfe_base + 0x64);
|
||||
msm_camera_io_w_mb(0xFFFFFFFF, vfe_dev->vfe_base + 0x68);
|
||||
|
@ -543,7 +534,6 @@ void msm_vfe47_read_irq_status(struct vfe_device *vfe_dev,
|
|||
vfe_dev->error_info.camif_status =
|
||||
msm_camera_io_r(vfe_dev->vfe_base + 0x4A4);
|
||||
/* mask off camif error after first occurrance */
|
||||
vfe_dev->irq1_mask &= ~(1 << 0);
|
||||
msm_vfe47_config_irq(vfe_dev, 0, (1 << 0), MSM_ISP_IRQ_DISABLE);
|
||||
}
|
||||
|
||||
|
@ -785,9 +775,8 @@ void msm_vfe47_axi_cfg_comp_mask(struct vfe_device *vfe_dev,
|
|||
stream_composite_mask << (comp_mask_index * 8));
|
||||
msm_camera_io_w(comp_mask, vfe_dev->vfe_base + 0x74);
|
||||
|
||||
vfe_dev->irq0_mask |= 1 << (comp_mask_index + 25);
|
||||
msm_vfe47_config_irq(vfe_dev, vfe_dev->irq0_mask, vfe_dev->irq1_mask,
|
||||
MSM_ISP_IRQ_SET);
|
||||
msm_vfe47_config_irq(vfe_dev, 1 << (comp_mask_index + 25), 0,
|
||||
MSM_ISP_IRQ_ENABLE);
|
||||
}
|
||||
|
||||
void msm_vfe47_axi_clear_comp_mask(struct vfe_device *vfe_dev,
|
||||
|
@ -799,25 +788,22 @@ void msm_vfe47_axi_clear_comp_mask(struct vfe_device *vfe_dev,
|
|||
comp_mask &= ~(0x7F << (comp_mask_index * 8));
|
||||
msm_camera_io_w(comp_mask, vfe_dev->vfe_base + 0x74);
|
||||
|
||||
vfe_dev->irq0_mask &= ~(1 << (comp_mask_index + 25));
|
||||
msm_vfe47_config_irq(vfe_dev, vfe_dev->irq0_mask, vfe_dev->irq1_mask,
|
||||
MSM_ISP_IRQ_SET);
|
||||
msm_vfe47_config_irq(vfe_dev, (1 << (comp_mask_index + 25)), 0,
|
||||
MSM_ISP_IRQ_DISABLE);
|
||||
}
|
||||
|
||||
void msm_vfe47_axi_cfg_wm_irq_mask(struct vfe_device *vfe_dev,
|
||||
struct msm_vfe_axi_stream *stream_info)
|
||||
{
|
||||
vfe_dev->irq0_mask |= 1 << (stream_info->wm[0] + 8);
|
||||
msm_vfe47_config_irq(vfe_dev, vfe_dev->irq0_mask, vfe_dev->irq1_mask,
|
||||
MSM_ISP_IRQ_SET);
|
||||
msm_vfe47_config_irq(vfe_dev, 1 << (stream_info->wm[0] + 8), 0,
|
||||
MSM_ISP_IRQ_ENABLE);
|
||||
}
|
||||
|
||||
void msm_vfe47_axi_clear_wm_irq_mask(struct vfe_device *vfe_dev,
|
||||
struct msm_vfe_axi_stream *stream_info)
|
||||
{
|
||||
vfe_dev->irq0_mask &= ~(1 << (stream_info->wm[0] + 8));
|
||||
msm_vfe47_config_irq(vfe_dev, vfe_dev->irq0_mask, vfe_dev->irq1_mask,
|
||||
MSM_ISP_IRQ_SET);
|
||||
msm_vfe47_config_irq(vfe_dev, (1 << (stream_info->wm[0] + 8)), 0,
|
||||
MSM_ISP_IRQ_DISABLE);
|
||||
}
|
||||
|
||||
void msm_vfe47_cfg_framedrop(void __iomem *vfe_base,
|
||||
|
@ -1065,10 +1051,8 @@ void msm_vfe47_cfg_fetch_engine(struct vfe_device *vfe_dev,
|
|||
temp |= (1 << 1);
|
||||
msm_camera_io_w(temp, vfe_dev->vfe_base + 0x84);
|
||||
|
||||
vfe_dev->irq0_mask &= 0xFEFFFFFF;
|
||||
vfe_dev->irq0_mask |= (1 << 24);
|
||||
msm_vfe47_config_irq(vfe_dev, vfe_dev->irq0_mask,
|
||||
vfe_dev->irq1_mask, MSM_ISP_IRQ_SET);
|
||||
msm_vfe47_config_irq(vfe_dev, (1 << 24), 0,
|
||||
MSM_ISP_IRQ_ENABLE);
|
||||
|
||||
temp = fe_cfg->fetch_height - 1;
|
||||
msm_camera_io_w(temp & 0x3FFF, vfe_dev->vfe_base + 0x308);
|
||||
|
@ -1394,9 +1378,11 @@ void msm_vfe47_update_camif_state(struct vfe_device *vfe_dev,
|
|||
|
||||
val = msm_camera_io_r(vfe_dev->vfe_base + 0x47C);
|
||||
if (update_state == ENABLE_CAMIF) {
|
||||
vfe_dev->irq0_mask |= 0xF5;
|
||||
msm_vfe47_config_irq(vfe_dev, vfe_dev->irq0_mask,
|
||||
vfe_dev->irq1_mask, MSM_ISP_IRQ_SET);
|
||||
msm_camera_io_w(0x0, vfe_dev->vfe_base + 0x64);
|
||||
msm_camera_io_w(0x81, vfe_dev->vfe_base + 0x68);
|
||||
msm_camera_io_w(0x1, vfe_dev->vfe_base + 0x58);
|
||||
msm_vfe47_config_irq(vfe_dev, 0x15, 0x81,
|
||||
MSM_ISP_IRQ_ENABLE);
|
||||
|
||||
if ((vfe_dev->hvx_cmd > HVX_DISABLE) &&
|
||||
(vfe_dev->hvx_cmd <= HVX_ROUND_TRIP))
|
||||
|
@ -1427,8 +1413,9 @@ void msm_vfe47_update_camif_state(struct vfe_device *vfe_dev,
|
|||
/* For testgen always halt on camif boundary */
|
||||
if (vfe_dev->axi_data.src_info[VFE_PIX_0].input_mux == TESTGEN)
|
||||
update_state = DISABLE_CAMIF;
|
||||
/* turn off all irq before camif disable */
|
||||
msm_vfe47_config_irq(vfe_dev, 0, 0, MSM_ISP_IRQ_SET);
|
||||
/* turn off camif violation and error irqs */
|
||||
msm_vfe47_config_irq(vfe_dev, 0, 0x81,
|
||||
MSM_ISP_IRQ_DISABLE);
|
||||
val = msm_camera_io_r(vfe_dev->vfe_base + 0x464);
|
||||
/* disable danger signal */
|
||||
msm_camera_io_w_mb(val & ~(1 << 8), vfe_dev->vfe_base + 0x464);
|
||||
|
@ -1896,6 +1883,8 @@ void msm_vfe47_stats_cfg_comp_mask(
|
|||
comp_mask_reg |= stats_mask << (request_comp_index * 16);
|
||||
atomic_set(stats_comp_mask, stats_mask |
|
||||
atomic_read(stats_comp_mask));
|
||||
msm_vfe47_config_irq(vfe_dev, 1 << (29 + request_comp_index),
|
||||
0, MSM_ISP_IRQ_ENABLE);
|
||||
} else {
|
||||
if (!(atomic_read(stats_comp_mask) & stats_mask))
|
||||
return;
|
||||
|
@ -1903,6 +1892,8 @@ void msm_vfe47_stats_cfg_comp_mask(
|
|||
atomic_set(stats_comp_mask,
|
||||
~stats_mask & atomic_read(stats_comp_mask));
|
||||
comp_mask_reg &= ~(stats_mask << (request_comp_index * 16));
|
||||
msm_vfe47_config_irq(vfe_dev, 1 << (29 + request_comp_index),
|
||||
0, MSM_ISP_IRQ_DISABLE);
|
||||
}
|
||||
|
||||
msm_camera_io_w(comp_mask_reg, vfe_dev->vfe_base + 0x78);
|
||||
|
@ -1919,49 +1910,39 @@ void msm_vfe47_stats_cfg_wm_irq_mask(
|
|||
struct vfe_device *vfe_dev,
|
||||
struct msm_vfe_stats_stream *stream_info)
|
||||
{
|
||||
uint32_t irq_mask;
|
||||
uint32_t irq_mask_1;
|
||||
|
||||
irq_mask = vfe_dev->irq0_mask;
|
||||
irq_mask_1 = vfe_dev->irq1_mask;
|
||||
|
||||
switch (STATS_IDX(stream_info->stream_handle)) {
|
||||
case STATS_COMP_IDX_AEC_BG:
|
||||
irq_mask |= 1 << 15;
|
||||
msm_vfe47_config_irq(vfe_dev, 1 << 15, 0, MSM_ISP_IRQ_ENABLE);
|
||||
break;
|
||||
case STATS_COMP_IDX_HDR_BE:
|
||||
irq_mask |= 1 << 16;
|
||||
msm_vfe47_config_irq(vfe_dev, 1 << 16, 0, MSM_ISP_IRQ_ENABLE);
|
||||
break;
|
||||
case STATS_COMP_IDX_BG:
|
||||
irq_mask |= 1 << 17;
|
||||
msm_vfe47_config_irq(vfe_dev, 1 << 17, 0, MSM_ISP_IRQ_ENABLE);
|
||||
break;
|
||||
case STATS_COMP_IDX_BF:
|
||||
irq_mask |= 1 << 18;
|
||||
irq_mask_1 |= 1 << 26;
|
||||
msm_vfe47_config_irq(vfe_dev, 1 << 18, 1 << 26,
|
||||
MSM_ISP_IRQ_ENABLE);
|
||||
break;
|
||||
case STATS_COMP_IDX_HDR_BHIST:
|
||||
irq_mask |= 1 << 19;
|
||||
msm_vfe47_config_irq(vfe_dev, 1 << 19, 0, MSM_ISP_IRQ_ENABLE);
|
||||
break;
|
||||
case STATS_COMP_IDX_RS:
|
||||
irq_mask |= 1 << 20;
|
||||
msm_vfe47_config_irq(vfe_dev, 1 << 20, 0, MSM_ISP_IRQ_ENABLE);
|
||||
break;
|
||||
case STATS_COMP_IDX_CS:
|
||||
irq_mask |= 1 << 21;
|
||||
msm_vfe47_config_irq(vfe_dev, 1 << 21, 0, MSM_ISP_IRQ_ENABLE);
|
||||
break;
|
||||
case STATS_COMP_IDX_IHIST:
|
||||
irq_mask |= 1 << 22;
|
||||
msm_vfe47_config_irq(vfe_dev, 1 << 22, 0, MSM_ISP_IRQ_ENABLE);
|
||||
break;
|
||||
case STATS_COMP_IDX_BHIST:
|
||||
irq_mask |= 1 << 23;
|
||||
msm_vfe47_config_irq(vfe_dev, 1 << 23, 0, MSM_ISP_IRQ_ENABLE);
|
||||
break;
|
||||
default:
|
||||
pr_err("%s: Invalid stats idx %d\n", __func__,
|
||||
STATS_IDX(stream_info->stream_handle));
|
||||
}
|
||||
|
||||
msm_vfe47_config_irq(vfe_dev, irq_mask, irq_mask_1, MSM_ISP_IRQ_SET);
|
||||
vfe_dev->irq0_mask = irq_mask;
|
||||
vfe_dev->irq1_mask = irq_mask_1;
|
||||
}
|
||||
|
||||
void msm_vfe47_stats_clear_wm_irq_mask(
|
||||
|
@ -1975,41 +1956,37 @@ void msm_vfe47_stats_clear_wm_irq_mask(
|
|||
|
||||
switch (STATS_IDX(stream_info->stream_handle)) {
|
||||
case STATS_COMP_IDX_AEC_BG:
|
||||
irq_mask &= ~(1 << 15);
|
||||
msm_vfe47_config_irq(vfe_dev, 1 << 15, 0, MSM_ISP_IRQ_DISABLE);
|
||||
break;
|
||||
case STATS_COMP_IDX_HDR_BE:
|
||||
irq_mask &= ~(1 << 16);
|
||||
msm_vfe47_config_irq(vfe_dev, 1 << 16, 0, MSM_ISP_IRQ_DISABLE);
|
||||
break;
|
||||
case STATS_COMP_IDX_BG:
|
||||
irq_mask &= ~(1 << 17);
|
||||
msm_vfe47_config_irq(vfe_dev, 1 << 17, 0, MSM_ISP_IRQ_DISABLE);
|
||||
break;
|
||||
case STATS_COMP_IDX_BF:
|
||||
irq_mask &= ~(1 << 18);
|
||||
irq_mask_1 &= ~(1 << 26);
|
||||
msm_vfe47_config_irq(vfe_dev, 1 << 18, 1 << 26,
|
||||
MSM_ISP_IRQ_DISABLE);
|
||||
break;
|
||||
case STATS_COMP_IDX_HDR_BHIST:
|
||||
irq_mask &= ~(1 << 19);
|
||||
msm_vfe47_config_irq(vfe_dev, 1 << 19, 0, MSM_ISP_IRQ_DISABLE);
|
||||
break;
|
||||
case STATS_COMP_IDX_RS:
|
||||
irq_mask &= ~(1 << 20);
|
||||
msm_vfe47_config_irq(vfe_dev, 1 << 20, 0, MSM_ISP_IRQ_DISABLE);
|
||||
break;
|
||||
case STATS_COMP_IDX_CS:
|
||||
irq_mask &= ~(1 << 21);
|
||||
msm_vfe47_config_irq(vfe_dev, 1 << 21, 0, MSM_ISP_IRQ_DISABLE);
|
||||
break;
|
||||
case STATS_COMP_IDX_IHIST:
|
||||
irq_mask &= ~(1 << 22);
|
||||
msm_vfe47_config_irq(vfe_dev, 1 << 22, 0, MSM_ISP_IRQ_DISABLE);
|
||||
break;
|
||||
case STATS_COMP_IDX_BHIST:
|
||||
irq_mask &= ~(1 << 23);
|
||||
msm_vfe47_config_irq(vfe_dev, 1 << 23, 0, MSM_ISP_IRQ_DISABLE);
|
||||
break;
|
||||
default:
|
||||
pr_err("%s: Invalid stats idx %d\n", __func__,
|
||||
STATS_IDX(stream_info->stream_handle));
|
||||
}
|
||||
|
||||
msm_vfe47_config_irq(vfe_dev, irq_mask, irq_mask_1, MSM_ISP_IRQ_SET);
|
||||
vfe_dev->irq0_mask = irq_mask;
|
||||
vfe_dev->irq1_mask = irq_mask_1;
|
||||
}
|
||||
|
||||
void msm_vfe47_stats_cfg_wm_reg(
|
||||
|
|
|
@ -1188,15 +1188,9 @@ int msm_isp_request_axi_stream(struct vfe_device *vfe_dev, void *arg)
|
|||
vfe_dev->vt_enable = stream_cfg_cmd->vt_enable;
|
||||
msm_isp_start_avtimer();
|
||||
}
|
||||
if (stream_info->num_planes > 1) {
|
||||
if (stream_info->num_planes > 1)
|
||||
msm_isp_axi_reserve_comp_mask(
|
||||
&vfe_dev->axi_data, stream_info);
|
||||
vfe_dev->hw_info->vfe_ops.axi_ops.
|
||||
cfg_comp_mask(vfe_dev, stream_info);
|
||||
} else {
|
||||
vfe_dev->hw_info->vfe_ops.axi_ops.
|
||||
cfg_wm_irq_mask(vfe_dev, stream_info);
|
||||
}
|
||||
|
||||
for (i = 0; i < stream_info->num_planes; i++) {
|
||||
vfe_dev->hw_info->vfe_ops.axi_ops.
|
||||
|
@ -1252,14 +1246,8 @@ int msm_isp_release_axi_stream(struct vfe_device *vfe_dev, void *arg)
|
|||
clear_wm_xbar_reg(vfe_dev, stream_info, i);
|
||||
}
|
||||
|
||||
if (stream_info->num_planes > 1) {
|
||||
vfe_dev->hw_info->vfe_ops.axi_ops.
|
||||
clear_comp_mask(vfe_dev, stream_info);
|
||||
if (stream_info->num_planes > 1)
|
||||
msm_isp_axi_free_comp_mask(&vfe_dev->axi_data, stream_info);
|
||||
} else {
|
||||
vfe_dev->hw_info->vfe_ops.axi_ops.
|
||||
clear_wm_irq_mask(vfe_dev, stream_info);
|
||||
}
|
||||
|
||||
vfe_dev->hw_info->vfe_ops.axi_ops.clear_framedrop(vfe_dev, stream_info);
|
||||
msm_isp_axi_free_wm(axi_data, stream_info);
|
||||
|
@ -2617,6 +2605,13 @@ static int msm_isp_start_axi_stream(struct vfe_device *vfe_dev,
|
|||
return rc;
|
||||
}
|
||||
spin_unlock_irqrestore(&stream_info->lock, flags);
|
||||
if (stream_info->num_planes > 1) {
|
||||
vfe_dev->hw_info->vfe_ops.axi_ops.
|
||||
cfg_comp_mask(vfe_dev, stream_info);
|
||||
} else {
|
||||
vfe_dev->hw_info->vfe_ops.axi_ops.
|
||||
cfg_wm_irq_mask(vfe_dev, stream_info);
|
||||
}
|
||||
|
||||
stream_info->state = START_PENDING;
|
||||
|
||||
|
@ -2733,6 +2728,13 @@ static int msm_isp_stop_axi_stream(struct vfe_device *vfe_dev,
|
|||
spin_unlock_irqrestore(&stream_info->lock, flags);
|
||||
wait_for_complete_for_this_stream = 0;
|
||||
|
||||
if (stream_info->num_planes > 1)
|
||||
vfe_dev->hw_info->vfe_ops.axi_ops.
|
||||
clear_comp_mask(vfe_dev, stream_info);
|
||||
else
|
||||
vfe_dev->hw_info->vfe_ops.axi_ops.
|
||||
clear_wm_irq_mask(vfe_dev, stream_info);
|
||||
|
||||
stream_info->state = STOP_PENDING;
|
||||
|
||||
if (!halt && !ext_read &&
|
||||
|
|
|
@ -444,10 +444,6 @@ int msm_isp_request_stats_stream(struct vfe_device *vfe_dev, void *arg)
|
|||
stream_info->framedrop_pattern = 0x1;
|
||||
stream_info->framedrop_period = framedrop_period - 1;
|
||||
|
||||
if (!stream_info->composite_flag)
|
||||
vfe_dev->hw_info->vfe_ops.stats_ops.
|
||||
cfg_wm_irq_mask(vfe_dev, stream_info);
|
||||
|
||||
if (stream_info->init_stats_frame_drop == 0)
|
||||
vfe_dev->hw_info->vfe_ops.stats_ops.cfg_wm_reg(vfe_dev,
|
||||
stream_info);
|
||||
|
@ -485,10 +481,6 @@ int msm_isp_release_stats_stream(struct vfe_device *vfe_dev, void *arg)
|
|||
rc = msm_isp_cfg_stats_stream(vfe_dev, &stream_cfg_cmd);
|
||||
}
|
||||
|
||||
if (!stream_info->composite_flag)
|
||||
vfe_dev->hw_info->vfe_ops.stats_ops.
|
||||
clear_wm_irq_mask(vfe_dev, stream_info);
|
||||
|
||||
vfe_dev->hw_info->vfe_ops.stats_ops.clear_wm_reg(vfe_dev, stream_info);
|
||||
memset(stream_info, 0, sizeof(struct msm_vfe_stats_stream));
|
||||
return 0;
|
||||
|
@ -711,6 +703,9 @@ static int msm_isp_start_stats_stream(struct vfe_device *vfe_dev,
|
|||
pr_err("%s: No buffer for stream%d\n", __func__, idx);
|
||||
return rc;
|
||||
}
|
||||
if (!stream_info->composite_flag)
|
||||
vfe_dev->hw_info->vfe_ops.stats_ops.
|
||||
cfg_wm_irq_mask(vfe_dev, stream_info);
|
||||
|
||||
if (vfe_dev->axi_data.src_info[VFE_PIX_0].active)
|
||||
stream_info->state = STATS_START_PENDING;
|
||||
|
@ -784,6 +779,10 @@ static int msm_isp_stop_stats_stream(struct vfe_device *vfe_dev,
|
|||
return -EINVAL;
|
||||
}
|
||||
|
||||
if (!stream_info->composite_flag)
|
||||
vfe_dev->hw_info->vfe_ops.stats_ops.
|
||||
clear_wm_irq_mask(vfe_dev, stream_info);
|
||||
|
||||
if (vfe_dev->axi_data.src_info[VFE_PIX_0].active)
|
||||
stream_info->state = STATS_STOP_PENDING;
|
||||
else
|
||||
|
|
Loading…
Add table
Reference in a new issue