static int gsc_capture_streamon(struct file *file, void *priv, enum v4l2_buf_type type) { struct gsc_dev *gsc = video_drvdata(file); struct gsc_pipeline *p = &gsc->pipeline; int ret; if (gsc_cap_active(gsc)) return -EBUSY; if (p->disp) { gsc_pm_qos_ctrl(gsc, GSC_QOS_ON, 267000, 200000); media_entity_pipeline_start(&p->disp->entity, p->pipe); } else if (p->sensor) { media_entity_pipeline_start(&p->sensor->entity, p->pipe); } else { gsc_err("Error pipeline"); return -EPIPE; } ret = gsc_cap_link_validate(gsc); if (ret) return ret; gsc_hw_set_sw_reset(gsc); ret= gsc_wait_reset(gsc); if (ret < 0) { gsc_err("gscaler s/w reset timeout"); return ret; } gsc_hw_set_output_buf_mask_all(gsc); return vb2_streamon(&gsc->cap.vbq, type); }
static int gsc_capture_streamon(struct file *file, void *priv, enum v4l2_buf_type type) { struct gsc_dev *gsc = video_drvdata(file); struct gsc_pipeline *p = &gsc->pipeline; int ret; if (gsc_cap_active(gsc)) return -EBUSY; if (p->disp) { media_entity_pipeline_start(&p->disp->entity, p->pipe); } else if (p->sensor) { media_entity_pipeline_start(&p->sensor->entity, p->pipe); } else { gsc_err("Error pipeline"); return -EPIPE; } ret = gsc_cap_link_validate(gsc); if (ret) return ret; return vb2_streamon(&gsc->cap.vbq, type); }
static int gsc_capture_stop_streaming(struct vb2_queue *q) { struct gsc_ctx *ctx = q->drv_priv; struct gsc_dev *gsc = ctx->gsc_dev; if (!gsc_cap_active(gsc)) return -EINVAL; return gsc_cap_stop_capture(gsc); }
static int gsc_capture_streamon(struct file *file, void *priv, enum v4l2_buf_type type) { struct gsc_dev *gsc = video_drvdata(file); if (gsc_cap_active(gsc)) { gsc_err("gsc didn't stop complete"); return -EBUSY; } return vb2_streamon(&gsc->cap.vbq, type); }
static int gsc_cap_stop_capture(struct gsc_dev *gsc) { int ret; if (!gsc_cap_active(gsc)) { gsc_warn("already stopped\n"); return 0; } gsc_dbg("G-Scaler h/w disable control"); gsc_hw_enable_control(gsc, false); clear_bit(ST_CAPT_STREAM, &gsc->state); ret = gsc_wait_stop(gsc); if (ret) { gsc_err("GSCALER_OP_STATUS is operating\n"); return ret; } return gsc_capture_state_cleanup(gsc); }