Lines Matching refs:csi

177 static inline u32 ipu_csi_read(struct ipu_csi *csi, unsigned offset)
179 return readl(csi->base + offset);
182 static inline void ipu_csi_write(struct ipu_csi *csi, u32 value,
185 writel(value, csi->base + offset);
192 static int ipu_csi_set_testgen_mclk(struct ipu_csi *csi, u32 pixel_clk,
201 dev_err(csi->ipu->dev,
206 temp = ipu_csi_read(csi, CSI_SENS_CONF);
208 ipu_csi_write(csi, temp | (div_ratio << CSI_SENS_CONF_DIVRATIO_SHIFT),
378 ipu_csi_set_bt_interlaced_codes(struct ipu_csi *csi,
409 ipu_csi_write(csi, 0x40596 | CSI_CCIR_ERR_DET_EN,
411 ipu_csi_write(csi, 0xD07DF, CSI_CCIR_CODE_2);
413 dev_dbg(csi->ipu->dev, "capture field swap\n");
416 ipu_csi_write(csi, 0xD07DF | CSI_CCIR_ERR_DET_EN,
418 ipu_csi_write(csi, 0x40596, CSI_CCIR_CODE_2);
421 ipu_csi_write(csi, 0xFF0000, CSI_CCIR_CODE_3);
427 int ipu_csi_init_interface(struct ipu_csi *csi,
461 spin_lock_irqsave(&csi->lock, flags);
463 ipu_csi_write(csi, data, CSI_SENS_CONF);
469 ipu_csi_write(csi, 0x40030, CSI_CCIR_CODE_1);
470 ipu_csi_write(csi, 0xFF0000, CSI_CCIR_CODE_3);
480 dev_err(csi->ipu->dev,
486 ret = ipu_csi_set_bt_interlaced_codes(csi, infmt, outfmt, std);
494 ipu_csi_write(csi, 0x40030 | CSI_CCIR_ERR_DET_EN,
496 ipu_csi_write(csi, 0xFF0000, CSI_CCIR_CODE_3);
500 ipu_csi_write(csi, 0, CSI_CCIR_CODE_1);
505 ipu_csi_write(csi, (width - 1) | ((height - 1) << 16),
508 dev_dbg(csi->ipu->dev, "CSI_SENS_CONF = 0x%08X\n",
509 ipu_csi_read(csi, CSI_SENS_CONF));
510 dev_dbg(csi->ipu->dev, "CSI_ACT_FRM_SIZE = 0x%08X\n",
511 ipu_csi_read(csi, CSI_ACT_FRM_SIZE));
514 spin_unlock_irqrestore(&csi->lock, flags);
520 bool ipu_csi_is_interlaced(struct ipu_csi *csi)
525 spin_lock_irqsave(&csi->lock, flags);
527 (ipu_csi_read(csi, CSI_SENS_CONF) &
530 spin_unlock_irqrestore(&csi->lock, flags);
544 dev_err(csi->ipu->dev,
545 "CSI %d sensor protocol unsupported\n", csi->id);
551 void ipu_csi_get_window(struct ipu_csi *csi, struct v4l2_rect *w)
556 spin_lock_irqsave(&csi->lock, flags);
558 reg = ipu_csi_read(csi, CSI_ACT_FRM_SIZE);
562 reg = ipu_csi_read(csi, CSI_OUT_FRM_CTRL);
566 spin_unlock_irqrestore(&csi->lock, flags);
570 void ipu_csi_set_window(struct ipu_csi *csi, struct v4l2_rect *w)
575 spin_lock_irqsave(&csi->lock, flags);
577 ipu_csi_write(csi, (w->width - 1) | ((w->height - 1) << 16),
580 reg = ipu_csi_read(csi, CSI_OUT_FRM_CTRL);
583 ipu_csi_write(csi, reg, CSI_OUT_FRM_CTRL);
585 spin_unlock_irqrestore(&csi->lock, flags);
589 void ipu_csi_set_downsize(struct ipu_csi *csi, bool horiz, bool vert)
594 spin_lock_irqsave(&csi->lock, flags);
596 reg = ipu_csi_read(csi, CSI_OUT_FRM_CTRL);
600 ipu_csi_write(csi, reg, CSI_OUT_FRM_CTRL);
602 spin_unlock_irqrestore(&csi->lock, flags);
606 void ipu_csi_set_test_generator(struct ipu_csi *csi, bool active,
611 u32 ipu_clk = clk_get_rate(csi->clk_ipu);
614 spin_lock_irqsave(&csi->lock, flags);
616 temp = ipu_csi_read(csi, CSI_TST_CTRL);
620 ipu_csi_write(csi, temp, CSI_TST_CTRL);
623 ipu_csi_set_testgen_mclk(csi, pix_clk, ipu_clk);
631 ipu_csi_write(csi, temp, CSI_TST_CTRL);
634 spin_unlock_irqrestore(&csi->lock, flags);
638 int ipu_csi_set_mipi_datatype(struct ipu_csi *csi, u32 vc,
653 spin_lock_irqsave(&csi->lock, flags);
655 temp = ipu_csi_read(csi, CSI_MIPI_DI);
658 ipu_csi_write(csi, temp, CSI_MIPI_DI);
660 spin_unlock_irqrestore(&csi->lock, flags);
666 int ipu_csi_set_skip_smfc(struct ipu_csi *csi, u32 skip,
675 spin_lock_irqsave(&csi->lock, flags);
677 temp = ipu_csi_read(csi, CSI_SKIP);
683 ipu_csi_write(csi, temp, CSI_SKIP);
685 spin_unlock_irqrestore(&csi->lock, flags);
691 int ipu_csi_set_dest(struct ipu_csi *csi, enum ipu_csi_dest csi_dest)
701 spin_lock_irqsave(&csi->lock, flags);
703 csi_sens_conf = ipu_csi_read(csi, CSI_SENS_CONF);
706 ipu_csi_write(csi, csi_sens_conf, CSI_SENS_CONF);
708 spin_unlock_irqrestore(&csi->lock, flags);
714 int ipu_csi_enable(struct ipu_csi *csi)
716 ipu_module_enable(csi->ipu, csi->module);
722 int ipu_csi_disable(struct ipu_csi *csi)
724 ipu_module_disable(csi->ipu, csi->module);
733 struct ipu_csi *csi, *ret;
738 csi = ipu->csi_priv[id];
739 ret = csi;
741 spin_lock_irqsave(&csi->lock, flags);
743 if (csi->inuse) {
748 csi->inuse = true;
750 spin_unlock_irqrestore(&csi->lock, flags);
755 void ipu_csi_put(struct ipu_csi *csi)
759 spin_lock_irqsave(&csi->lock, flags);
760 csi->inuse = false;
761 spin_unlock_irqrestore(&csi->lock, flags);
768 struct ipu_csi *csi;
773 csi = devm_kzalloc(dev, sizeof(*csi), GFP_KERNEL);
774 if (!csi)
777 ipu->csi_priv[id] = csi;
779 spin_lock_init(&csi->lock);
780 csi->module = module;
781 csi->id = id;
782 csi->clk_ipu = clk_ipu;
783 csi->base = devm_ioremap(dev, base, PAGE_SIZE);
784 if (!csi->base)
788 id, base, csi->base);
789 csi->ipu = ipu;
798 void ipu_csi_dump(struct ipu_csi *csi)
800 dev_dbg(csi->ipu->dev, "CSI_SENS_CONF: %08x\n",
801 ipu_csi_read(csi, CSI_SENS_CONF));
802 dev_dbg(csi->ipu->dev, "CSI_SENS_FRM_SIZE: %08x\n",
803 ipu_csi_read(csi, CSI_SENS_FRM_SIZE));
804 dev_dbg(csi->ipu->dev, "CSI_ACT_FRM_SIZE: %08x\n",
805 ipu_csi_read(csi, CSI_ACT_FRM_SIZE));
806 dev_dbg(csi->ipu->dev, "CSI_OUT_FRM_CTRL: %08x\n",
807 ipu_csi_read(csi, CSI_OUT_FRM_CTRL));
808 dev_dbg(csi->ipu->dev, "CSI_TST_CTRL: %08x\n",
809 ipu_csi_read(csi, CSI_TST_CTRL));
810 dev_dbg(csi->ipu->dev, "CSI_CCIR_CODE_1: %08x\n",
811 ipu_csi_read(csi, CSI_CCIR_CODE_1));
812 dev_dbg(csi->ipu->dev, "CSI_CCIR_CODE_2: %08x\n",
813 ipu_csi_read(csi, CSI_CCIR_CODE_2));
814 dev_dbg(csi->ipu->dev, "CSI_CCIR_CODE_3: %08x\n",
815 ipu_csi_read(csi, CSI_CCIR_CODE_3));
816 dev_dbg(csi->ipu->dev, "CSI_MIPI_DI: %08x\n",
817 ipu_csi_read(csi, CSI_MIPI_DI));
818 dev_dbg(csi->ipu->dev, "CSI_SKIP: %08x\n",
819 ipu_csi_read(csi, CSI_SKIP));