Skip to content

Commit 3839c20

Browse files
author
André Apitzsch
committed
media: i2c: imx214: Read clock frequency from device tree
Signed-off-by: André Apitzsch <[email protected]>
1 parent 3e03e37 commit 3839c20

File tree

1 file changed

+18
-7
lines changed

1 file changed

+18
-7
lines changed

drivers/media/i2c/imx214.c

Lines changed: 18 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -260,6 +260,7 @@ static const int imx214_test_pattern_val[] = {
260260
struct imx214 {
261261
struct device *dev;
262262
struct clk *xclk;
263+
u32 xclk_freq;
263264
struct regmap *regmap;
264265

265266
struct v4l2_subdev sd;
@@ -312,9 +313,6 @@ static const struct cci_reg_sequence mode_4096x2304[] = {
312313
{ IMX214_REG_DIG_CROP_WIDTH, 4096 },
313314
{ IMX214_REG_DIG_CROP_HEIGHT, 2304 },
314315

315-
{ IMX214_REG_REQ_LINK_BIT_RATE,
316-
IMX214_LINK_BIT_RATE_MBPS(IMX214_LINK_BIT_RATE(IMX214_DEFAULT_CLK_FREQ)) },
317-
318316
{ CCI_REG8(0x3A03), 0x09 },
319317
{ CCI_REG8(0x3A04), 0x50 },
320318
{ CCI_REG8(0x3A05), 0x01 },
@@ -368,9 +366,6 @@ static const struct cci_reg_sequence mode_1920x1080[] = {
368366
{ IMX214_REG_DIG_CROP_WIDTH, 1920 },
369367
{ IMX214_REG_DIG_CROP_HEIGHT, 1080 },
370368

371-
{ IMX214_REG_REQ_LINK_BIT_RATE,
372-
IMX214_LINK_BIT_RATE_MBPS(IMX214_LINK_BIT_RATE(IMX214_DEFAULT_CLK_FREQ)) },
373-
374369
{ CCI_REG8(0x3A03), 0x04 },
375370
{ CCI_REG8(0x3A04), 0xF8 },
376371
{ CCI_REG8(0x3A05), 0x02 },
@@ -1029,6 +1024,7 @@ static int imx214_start_streaming(struct imx214 *imx214)
10291024
const struct v4l2_mbus_framefmt *fmt;
10301025
struct v4l2_subdev_state *state;
10311026
const struct imx214_mode *mode;
1027+
int link_bit_rate;
10321028
int ret;
10331029

10341030
ret = cci_multi_reg_write(imx214->regmap, mode_table_common,
@@ -1044,6 +1040,14 @@ static int imx214_start_streaming(struct imx214 *imx214)
10441040
return ret;
10451041
}
10461042

1043+
link_bit_rate = IMX214_LINK_BIT_RATE(imx214->xclk_freq);
1044+
ret = cci_write(imx214->regmap, IMX214_REG_REQ_LINK_BIT_RATE,
1045+
IMX214_LINK_BIT_RATE_MBPS(link_bit_rate), NULL);
1046+
if (ret) {
1047+
dev_err(imx214->dev, "failed to configure link bit rate\n");
1048+
return ret;
1049+
}
1050+
10471051
ret = cci_write(imx214->regmap, IMX214_REG_CSI_LANE_MODE,
10481052
IMX214_CSI_4_LANE_MODE, NULL);
10491053
if (ret) {
@@ -1300,7 +1304,14 @@ static int imx214_probe(struct i2c_client *client)
13001304
return dev_err_probe(dev, PTR_ERR(imx214->xclk),
13011305
"failed to get xclk\n");
13021306

1303-
ret = clk_set_rate(imx214->xclk, IMX214_DEFAULT_CLK_FREQ);
1307+
ret = device_property_read_u32(dev, "clock-frequency", &imx214->xclk_freq);
1308+
if (ret) {
1309+
dev_warn(dev,
1310+
"clock-frequency not set, please review your DT. Fallback to default\n");
1311+
imx214->xclk_freq = IMX214_DEFAULT_CLK_FREQ;
1312+
}
1313+
1314+
ret = clk_set_rate(imx214->xclk, imx214->xclk_freq);
13041315
if (ret)
13051316
return dev_err_probe(dev, ret,
13061317
"failed to set xclk frequency\n");

0 commit comments

Comments
 (0)