int msm_camio_csid_config(struct msm_camera_csid_params *csid_params) { int rc = 0; struct msm_ispif_params ispif_params; uint32_t val = 0; val = csid_params->lane_cnt - 1; val |= csid_params->lane_assign << 2; val |= 0x1 << 10; val |= 0x1 << 11; val |= 0x1 << 12; val |= 0x1 << 28; msm_io_w(val, csidbase + CSID_CORE_CTRL_ADDR); rc = msm_camio_csid_cid_lut(&csid_params->lut_params); if (rc < 0) return rc; msm_io_w(0xFFFFFFFF, csidbase + CSID_IRQ_MASK_ADDR); msm_io_w(0xFFFFFFFF, csidbase + CSID_IRQ_CLEAR_CMD_ADDR); ispif_params.intftype = PIX0; ispif_params.cid_mask = 0x0001; ispif_params.csid = 0x01; msm_ispif_config(&ispif_params, 1); msm_ispif_start_intf_transfer(&ispif_params); msleep(20); return rc; }
static long msm_ispif_cmd(struct v4l2_subdev *sd, void *arg) { long rc = 0; struct ispif_cfg_data *pcdata = (struct ispif_cfg_data *)arg; struct ispif_device *ispif = (struct ispif_device *)v4l2_get_subdevdata(sd); BUG_ON(!sd); BUG_ON(!pcdata); mutex_lock(&ispif->mutex); switch (pcdata->cfg_type) { case ISPIF_ENABLE_REG_DUMP: ispif->enb_dump_reg = pcdata->reg_dump; /* save dump config */ break; case ISPIF_INIT: rc = msm_ispif_init(ispif, pcdata->csid_version); msm_ispif_io_dump_reg(ispif); break; case ISPIF_CFG: rc = msm_ispif_config(ispif, &pcdata->params); msm_ispif_io_dump_reg(ispif); break; case ISPIF_START_FRAME_BOUNDARY: rc = msm_ispif_start_frame_boundary(ispif, &pcdata->params); msm_ispif_io_dump_reg(ispif); break; case ISPIF_RESTART_FRAME_BOUNDARY: rc = msm_ispif_restart_frame_boundary(ispif, &pcdata->params); msm_ispif_io_dump_reg(ispif); break; case ISPIF_STOP_FRAME_BOUNDARY: rc = msm_ispif_stop_frame_boundary(ispif, &pcdata->params); msm_ispif_io_dump_reg(ispif); break; case ISPIF_STOP_IMMEDIATELY: rc = msm_ispif_stop_immediately(ispif, &pcdata->params); msm_ispif_io_dump_reg(ispif); break; case ISPIF_RELEASE: msm_ispif_release(ispif); break; case ISPIF_SET_VFE_INFO: rc = msm_ispif_set_vfe_info(ispif, &pcdata->vfe_info); break; default: pr_err("%s: invalid cfg_type\n", __func__); rc = -EINVAL; break; } mutex_unlock(&ispif->mutex); return rc; }