@@ -2572,7 +2572,7 @@ static int imx500_start_streaming(struct imx500 *imx500)
2572
2572
if (ret ) {
2573
2573
dev_err (& client -> dev , "%s failed to set image mode\n" ,
2574
2574
__func__ );
2575
- return ret ;
2575
+ goto err_runtime_put ;
2576
2576
}
2577
2577
2578
2578
/* Acquire loader and main firmware if needed */
@@ -2584,7 +2584,7 @@ static int imx500_start_streaming(struct imx500 *imx500)
2584
2584
if (ret ) {
2585
2585
dev_err (& client -> dev ,
2586
2586
"Unable to acquire firmware loader\n" );
2587
- return ret ;
2587
+ goto err_runtime_put ;
2588
2588
}
2589
2589
}
2590
2590
if (!imx500 -> fw_main ) {
@@ -2594,7 +2594,7 @@ static int imx500_start_streaming(struct imx500 *imx500)
2594
2594
if (ret ) {
2595
2595
dev_err (& client -> dev ,
2596
2596
"Unable to acquire main firmware\n" );
2597
- return ret ;
2597
+ goto err_runtime_put ;
2598
2598
}
2599
2599
}
2600
2600
}
@@ -2606,7 +2606,7 @@ static int imx500_start_streaming(struct imx500 *imx500)
2606
2606
if (ret ) {
2607
2607
dev_err (& client -> dev ,
2608
2608
"%s failed to set common settings\n" , __func__ );
2609
- return ret ;
2609
+ goto err_runtime_put ;
2610
2610
}
2611
2611
2612
2612
imx500 -> common_regs_written = true;
@@ -2618,7 +2618,7 @@ static int imx500_start_streaming(struct imx500 *imx500)
2618
2618
dev_err (& client -> dev ,
2619
2619
"%s failed to transition from program empty state\n" ,
2620
2620
__func__ );
2621
- return ret ;
2621
+ goto err_runtime_put ;
2622
2622
}
2623
2623
imx500 -> loader_and_main_written = true;
2624
2624
}
@@ -2629,7 +2629,7 @@ static int imx500_start_streaming(struct imx500 *imx500)
2629
2629
dev_err (& client -> dev ,
2630
2630
"%s failed to transition to network loaded\n" ,
2631
2631
__func__ );
2632
- return ret ;
2632
+ goto err_runtime_put ;
2633
2633
}
2634
2634
imx500 -> network_written = true;
2635
2635
}
@@ -2640,7 +2640,7 @@ static int imx500_start_streaming(struct imx500 *imx500)
2640
2640
if (ret ) {
2641
2641
dev_err (& client -> dev , "%s failed to enable DNN\n" ,
2642
2642
__func__ );
2643
- return ret ;
2643
+ goto err_runtime_put ;
2644
2644
}
2645
2645
2646
2646
v4l2_ctrl_activate (imx500 -> device_id , true);
@@ -2652,7 +2652,7 @@ static int imx500_start_streaming(struct imx500 *imx500)
2652
2652
reg_list -> num_of_regs , NULL );
2653
2653
if (ret ) {
2654
2654
dev_err (& client -> dev , "%s failed to set mode\n" , __func__ );
2655
- return ret ;
2655
+ goto err_runtime_put ;
2656
2656
}
2657
2657
2658
2658
/* Apply customized values from user */
@@ -2668,6 +2668,14 @@ static int imx500_start_streaming(struct imx500 *imx500)
2668
2668
cci_write (imx500 -> regmap , IMX500_REG_MODE_SELECT , IMX500_MODE_STREAMING ,
2669
2669
& ret );
2670
2670
2671
+ if (ret )
2672
+ goto err_runtime_put ;
2673
+
2674
+ return 0 ;
2675
+
2676
+ err_runtime_put :
2677
+ pm_runtime_mark_last_busy (& client -> dev );
2678
+ pm_runtime_put_autosuspend (& client -> dev );
2671
2679
return ret ;
2672
2680
}
2673
2681
0 commit comments