Lines Matching refs:csi

186 static inline u32 ipu_csi_read(struct ipu_csi *csi, unsigned offset)  in ipu_csi_read()  argument
188 return readl(csi->base + offset); in ipu_csi_read()
191 static inline void ipu_csi_write(struct ipu_csi *csi, u32 value, in ipu_csi_write() argument
194 writel(value, csi->base + offset); in ipu_csi_write()
201 static int ipu_csi_set_testgen_mclk(struct ipu_csi *csi, u32 pixel_clk, in ipu_csi_set_testgen_mclk() argument
210 dev_err(csi->ipu->dev, in ipu_csi_set_testgen_mclk()
215 temp = ipu_csi_read(csi, CSI_SENS_CONF); in ipu_csi_set_testgen_mclk()
217 ipu_csi_write(csi, temp | (div_ratio << CSI_SENS_CONF_DIVRATIO_SHIFT), in ipu_csi_set_testgen_mclk()
362 int ipu_csi_init_interface(struct ipu_csi *csi, in ipu_csi_init_interface() argument
385 spin_lock_irqsave(&csi->lock, flags); in ipu_csi_init_interface()
387 ipu_csi_write(csi, data, CSI_SENS_CONF); in ipu_csi_init_interface()
390 ipu_csi_write(csi, in ipu_csi_init_interface()
398 ipu_csi_write(csi, 0x40030, CSI_CCIR_CODE_1); in ipu_csi_init_interface()
399 ipu_csi_write(csi, 0xFF0000, CSI_CCIR_CODE_3); in ipu_csi_init_interface()
411 ipu_csi_write(csi, 0x40596 | CSI_CCIR_ERR_DET_EN, in ipu_csi_init_interface()
413 ipu_csi_write(csi, 0xD07DF, CSI_CCIR_CODE_2); in ipu_csi_init_interface()
414 ipu_csi_write(csi, 0xFF0000, CSI_CCIR_CODE_3); in ipu_csi_init_interface()
425 ipu_csi_write(csi, 0xD07DF | CSI_CCIR_ERR_DET_EN, in ipu_csi_init_interface()
427 ipu_csi_write(csi, 0x40596, CSI_CCIR_CODE_2); in ipu_csi_init_interface()
428 ipu_csi_write(csi, 0xFF0000, CSI_CCIR_CODE_3); in ipu_csi_init_interface()
430 dev_err(csi->ipu->dev, in ipu_csi_init_interface()
432 spin_unlock_irqrestore(&csi->lock, flags); in ipu_csi_init_interface()
440 ipu_csi_write(csi, 0x40030 | CSI_CCIR_ERR_DET_EN, in ipu_csi_init_interface()
442 ipu_csi_write(csi, 0xFF0000, CSI_CCIR_CODE_3); in ipu_csi_init_interface()
446 ipu_csi_write(csi, 0, CSI_CCIR_CODE_1); in ipu_csi_init_interface()
450 dev_dbg(csi->ipu->dev, "CSI_SENS_CONF = 0x%08X\n", in ipu_csi_init_interface()
451 ipu_csi_read(csi, CSI_SENS_CONF)); in ipu_csi_init_interface()
452 dev_dbg(csi->ipu->dev, "CSI_ACT_FRM_SIZE = 0x%08X\n", in ipu_csi_init_interface()
453 ipu_csi_read(csi, CSI_ACT_FRM_SIZE)); in ipu_csi_init_interface()
455 spin_unlock_irqrestore(&csi->lock, flags); in ipu_csi_init_interface()
461 bool ipu_csi_is_interlaced(struct ipu_csi *csi) in ipu_csi_is_interlaced() argument
466 spin_lock_irqsave(&csi->lock, flags); in ipu_csi_is_interlaced()
468 (ipu_csi_read(csi, CSI_SENS_CONF) & in ipu_csi_is_interlaced()
471 spin_unlock_irqrestore(&csi->lock, flags); in ipu_csi_is_interlaced()
485 dev_err(csi->ipu->dev, in ipu_csi_is_interlaced()
486 "CSI %d sensor protocol unsupported\n", csi->id); in ipu_csi_is_interlaced()
492 void ipu_csi_get_window(struct ipu_csi *csi, struct v4l2_rect *w) in ipu_csi_get_window() argument
497 spin_lock_irqsave(&csi->lock, flags); in ipu_csi_get_window()
499 reg = ipu_csi_read(csi, CSI_ACT_FRM_SIZE); in ipu_csi_get_window()
503 reg = ipu_csi_read(csi, CSI_OUT_FRM_CTRL); in ipu_csi_get_window()
507 spin_unlock_irqrestore(&csi->lock, flags); in ipu_csi_get_window()
511 void ipu_csi_set_window(struct ipu_csi *csi, struct v4l2_rect *w) in ipu_csi_set_window() argument
516 spin_lock_irqsave(&csi->lock, flags); in ipu_csi_set_window()
518 ipu_csi_write(csi, (w->width - 1) | ((w->height - 1) << 16), in ipu_csi_set_window()
521 reg = ipu_csi_read(csi, CSI_OUT_FRM_CTRL); in ipu_csi_set_window()
524 ipu_csi_write(csi, reg, CSI_OUT_FRM_CTRL); in ipu_csi_set_window()
526 spin_unlock_irqrestore(&csi->lock, flags); in ipu_csi_set_window()
530 void ipu_csi_set_test_generator(struct ipu_csi *csi, bool active, in ipu_csi_set_test_generator() argument
535 u32 ipu_clk = clk_get_rate(csi->clk_ipu); in ipu_csi_set_test_generator()
538 spin_lock_irqsave(&csi->lock, flags); in ipu_csi_set_test_generator()
540 temp = ipu_csi_read(csi, CSI_TST_CTRL); in ipu_csi_set_test_generator()
544 ipu_csi_write(csi, temp, CSI_TST_CTRL); in ipu_csi_set_test_generator()
547 ipu_csi_set_testgen_mclk(csi, pix_clk, ipu_clk); in ipu_csi_set_test_generator()
555 ipu_csi_write(csi, temp, CSI_TST_CTRL); in ipu_csi_set_test_generator()
558 spin_unlock_irqrestore(&csi->lock, flags); in ipu_csi_set_test_generator()
562 int ipu_csi_set_mipi_datatype(struct ipu_csi *csi, u32 vc, in ipu_csi_set_mipi_datatype() argument
574 spin_lock_irqsave(&csi->lock, flags); in ipu_csi_set_mipi_datatype()
576 temp = ipu_csi_read(csi, CSI_MIPI_DI); in ipu_csi_set_mipi_datatype()
579 ipu_csi_write(csi, temp, CSI_MIPI_DI); in ipu_csi_set_mipi_datatype()
581 spin_unlock_irqrestore(&csi->lock, flags); in ipu_csi_set_mipi_datatype()
587 int ipu_csi_set_skip_smfc(struct ipu_csi *csi, u32 skip, in ipu_csi_set_skip_smfc() argument
596 spin_lock_irqsave(&csi->lock, flags); in ipu_csi_set_skip_smfc()
598 temp = ipu_csi_read(csi, CSI_SKIP); in ipu_csi_set_skip_smfc()
604 ipu_csi_write(csi, temp, CSI_SKIP); in ipu_csi_set_skip_smfc()
606 spin_unlock_irqrestore(&csi->lock, flags); in ipu_csi_set_skip_smfc()
612 int ipu_csi_set_dest(struct ipu_csi *csi, enum ipu_csi_dest csi_dest) in ipu_csi_set_dest() argument
622 spin_lock_irqsave(&csi->lock, flags); in ipu_csi_set_dest()
624 csi_sens_conf = ipu_csi_read(csi, CSI_SENS_CONF); in ipu_csi_set_dest()
627 ipu_csi_write(csi, csi_sens_conf, CSI_SENS_CONF); in ipu_csi_set_dest()
629 spin_unlock_irqrestore(&csi->lock, flags); in ipu_csi_set_dest()
635 int ipu_csi_enable(struct ipu_csi *csi) in ipu_csi_enable() argument
637 ipu_module_enable(csi->ipu, csi->module); in ipu_csi_enable()
643 int ipu_csi_disable(struct ipu_csi *csi) in ipu_csi_disable() argument
645 ipu_module_disable(csi->ipu, csi->module); in ipu_csi_disable()
654 struct ipu_csi *csi, *ret; in ipu_csi_get() local
659 csi = ipu->csi_priv[id]; in ipu_csi_get()
660 ret = csi; in ipu_csi_get()
662 spin_lock_irqsave(&csi->lock, flags); in ipu_csi_get()
664 if (csi->inuse) { in ipu_csi_get()
669 csi->inuse = true; in ipu_csi_get()
671 spin_unlock_irqrestore(&csi->lock, flags); in ipu_csi_get()
676 void ipu_csi_put(struct ipu_csi *csi) in ipu_csi_put() argument
680 spin_lock_irqsave(&csi->lock, flags); in ipu_csi_put()
681 csi->inuse = false; in ipu_csi_put()
682 spin_unlock_irqrestore(&csi->lock, flags); in ipu_csi_put()
689 struct ipu_csi *csi; in ipu_csi_init() local
694 csi = devm_kzalloc(dev, sizeof(*csi), GFP_KERNEL); in ipu_csi_init()
695 if (!csi) in ipu_csi_init()
698 ipu->csi_priv[id] = csi; in ipu_csi_init()
700 spin_lock_init(&csi->lock); in ipu_csi_init()
701 csi->module = module; in ipu_csi_init()
702 csi->id = id; in ipu_csi_init()
703 csi->clk_ipu = clk_ipu; in ipu_csi_init()
704 csi->base = devm_ioremap(dev, base, PAGE_SIZE); in ipu_csi_init()
705 if (!csi->base) in ipu_csi_init()
709 id, base, csi->base); in ipu_csi_init()
710 csi->ipu = ipu; in ipu_csi_init()
719 void ipu_csi_dump(struct ipu_csi *csi) in ipu_csi_dump() argument
721 dev_dbg(csi->ipu->dev, "CSI_SENS_CONF: %08x\n", in ipu_csi_dump()
722 ipu_csi_read(csi, CSI_SENS_CONF)); in ipu_csi_dump()
723 dev_dbg(csi->ipu->dev, "CSI_SENS_FRM_SIZE: %08x\n", in ipu_csi_dump()
724 ipu_csi_read(csi, CSI_SENS_FRM_SIZE)); in ipu_csi_dump()
725 dev_dbg(csi->ipu->dev, "CSI_ACT_FRM_SIZE: %08x\n", in ipu_csi_dump()
726 ipu_csi_read(csi, CSI_ACT_FRM_SIZE)); in ipu_csi_dump()
727 dev_dbg(csi->ipu->dev, "CSI_OUT_FRM_CTRL: %08x\n", in ipu_csi_dump()
728 ipu_csi_read(csi, CSI_OUT_FRM_CTRL)); in ipu_csi_dump()
729 dev_dbg(csi->ipu->dev, "CSI_TST_CTRL: %08x\n", in ipu_csi_dump()
730 ipu_csi_read(csi, CSI_TST_CTRL)); in ipu_csi_dump()
731 dev_dbg(csi->ipu->dev, "CSI_CCIR_CODE_1: %08x\n", in ipu_csi_dump()
732 ipu_csi_read(csi, CSI_CCIR_CODE_1)); in ipu_csi_dump()
733 dev_dbg(csi->ipu->dev, "CSI_CCIR_CODE_2: %08x\n", in ipu_csi_dump()
734 ipu_csi_read(csi, CSI_CCIR_CODE_2)); in ipu_csi_dump()
735 dev_dbg(csi->ipu->dev, "CSI_CCIR_CODE_3: %08x\n", in ipu_csi_dump()
736 ipu_csi_read(csi, CSI_CCIR_CODE_3)); in ipu_csi_dump()
737 dev_dbg(csi->ipu->dev, "CSI_MIPI_DI: %08x\n", in ipu_csi_dump()
738 ipu_csi_read(csi, CSI_MIPI_DI)); in ipu_csi_dump()
739 dev_dbg(csi->ipu->dev, "CSI_SKIP: %08x\n", in ipu_csi_dump()
740 ipu_csi_read(csi, CSI_SKIP)); in ipu_csi_dump()