diff mbox series

[03/11] rcar-vin: Improve async notifier cleanup paths

Message ID 20210413180253.2575451-4-niklas.soderlund+renesas@ragnatech.se (mailing list archive)
State New, archived
Headers show
Series rcar-vin: Add r8a779a0 support | expand

Commit Message

Niklas Söderlund April 13, 2021, 6:02 p.m. UTC
The cleanup code for the async notifiers can be refactored to own
functions to reduce code duplication and improve readability. While at
it rename the CSI-2 initialization function _csi2_ instead of _mc_ to
match.

Signed-off-by: Niklas Söderlund <niklas.soderlund+renesas@ragnatech.se>
---
 drivers/media/platform/rcar-vin/rcar-core.c | 51 ++++++++++++---------
 1 file changed, 30 insertions(+), 21 deletions(-)

Comments

Jacopo Mondi July 6, 2021, 4:41 p.m. UTC | #1
Hi Niklas

On Tue, Apr 13, 2021 at 08:02:45PM +0200, Niklas Söderlund wrote:
> The cleanup code for the async notifiers can be refactored to own
> functions to reduce code duplication and improve readability. While at
> it rename the CSI-2 initialization function _csi2_ instead of _mc_ to
> match.
>
> Signed-off-by: Niklas Söderlund <niklas.soderlund+renesas@ragnatech.se>
> ---
>  drivers/media/platform/rcar-vin/rcar-core.c | 51 ++++++++++++---------
>  1 file changed, 30 insertions(+), 21 deletions(-)
>
> diff --git a/drivers/media/platform/rcar-vin/rcar-core.c b/drivers/media/platform/rcar-vin/rcar-core.c
> index d4932f7b42647ee1..da23d55aa72b7f0d 100644
> --- a/drivers/media/platform/rcar-vin/rcar-core.c
> +++ b/drivers/media/platform/rcar-vin/rcar-core.c
> @@ -383,6 +383,16 @@ static void rvin_group_put(struct rvin_dev *vin)
>  	kref_put(&group->refcount, rvin_group_release);
>  }
>
> +static void rvin_group_notifier_cleanup(struct rvin_dev *vin)
> +{
> +	mutex_lock(&vin->group->lock);
> +	if (&vin->v4l2_dev == vin->group->notifier.v4l2_dev) {
> +		v4l2_async_notifier_unregister(&vin->group->notifier);
> +		v4l2_async_notifier_cleanup(&vin->group->notifier);
> +	}
> +	mutex_unlock(&vin->group->lock);
> +}
> +
>  /* -----------------------------------------------------------------------------
>   * Controls
>   */
> @@ -676,6 +686,12 @@ static int rvin_parallel_parse_of(struct rvin_dev *vin)
>  	return ret;
>  }
>
> +static void rvin_parallel_cleanup(struct rvin_dev *vin)
> +{
> +	v4l2_async_notifier_unregister(&vin->notifier);
> +	v4l2_async_notifier_cleanup(&vin->notifier);
> +}
> +
>  static int rvin_parallel_init(struct rvin_dev *vin)
>  {
>  	int ret;
> @@ -937,7 +953,16 @@ static int rvin_mc_parse_of_graph(struct rvin_dev *vin)
>  	return 0;
>  }
>
> -static int rvin_mc_init(struct rvin_dev *vin)
> +static void rvin_csi2_cleanup(struct rvin_dev *vin)
> +{
> +	if (!vin->info->use_mc)
> +		return;
> +
> +	rvin_group_notifier_cleanup(vin);
> +	rvin_group_put(vin);
> +}
> +
> +static int rvin_csi2_init(struct rvin_dev *vin)
>  {
>  	int ret;
>
> @@ -1445,7 +1470,7 @@ static int rcar_vin_probe(struct platform_device *pdev)
>  	platform_set_drvdata(pdev, vin);
>
>  	if (vin->info->use_mc) {
> -		ret = rvin_mc_init(vin);
> +		ret = rvin_csi2_init(vin);
>  		if (ret)
>  			goto error_dma_unregister;
>  	}
> @@ -1458,20 +1483,9 @@ static int rcar_vin_probe(struct platform_device *pdev)
>  	pm_runtime_enable(&pdev->dev);
>
>  	return 0;
> -

Intentional ?

Reviewed-by: Jacopo Mondi <jacopo+renesas@jmondi.org>

Thanks
   j

>  error_group_unregister:
>  	rvin_free_controls(vin);
> -
> -	if (vin->info->use_mc) {
> -		mutex_lock(&vin->group->lock);
> -		if (&vin->v4l2_dev == vin->group->notifier.v4l2_dev) {
> -			v4l2_async_notifier_unregister(&vin->group->notifier);
> -			v4l2_async_notifier_cleanup(&vin->group->notifier);
> -		}
> -		mutex_unlock(&vin->group->lock);
> -		rvin_group_put(vin);
> -	}
> -
> +	rvin_csi2_cleanup(vin);
>  error_dma_unregister:
>  	rvin_dma_unregister(vin);
>
> @@ -1486,14 +1500,9 @@ static int rcar_vin_remove(struct platform_device *pdev)
>
>  	rvin_v4l2_unregister(vin);
>
> -	v4l2_async_notifier_unregister(&vin->notifier);
> -	v4l2_async_notifier_cleanup(&vin->notifier);
> +	rvin_parallel_cleanup(vin);
>
> -	if (vin->info->use_mc) {
> -		v4l2_async_notifier_unregister(&vin->group->notifier);
> -		v4l2_async_notifier_cleanup(&vin->group->notifier);
> -		rvin_group_put(vin);
> -	}
> +	rvin_csi2_cleanup(vin);
>
>  	rvin_free_controls(vin);
>
> --
> 2.31.1
>
diff mbox series

Patch

diff --git a/drivers/media/platform/rcar-vin/rcar-core.c b/drivers/media/platform/rcar-vin/rcar-core.c
index d4932f7b42647ee1..da23d55aa72b7f0d 100644
--- a/drivers/media/platform/rcar-vin/rcar-core.c
+++ b/drivers/media/platform/rcar-vin/rcar-core.c
@@ -383,6 +383,16 @@  static void rvin_group_put(struct rvin_dev *vin)
 	kref_put(&group->refcount, rvin_group_release);
 }
 
+static void rvin_group_notifier_cleanup(struct rvin_dev *vin)
+{
+	mutex_lock(&vin->group->lock);
+	if (&vin->v4l2_dev == vin->group->notifier.v4l2_dev) {
+		v4l2_async_notifier_unregister(&vin->group->notifier);
+		v4l2_async_notifier_cleanup(&vin->group->notifier);
+	}
+	mutex_unlock(&vin->group->lock);
+}
+
 /* -----------------------------------------------------------------------------
  * Controls
  */
@@ -676,6 +686,12 @@  static int rvin_parallel_parse_of(struct rvin_dev *vin)
 	return ret;
 }
 
+static void rvin_parallel_cleanup(struct rvin_dev *vin)
+{
+	v4l2_async_notifier_unregister(&vin->notifier);
+	v4l2_async_notifier_cleanup(&vin->notifier);
+}
+
 static int rvin_parallel_init(struct rvin_dev *vin)
 {
 	int ret;
@@ -937,7 +953,16 @@  static int rvin_mc_parse_of_graph(struct rvin_dev *vin)
 	return 0;
 }
 
-static int rvin_mc_init(struct rvin_dev *vin)
+static void rvin_csi2_cleanup(struct rvin_dev *vin)
+{
+	if (!vin->info->use_mc)
+		return;
+
+	rvin_group_notifier_cleanup(vin);
+	rvin_group_put(vin);
+}
+
+static int rvin_csi2_init(struct rvin_dev *vin)
 {
 	int ret;
 
@@ -1445,7 +1470,7 @@  static int rcar_vin_probe(struct platform_device *pdev)
 	platform_set_drvdata(pdev, vin);
 
 	if (vin->info->use_mc) {
-		ret = rvin_mc_init(vin);
+		ret = rvin_csi2_init(vin);
 		if (ret)
 			goto error_dma_unregister;
 	}
@@ -1458,20 +1483,9 @@  static int rcar_vin_probe(struct platform_device *pdev)
 	pm_runtime_enable(&pdev->dev);
 
 	return 0;
-
 error_group_unregister:
 	rvin_free_controls(vin);
-
-	if (vin->info->use_mc) {
-		mutex_lock(&vin->group->lock);
-		if (&vin->v4l2_dev == vin->group->notifier.v4l2_dev) {
-			v4l2_async_notifier_unregister(&vin->group->notifier);
-			v4l2_async_notifier_cleanup(&vin->group->notifier);
-		}
-		mutex_unlock(&vin->group->lock);
-		rvin_group_put(vin);
-	}
-
+	rvin_csi2_cleanup(vin);
 error_dma_unregister:
 	rvin_dma_unregister(vin);
 
@@ -1486,14 +1500,9 @@  static int rcar_vin_remove(struct platform_device *pdev)
 
 	rvin_v4l2_unregister(vin);
 
-	v4l2_async_notifier_unregister(&vin->notifier);
-	v4l2_async_notifier_cleanup(&vin->notifier);
+	rvin_parallel_cleanup(vin);
 
-	if (vin->info->use_mc) {
-		v4l2_async_notifier_unregister(&vin->group->notifier);
-		v4l2_async_notifier_cleanup(&vin->group->notifier);
-		rvin_group_put(vin);
-	}
+	rvin_csi2_cleanup(vin);
 
 	rvin_free_controls(vin);