static void msm_ispif_sel_csid_core(struct ispif_device *ispif, uint8_t intftype, uint8_t csid, uint8_t vfe_intf) { int rc = 0; uint32_t data; BUG_ON(!ispif); if (!msm_ispif_is_intf_valid(ispif->csid_version, vfe_intf)) { pr_err("%s: invalid interface type\n", __func__); return; } if (ispif->csid_version <= CSID_VERSION_V2) { if (ispif->ispif_clk[vfe_intf][intftype] == NULL) { CDBG("%s: ispif NULL clk\n", __func__); return; } rc = clk_set_rate(ispif->ispif_clk[vfe_intf][intftype], csid); if (rc) { pr_err("%s: clk_set_rate failed %d\n", __func__, rc); return; } } data = msm_camera_io_r(ispif->base + ISPIF_VFE_m_INPUT_SEL(vfe_intf)); switch (intftype) { case PIX0: data &= ~(BIT(1) | BIT(0)); data |= csid; break; case RDI0: data &= ~(BIT(5) | BIT(4)); data |= (csid << 4); break; case PIX1: data &= ~(BIT(9) | BIT(8)); data |= (csid << 8); break; case RDI1: data &= ~(BIT(13) | BIT(12)); data |= (csid << 12); break; case RDI2: data &= ~(BIT(21) | BIT(20)); data |= (csid << 20); break; } if (data) msm_camera_io_w_mb(data, ispif->base + ISPIF_VFE_m_INPUT_SEL(vfe_intf)); }
static int msm_ispif_reset(struct ispif_device *ispif) { int rc = 0; int i; BUG_ON(!ispif); memset(ispif->sof_count, 0, sizeof(ispif->sof_count)); frame_event_manager_reset(&ispif->fem); for (i = 0; i < ispif->vfe_info.num_vfe; i++) { msm_camera_io_w(1 << PIX0_LINE_BUF_EN_BIT, ispif->base + ISPIF_VFE_m_CTRL_0(i)); msm_camera_io_w(0, ispif->base + ISPIF_VFE_m_IRQ_MASK_0(i)); msm_camera_io_w(0, ispif->base + ISPIF_VFE_m_IRQ_MASK_1(i)); msm_camera_io_w(0, ispif->base + ISPIF_VFE_m_IRQ_MASK_2(i)); msm_camera_io_w(0xFFFFFFFF, ispif->base + ISPIF_VFE_m_IRQ_CLEAR_0(i)); msm_camera_io_w(0xFFFFFFFF, ispif->base + ISPIF_VFE_m_IRQ_CLEAR_1(i)); msm_camera_io_w(0xFFFFFFFF, ispif->base + ISPIF_VFE_m_IRQ_CLEAR_2(i)); msm_camera_io_w(0, ispif->base + ISPIF_VFE_m_INPUT_SEL(i)); msm_camera_io_w(ISPIF_STOP_INTF_IMMEDIATELY, ispif->base + ISPIF_VFE_m_INTF_CMD_0(i)); msm_camera_io_w(ISPIF_STOP_INTF_IMMEDIATELY, ispif->base + ISPIF_VFE_m_INTF_CMD_1(i)); msm_camera_io_w(0, ispif->base + ISPIF_VFE_m_PIX_INTF_n_CID_MASK(i, 0)); msm_camera_io_w(0, ispif->base + ISPIF_VFE_m_PIX_INTF_n_CID_MASK(i, 1)); msm_camera_io_w(0, ispif->base + ISPIF_VFE_m_PIX_INTF_n_CID_MASK(i, 0)); msm_camera_io_w(0, ispif->base + ISPIF_VFE_m_PIX_INTF_n_CID_MASK(i, 1)); msm_camera_io_w(0, ispif->base + ISPIF_VFE_m_PIX_INTF_n_CID_MASK(i, 2)); msm_camera_io_w(0, ispif->base + ISPIF_VFE_m_PIX_INTF_n_CROP(i, 0)); msm_camera_io_w(0, ispif->base + ISPIF_VFE_m_PIX_INTF_n_CROP(i, 1)); } msm_camera_io_w_mb(ISPIF_IRQ_GLOBAL_CLEAR_CMD, ispif->base + ISPIF_IRQ_GLOBAL_CLEAR_CMD_ADDR); return rc; }
static void msm_ispif_sel_csid_core(struct ispif_device *ispif, uint8_t intftype, uint8_t csid, uint8_t vfe_intf) { uint32_t data; BUG_ON(!ispif); if (!msm_ispif_is_intf_valid(ispif->csid_version, vfe_intf)) { pr_err("%s: invalid interface type\n", __func__); return; } data = msm_camera_io_r(ispif->base + ISPIF_VFE_m_INPUT_SEL(vfe_intf)); switch (intftype) { case PIX0: data &= ~(BIT(1) | BIT(0)); data |= csid; break; case RDI0: data &= ~(BIT(5) | BIT(4)); data |= (csid << 4); break; case PIX1: data &= ~(BIT(9) | BIT(8)); data |= (csid << 8); break; case RDI1: data &= ~(BIT(13) | BIT(12)); data |= (csid << 12); break; case RDI2: data &= ~(BIT(21) | BIT(20)); data |= (csid << 20); break; } msm_camera_io_w_mb(data, ispif->base + ISPIF_VFE_m_INPUT_SEL(vfe_intf)); }
static int msm_ispif_reset(struct ispif_device *ispif) { int rc = 0; int i; // memset(ispif->sof_count, 0, sizeof(ispif->sof_count)); for (i = 0; i < ispif->vfe_info.num_vfe; i++) { msm_camera_io_w(1 << PIX0_LINE_BUF_EN_BIT, ispif->base + ISPIF_VFE_m_CTRL_0(i)); msm_camera_io_w(0, ispif->base + ISPIF_VFE_m_IRQ_MASK_0(i)); msm_camera_io_w(0, ispif->base + ISPIF_VFE_m_IRQ_MASK_1(i)); msm_camera_io_w(0, ispif->base + ISPIF_VFE_m_IRQ_MASK_2(i)); msm_camera_io_w(0xFFFFFFFF, ispif->base + ISPIF_VFE_m_IRQ_CLEAR_0(i)); msm_camera_io_w(0xFFFFFFFF, ispif->base + ISPIF_VFE_m_IRQ_CLEAR_1(i)); msm_camera_io_w(0xFFFFFFFF, ispif->base + ISPIF_VFE_m_IRQ_CLEAR_2(i)); msm_camera_io_w(0, ispif->base + ISPIF_VFE_m_INPUT_SEL(i)); msm_camera_io_w(ISPIF_STOP_INTF_IMMEDIATELY, ispif->base + ISPIF_VFE_m_INTF_CMD_0(i)); msm_camera_io_w(ISPIF_STOP_INTF_IMMEDIATELY, ispif->base + ISPIF_VFE_m_INTF_CMD_1(i)); pr_debug("%s: base %x", __func__, (unsigned int)ispif->base); msm_camera_io_w(0, ispif->base + ISPIF_VFE_m_PIX_INTF_n_CID_MASK(i, 0)); msm_camera_io_w(0, ispif->base + ISPIF_VFE_m_PIX_INTF_n_CID_MASK(i, 1)); /* */ #if 0 msm_camera_io_w(0, ispif->base + ISPIF_VFE_m_RDI_INTF_n_CID_MASK(i, 0)); msm_camera_io_w(0, ispif->base + ISPIF_VFE_m_RDI_INTF_n_CID_MASK(i, 1)); msm_camera_io_w(0, ispif->base + ISPIF_VFE_m_PIX_INTF_n_CID_MASK(i, 2)); #else msm_camera_io_w(0, ispif->base + ISPIF_VFE_m_RDI_INTF_n_CID_MASK(i, 0)); msm_camera_io_w(0, ispif->base + ISPIF_VFE_m_RDI_INTF_n_CID_MASK(i, 1)); msm_camera_io_w(0, ispif->base + ISPIF_VFE_m_RDI_INTF_n_CID_MASK(i, 2)); #endif /* */ msm_camera_io_w(0, ispif->base + ISPIF_VFE_m_PIX_INTF_n_CROP(i, 0)); msm_camera_io_w(0, ispif->base + ISPIF_VFE_m_PIX_INTF_n_CROP(i, 1)); } msm_camera_io_w_mb(ISPIF_IRQ_GLOBAL_CLEAR_CMD, ispif->base + ISPIF_IRQ_GLOBAL_CLEAR_CMD_ADDR); return rc; }