static int msm_ispif_init(struct ispif_device *ispif, uint32_t csid_version) { int rc = 0; BUG_ON(!ispif); if (ispif->ispif_state == ISPIF_POWER_UP) { pr_err("%s: ispif already initted state = %d\n", __func__, ispif->ispif_state); rc = -EPERM; return rc; } /* can we set to zero? */ ispif->applied_intf_cmd[VFE0].intf_cmd = 0xFFFFFFFF; ispif->applied_intf_cmd[VFE0].intf_cmd1 = 0xFFFFFFFF; ispif->applied_intf_cmd[VFE1].intf_cmd = 0xFFFFFFFF; ispif->applied_intf_cmd[VFE1].intf_cmd1 = 0xFFFFFFFF; memset(ispif->sof_count, 0, sizeof(ispif->sof_count)); ispif->csid_version = csid_version; if (ispif->csid_version >= CSID_VERSION_V30) { if (!ispif->clk_mux_mem || !ispif->clk_mux_io) { pr_err("%s csi clk mux mem %p io %p\n", __func__, ispif->clk_mux_mem, ispif->clk_mux_io); rc = -ENOMEM; return rc; } ispif->clk_mux_base = ioremap(ispif->clk_mux_mem->start, resource_size(ispif->clk_mux_mem)); if (!ispif->clk_mux_base) { pr_err("%s: clk_mux_mem ioremap failed\n", __func__); rc = -ENOMEM; return rc; } } ispif->base = ioremap(ispif->mem->start, resource_size(ispif->mem)); if (!ispif->base) { rc = -ENOMEM; pr_err("%s: nomem\n", __func__); goto end; } rc = request_irq(ispif->irq->start, msm_io_ispif_irq, IRQF_TRIGGER_RISING, "ispif", ispif); if (rc) { pr_err("%s: request_irq error = %d\n", __func__, rc); goto error_irq; } rc = msm_ispif_clk_ahb_enable(ispif, 1); if (rc) { pr_err("%s: ahb_clk enable failed", __func__); goto error_ahb; } if (of_device_is_compatible(ispif->pdev->dev.of_node, "qcom,ispif-v3.0")) { /* currently HW reset is implemented for 8974 only */ msm_ispif_reset_hw(ispif); } rc = msm_ispif_reset(ispif); if (rc == 0) { ispif->ispif_state = ISPIF_POWER_UP; CDBG("%s: power up done\n", __func__); goto end; } error_ahb: free_irq(ispif->irq->start, ispif); error_irq: iounmap(ispif->base); end: return rc; }
static int msm_ispif_init(struct ispif_device *ispif, uint32_t csid_version) { int rc = 0; BUG_ON(!ispif); /* */ wake_unlock(&ispif->camera_wake_lock); pr_err(" %s:%d camera_wake_lock unlock \n",__func__,__LINE__); /* */ if (ispif->ispif_state == ISPIF_POWER_UP) { pr_err("%s: ispif already initted state = %d\n", __func__, ispif->ispif_state); rc = -EPERM; return rc; } /* can we set to zero? */ ispif->applied_intf_cmd[VFE0].intf_cmd = 0xFFFFFFFF; ispif->applied_intf_cmd[VFE0].intf_cmd1 = 0xFFFFFFFF; ispif->applied_intf_cmd[VFE1].intf_cmd = 0xFFFFFFFF; ispif->applied_intf_cmd[VFE1].intf_cmd1 = 0xFFFFFFFF; memset(ispif->sof_count, 0, sizeof(ispif->sof_count)); ispif->csid_version = csid_version; if (ispif->csid_version >= CSID_VERSION_V3) { if (!ispif->clk_mux_mem || !ispif->clk_mux_io) { pr_err("%s csi clk mux mem %p io %p\n", __func__, ispif->clk_mux_mem, ispif->clk_mux_io); rc = -ENOMEM; return rc; } ispif->clk_mux_base = ioremap(ispif->clk_mux_mem->start, resource_size(ispif->clk_mux_mem)); if (!ispif->clk_mux_base) { pr_err("%s: clk_mux_mem ioremap failed\n", __func__); rc = -ENOMEM; return rc; } } ispif->base = ioremap(ispif->mem->start, resource_size(ispif->mem)); if (!ispif->base) { rc = -ENOMEM; pr_err("%s: nomem\n", __func__); goto end; } rc = request_irq(ispif->irq->start, msm_io_ispif_irq, IRQF_TRIGGER_RISING, "ispif", ispif); if (rc) { pr_err("%s: request_irq error = %d\n", __func__, rc); goto error_irq; } rc = msm_ispif_clk_ahb_enable(ispif, 1); if (rc) { pr_err("%s: ahb_clk enable failed", __func__); goto error_ahb; } rc = msm_ispif_reset(ispif); if (rc == 0) { ispif->ispif_state = ISPIF_POWER_UP; pr_err("%s: power up done\n", __func__); goto end; } error_ahb: free_irq(ispif->irq->start, ispif); error_irq: iounmap(ispif->base); end: return rc; }