Lines Matching full:csi

32 /* CSI Register Offsets */
55 /* CSI Register Fields */
116 /* MIPI CSI-2 data types */
133 * Bitfield of CSI bus signal polarities and modes.
153 * Enumeration of CSI data bus widths.
164 * Enumeration of CSI clock modes.
177 static inline u32 ipu_csi_read(struct ipu_csi *csi, unsigned offset) in ipu_csi_read() argument
179 return readl(csi->base + offset); in ipu_csi_read()
182 static inline void ipu_csi_write(struct ipu_csi *csi, u32 value, in ipu_csi_write() argument
185 writel(value, csi->base + offset); in ipu_csi_write()
189 * Find the CSI data format and data width for the given V4L2 media
317 * Fill a CSI bus config struct from mbus_config and mbus_framefmt.
359 * MIPI CSI-2 requires non gated clock mode, all other in fill_csi_bus_cfg()
360 * parameters are not applicable for MIPI CSI-2 bus. in fill_csi_bus_cfg()
373 ipu_csi_set_bt_interlaced_codes(struct ipu_csi *csi, in ipu_csi_set_bt_interlaced_codes() argument
386 * Write the H-V-F codes the CSI will match against the in ipu_csi_set_bt_interlaced_codes()
390 * is SEQ_TB), swap the F-bit so that the CSI will capture in ipu_csi_set_bt_interlaced_codes()
404 ipu_csi_write(csi, 0x40596 | CSI_CCIR_ERR_DET_EN, in ipu_csi_set_bt_interlaced_codes()
406 ipu_csi_write(csi, 0xD07DF, CSI_CCIR_CODE_2); in ipu_csi_set_bt_interlaced_codes()
408 dev_dbg(csi->ipu->dev, "capture field swap\n"); in ipu_csi_set_bt_interlaced_codes()
411 ipu_csi_write(csi, 0xD07DF | CSI_CCIR_ERR_DET_EN, in ipu_csi_set_bt_interlaced_codes()
413 ipu_csi_write(csi, 0x40596, CSI_CCIR_CODE_2); in ipu_csi_set_bt_interlaced_codes()
416 ipu_csi_write(csi, 0xFF0000, CSI_CCIR_CODE_3); in ipu_csi_set_bt_interlaced_codes()
422 int ipu_csi_init_interface(struct ipu_csi *csi, in ipu_csi_init_interface() argument
456 spin_lock_irqsave(&csi->lock, flags); in ipu_csi_init_interface()
458 ipu_csi_write(csi, data, CSI_SENS_CONF); in ipu_csi_init_interface()
464 ipu_csi_write(csi, 0x40030, CSI_CCIR_CODE_1); in ipu_csi_init_interface()
465 ipu_csi_write(csi, 0xFF0000, CSI_CCIR_CODE_3); in ipu_csi_init_interface()
475 dev_err(csi->ipu->dev, in ipu_csi_init_interface()
481 ret = ipu_csi_set_bt_interlaced_codes(csi, infmt, outfmt, std); in ipu_csi_init_interface()
489 ipu_csi_write(csi, 0x40030 | CSI_CCIR_ERR_DET_EN, in ipu_csi_init_interface()
491 ipu_csi_write(csi, 0xFF0000, CSI_CCIR_CODE_3); in ipu_csi_init_interface()
495 ipu_csi_write(csi, 0, CSI_CCIR_CODE_1); in ipu_csi_init_interface()
500 ipu_csi_write(csi, (width - 1) | ((height - 1) << 16), in ipu_csi_init_interface()
503 dev_dbg(csi->ipu->dev, "CSI_SENS_CONF = 0x%08X\n", in ipu_csi_init_interface()
504 ipu_csi_read(csi, CSI_SENS_CONF)); in ipu_csi_init_interface()
505 dev_dbg(csi->ipu->dev, "CSI_ACT_FRM_SIZE = 0x%08X\n", in ipu_csi_init_interface()
506 ipu_csi_read(csi, CSI_ACT_FRM_SIZE)); in ipu_csi_init_interface()
509 spin_unlock_irqrestore(&csi->lock, flags); in ipu_csi_init_interface()
515 void ipu_csi_set_window(struct ipu_csi *csi, struct v4l2_rect *w) in ipu_csi_set_window() argument
520 spin_lock_irqsave(&csi->lock, flags); in ipu_csi_set_window()
522 ipu_csi_write(csi, (w->width - 1) | ((w->height - 1) << 16), in ipu_csi_set_window()
525 reg = ipu_csi_read(csi, CSI_OUT_FRM_CTRL); in ipu_csi_set_window()
528 ipu_csi_write(csi, reg, CSI_OUT_FRM_CTRL); in ipu_csi_set_window()
530 spin_unlock_irqrestore(&csi->lock, flags); in ipu_csi_set_window()
534 void ipu_csi_set_downsize(struct ipu_csi *csi, bool horiz, bool vert) in ipu_csi_set_downsize() argument
539 spin_lock_irqsave(&csi->lock, flags); in ipu_csi_set_downsize()
541 reg = ipu_csi_read(csi, CSI_OUT_FRM_CTRL); in ipu_csi_set_downsize()
545 ipu_csi_write(csi, reg, CSI_OUT_FRM_CTRL); in ipu_csi_set_downsize()
547 spin_unlock_irqrestore(&csi->lock, flags); in ipu_csi_set_downsize()
551 int ipu_csi_set_mipi_datatype(struct ipu_csi *csi, u32 vc, in ipu_csi_set_mipi_datatype() argument
566 spin_lock_irqsave(&csi->lock, flags); in ipu_csi_set_mipi_datatype()
568 temp = ipu_csi_read(csi, CSI_MIPI_DI); in ipu_csi_set_mipi_datatype()
571 ipu_csi_write(csi, temp, CSI_MIPI_DI); in ipu_csi_set_mipi_datatype()
573 spin_unlock_irqrestore(&csi->lock, flags); in ipu_csi_set_mipi_datatype()
579 int ipu_csi_set_skip_smfc(struct ipu_csi *csi, u32 skip, in ipu_csi_set_skip_smfc() argument
588 spin_lock_irqsave(&csi->lock, flags); in ipu_csi_set_skip_smfc()
590 temp = ipu_csi_read(csi, CSI_SKIP); in ipu_csi_set_skip_smfc()
596 ipu_csi_write(csi, temp, CSI_SKIP); in ipu_csi_set_skip_smfc()
598 spin_unlock_irqrestore(&csi->lock, flags); in ipu_csi_set_skip_smfc()
604 int ipu_csi_set_dest(struct ipu_csi *csi, enum ipu_csi_dest csi_dest) in ipu_csi_set_dest() argument
614 spin_lock_irqsave(&csi->lock, flags); in ipu_csi_set_dest()
616 csi_sens_conf = ipu_csi_read(csi, CSI_SENS_CONF); in ipu_csi_set_dest()
619 ipu_csi_write(csi, csi_sens_conf, CSI_SENS_CONF); in ipu_csi_set_dest()
621 spin_unlock_irqrestore(&csi->lock, flags); in ipu_csi_set_dest()
627 int ipu_csi_enable(struct ipu_csi *csi) in ipu_csi_enable() argument
629 ipu_module_enable(csi->ipu, csi->module); in ipu_csi_enable()
635 int ipu_csi_disable(struct ipu_csi *csi) in ipu_csi_disable() argument
637 ipu_module_disable(csi->ipu, csi->module); in ipu_csi_disable()
646 struct ipu_csi *csi, *ret; in ipu_csi_get() local
651 csi = ipu->csi_priv[id]; in ipu_csi_get()
652 ret = csi; in ipu_csi_get()
654 spin_lock_irqsave(&csi->lock, flags); in ipu_csi_get()
656 if (csi->inuse) { in ipu_csi_get()
661 csi->inuse = true; in ipu_csi_get()
663 spin_unlock_irqrestore(&csi->lock, flags); in ipu_csi_get()
668 void ipu_csi_put(struct ipu_csi *csi) in ipu_csi_put() argument
672 spin_lock_irqsave(&csi->lock, flags); in ipu_csi_put()
673 csi->inuse = false; in ipu_csi_put()
674 spin_unlock_irqrestore(&csi->lock, flags); in ipu_csi_put()
681 struct ipu_csi *csi; in ipu_csi_init() local
686 csi = devm_kzalloc(dev, sizeof(*csi), GFP_KERNEL); in ipu_csi_init()
687 if (!csi) in ipu_csi_init()
690 ipu->csi_priv[id] = csi; in ipu_csi_init()
692 spin_lock_init(&csi->lock); in ipu_csi_init()
693 csi->module = module; in ipu_csi_init()
694 csi->id = id; in ipu_csi_init()
695 csi->clk_ipu = clk_ipu; in ipu_csi_init()
696 csi->base = devm_ioremap(dev, base, PAGE_SIZE); in ipu_csi_init()
697 if (!csi->base) in ipu_csi_init()
700 dev_dbg(dev, "CSI%d base: 0x%08lx remapped to %p\n", in ipu_csi_init()
701 id, base, csi->base); in ipu_csi_init()
702 csi->ipu = ipu; in ipu_csi_init()
711 void ipu_csi_dump(struct ipu_csi *csi) in ipu_csi_dump() argument
713 dev_dbg(csi->ipu->dev, "CSI_SENS_CONF: %08x\n", in ipu_csi_dump()
714 ipu_csi_read(csi, CSI_SENS_CONF)); in ipu_csi_dump()
715 dev_dbg(csi->ipu->dev, "CSI_SENS_FRM_SIZE: %08x\n", in ipu_csi_dump()
716 ipu_csi_read(csi, CSI_SENS_FRM_SIZE)); in ipu_csi_dump()
717 dev_dbg(csi->ipu->dev, "CSI_ACT_FRM_SIZE: %08x\n", in ipu_csi_dump()
718 ipu_csi_read(csi, CSI_ACT_FRM_SIZE)); in ipu_csi_dump()
719 dev_dbg(csi->ipu->dev, "CSI_OUT_FRM_CTRL: %08x\n", in ipu_csi_dump()
720 ipu_csi_read(csi, CSI_OUT_FRM_CTRL)); in ipu_csi_dump()
721 dev_dbg(csi->ipu->dev, "CSI_TST_CTRL: %08x\n", in ipu_csi_dump()
722 ipu_csi_read(csi, CSI_TST_CTRL)); in ipu_csi_dump()
723 dev_dbg(csi->ipu->dev, "CSI_CCIR_CODE_1: %08x\n", in ipu_csi_dump()
724 ipu_csi_read(csi, CSI_CCIR_CODE_1)); in ipu_csi_dump()
725 dev_dbg(csi->ipu->dev, "CSI_CCIR_CODE_2: %08x\n", in ipu_csi_dump()
726 ipu_csi_read(csi, CSI_CCIR_CODE_2)); in ipu_csi_dump()
727 dev_dbg(csi->ipu->dev, "CSI_CCIR_CODE_3: %08x\n", in ipu_csi_dump()
728 ipu_csi_read(csi, CSI_CCIR_CODE_3)); in ipu_csi_dump()
729 dev_dbg(csi->ipu->dev, "CSI_MIPI_DI: %08x\n", in ipu_csi_dump()
730 ipu_csi_read(csi, CSI_MIPI_DI)); in ipu_csi_dump()
731 dev_dbg(csi->ipu->dev, "CSI_SKIP: %08x\n", in ipu_csi_dump()
732 ipu_csi_read(csi, CSI_SKIP)); in ipu_csi_dump()