@@ -5786,7 +5786,7 @@ int cif_isp10_streamoff(
57865786 if (streamoff_all == (CIF_ISP10_STREAM_MP | CIF_ISP10_STREAM_SP )) {
57875787 struct cif_isp10_img_src_exp * exp ;
57885788 spin_lock_irqsave (& dev -> img_src_exps .lock , lock_flags );
5789- if (!list_empty (& dev -> img_src_exps .list )) {
5789+ while (!list_empty (& dev -> img_src_exps .list )) {
57905790 exp = list_first_entry (& dev -> img_src_exps .list ,
57915791 struct cif_isp10_img_src_exp ,
57925792 list );
@@ -6306,7 +6306,8 @@ int cif_isp10_reqbufs(
63066306
63076307int cif_isp10_s_exp (
63086308 struct cif_isp10_device * dev ,
6309- struct cif_isp10_img_src_ext_ctrl * exp_ctrl )
6309+ struct cif_isp10_img_src_ext_ctrl * exp_ctrl ,
6310+ bool cls_exp )
63106311{
63116312 struct cif_isp10_img_src_ctrl * ctrl_exp_t = NULL , * ctrl_exp_g = NULL ;
63126313 struct cif_isp10_img_src_exp * exp = NULL , * exp_t = NULL , * exp_g = NULL ;
@@ -6322,6 +6323,21 @@ int cif_isp10_s_exp(
63226323 dev -> img_src_exps .inited = true;
63236324 }
63246325
6326+ /* clean exposure list before */
6327+ if (cls_exp ) {
6328+ spin_lock_irqsave (& dev -> img_src_exps .lock , lock_flags );
6329+ while (!list_empty (& dev -> img_src_exps .list )) {
6330+ exp = list_first_entry (& dev -> img_src_exps .list ,
6331+ struct cif_isp10_img_src_exp ,
6332+ list );
6333+ list_del (& exp -> list );
6334+ kfree (exp -> exp .ctrls );
6335+ kfree (exp );
6336+ }
6337+ spin_unlock_irqrestore (& dev -> img_src_exps .lock , lock_flags );
6338+ exp = NULL ;
6339+ }
6340+
63256341 if (dev -> img_src_exps .exp_valid_frms [VALID_FR_EXP_T_INDEX ] ==
63266342 dev -> img_src_exps .exp_valid_frms [VALID_FR_EXP_G_INDEX ]) {
63276343 exp = kmalloc (sizeof (* exp ), GFP_KERNEL );
0 commit comments