Commit 399b0a3d authored by Laurent Pinchart's avatar Laurent Pinchart Committed by Mauro Carvalho Chehab

media: ti-vpe: cal: Don't store external rate in cal_camerarx

The external pixel rate is retrieved when starting the camerarx and only
used then. There's no need to store it in the cal_camerarx structure, it
can be returned by cal_camerarx_get_external_info() and explicitly
passed to cal_camerarx_config().

While at it, rename cal_camerarx_get_external_info() to
cal_camerarx_get_external_rate() to better reflect the function's
purpose.
Signed-off-by: default avatarLaurent Pinchart <laurent.pinchart@ideasonboard.com>
Signed-off-by: default avatarHans Verkuil <hverkuil-cisco@xs4all.nl>
Signed-off-by: default avatarMauro Carvalho Chehab <mchehab+huawei@kernel.org>
parent 49b184a0
...@@ -272,7 +272,6 @@ struct cal_camerarx { ...@@ -272,7 +272,6 @@ struct cal_camerarx {
struct v4l2_fwnode_endpoint endpoint; struct v4l2_fwnode_endpoint endpoint;
struct device_node *sensor_node; struct device_node *sensor_node;
struct v4l2_subdev *sensor; struct v4l2_subdev *sensor;
unsigned int external_rate;
}; };
struct cal_dev { struct cal_dev {
...@@ -481,9 +480,10 @@ static void cal_quickdump_regs(struct cal_dev *cal) ...@@ -481,9 +480,10 @@ static void cal_quickdump_regs(struct cal_dev *cal)
* ------------------------------------------------------------------ * ------------------------------------------------------------------
*/ */
static int cal_camerarx_get_external_info(struct cal_camerarx *phy) static s64 cal_camerarx_get_external_rate(struct cal_camerarx *phy)
{ {
struct v4l2_ctrl *ctrl; struct v4l2_ctrl *ctrl;
s64 rate;
if (!phy->sensor) if (!phy->sensor)
return -ENODEV; return -ENODEV;
...@@ -495,10 +495,10 @@ static int cal_camerarx_get_external_info(struct cal_camerarx *phy) ...@@ -495,10 +495,10 @@ static int cal_camerarx_get_external_info(struct cal_camerarx *phy)
return -EPIPE; return -EPIPE;
} }
phy->external_rate = v4l2_ctrl_g_ctrl_int64(ctrl); rate = v4l2_ctrl_g_ctrl_int64(ctrl);
phy_dbg(3, phy, "sensor Pixel Rate: %u\n", phy->external_rate); phy_dbg(3, phy, "sensor Pixel Rate: %llu\n", rate);
return 0; return rate;
} }
static void cal_camerarx_lane_config(struct cal_camerarx *phy) static void cal_camerarx_lane_config(struct cal_camerarx *phy)
...@@ -554,7 +554,7 @@ static void cal_camerarx_disable(struct cal_camerarx *phy) ...@@ -554,7 +554,7 @@ static void cal_camerarx_disable(struct cal_camerarx *phy)
#define TCLK_MISS 1 #define TCLK_MISS 1
#define TCLK_SETTLE 14 #define TCLK_SETTLE 14
static void cal_camerarx_config(struct cal_camerarx *phy, static void cal_camerarx_config(struct cal_camerarx *phy, s64 external_rate,
const struct cal_fmt *fmt) const struct cal_fmt *fmt)
{ {
unsigned int reg0, reg1; unsigned int reg0, reg1;
...@@ -565,9 +565,16 @@ static void cal_camerarx_config(struct cal_camerarx *phy, ...@@ -565,9 +565,16 @@ static void cal_camerarx_config(struct cal_camerarx *phy,
u32 num_lanes = mipi_csi2->num_data_lanes; u32 num_lanes = mipi_csi2->num_data_lanes;
/* DPHY timing configuration */ /* DPHY timing configuration */
/* CSI-2 is DDR and we only count used lanes. */
csi2_ddrclk_khz = phy->external_rate / 1000 /*
/ (2 * num_lanes) * fmt->bpp; * CSI-2 is DDR and we only count used lanes.
*
* csi2_ddrclk_khz = external_rate / 1000
* / (2 * num_lanes) * fmt->bpp;
*/
csi2_ddrclk_khz = div_s64(external_rate * fmt->bpp,
2 * num_lanes * 1000);
phy_dbg(1, phy, "csi2_ddrclk_khz: %d\n", csi2_ddrclk_khz); phy_dbg(1, phy, "csi2_ddrclk_khz: %d\n", csi2_ddrclk_khz);
/* THS_TERM: Programmed value = floor(20 ns/DDRClk period) */ /* THS_TERM: Programmed value = floor(20 ns/DDRClk period) */
...@@ -667,13 +674,14 @@ static void cal_camerarx_wait_stop_state(struct cal_camerarx *phy) ...@@ -667,13 +674,14 @@ static void cal_camerarx_wait_stop_state(struct cal_camerarx *phy)
static int cal_camerarx_start(struct cal_camerarx *phy, static int cal_camerarx_start(struct cal_camerarx *phy,
const struct cal_fmt *fmt) const struct cal_fmt *fmt)
{ {
s64 external_rate;
u32 sscounter; u32 sscounter;
u32 val; u32 val;
int ret; int ret;
ret = cal_camerarx_get_external_info(phy); external_rate = cal_camerarx_get_external_rate(phy);
if (ret < 0) if (external_rate < 0)
return ret; return external_rate;
ret = v4l2_subdev_call(phy->sensor, core, s_power, 1); ret = v4l2_subdev_call(phy->sensor, core, s_power, 1);
if (ret < 0 && ret != -ENOIOCTLCMD && ret != -ENODEV) { if (ret < 0 && ret != -ENOIOCTLCMD && ret != -ENODEV) {
...@@ -719,7 +727,7 @@ static int cal_camerarx_start(struct cal_camerarx *phy, ...@@ -719,7 +727,7 @@ static int cal_camerarx_start(struct cal_camerarx *phy,
reg_read(phy, CAL_CSI2_PHY_REG0); reg_read(phy, CAL_CSI2_PHY_REG0);
/* Program the PHY timing parameters. */ /* Program the PHY timing parameters. */
cal_camerarx_config(phy, fmt); cal_camerarx_config(phy, external_rate, fmt);
/* /*
* b. Assert the FORCERXMODE signal. * b. Assert the FORCERXMODE signal.
...@@ -1039,7 +1047,6 @@ static struct cal_camerarx *cal_camerarx_create(struct cal_dev *cal, ...@@ -1039,7 +1047,6 @@ static struct cal_camerarx *cal_camerarx_create(struct cal_dev *cal,
phy->cal = cal; phy->cal = cal;
phy->instance = instance; phy->instance = instance;
phy->external_rate = 192000000;
phy->res = platform_get_resource_byname(pdev, IORESOURCE_MEM, phy->res = platform_get_resource_byname(pdev, IORESOURCE_MEM,
(instance == 0) ? (instance == 0) ?
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment