From 539a78ffdfb2b782484172c89a41f3a5fbd730c6 Mon Sep 17 00:00:00 2001 From: Russell King Date: Tue, 13 Aug 2019 14:37:06 +0100 Subject: media: i2c: imx219: debugging Signed-off-by: Russell King --- drivers/media/i2c/imx219-rmk.c | 39 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 39 insertions(+) diff --git a/drivers/media/i2c/imx219-rmk.c b/drivers/media/i2c/imx219-rmk.c index 7d39ebec2827..99aa7d767eda 100644 --- a/drivers/media/i2c/imx219-rmk.c +++ b/drivers/media/i2c/imx219-rmk.c @@ -1373,6 +1373,43 @@ static int imx219_s_frame_interval(struct v4l2_subdev *sd, return 0; } +static void debug(struct imx219_private *priv) +{ + struct device *dev = priv->root.sd.dev; + unsigned long vt_pixclk = imx219_get_vt_pixclk(priv); + unsigned int op_sysclk; + unsigned int vt_line_clk, vt_line_period_ns, frame_clk; + unsigned int coarse_integration_time, line_length, frame_length; + unsigned int lane_bits, lane_bits_ns; + + coarse_integration_time = priv->pixel.ctrls[CTRL_P_EXPOSURE]->cur.val; + line_length = be16_to_cpu(priv->params.line_length); + frame_length = be16_to_cpu(priv->params.frame_length); + frame_length = max(frame_length, coarse_integration_time + + priv->coarse_integration_time_max_margin); + + vt_line_clk = 2 * vt_pixclk / line_length; + frame_clk = vt_line_clk * 10 / frame_length; + + vt_line_period_ns = DIV_ROUND_CLOSEST(1000000000, vt_line_clk); + + dev_info(dev, "VT: pixclk %luHz line %uHz frame %u.%uHz\n", + vt_pixclk, vt_line_clk, + frame_clk / 10, frame_clk % 10); + dev_info(dev, "VT: line period %uns\n", vt_line_period_ns); + + op_sysclk = priv->pll_ip_freq * priv->op_mpy / priv->op_sys_div; + + lane_bits = imx219_calc_lane_active_line_bits(priv); + lane_bits_ns = div_u64(1000000000ULL * lane_bits, op_sysclk); + + dev_info(dev, "OP: pixclk %uHz, %u lanes, %uMbps peak each\n", + op_sysclk / priv->bits_per_pixel, + priv->mipi_lanes, DIV_ROUND_CLOSEST(op_sysclk, 1000000)); + dev_info(dev, "OP: %u bits/line/lane act=%uns lp/idle=%dns\n", + lane_bits, lane_bits_ns, vt_line_period_ns - lane_bits_ns); +} + static int imx219_prepare_stream(struct v4l2_subdev *sd) { struct imx219_private *priv = imx219_get_priv(sd); @@ -1380,6 +1417,8 @@ static int imx219_prepare_stream(struct v4l2_subdev *sd) mutex_lock(&priv->mutex); + debug(priv); + /* Initialise the sensor to place the outputs in LP-11 state. */ /* Select MIPI virtual channel */ -- cgit