From 1c7d6584a7811b7785ae5c1e378f14b5ba0971cf Mon Sep 17 00:00:00 2001 From: takeshi_hoshina Date: Mon, 2 Nov 2020 11:07:33 +0900 Subject: basesystem-jj recipes --- ...dia-i2c-ov10640-compensate-disabled-mutex.patch | 85 ++++++++++++++++++++++ 1 file changed, 85 insertions(+) create mode 100644 bsp/meta-rcar/meta-rcar-gen3-adas/recipes-kernel/linux/linux-renesas/0485-media-i2c-ov10640-compensate-disabled-mutex.patch (limited to 'bsp/meta-rcar/meta-rcar-gen3-adas/recipes-kernel/linux/linux-renesas/0485-media-i2c-ov10640-compensate-disabled-mutex.patch') diff --git a/bsp/meta-rcar/meta-rcar-gen3-adas/recipes-kernel/linux/linux-renesas/0485-media-i2c-ov10640-compensate-disabled-mutex.patch b/bsp/meta-rcar/meta-rcar-gen3-adas/recipes-kernel/linux/linux-renesas/0485-media-i2c-ov10640-compensate-disabled-mutex.patch new file mode 100644 index 00000000..1ddc7f9e --- /dev/null +++ b/bsp/meta-rcar/meta-rcar-gen3-adas/recipes-kernel/linux/linux-renesas/0485-media-i2c-ov10640-compensate-disabled-mutex.patch @@ -0,0 +1,85 @@ +From 955d8c3c39605a389f10c96b2cf43b975476f272 Mon Sep 17 00:00:00 2001 +From: Vladimir Barinov +Date: Tue, 10 Mar 2020 11:34:03 +0300 +Subject: [PATCH] media: i2c: ov10640: compensate disabled mutex + +Compensate ADV_DEBUG mutex after disabling in v4l2_ioctl + +Signed-off-by: Vladimir Barinov +--- + drivers/media/i2c/soc_camera/ov10640.c | 16 +++++++++++++++- + 1 file changed, 15 insertions(+), 1 deletion(-) + +diff --git a/drivers/media/i2c/soc_camera/ov10640.c b/drivers/media/i2c/soc_camera/ov10640.c +index f5f0fdd..d52a0a2 100644 +--- a/drivers/media/i2c/soc_camera/ov10640.c ++++ b/drivers/media/i2c/soc_camera/ov10640.c +@@ -37,6 +37,7 @@ struct ov10640_priv { + struct v4l2_ctrl_handler hdl; + struct media_pad pad; + struct v4l2_rect rect; ++ struct mutex lock; + int subsampling; + int fps_numerator; + int fps_denominator; +@@ -328,6 +329,7 @@ static int ov10640_g_register(struct v4l2_subdev *sd, + struct v4l2_dbg_register *reg) + { + struct i2c_client *client = v4l2_get_subdevdata(sd); ++ struct ov10640_priv *priv = to_ov10640(client); + int ret; + __be64 be_val; + +@@ -336,10 +338,14 @@ static int ov10640_g_register(struct v4l2_subdev *sd, + if (reg->size > sizeof(reg->val)) + reg->size = sizeof(reg->val); + ++ mutex_lock(&priv->lock); ++ + ret = reg16_read_n(client, (u16)reg->reg, (u8*)&be_val, reg->size); + be_val = be_val << ((sizeof(be_val) - reg->size) * 8); + reg->val = be64_to_cpu(be_val); + ++ mutex_unlock(&priv->lock); ++ + return ret; + } + +@@ -347,7 +353,9 @@ static int ov10640_s_register(struct v4l2_subdev *sd, + const struct v4l2_dbg_register *reg) + { + struct i2c_client *client = v4l2_get_subdevdata(sd); ++ struct ov10640_priv *priv = to_ov10640(client); + u32 size = reg->size; ++ int ret; + __be64 be_val; + + if (!size) +@@ -355,10 +363,15 @@ static int ov10640_s_register(struct v4l2_subdev *sd, + if (size > sizeof(reg->val)) + size = sizeof(reg->val); + ++ mutex_lock(&priv->lock); ++ + be_val = cpu_to_be64(reg->val); + be_val = be_val >> ((sizeof(be_val) - size) * 8); ++ ret = reg16_write_n(client, (u16)reg->reg, (u8*)&be_val, size); + +- return reg16_write_n(client, (u16)reg->reg, (u8*)&be_val, size); ++ mutex_unlock(&priv->lock); ++ ++ return ret; + } + #endif + +@@ -711,6 +724,7 @@ static int ov10640_probe(struct i2c_client *client, + priv->rect.height = OV10640_DEFAULT_HEIGHT; + priv->fps_numerator = 1; + priv->fps_denominator = 30; ++ mutex_init(&priv->lock); + + v4l2_ctrl_handler_init(&priv->hdl, 4); + v4l2_ctrl_new_std(&priv->hdl, &ov10640_ctrl_ops, +-- +2.7.4 + -- cgit 1.2.3-korg