• Home
  • Raw
  • Download

Lines Matching refs:csi2

28 			   struct isp_csi2_device *csi2, u8 enable)  in csi2_if_enable()  argument
30 struct isp_csi2_ctrl_cfg *currctrl = &csi2->ctrl; in csi2_if_enable()
32 isp_reg_clr_set(isp, csi2->regs1, ISPCSI2_CTRL, ISPCSI2_CTRL_IF_EN, in csi2_if_enable()
44 struct isp_csi2_device *csi2, in csi2_recv_config() argument
49 reg = isp_reg_readl(isp, csi2->regs1, ISPCSI2_CTRL); in csi2_recv_config()
74 isp_reg_writel(isp, reg, csi2->regs1, ISPCSI2_CTRL); in csi2_recv_config()
165 static u16 csi2_ctx_map_format(struct isp_csi2_device *csi2) in csi2_ctx_map_format() argument
167 const struct v4l2_mbus_framefmt *fmt = &csi2->formats[CSI2_PAD_SINK]; in csi2_ctx_map_format()
192 if (!(csi2->output & CSI2_OUTPUT_CCDC) && in csi2_ctx_map_format()
193 !(csi2->output & CSI2_OUTPUT_MEMORY)) { in csi2_ctx_map_format()
201 destidx = csi2->frame_skip ? 0 : !!(csi2->output & CSI2_OUTPUT_CCDC); in csi2_ctx_map_format()
202 is_3630 = csi2->isp->revision == ISP_REVISION_15_0; in csi2_ctx_map_format()
204 return __csi2_fmt_map[fmtidx][destidx][csi2->dpcm_decompress][is_3630]; in csi2_ctx_map_format()
217 static void csi2_set_outaddr(struct isp_csi2_device *csi2, u32 addr) in csi2_set_outaddr() argument
219 struct isp_device *isp = csi2->isp; in csi2_set_outaddr()
220 struct isp_csi2_ctx_cfg *ctx = &csi2->contexts[0]; in csi2_set_outaddr()
225 csi2->regs1, ISPCSI2_CTX_DAT_PING_ADDR(ctx->ctxnum)); in csi2_set_outaddr()
227 csi2->regs1, ISPCSI2_CTX_DAT_PONG_ADDR(ctx->ctxnum)); in csi2_set_outaddr()
248 struct isp_csi2_device *csi2, u8 ctxnum, u8 enable) in csi2_ctx_enable() argument
250 struct isp_csi2_ctx_cfg *ctx = &csi2->contexts[ctxnum]; in csi2_ctx_enable()
254 reg = isp_reg_readl(isp, csi2->regs1, ISPCSI2_CTX_CTRL1(ctxnum)); in csi2_ctx_enable()
257 if (csi2->frame_skip) in csi2_ctx_enable()
258 skip = csi2->frame_skip; in csi2_ctx_enable()
259 else if (csi2->output & CSI2_OUTPUT_MEMORY) in csi2_ctx_enable()
270 isp_reg_writel(isp, reg, csi2->regs1, ISPCSI2_CTX_CTRL1(ctxnum)); in csi2_ctx_enable()
280 struct isp_csi2_device *csi2, in csi2_ctx_config() argument
286 reg = isp_reg_readl(isp, csi2->regs1, ISPCSI2_CTX_CTRL1(ctx->ctxnum)); in csi2_ctx_config()
303 isp_reg_writel(isp, reg, csi2->regs1, ISPCSI2_CTX_CTRL1(ctx->ctxnum)); in csi2_ctx_config()
306 reg = isp_reg_readl(isp, csi2->regs1, ISPCSI2_CTX_CTRL2(ctx->ctxnum)); in csi2_ctx_config()
326 isp_reg_writel(isp, reg, csi2->regs1, ISPCSI2_CTX_CTRL2(ctx->ctxnum)); in csi2_ctx_config()
329 reg = isp_reg_readl(isp, csi2->regs1, ISPCSI2_CTX_CTRL3(ctx->ctxnum)); in csi2_ctx_config()
333 isp_reg_writel(isp, reg, csi2->regs1, ISPCSI2_CTX_CTRL3(ctx->ctxnum)); in csi2_ctx_config()
336 reg = isp_reg_readl(isp, csi2->regs1, in csi2_ctx_config()
340 isp_reg_writel(isp, reg, csi2->regs1, in csi2_ctx_config()
344 csi2->regs1, ISPCSI2_CTX_DAT_PING_ADDR(ctx->ctxnum)); in csi2_ctx_config()
347 csi2->regs1, ISPCSI2_CTX_DAT_PONG_ADDR(ctx->ctxnum)); in csi2_ctx_config()
355 struct isp_csi2_device *csi2, in csi2_timing_config() argument
360 reg = isp_reg_readl(isp, csi2->regs1, ISPCSI2_TIMING); in csi2_timing_config()
381 isp_reg_writel(isp, reg, csi2->regs1, ISPCSI2_TIMING); in csi2_timing_config()
389 struct isp_csi2_device *csi2, int enable) in csi2_irq_ctx_set() argument
394 isp_reg_writel(isp, ISPCSI2_CTX_IRQSTATUS_FE_IRQ, csi2->regs1, in csi2_irq_ctx_set()
397 isp_reg_set(isp, csi2->regs1, ISPCSI2_CTX_IRQENABLE(i), in csi2_irq_ctx_set()
400 isp_reg_clr(isp, csi2->regs1, ISPCSI2_CTX_IRQENABLE(i), in csi2_irq_ctx_set()
410 struct isp_csi2_device *csi2, int enable) in csi2_irq_complexio1_set() argument
440 isp_reg_writel(isp, reg, csi2->regs1, ISPCSI2_PHY_IRQSTATUS); in csi2_irq_complexio1_set()
442 reg |= isp_reg_readl(isp, csi2->regs1, ISPCSI2_PHY_IRQENABLE); in csi2_irq_complexio1_set()
445 isp_reg_writel(isp, reg, csi2->regs1, ISPCSI2_PHY_IRQENABLE); in csi2_irq_complexio1_set()
453 struct isp_csi2_device *csi2, int enable) in csi2_irq_status_set() argument
464 isp_reg_writel(isp, reg, csi2->regs1, ISPCSI2_IRQSTATUS); in csi2_irq_status_set()
466 reg |= isp_reg_readl(isp, csi2->regs1, ISPCSI2_IRQENABLE); in csi2_irq_status_set()
470 isp_reg_writel(isp, reg, csi2->regs1, ISPCSI2_IRQENABLE); in csi2_irq_status_set()
480 int omap3isp_csi2_reset(struct isp_csi2_device *csi2) in omap3isp_csi2_reset() argument
482 struct isp_device *isp = csi2->isp; in omap3isp_csi2_reset()
487 if (!csi2->available) in omap3isp_csi2_reset()
490 if (csi2->phy->entity) in omap3isp_csi2_reset()
493 isp_reg_set(isp, csi2->regs1, ISPCSI2_SYSCONFIG, in omap3isp_csi2_reset()
497 reg = isp_reg_readl(isp, csi2->regs1, ISPCSI2_SYSSTATUS) & in omap3isp_csi2_reset()
512 isp_reg_set(isp, csi2->regs1, ISPCSI2_PHY_CFG, in omap3isp_csi2_reset()
517 reg = isp_reg_readl(isp, csi2->phy->phy_regs, ISPCSIPHY_REG1) in omap3isp_csi2_reset()
531 isp_reg_clr_set(isp, csi2->regs1, ISPCSI2_SYSCONFIG, in omap3isp_csi2_reset()
538 isp_reg_clr_set(isp, csi2->regs1, ISPCSI2_SYSCONFIG, in omap3isp_csi2_reset()
546 static int csi2_configure(struct isp_csi2_device *csi2) in csi2_configure() argument
548 struct isp_pipeline *pipe = to_isp_pipeline(&csi2->subdev.entity); in csi2_configure()
550 struct isp_device *isp = csi2->isp; in csi2_configure()
551 struct isp_csi2_timing_cfg *timing = &csi2->timing[0]; in csi2_configure()
561 if (csi2->contexts[0].enabled || csi2->ctrl.if_enable) in csi2_configure()
564 pad = media_entity_remote_pad(&csi2->pads[CSI2_PAD_SINK]); in csi2_configure()
568 csi2->frame_skip = 0; in csi2_configure()
569 v4l2_subdev_call(sensor, sensor, g_skip_frames, &csi2->frame_skip); in csi2_configure()
571 csi2->ctrl.vp_out_ctrl = in csi2_configure()
576 csi2->ctrl.vp_out_ctrl); in csi2_configure()
577 csi2->ctrl.frame_mode = ISP_CSI2_FRAME_IMMEDIATE; in csi2_configure()
578 csi2->ctrl.ecc_enable = buscfg->bus.csi2.crc; in csi2_configure()
591 if (csi2->formats[CSI2_PAD_SINK].code != in csi2_configure()
592 csi2->formats[CSI2_PAD_SOURCE].code) in csi2_configure()
593 csi2->dpcm_decompress = true; in csi2_configure()
595 csi2->dpcm_decompress = false; in csi2_configure()
597 csi2->contexts[0].format_id = csi2_ctx_map_format(csi2); in csi2_configure()
599 if (csi2->video_out.bpl_padding == 0) in csi2_configure()
600 csi2->contexts[0].data_offset = 0; in csi2_configure()
602 csi2->contexts[0].data_offset = csi2->video_out.bpl_value; in csi2_configure()
611 csi2->contexts[0].eof_enabled = 1; in csi2_configure()
612 csi2->contexts[0].eol_enabled = 1; in csi2_configure()
614 csi2_irq_complexio1_set(isp, csi2, 1); in csi2_configure()
615 csi2_irq_ctx_set(isp, csi2, 1); in csi2_configure()
616 csi2_irq_status_set(isp, csi2, 1); in csi2_configure()
619 csi2_timing_config(isp, csi2, timing); in csi2_configure()
620 csi2_recv_config(isp, csi2, &csi2->ctrl); in csi2_configure()
621 csi2_ctx_config(isp, csi2, &csi2->contexts[0]); in csi2_configure()
633 static void csi2_print_status(struct isp_csi2_device *csi2) in csi2_print_status() argument
635 struct isp_device *isp = csi2->isp; in csi2_print_status()
637 if (!csi2->available) in csi2_print_status()
642 CSI2_PRINT_REGISTER(isp, csi2->regs1, SYSCONFIG); in csi2_print_status()
643 CSI2_PRINT_REGISTER(isp, csi2->regs1, SYSSTATUS); in csi2_print_status()
644 CSI2_PRINT_REGISTER(isp, csi2->regs1, IRQENABLE); in csi2_print_status()
645 CSI2_PRINT_REGISTER(isp, csi2->regs1, IRQSTATUS); in csi2_print_status()
646 CSI2_PRINT_REGISTER(isp, csi2->regs1, CTRL); in csi2_print_status()
647 CSI2_PRINT_REGISTER(isp, csi2->regs1, DBG_H); in csi2_print_status()
648 CSI2_PRINT_REGISTER(isp, csi2->regs1, GNQ); in csi2_print_status()
649 CSI2_PRINT_REGISTER(isp, csi2->regs1, PHY_CFG); in csi2_print_status()
650 CSI2_PRINT_REGISTER(isp, csi2->regs1, PHY_IRQSTATUS); in csi2_print_status()
651 CSI2_PRINT_REGISTER(isp, csi2->regs1, SHORT_PACKET); in csi2_print_status()
652 CSI2_PRINT_REGISTER(isp, csi2->regs1, PHY_IRQENABLE); in csi2_print_status()
653 CSI2_PRINT_REGISTER(isp, csi2->regs1, DBG_P); in csi2_print_status()
654 CSI2_PRINT_REGISTER(isp, csi2->regs1, TIMING); in csi2_print_status()
655 CSI2_PRINT_REGISTER(isp, csi2->regs1, CTX_CTRL1(0)); in csi2_print_status()
656 CSI2_PRINT_REGISTER(isp, csi2->regs1, CTX_CTRL2(0)); in csi2_print_status()
657 CSI2_PRINT_REGISTER(isp, csi2->regs1, CTX_DAT_OFST(0)); in csi2_print_status()
658 CSI2_PRINT_REGISTER(isp, csi2->regs1, CTX_DAT_PING_ADDR(0)); in csi2_print_status()
659 CSI2_PRINT_REGISTER(isp, csi2->regs1, CTX_DAT_PONG_ADDR(0)); in csi2_print_status()
660 CSI2_PRINT_REGISTER(isp, csi2->regs1, CTX_IRQENABLE(0)); in csi2_print_status()
661 CSI2_PRINT_REGISTER(isp, csi2->regs1, CTX_IRQSTATUS(0)); in csi2_print_status()
662 CSI2_PRINT_REGISTER(isp, csi2->regs1, CTX_CTRL3(0)); in csi2_print_status()
675 static void csi2_isr_buffer(struct isp_csi2_device *csi2) in csi2_isr_buffer() argument
677 struct isp_device *isp = csi2->isp; in csi2_isr_buffer()
680 csi2_ctx_enable(isp, csi2, 0, 0); in csi2_isr_buffer()
682 buffer = omap3isp_video_buffer_next(&csi2->video_out); in csi2_isr_buffer()
691 csi2_set_outaddr(csi2, buffer->dma); in csi2_isr_buffer()
692 csi2_ctx_enable(isp, csi2, 0, 1); in csi2_isr_buffer()
695 static void csi2_isr_ctx(struct isp_csi2_device *csi2, in csi2_isr_ctx() argument
698 struct isp_device *isp = csi2->isp; in csi2_isr_ctx()
702 status = isp_reg_readl(isp, csi2->regs1, ISPCSI2_CTX_IRQSTATUS(n)); in csi2_isr_ctx()
703 isp_reg_writel(isp, status, csi2->regs1, ISPCSI2_CTX_IRQSTATUS(n)); in csi2_isr_ctx()
718 if (csi2->frame_skip) { in csi2_isr_ctx()
719 csi2->frame_skip--; in csi2_isr_ctx()
720 if (csi2->frame_skip == 0) { in csi2_isr_ctx()
721 ctx->format_id = csi2_ctx_map_format(csi2); in csi2_isr_ctx()
722 csi2_ctx_config(isp, csi2, ctx); in csi2_isr_ctx()
723 csi2_ctx_enable(isp, csi2, n, 1); in csi2_isr_ctx()
728 if (csi2->output & CSI2_OUTPUT_MEMORY) in csi2_isr_ctx()
729 csi2_isr_buffer(csi2); in csi2_isr_ctx()
735 void omap3isp_csi2_isr(struct isp_csi2_device *csi2) in omap3isp_csi2_isr() argument
737 struct isp_pipeline *pipe = to_isp_pipeline(&csi2->subdev.entity); in omap3isp_csi2_isr()
739 struct isp_device *isp = csi2->isp; in omap3isp_csi2_isr()
741 if (!csi2->available) in omap3isp_csi2_isr()
744 csi2_irqstatus = isp_reg_readl(isp, csi2->regs1, ISPCSI2_IRQSTATUS); in omap3isp_csi2_isr()
745 isp_reg_writel(isp, csi2_irqstatus, csi2->regs1, ISPCSI2_IRQSTATUS); in omap3isp_csi2_isr()
749 cpxio1_irqstatus = isp_reg_readl(isp, csi2->regs1, in omap3isp_csi2_isr()
752 csi2->regs1, ISPCSI2_PHY_IRQSTATUS); in omap3isp_csi2_isr()
778 if (omap3isp_module_sync_is_stopping(&csi2->wait, &csi2->stopping)) in omap3isp_csi2_isr()
783 csi2_isr_ctx(csi2, &csi2->contexts[0]); in omap3isp_csi2_isr()
801 struct isp_csi2_device *csi2 = &isp->isp_csi2a; in csi2_queue() local
803 csi2_set_outaddr(csi2, buffer->dma); in csi2_queue()
811 if (csi2->video_out.dmaqueue_flags & ISP_VIDEO_DMAQUEUE_UNDERRUN) { in csi2_queue()
813 csi2_if_enable(isp, csi2, 1); in csi2_queue()
814 csi2_ctx_enable(isp, csi2, 0, 1); in csi2_queue()
815 isp_video_dmaqueue_flags_clr(&csi2->video_out); in csi2_queue()
830 __csi2_get_format(struct isp_csi2_device *csi2, struct v4l2_subdev_pad_config *cfg, in __csi2_get_format() argument
834 return v4l2_subdev_get_try_format(&csi2->subdev, cfg, pad); in __csi2_get_format()
836 return &csi2->formats[pad]; in __csi2_get_format()
840 csi2_try_format(struct isp_csi2_device *csi2, struct v4l2_subdev_pad_config *cfg, in csi2_try_format() argument
870 format = __csi2_get_format(csi2, cfg, CSI2_PAD_SINK, which); in csi2_try_format()
899 struct isp_csi2_device *csi2 = v4l2_get_subdevdata(sd); in csi2_enum_mbus_code() local
909 format = __csi2_get_format(csi2, cfg, CSI2_PAD_SINK, in csi2_enum_mbus_code()
936 struct isp_csi2_device *csi2 = v4l2_get_subdevdata(sd); in csi2_enum_frame_size() local
945 csi2_try_format(csi2, cfg, fse->pad, &format, fse->which); in csi2_enum_frame_size()
955 csi2_try_format(csi2, cfg, fse->pad, &format, fse->which); in csi2_enum_frame_size()
972 struct isp_csi2_device *csi2 = v4l2_get_subdevdata(sd); in csi2_get_format() local
975 format = __csi2_get_format(csi2, cfg, fmt->pad, fmt->which); in csi2_get_format()
993 struct isp_csi2_device *csi2 = v4l2_get_subdevdata(sd); in csi2_set_format() local
996 format = __csi2_get_format(csi2, cfg, fmt->pad, fmt->which); in csi2_set_format()
1000 csi2_try_format(csi2, cfg, fmt->pad, &fmt->format, fmt->which); in csi2_set_format()
1005 format = __csi2_get_format(csi2, cfg, CSI2_PAD_SOURCE, in csi2_set_format()
1008 csi2_try_format(csi2, cfg, CSI2_PAD_SOURCE, format, fmt->which); in csi2_set_format()
1047 struct isp_csi2_device *csi2 = v4l2_get_subdevdata(sd); in csi2_set_stream() local
1048 struct isp_device *isp = csi2->isp; in csi2_set_stream()
1049 struct isp_video *video_out = &csi2->video_out; in csi2_set_stream()
1053 if (omap3isp_csiphy_acquire(csi2->phy, &sd->entity) < 0) in csi2_set_stream()
1055 if (csi2->output & CSI2_OUTPUT_MEMORY) in csi2_set_stream()
1057 csi2_configure(csi2); in csi2_set_stream()
1058 csi2_print_status(csi2); in csi2_set_stream()
1066 if (csi2->output & CSI2_OUTPUT_MEMORY && in csi2_set_stream()
1070 atomic_set(&csi2->stopping, 0); in csi2_set_stream()
1071 csi2_ctx_enable(isp, csi2, 0, 1); in csi2_set_stream()
1072 csi2_if_enable(isp, csi2, 1); in csi2_set_stream()
1077 if (csi2->state == ISP_PIPELINE_STREAM_STOPPED) in csi2_set_stream()
1079 if (omap3isp_module_sync_idle(&sd->entity, &csi2->wait, in csi2_set_stream()
1080 &csi2->stopping)) in csi2_set_stream()
1083 csi2_ctx_enable(isp, csi2, 0, 0); in csi2_set_stream()
1084 csi2_if_enable(isp, csi2, 0); in csi2_set_stream()
1085 csi2_irq_ctx_set(isp, csi2, 0); in csi2_set_stream()
1086 omap3isp_csiphy_release(csi2->phy); in csi2_set_stream()
1092 csi2->state = enable; in csi2_set_stream()
1137 struct isp_csi2_device *csi2 = v4l2_get_subdevdata(sd); in csi2_link_setup() local
1138 struct isp_csi2_ctrl_cfg *ctrl = &csi2->ctrl; in csi2_link_setup()
1153 if (csi2->output & ~CSI2_OUTPUT_MEMORY) in csi2_link_setup()
1155 csi2->output |= CSI2_OUTPUT_MEMORY; in csi2_link_setup()
1157 csi2->output &= ~CSI2_OUTPUT_MEMORY; in csi2_link_setup()
1163 if (csi2->output & ~CSI2_OUTPUT_CCDC) in csi2_link_setup()
1165 csi2->output |= CSI2_OUTPUT_CCDC; in csi2_link_setup()
1167 csi2->output &= ~CSI2_OUTPUT_CCDC; in csi2_link_setup()
1177 (csi2->output & CSI2_OUTPUT_MEMORY) ? false : true; in csi2_link_setup()
1178 ctrl->vp_clk_enable = !!(csi2->output & CSI2_OUTPUT_CCDC); in csi2_link_setup()
1189 void omap3isp_csi2_unregister_entities(struct isp_csi2_device *csi2) in omap3isp_csi2_unregister_entities() argument
1191 v4l2_device_unregister_subdev(&csi2->subdev); in omap3isp_csi2_unregister_entities()
1192 omap3isp_video_unregister(&csi2->video_out); in omap3isp_csi2_unregister_entities()
1195 int omap3isp_csi2_register_entities(struct isp_csi2_device *csi2, in omap3isp_csi2_register_entities() argument
1201 csi2->subdev.dev = vdev->mdev->dev; in omap3isp_csi2_register_entities()
1202 ret = v4l2_device_register_subdev(vdev, &csi2->subdev); in omap3isp_csi2_register_entities()
1206 ret = omap3isp_video_register(&csi2->video_out, vdev); in omap3isp_csi2_register_entities()
1213 omap3isp_csi2_unregister_entities(csi2); in omap3isp_csi2_register_entities()
1226 static int csi2_init_entities(struct isp_csi2_device *csi2) in csi2_init_entities() argument
1228 struct v4l2_subdev *sd = &csi2->subdev; in csi2_init_entities()
1229 struct media_pad *pads = csi2->pads; in csi2_init_entities()
1238 v4l2_set_subdevdata(sd, csi2); in csi2_init_entities()
1253 csi2->video_out.type = V4L2_BUF_TYPE_VIDEO_CAPTURE; in csi2_init_entities()
1254 csi2->video_out.ops = &csi2_ispvideo_ops; in csi2_init_entities()
1255 csi2->video_out.bpl_alignment = 32; in csi2_init_entities()
1256 csi2->video_out.bpl_zero_padding = 1; in csi2_init_entities()
1257 csi2->video_out.bpl_max = 0x1ffe0; in csi2_init_entities()
1258 csi2->video_out.isp = csi2->isp; in csi2_init_entities()
1259 csi2->video_out.capture_mem = PAGE_ALIGN(4096 * 4096) * 3; in csi2_init_entities()
1261 ret = omap3isp_video_init(&csi2->video_out, "CSI2a"); in csi2_init_entities()
1268 media_entity_cleanup(&csi2->subdev.entity); in csi2_init_entities()