From 597735698e4ed3db89b003a4bd3eeac003b49e42 Mon Sep 17 00:00:00 2001 From: Jianwei Fan Date: Thu, 29 Aug 2024 15:48:18 +0800 Subject: [PATCH] media: i2c: rk628: rk628_clk_set_rate need after version check access Fixes: dd812e1c197c ("media: i2c: rk628: set CPLL_REF_CLK to 1194M") Signed-off-by: Jianwei Fan Change-Id: Ib406041a530cea8e86cee36deff267e2ec02719d --- drivers/media/i2c/rk628/rk628_bt1120_v4l2.c | 8 +++++++- drivers/media/i2c/rk628/rk628_csi_v4l2.c | 7 ++++++- 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/drivers/media/i2c/rk628/rk628_bt1120_v4l2.c b/drivers/media/i2c/rk628/rk628_bt1120_v4l2.c index d332fb0639f8..bdc6b2c3f31b 100644 --- a/drivers/media/i2c/rk628/rk628_bt1120_v4l2.c +++ b/drivers/media/i2c/rk628/rk628_bt1120_v4l2.c @@ -2015,9 +2015,14 @@ static int rk628_bt1120_probe(struct i2c_client *client, rk628_bt1120_power_on(bt1120); rk628_cru_initialize(rk628); - rk628_clk_set_rate(rk628, CGU_CLK_CPLL, CPLL_REF_CLK); rk628_version_parse(rk628); + if (rk628->version == RK628_UNKNOWN) { + v4l2_err(sd, "can't get rk628 version\n"); + err = -ENODEV; + goto power_off; + } + rk628_clk_set_rate(rk628, CGU_CLK_CPLL, CPLL_REF_CLK); #ifdef CONFIG_VIDEO_V4L2_SUBDEV_API v4l2_i2c_subdev_init(sd, client, &rk628_bt1120_ops); @@ -2166,6 +2171,7 @@ err_hdl: mutex_destroy(&bt1120->confctl_mutex); media_entity_cleanup(&sd->entity); v4l2_ctrl_handler_free(&bt1120->hdl); +power_off: rk628_bt1120_power_off(bt1120); return err; } diff --git a/drivers/media/i2c/rk628/rk628_csi_v4l2.c b/drivers/media/i2c/rk628/rk628_csi_v4l2.c index 74e22bea489f..c02ab61e998d 100644 --- a/drivers/media/i2c/rk628/rk628_csi_v4l2.c +++ b/drivers/media/i2c/rk628/rk628_csi_v4l2.c @@ -3439,9 +3439,14 @@ static int rk628_csi_probe(struct i2c_client *client, rk628_csi_power_on(csi); rk628_cru_initialize(csi->rk628); - rk628_clk_set_rate(rk628, CGU_CLK_CPLL, CPLL_REF_CLK); rk628_version_parse(rk628); + if (rk628->version == RK628_UNKNOWN) { + v4l2_err(sd, "can't get rk628 version\n"); + err = -ENODEV; + goto power_off; + } + rk628_clk_set_rate(rk628, CGU_CLK_CPLL, CPLL_REF_CLK); if (rk628->version >= RK628F_VERSION) { err = rk628_csi_get_multi_dev_info(csi);