Lines Matching defs:asd

52 	mutex_lock(&pipe->asd->isp->mutex); /* for get_css_frame_info() / set_fmt() */
58 ret = atomisp_get_css_frame_info(pipe->asd, &pipe->frame_info);
70 ret = atomisp_get_css_frame_info(pipe->asd, &pipe->frame_info);
75 atomisp_alloc_css_stat_bufs(pipe->asd, ATOMISP_INPUT_STREAM_GENERAL);
81 mutex_unlock(&pipe->asd->isp->mutex);
96 dev_err(pipe->asd->isp->dev, "Internal error frame.data_bytes(%u) > vb.length(%lu)\n",
109 static int atomisp_q_one_metadata_buffer(struct atomisp_sub_device *asd,
117 if (asd->metadata_bufs_in_css[stream_id][css_pipe_id] >=
121 if (!list_empty(&asd->metadata[md_type])) {
122 metadata_list = &asd->metadata[md_type];
123 } else if (!list_empty(&asd->metadata_ready[md_type])) {
124 metadata_list = &asd->metadata_ready[md_type];
126 dev_warn(asd->isp->dev, "%s: No metadata buffers available for type %d!\n",
135 if (atomisp_q_metadata_buffer_to_css(asd, metadata_buf,
141 &asd->metadata_in_css[md_type]);
143 asd->metadata_bufs_in_css[stream_id][css_pipe_id]++;
148 static int atomisp_q_one_s3a_buffer(struct atomisp_sub_device *asd,
156 if (asd->s3a_bufs_in_css[css_pipe_id] >= ATOMISP_CSS_Q_DEPTH)
159 if (!list_empty(&asd->s3a_stats)) {
160 s3a_list = &asd->s3a_stats;
161 } else if (!list_empty(&asd->s3a_stats_ready)) {
162 s3a_list = &asd->s3a_stats_ready;
164 dev_warn(asd->isp->dev, "%s: No s3a buffers available!\n",
174 if (atomisp_q_s3a_buffer_to_css(asd, s3a_buf,
180 list_add_tail(&s3a_buf->list, &asd->s3a_stats_in_css);
181 if (s3a_list == &asd->s3a_stats_ready)
182 dev_dbg(asd->isp->dev, "drop one s3a stat with exp_id %d\n", exp_id);
185 asd->s3a_bufs_in_css[css_pipe_id]++;
189 static int atomisp_q_one_dis_buffer(struct atomisp_sub_device *asd,
196 if (asd->dis_bufs_in_css >= ATOMISP_CSS_Q_DEPTH)
199 spin_lock_irqsave(&asd->dis_stats_lock, irqflags);
200 if (list_empty(&asd->dis_stats)) {
201 spin_unlock_irqrestore(&asd->dis_stats_lock, irqflags);
202 dev_warn(asd->isp->dev, "%s: No dis buffers available!\n",
207 dis_buf = list_entry(asd->dis_stats.prev,
210 spin_unlock_irqrestore(&asd->dis_stats_lock, irqflags);
213 if (atomisp_q_dis_buffer_to_css(asd, dis_buf,
215 spin_lock_irqsave(&asd->dis_stats_lock, irqflags);
217 list_add_tail(&dis_buf->list, &asd->dis_stats);
218 spin_unlock_irqrestore(&asd->dis_stats_lock, irqflags);
221 spin_lock_irqsave(&asd->dis_stats_lock, irqflags);
222 list_add_tail(&dis_buf->list, &asd->dis_stats_in_css);
223 spin_unlock_irqrestore(&asd->dis_stats_lock, irqflags);
226 asd->dis_bufs_in_css++;
231 static int atomisp_q_video_buffers_to_css(struct atomisp_sub_device *asd,
239 atomisp_css_get_dvs_grid_info(&asd->params.curr_grid_info);
243 lockdep_assert_held(&asd->isp->mutex);
270 atomisp_makeup_css_parameters(asd,
271 &asd->params.css_param.update_flag,
273 atomisp_apply_css_parameters(asd, &param->params);
276 asd->run_mode->val != ATOMISP_RUN_MODE_VIDEO) {
277 err = atomisp_calculate_real_zoom_region(asd,
280 asd->params.config.dz_config = &param->params.dz_config;
282 atomisp_css_set_isp_config_applied_frame(asd, frame);
283 atomisp_css_update_isp_params_on_pipe(asd,
284 asd->stream_env[stream_id].pipes[css_pipe_id]);
285 asd->params.dvs_6axis = (struct ia_css_dvs_6axis_config *)
297 asd->run_mode->val != ATOMISP_RUN_MODE_VIDEO
299 memcpy(&asd->params.css_param.dz_config,
302 asd->params.css_param.update_flag.dz_config =
304 &asd->params.css_param.dz_config;
305 asd->params.css_update_params_needed = true;
310 err = atomisp_q_video_buffer_to_css(asd, frame, stream_id,
316 dev_err(asd->isp->dev, "%s, css q fails: %d\n",
322 if (asd->params.curr_grid_info.s3a_grid.enable &&
323 css_pipe_id == asd->params.s3a_enabled_pipe &&
325 atomisp_q_one_s3a_buffer(asd, stream_id,
328 if (asd->stream_env[ATOMISP_INPUT_STREAM_GENERAL].stream_info.
331 atomisp_q_one_metadata_buffer(asd, stream_id,
337 atomisp_q_one_dis_buffer(asd, stream_id,
345 int atomisp_qbuffers_to_css(struct atomisp_sub_device *asd)
349 if (asd->copy_mode) {
351 } else if (asd->vfpp->val == ATOMISP_VFPP_DISABLE_SCALER) {
353 } else if (asd->vfpp->val == ATOMISP_VFPP_DISABLE_LOWLAT) {
355 } else if (asd->run_mode->val == ATOMISP_RUN_MODE_VIDEO) {
357 } else if (asd->run_mode->val == ATOMISP_RUN_MODE_PREVIEW) {
364 atomisp_q_video_buffers_to_css(asd, &asd->video_out,
374 struct atomisp_sub_device *asd = pipe->asd;
378 mutex_lock(&asd->isp->mutex);
414 if (asd->streaming) {
418 atomisp_qbuffers_to_css(asd);
422 mutex_unlock(&asd->isp->mutex);
453 isp->inputs[i].asd = NULL;
461 static void atomisp_subdev_init_struct(struct atomisp_sub_device *asd)
463 memset(&asd->params.css_param, 0, sizeof(asd->params.css_param));
464 asd->params.color_effect = V4L2_COLORFX_NONE;
465 asd->params.bad_pixel_en = true;
466 asd->params.gdc_cac_en = false;
467 asd->params.video_dis_en = false;
468 asd->params.sc_en = false;
469 asd->params.fpn_en = false;
470 asd->params.xnr_en = false;
471 asd->params.false_color = 0;
472 asd->params.yuv_ds_en = 0;
474 asd->params.s3a_enabled_pipe = IA_CSS_PIPE_ID_NUM;
476 asd->copy_mode = false;
478 asd->stream_prepared = false;
479 asd->high_speed_mode = false;
480 asd->sensor_array_res.height = 0;
481 asd->sensor_array_res.width = 0;
482 atomisp_css_init_struct(asd);
493 struct atomisp_sub_device *asd = pipe->asd;
534 atomisp_subdev_init_struct(asd);
553 struct atomisp_sub_device *asd = pipe->asd;
579 atomisp_subdev_set_ffmt(&asd->subdev, fh.state,
584 atomisp_css_free_stat_buffers(asd);
585 atomisp_free_internal_buffers(asd);
587 if (isp->inputs[asd->input_curr].asd == asd) {
588 ret = v4l2_subdev_call(isp->inputs[asd->input_curr].camera,
593 /* clear the asd field to show this camera is not used */
594 isp->inputs[asd->input_curr].asd = NULL;
597 atomisp_destroy_pipes_stream(asd);
606 atomisp_subdev_set_selection(&asd->subdev, fh.state,