diff options
Diffstat (limited to 'target/linux/brcm2708/patches-4.14/950-0324-ov5647-Add-support-for-non-continuous-clock-mode.patch')
-rw-r--r-- | target/linux/brcm2708/patches-4.14/950-0324-ov5647-Add-support-for-non-continuous-clock-mode.patch | 72 |
1 files changed, 72 insertions, 0 deletions
diff --git a/target/linux/brcm2708/patches-4.14/950-0324-ov5647-Add-support-for-non-continuous-clock-mode.patch b/target/linux/brcm2708/patches-4.14/950-0324-ov5647-Add-support-for-non-continuous-clock-mode.patch new file mode 100644 index 0000000000..62de988cb5 --- /dev/null +++ b/target/linux/brcm2708/patches-4.14/950-0324-ov5647-Add-support-for-non-continuous-clock-mode.patch @@ -0,0 +1,72 @@ +From f4d559078cab81209b721a83ffd87a40a6fb52c4 Mon Sep 17 00:00:00 2001 +From: Dave Stevenson <dave.stevenson@raspberrypi.org> +Date: Fri, 23 Jun 2017 17:58:55 +0100 +Subject: [PATCH 324/454] ov5647: Add support for non-continuous clock mode + +The driver was only supporting continuous clock mode +although this was not stated anywhere. +Non-continuous clock saves a small amount of power and +on some SoCs is easier to interface with. + +Signed-off-by: Dave Stevenson <dave.stevenson@raspberrypi.org> +--- + drivers/media/i2c/ov5647.c | 13 ++++++++++--- + 1 file changed, 10 insertions(+), 3 deletions(-) + +--- a/drivers/media/i2c/ov5647.c ++++ b/drivers/media/i2c/ov5647.c +@@ -86,6 +86,7 @@ struct ov5647 { + int power_count; + struct clk *xclk; + struct gpio_desc *pwdn; ++ unsigned int flags; + }; + + static inline struct ov5647 *to_state(struct v4l2_subdev *sd) +@@ -302,6 +303,7 @@ static int __sensor_init(struct v4l2_sub + int ret; + u8 resetval, rdval; + struct i2c_client *client = v4l2_get_subdevdata(sd); ++ struct ov5647 *ov5647 = to_state(sd); + + ret = ov5647_read(sd, 0x0100, &rdval); + if (ret < 0) +@@ -329,7 +331,9 @@ static int __sensor_init(struct v4l2_sub + return ret; + } + +- return ov5647_write(sd, 0x4800, 0x04); ++ return ov5647_write(sd, 0x4800, ++ (ov5647->flags & V4L2_MBUS_CSI2_NONCONTINUOUS_CLOCK) ? ++ 0x34 : 0x04); + } + + static int ov5647_sensor_power(struct v4l2_subdev *sd, int on) +@@ -547,7 +551,7 @@ static const struct v4l2_subdev_internal + .open = ov5647_open, + }; + +-static int ov5647_parse_dt(struct device_node *np) ++static int ov5647_parse_dt(struct device_node *np, struct ov5647 *sensor) + { + struct v4l2_fwnode_endpoint bus_cfg; + struct device_node *ep; +@@ -560,6 +564,9 @@ static int ov5647_parse_dt(struct device + + ret = v4l2_fwnode_endpoint_parse(of_fwnode_handle(ep), &bus_cfg); + ++ if (!ret) ++ sensor->flags = bus_cfg.bus.mipi_csi2.flags; ++ + of_node_put(ep); + return ret; + } +@@ -579,7 +586,7 @@ static int ov5647_probe(struct i2c_clien + return -ENOMEM; + + if (IS_ENABLED(CONFIG_OF) && np) { +- ret = ov5647_parse_dt(np); ++ ret = ov5647_parse_dt(np, sensor); + if (ret) { + dev_err(dev, "DT parsing error: %d\n", ret); + return ret; |