media: atomisp: Remove in_reset argument from atomisp_css_start()
authorHans de Goede <hdegoede@redhat.com>
Fri, 12 May 2023 17:31:21 +0000 (18:31 +0100)
committerMauro Carvalho Chehab <mchehab@kernel.org>
Fri, 9 Jun 2023 13:53:23 +0000 (14:53 +0100)
The in_reset argument to atomisp_css_start() is only ever true
in atomisp_assert_recovery_work(), drop the argument and move
the special reset handlig to atomisp_assert_recovery_work().

Reviewed-by: Andy Shevchenko <andy.shevchenko@gmail.com>
Signed-off-by: Hans de Goede <hdegoede@redhat.com>
Signed-off-by: Mauro Carvalho Chehab <mchehab@kernel.org>
drivers/staging/media/atomisp/pci/atomisp_cmd.c
drivers/staging/media/atomisp/pci/atomisp_compat.h
drivers/staging/media/atomisp/pci/atomisp_compat_css20.c
drivers/staging/media/atomisp/pci/atomisp_ioctl.c

index d9139e6..9c44ffb 100644 (file)
@@ -974,7 +974,13 @@ void atomisp_assert_recovery_work(struct work_struct *work)
 
        atomisp_css_input_set_mode(&isp->asd, IA_CSS_INPUT_MODE_BUFFERED_SENSOR);
 
-       if (atomisp_css_start(&isp->asd, true)) {
+       /* Recreate streams destroyed by atomisp_css_stop() */
+       atomisp_create_pipes_stream(&isp->asd);
+
+       /* Invalidate caches. FIXME: should flush only necessary buffers */
+       wbinvd();
+
+       if (atomisp_css_start(&isp->asd)) {
                dev_warn(isp->dev, "start SP failed, so do not set streaming to be enable!\n");
        } else {
                spin_lock_irqsave(&isp->lock, flags);
index 7e99c98..e9e4bfb 100644 (file)
@@ -78,7 +78,7 @@ int atomisp_q_dis_buffer_to_css(struct atomisp_sub_device *asd,
 
 void ia_css_mmu_invalidate_cache(void);
 
-int atomisp_css_start(struct atomisp_sub_device *asd, bool in_reset);
+int atomisp_css_start(struct atomisp_sub_device *asd);
 
 void atomisp_css_update_isp_params(struct atomisp_sub_device *asd);
 void atomisp_css_update_isp_params_on_pipe(struct atomisp_sub_device *asd,
index 4e00446..b13d1cb 100644 (file)
@@ -985,21 +985,12 @@ int atomisp_q_dis_buffer_to_css(struct atomisp_sub_device *asd,
        return 0;
 }
 
-int atomisp_css_start(struct atomisp_sub_device *asd, bool in_reset)
+int atomisp_css_start(struct atomisp_sub_device *asd)
 {
        struct atomisp_device *isp = asd->isp;
        bool sp_is_started = false;
        int ret = 0, i = 0;
 
-       if (in_reset) {
-               ret = atomisp_css_update_stream(asd);
-               if (ret)
-                       return ret;
-
-               /* Invalidate caches. FIXME: should flush only necessary buffers */
-               wbinvd();
-       }
-
        if (!sh_css_hrt_system_is_idle())
                dev_err(isp->dev, "CSS HW not idle before starting SP\n");
 
index 1deeb7c..900e4c7 100644 (file)
@@ -1120,7 +1120,7 @@ int atomisp_start_streaming(struct vb2_queue *vq, unsigned int count)
        }
        asd->params.dvs_6axis = NULL;
 
-       ret = atomisp_css_start(asd, false);
+       ret = atomisp_css_start(asd);
        if (ret) {
                atomisp_flush_video_pipe(pipe, VB2_BUF_STATE_QUEUED, true);
                goto out_unlock;