Lines Matching refs:isp

21 u32 c3_isp_read(struct c3_isp_device *isp, u32 reg)  in c3_isp_read()  argument
23 return readl(isp->base + reg); in c3_isp_read()
26 void c3_isp_write(struct c3_isp_device *isp, u32 reg, u32 val) in c3_isp_write() argument
28 writel(val, isp->base + reg); in c3_isp_write()
31 void c3_isp_update_bits(struct c3_isp_device *isp, u32 reg, u32 mask, u32 val) in c3_isp_update_bits() argument
35 orig = c3_isp_read(isp, reg); in c3_isp_update_bits()
41 c3_isp_write(isp, reg, tmp); in c3_isp_update_bits()
47 struct c3_isp_device *isp = dev_get_drvdata(dev); in c3_isp_runtime_suspend() local
49 clk_bulk_disable_unprepare(isp->info->clock_num, isp->clks); in c3_isp_runtime_suspend()
57 struct c3_isp_device *isp = dev_get_drvdata(dev); in c3_isp_runtime_resume() local
59 return clk_bulk_prepare_enable(isp->info->clock_num, isp->clks); in c3_isp_runtime_resume()
72 struct c3_isp_device *isp = dev; in c3_isp_irq_handler() local
76 status = c3_isp_read(isp, ISP_TOP_RO_IRQ_STAT); in c3_isp_irq_handler()
77 c3_isp_write(isp, ISP_TOP_IRQ_CLR, status); in c3_isp_irq_handler()
80 c3_isp_stats_isr(isp); in c3_isp_irq_handler()
81 c3_isp_params_isr(isp); in c3_isp_irq_handler()
82 c3_isp_captures_isr(isp); in c3_isp_irq_handler()
83 isp->frm_sequence++; in c3_isp_irq_handler()
87 c3_isp_core_queue_sof(isp); in c3_isp_irq_handler()
97 struct c3_isp_device *isp = in c3_isp_notify_bound() local
100 &isp->core.sd.entity.pads[C3_ISP_CORE_PAD_SINK_VIDEO]; in c3_isp_notify_bound()
108 struct c3_isp_device *isp = in c3_isp_notify_complete() local
111 return v4l2_device_register_subdev_nodes(&isp->v4l2_dev); in c3_isp_notify_complete()
119 static int c3_isp_async_nf_register(struct c3_isp_device *isp) in c3_isp_async_nf_register() argument
125 v4l2_async_nf_init(&isp->notifier, &isp->v4l2_dev); in c3_isp_async_nf_register()
127 ep = fwnode_graph_get_endpoint_by_id(dev_fwnode(isp->dev), 0, 0, in c3_isp_async_nf_register()
132 asc = v4l2_async_nf_add_fwnode_remote(&isp->notifier, ep, in c3_isp_async_nf_register()
139 isp->notifier.ops = &c3_isp_notify_ops; in c3_isp_async_nf_register()
140 ret = v4l2_async_nf_register(&isp->notifier); in c3_isp_async_nf_register()
142 v4l2_async_nf_cleanup(&isp->notifier); in c3_isp_async_nf_register()
147 static void c3_isp_async_nf_unregister(struct c3_isp_device *isp) in c3_isp_async_nf_unregister() argument
149 v4l2_async_nf_unregister(&isp->notifier); in c3_isp_async_nf_unregister()
150 v4l2_async_nf_cleanup(&isp->notifier); in c3_isp_async_nf_unregister()
153 static int c3_isp_media_register(struct c3_isp_device *isp) in c3_isp_media_register() argument
155 struct media_device *media_dev = &isp->media_dev; in c3_isp_media_register()
156 struct v4l2_device *v4l2_dev = &isp->v4l2_dev; in c3_isp_media_register()
161 media_dev->dev = isp->dev; in c3_isp_media_register()
169 ret = v4l2_device_register(isp->dev, v4l2_dev); in c3_isp_media_register()
173 ret = media_device_register(&isp->media_dev); in c3_isp_media_register()
175 dev_err(isp->dev, "Failed to register media device: %d\n", ret); in c3_isp_media_register()
182 v4l2_device_unregister(&isp->v4l2_dev); in c3_isp_media_register()
188 static void c3_isp_media_unregister(struct c3_isp_device *isp) in c3_isp_media_unregister() argument
190 media_device_unregister(&isp->media_dev); in c3_isp_media_unregister()
191 v4l2_device_unregister(&isp->v4l2_dev); in c3_isp_media_unregister()
192 media_device_cleanup(&isp->media_dev); in c3_isp_media_unregister()
195 static void c3_isp_remove_links(struct c3_isp_device *isp) in c3_isp_remove_links() argument
199 media_entity_remove_links(&isp->core.sd.entity); in c3_isp_remove_links()
202 media_entity_remove_links(&isp->resizers[i].sd.entity); in c3_isp_remove_links()
205 media_entity_remove_links(&isp->caps[i].vdev.entity); in c3_isp_remove_links()
208 static int c3_isp_create_links(struct c3_isp_device *isp) in c3_isp_create_links() argument
214 ret = media_create_pad_link(&isp->resizers[i].sd.entity, in c3_isp_create_links()
216 &isp->caps[i].vdev.entity, 0, in c3_isp_create_links()
220 dev_err(isp->dev, in c3_isp_create_links()
225 ret = media_create_pad_link(&isp->core.sd.entity, in c3_isp_create_links()
227 &isp->resizers[i].sd.entity, in c3_isp_create_links()
231 dev_err(isp->dev, in c3_isp_create_links()
237 ret = media_create_pad_link(&isp->core.sd.entity, in c3_isp_create_links()
239 &isp->stats.vdev.entity, in c3_isp_create_links()
242 dev_err(isp->dev, "Failed to link core and stats\n"); in c3_isp_create_links()
246 ret = media_create_pad_link(&isp->params.vdev.entity, 0, in c3_isp_create_links()
247 &isp->core.sd.entity, in c3_isp_create_links()
251 dev_err(isp->dev, "Failed to link params and core\n"); in c3_isp_create_links()
258 c3_isp_remove_links(isp); in c3_isp_create_links()
262 static int c3_isp_videos_register(struct c3_isp_device *isp) in c3_isp_videos_register() argument
266 ret = c3_isp_captures_register(isp); in c3_isp_videos_register()
270 ret = c3_isp_stats_register(isp); in c3_isp_videos_register()
274 ret = c3_isp_params_register(isp); in c3_isp_videos_register()
278 ret = c3_isp_create_links(isp); in c3_isp_videos_register()
285 c3_isp_params_unregister(isp); in c3_isp_videos_register()
287 c3_isp_stats_unregister(isp); in c3_isp_videos_register()
289 c3_isp_captures_unregister(isp); in c3_isp_videos_register()
293 static void c3_isp_videos_unregister(struct c3_isp_device *isp) in c3_isp_videos_unregister() argument
295 c3_isp_remove_links(isp); in c3_isp_videos_unregister()
296 c3_isp_params_unregister(isp); in c3_isp_videos_unregister()
297 c3_isp_stats_unregister(isp); in c3_isp_videos_unregister()
298 c3_isp_captures_unregister(isp); in c3_isp_videos_unregister()
301 static int c3_isp_get_clocks(struct c3_isp_device *isp) in c3_isp_get_clocks() argument
303 const struct c3_isp_info *info = isp->info; in c3_isp_get_clocks()
306 isp->clks[i].id = info->clocks[i]; in c3_isp_get_clocks()
308 return devm_clk_bulk_get(isp->dev, info->clock_num, isp->clks); in c3_isp_get_clocks()
314 struct c3_isp_device *isp; in c3_isp_probe() local
318 isp = devm_kzalloc(dev, sizeof(*isp), GFP_KERNEL); in c3_isp_probe()
319 if (!isp) in c3_isp_probe()
322 isp->info = of_device_get_match_data(dev); in c3_isp_probe()
323 isp->dev = dev; in c3_isp_probe()
325 isp->base = devm_platform_ioremap_resource_byname(pdev, "isp"); in c3_isp_probe()
326 if (IS_ERR(isp->base)) in c3_isp_probe()
327 return dev_err_probe(dev, PTR_ERR(isp->base), in c3_isp_probe()
334 ret = c3_isp_get_clocks(isp); in c3_isp_probe()
338 platform_set_drvdata(pdev, isp); in c3_isp_probe()
342 ret = c3_isp_media_register(isp); in c3_isp_probe()
346 ret = c3_isp_core_register(isp); in c3_isp_probe()
350 ret = c3_isp_resizers_register(isp); in c3_isp_probe()
354 ret = c3_isp_async_nf_register(isp); in c3_isp_probe()
360 dev_driver_string(dev), isp); in c3_isp_probe()
364 ret = c3_isp_videos_register(isp); in c3_isp_probe()
371 c3_isp_async_nf_unregister(isp); in c3_isp_probe()
373 c3_isp_resizers_unregister(isp); in c3_isp_probe()
375 c3_isp_core_unregister(isp); in c3_isp_probe()
377 c3_isp_media_unregister(isp); in c3_isp_probe()
385 struct c3_isp_device *isp = platform_get_drvdata(pdev); in c3_isp_remove() local
387 c3_isp_videos_unregister(isp); in c3_isp_remove()
388 c3_isp_async_nf_unregister(isp); in c3_isp_remove()
389 c3_isp_core_unregister(isp); in c3_isp_remove()
390 c3_isp_resizers_unregister(isp); in c3_isp_remove()
391 c3_isp_media_unregister(isp); in c3_isp_remove()
392 pm_runtime_disable(isp->dev); in c3_isp_remove()