On 28.07.2023 15:23, Vikash Garodia wrote: > This implements the functions to handle different core > and instance state transitions. > > Signed-off-by: Dikshita Agarwal <quic_dikshita@xxxxxxxxxxx> > Signed-off-by: Vikash Garodia <quic_vgarodia@xxxxxxxxxxx> > --- [...] > +enum msm_vidc_core_sub_state { > + CORE_SUBSTATE_NONE = 0x0, > + CORE_SUBSTATE_POWER_ENABLE = BIT(0), > + CORE_SUBSTATE_GDSC_HANDOFF = BIT(1), > + CORE_SUBSTATE_PM_SUSPEND = BIT(2), > + CORE_SUBSTATE_FW_PWR_CTRL = BIT(3), > + CORE_SUBSTATE_PAGE_FAULT = BIT(4), > + CORE_SUBSTATE_CPU_WATCHDOG = BIT(5), > + CORE_SUBSTATE_VIDEO_UNRESPONSIVE = BIT(6), > + CORE_SUBSTATE_MAX = BIT(7), Why store it in an enum if they're not consecutive? You can make them preprocessor #defines. > +}; > + > +enum msm_vidc_core_event_type { > + CORE_EVENT_NONE = BIT(0), > + CORE_EVENT_UPDATE_SUB_STATE = BIT(1), > +}; Ditto (even though techinically they're consecutive) > + > +enum msm_vidc_state { > + MSM_VIDC_OPEN, > + MSM_VIDC_INPUT_STREAMING, > + MSM_VIDC_OUTPUT_STREAMING, > + MSM_VIDC_STREAMING, > + MSM_VIDC_CLOSE, > + MSM_VIDC_ERROR, > +}; > + > +#define MSM_VIDC_SUB_STATE_NONE 0 > +#define MSM_VIDC_MAX_SUB_STATES 6 > +/* > + * max value of inst->sub_state if all > + * the 6 valid bits are set i.e 111111==>63 > + */ > +#define MSM_VIDC_MAX_SUB_STATE_VALUE ((1 << MSM_VIDC_MAX_SUB_STATES) - 1) > + > +enum msm_vidc_sub_state { > + MSM_VIDC_DRAIN = BIT(0), > + MSM_VIDC_DRC = BIT(1), > + MSM_VIDC_DRAIN_LAST_BUFFER = BIT(2), > + MSM_VIDC_DRC_LAST_BUFFER = BIT(3), > + MSM_VIDC_INPUT_PAUSE = BIT(4), > + MSM_VIDC_OUTPUT_PAUSE = BIT(5), Ditto [...] > +static int msm_vidc_core_init_wait_state(struct msm_vidc_core *core, > + enum msm_vidc_core_event_type type, > + struct msm_vidc_event_data *data) > +{ > + int rc = 0; rc seems never assigned again, good to drop [...] > + > +static int msm_vidc_core_init_state(struct msm_vidc_core *core, > + enum msm_vidc_core_event_type type, > + struct msm_vidc_event_data *data) > +{ > + int rc = 0; Ditto [...] > +static int msm_vidc_core_error_state(struct msm_vidc_core *core, > + enum msm_vidc_core_event_type type, > + struct msm_vidc_event_data *data) > +{ > + int rc = 0; Ditto [...] > +int msm_vidc_update_core_state(struct msm_vidc_core *core, > + enum msm_vidc_core_state request_state, const char *func) > +{ > + struct msm_vidc_core_state_handle *state_handle = NULL; > + int rc = 0; Ditto [...] > +int msm_vidc_change_core_state(struct msm_vidc_core *core, > + enum msm_vidc_core_state request_state, const char *func) > +{ > + enum msm_vidc_allow allow; > + int rc = 0; Ditto [...] > +bool is_state(struct msm_vidc_inst *inst, enum msm_vidc_state state) > +{ > + return inst->state == state; > +} > + > +bool is_sub_state(struct msm_vidc_inst *inst, enum msm_vidc_sub_state sub_state) > +{ > + return (inst->sub_state & sub_state); > +} Why are there 2 separate funcs for core and inst? Don't we have a pointer within one to the other? [...] > + > +int msm_vidc_update_state(struct msm_vidc_inst *inst, > + enum msm_vidc_state request_state, const char *func) > +{ > + struct msm_vidc_state_handle *state_handle = NULL; > + int rc = 0; rc is unused [...] > +static int msm_vidc_set_sub_state(struct msm_vidc_inst *inst, > + enum msm_vidc_sub_state sub_state, const char *func) > +{ > + char sub_state_name[MAX_NAME_LENGTH]; > + int cnt, rc = 0; ditto Konrad