As for the mentioned Debug steps for customer MIPI sensor.docx :
27 MHz clock source is used there, please use the patch below to set mipi-csi2 dphy clock,
based on the ref_clk out is 24M.
The patch is intended for "linux-2.6-imx/drivers/mxc/mipi/mxc_mipi_csi2.c"
===========
--- mxc_mipi_csi2.c.orig
+++ mxc_mipi_csi2.c
@@ -272,7 +272,46 @@
* @param info mipi csi2 hander
* @return Returns 0 on success or negative error code on fail
*/
-int mipi_csi2_reset(struct mipi_csi2_info *info)
+
+struct _dphy_calib {
+ u32 low, high, val;
+};
+
+static struct _dphy_calib dphy_calib_data[] =
+{
+ {80, 90,0x00},
+ {90,100,0x10},
+ {100,110,0x20},
+ {110,125,0x01},
+ {125,140,0x11},
+ {140,150,0x21},
+ {150,160,0x02},
+ {160,180,0x12},
+ {180,200,0x22},
+ {200,210,0x03},
+ {210,240,0x13},
+ {240,250,0x23},
+ {250,270,0x04},
+ {270,300,0x14},
+ {300,330,0x04},
+ {330,360,0x15},
+ {360,400,0x25},
+ {400,450,0x06},
+ {450,500,0x16},
+ {500,550,0x07},
+ {550,600,0x17},
+ {600,650,0x08},
+ {650,700,0x18},
+ {700,750,0x09},
+ {750,800,0x19},
+ {800,850,0x0a},
+ {850,900,0x1a},
+ {900,950,0x2a},
+ {950,1000,0x3a},
+ {0,0,0}
+};
+
+int mipi_csi2_reset(struct mipi_csi2_info *info, u32 freq)
{
_mipi_csi2_lock(info);
@@ -286,7 +325,27 @@
mipi_csi2_write(info, 0x00000002, CSI2_PHY_TST_CTRL0);
mipi_csi2_write(info, 0x00010044, CSI2_PHY_TST_CTRL1);
mipi_csi2_write(info, 0x00000000, CSI2_PHY_TST_CTRL0);
- mipi_csi2_write(info, 0x00000014, CSI2_PHY_TST_CTRL1);
+ {
+ int i = 0;
+ freq<<=1;
+ while(dphy_calib_data[i].low ||
+ dphy_calib_data[i].high ||
+ dphy_calib_data[i].val)
+ {
+ if(freq >= dphy_calib_data[i].low &&
+ freq <= dphy_calib_data[i].high)
+ {
+ mipi_csi2_write(info, dphy_calib_data[i].val << 1, CSI2_PHY_TST_CTRL1);//270-300
+ printk(KERN_ERR "%s: D-PHY calib for %d: %x", __FUNCTION__, freq, dphy_calib_data[i].val);
+ break;
+ }
+ i++;
+ }
+// mipi_csi2_write(info, 0x00000014, CSI2_PHY_TST_CTRL1);//800-850
+// mipi_csi2_write(info, 0x00000028, CSI2_PHY_TST_CTRL1);//270-300
+// mipi_csi2_write(info, 0x00000044, CSI2_PHY_TST_CTRL1);//180-200
+// mipi_csi2_write(info, 0x00000022, CSI2_PHY_TST_CTRL1);//125-140
+ }
mipi_csi2_write(info, 0x00000002, CSI2_PHY_TST_CTRL0);
mipi_csi2_write(info, 0x00000000, CSI2_PHY_TST_CTRL0);
=============
Have a great day,
Yuri
-----------------------------------------------------------------------------------------------------------------------
Note: If this post answers your question, please click the Correct Answer button. Thank you!
-----------------------------------------------------------------------------------------------------------------------