struct fimc_is_group *gprev, *gnext;
struct fimc_is_group_frame *gframe;
struct fimc_is_group_task *gtask;
+ struct fimc_is_group *child;
+ struct fimc_is_group_task *gtask_child;
bool try_sdown = false;
bool try_rdown = false;
+ bool try_gdown[GROUP_ID_MAX] = {false};
+ u32 gtask_child_id = 0;
FIMC_BUG(!groupmgr);
FIMC_BUG(!group);
/* from ISP-MCSC to ISP-DCP-MCSC group setting change */
fimc_is_groupmgr_votf_change_path(group->vnext, START_VIRTUAL_OTF);
+ child = group->child;
+ while (child) {
+ if (test_bit(FIMC_IS_GROUP_OTF_INPUT, &group->state))
+ break;
+
+ gtask_child = &groupmgr->gtask[child->id];
+ gtask_child_id = child->id;
+ child = child->child;
+ if (!test_bit(FIMC_IS_GTASK_START, >ask_child->state))
+ continue;
+
+ ret = down_interruptible(>ask_child->smp_resource);
+ if (ret) {
+ mgerr(" down fail(%d) #2", group, group, ret);
+ goto p_err_ignore;
+ }
+ try_gdown[gtask_child_id] = true;
+ }
+
if (device->sensor && !test_bit(FIMC_IS_SENSOR_FRONT_START, &device->sensor->state)) {
/*
* this statement is execued only at initial.
kthread_queue_work(&vnext_gtask->worker, &vframe->work);
}
+ child = group->child;
+ while (child) {
+ if (test_bit(FIMC_IS_GROUP_OTF_INPUT, &group->state))
+ break;
+
+ gtask_child = &groupmgr->gtask[child->id];
+ if (try_gdown[child->id])
+ up(>ask_child->smp_resource);
+
+ child = child->child;
+ }
+
if (group->vprev)
fimc_is_groupmgr_votf_change_path(group, END_VIRTUAL_OTF);
kthread_queue_work(&vnext_gtask->worker, &vframe->work);
}
+ child = group->child;
+ while (child) {
+ if (test_bit(FIMC_IS_GROUP_OTF_INPUT, &group->state))
+ break;
+
+ gtask_child = &groupmgr->gtask[child->id];
+ if (try_gdown[child->id])
+ up(>ask_child->smp_resource);
+
+ child = child->child;
+ }
+
if (group->vprev)
fimc_is_groupmgr_votf_change_path(group, END_VIRTUAL_OTF);
struct fimc_is_group *child;
#endif
ulong flags;
+ struct fimc_is_group_task *gtask_child;
FIMC_BUG(!groupmgr);
FIMC_BUG(!group);
spin_unlock_irqrestore(&gframemgr->gframe_slock, flags);
}
+ child = group->child;
+ while (child) {
+ if (test_bit(FIMC_IS_GROUP_OTF_INPUT, &group->state))
+ break;
+
+ gtask_child = &groupmgr->gtask[child->id];
+ child = child->child;
+ if (!test_bit(FIMC_IS_GTASK_START, >ask_child->state))
+ continue;
+
+ up(>ask_child->smp_resource);
+ }
+
smp_shot_inc(group);
up(>ask->smp_resource);