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 d9139e67c94f819188de1644531940d40ed5ac72..9c44ffba28289e1f771b715839025e5574f3611a 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 7e99c9853532b3eabff0f0509be3943adf936d14..e9e4bfb0f5f97926ff5efc1e3ae1331e8f457711 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 4e004464ac4c98305d40a07a89a7f26df568713e..b13d1cb4668d950e7d80abb6696127a120ca5c6b 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 1deeb7c28379af47d34394c8b974d4a8ed9bd183..900e4c79cd781de80f691be3cdef4679a53be03a 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;