Lines Matching refs:mcam
39 struct mcam_camera mcam; member
45 static inline struct mmp_camera *mcam_to_cam(struct mcam_camera *mcam) in mcam_to_cam() argument
47 return container_of(mcam, struct mmp_camera, mcam); in mcam_to_cam()
59 static void mmpcam_calc_dphy(struct mcam_camera *mcam) in mmpcam_calc_dphy() argument
61 struct mmp_camera *cam = mcam_to_cam(mcam); in mmpcam_calc_dphy()
149 struct mcam_camera *mcam = data; in mmpcam_irq() local
152 spin_lock(&mcam->dev_lock); in mmpcam_irq()
153 irqs = mcam_reg_read(mcam, REG_IRQSTAT); in mmpcam_irq()
154 handled = mccic_irq(mcam, irqs); in mmpcam_irq()
155 spin_unlock(&mcam->dev_lock); in mmpcam_irq()
159 static void mcam_init_clk(struct mcam_camera *mcam) in mcam_init_clk() argument
168 mcam->clk[i] = devm_clk_get(mcam->dev, mcam_clks[i]); in mcam_init_clk()
169 if (IS_ERR(mcam->clk[i])) in mcam_init_clk()
170 dev_warn(mcam->dev, "Could not get clk: %s\n", in mcam_init_clk()
179 struct mcam_camera *mcam; in mmpcam_probe() local
192 mcam = &cam->mcam; in mmpcam_probe()
193 mcam->calc_dphy = mmpcam_calc_dphy; in mmpcam_probe()
194 mcam->dev = &pdev->dev; in mmpcam_probe()
197 mcam->mclk_src = pdata->mclk_src; in mmpcam_probe()
198 mcam->mclk_div = pdata->mclk_div; in mmpcam_probe()
199 mcam->bus_type = pdata->bus_type; in mmpcam_probe()
200 mcam->dphy = pdata->dphy; in mmpcam_probe()
201 mcam->lane = pdata->lane; in mmpcam_probe()
209 mcam->mclk_src = 3; in mmpcam_probe()
210 mcam->mclk_div = 2; in mmpcam_probe()
212 if (mcam->bus_type == V4L2_MBUS_CSI2_DPHY) { in mmpcam_probe()
213 cam->mipi_clk = devm_clk_get(mcam->dev, "mipi"); in mmpcam_probe()
214 if ((IS_ERR(cam->mipi_clk) && mcam->dphy[2] == 0)) in mmpcam_probe()
217 mcam->mipi_enabled = false; in mmpcam_probe()
218 mcam->chip_id = MCAM_ARMADA610; in mmpcam_probe()
219 mcam->buffer_mode = B_DMA_sg; in mmpcam_probe()
220 strscpy(mcam->bus_info, "platform:mmp-camera", sizeof(mcam->bus_info)); in mmpcam_probe()
221 spin_lock_init(&mcam->dev_lock); in mmpcam_probe()
226 mcam->regs = devm_ioremap_resource(&pdev->dev, res); in mmpcam_probe()
227 if (IS_ERR(mcam->regs)) in mmpcam_probe()
228 return PTR_ERR(mcam->regs); in mmpcam_probe()
229 mcam->regs_size = resource_size(res); in mmpcam_probe()
231 mcam_init_clk(mcam); in mmpcam_probe()
241 mcam->asd.match_type = V4L2_ASYNC_MATCH_FWNODE; in mmpcam_probe()
242 mcam->asd.match.fwnode = fwnode_graph_get_remote_port_parent(ep); in mmpcam_probe()
249 ret = mccic_register(mcam); in mmpcam_probe()
257 mcam->mclk); in mmpcam_probe()
274 "mmp-camera", mcam); in mmpcam_probe()
281 fwnode_handle_put(mcam->asd.match.fwnode); in mmpcam_probe()
282 mccic_shutdown(mcam); in mmpcam_probe()
290 struct mcam_camera *mcam = &cam->mcam; in mmpcam_remove() local
292 mccic_shutdown(mcam); in mmpcam_remove()
293 pm_runtime_force_suspend(mcam->dev); in mmpcam_remove()
314 struct mcam_camera *mcam = &cam->mcam; in mmpcam_runtime_resume() local
318 if (!IS_ERR(mcam->clk[i])) in mmpcam_runtime_resume()
319 clk_prepare_enable(mcam->clk[i]); in mmpcam_runtime_resume()
328 struct mcam_camera *mcam = &cam->mcam; in mmpcam_runtime_suspend() local
332 if (!IS_ERR(mcam->clk[i])) in mmpcam_runtime_suspend()
333 clk_disable_unprepare(mcam->clk[i]); in mmpcam_runtime_suspend()
344 mccic_suspend(&cam->mcam); in mmpcam_suspend()
353 return mccic_resume(&cam->mcam); in mmpcam_resume()