mirror of
https://github.com/hardkernel/linux.git
synced 2026-06-08 20:07:46 +09:00
media: rk-isp10: modify for af function
add af funtion first time Change-Id: I91fc8c532e47987cc63694b242f5bac7ef1bc59c Signed-off-by: Hu Kejun <william.hu@rock-chips.com>
This commit is contained in:
@@ -4917,11 +4917,23 @@ static int cif_isp10_start(
|
||||
cif_isp10_img_src_ioctl(dev->img_src,
|
||||
RK_VIDIOC_SENSOR_MODE_DATA,
|
||||
&dev->img_src_exps.data[0].data);
|
||||
cif_isp10_img_src_ioctl(dev->img_src,
|
||||
RK_VIDIOC_SENSOR_MODE_DATA,
|
||||
&dev->img_src_exps.data[1].data);
|
||||
dev->img_src_exps.data[0].v_frame_id = 0;
|
||||
dev->img_src_exps.data[1].v_frame_id = 0;
|
||||
dev->img_src_exps.data[0].data.isp_input_width =
|
||||
dev->config.isp_config.input->defrect.width;
|
||||
dev->img_src_exps.data[0].data.isp_input_height =
|
||||
dev->config.isp_config.input->defrect.height;
|
||||
dev->img_src_exps.data[0].data.isp_input_horizontal_start =
|
||||
dev->config.isp_config.input->defrect.left;
|
||||
dev->img_src_exps.data[0].data.isp_input_vertical_start =
|
||||
dev->config.isp_config.input->defrect.top;
|
||||
|
||||
dev->img_src_exps.data[0].data.isp_output_width =
|
||||
dev->config.isp_config.output.width;
|
||||
dev->img_src_exps.data[0].data.isp_output_height =
|
||||
dev->config.isp_config.output.height;
|
||||
memcpy(&dev->img_src_exps.data[1], &dev->img_src_exps.data[0],
|
||||
sizeof(dev->img_src_exps.data[0]));
|
||||
mutex_unlock(&dev->img_src_exps.mutex);
|
||||
|
||||
cif_isp10_pltfrm_rtrace_printf(dev->dev,
|
||||
@@ -5257,6 +5269,19 @@ static void cif_isp10_vs_work(struct work_struct *work)
|
||||
cif_isp10_img_src_ioctl(dev->img_src,
|
||||
RK_VIDIOC_SENSOR_MODE_DATA,
|
||||
&new_data->data);
|
||||
new_data->data.isp_input_width =
|
||||
dev->config.isp_config.input->defrect.width;
|
||||
new_data->data.isp_input_height =
|
||||
dev->config.isp_config.input->defrect.height;
|
||||
new_data->data.isp_input_horizontal_start =
|
||||
dev->config.isp_config.input->defrect.left;
|
||||
new_data->data.isp_input_vertical_start =
|
||||
dev->config.isp_config.input->defrect.top;
|
||||
|
||||
new_data->data.isp_output_width =
|
||||
dev->config.isp_config.output.width;
|
||||
new_data->data.isp_output_height =
|
||||
dev->config.isp_config.output.height;
|
||||
mutex_unlock(&dev->img_src_exps.mutex);
|
||||
|
||||
/*
|
||||
@@ -6000,6 +6025,17 @@ failed:
|
||||
return retval;
|
||||
}
|
||||
|
||||
int cif_isp10_s_vcm(
|
||||
struct cif_isp10_device *dev,
|
||||
unsigned int id,
|
||||
int val)
|
||||
{
|
||||
if (dev->img_src != NULL)
|
||||
cif_isp10_img_src_ioctl(dev->img_src,
|
||||
PLTFRM_CIFCAM_SET_VCM_POS, &val);
|
||||
return 0;
|
||||
}
|
||||
|
||||
int cif_isp10_s_isp_metadata(
|
||||
struct cif_isp10_device *dev,
|
||||
struct cif_isp10_isp_readout_work *readout_work,
|
||||
@@ -6363,7 +6399,6 @@ int cif_isp10_s_ctrl(
|
||||
case CIF_ISP10_CID_ANALOG_GAIN:
|
||||
case CIF_ISP10_CID_EXPOSURE_TIME:
|
||||
case CIF_ISP10_CID_BLACK_LEVEL:
|
||||
case CIF_ISP10_CID_FOCUS_ABSOLUTE:
|
||||
case CIF_ISP10_CID_AUTO_N_PRESET_WHITE_BALANCE:
|
||||
case CIF_ISP10_CID_SCENE_MODE:
|
||||
case CIF_ISP10_CID_AUTO_FPS:
|
||||
@@ -6371,6 +6406,8 @@ int cif_isp10_s_ctrl(
|
||||
case CIF_ISP10_CID_VFLIP:
|
||||
return cif_isp10_img_src_s_ctrl(dev->img_src,
|
||||
id, val);
|
||||
case CIF_ISP10_CID_FOCUS_ABSOLUTE:
|
||||
return cif_isp10_s_vcm(dev, id, val);
|
||||
default:
|
||||
cif_isp10_pltfrm_pr_err(dev->dev,
|
||||
"unknown/unsupported control %d\n", id);
|
||||
|
||||
@@ -794,6 +794,11 @@ int cif_isp10_s_exp(
|
||||
struct cif_isp10_device *dev,
|
||||
struct cif_isp10_img_src_ext_ctrl *exp_ctrl);
|
||||
|
||||
int cif_isp10_s_vcm(
|
||||
struct cif_isp10_device *dev,
|
||||
unsigned int id,
|
||||
int val);
|
||||
|
||||
void cif_isp10_sensor_mode_data_sync(
|
||||
struct cif_isp10_device *dev,
|
||||
unsigned int frame_id,
|
||||
|
||||
@@ -464,6 +464,9 @@ long cif_isp10_img_src_v4l2_subdev_ioctl(
|
||||
case PLTFRM_CIFCAM_G_ITF_CFG:
|
||||
case PLTFRM_CIFCAM_G_DEFRECT:
|
||||
case PLTFRM_CIFCAM_ATTACH:
|
||||
case PLTFRM_CIFCAM_SET_VCM_POS:
|
||||
case PLTFRM_CIFCAM_GET_VCM_POS:
|
||||
case PLTFRM_CIFCAM_GET_VCM_MOVE_RES:
|
||||
ret = v4l2_subdev_call(subdev,
|
||||
core,
|
||||
ioctl,
|
||||
@@ -475,7 +478,7 @@ long cif_isp10_img_src_v4l2_subdev_ioctl(
|
||||
break;
|
||||
}
|
||||
|
||||
if (IS_ERR_VALUE(ret))
|
||||
if (IS_ERR_VALUE(ret) && cmd != PLTFRM_CIFCAM_GET_VCM_MOVE_RES)
|
||||
pr_err("img_src.%s subdev call(cmd: 0x%x) failed with error %ld\n",
|
||||
__func__, cmd, ret);
|
||||
|
||||
|
||||
@@ -2245,14 +2245,14 @@ static void cifisp_afc_config(const struct cif_isp10_isp_dev *isp_dev)
|
||||
|
||||
for (i = 0; i < num_of_win; i++) {
|
||||
cifisp_iowrite32(
|
||||
CIFISP_AFC_WINDOW_X(pconfig->afm_win[0].h_offs) |
|
||||
CIFISP_AFC_WINDOW_Y(pconfig->afm_win[0].v_offs),
|
||||
CIFISP_AFC_WINDOW_X(pconfig->afm_win[i].h_offs) |
|
||||
CIFISP_AFC_WINDOW_Y(pconfig->afm_win[i].v_offs),
|
||||
CIF_ISP_AFM_LT_A + i * 8);
|
||||
cifisp_iowrite32(
|
||||
CIFISP_AFC_WINDOW_X(pconfig->afm_win[0].h_size +
|
||||
pconfig->afm_win[0].h_offs) |
|
||||
CIFISP_AFC_WINDOW_Y(pconfig->afm_win[0].v_size +
|
||||
pconfig->afm_win[0].v_offs),
|
||||
CIFISP_AFC_WINDOW_X(pconfig->afm_win[i].h_size +
|
||||
pconfig->afm_win[i].h_offs) |
|
||||
CIFISP_AFC_WINDOW_Y(pconfig->afm_win[i].v_size +
|
||||
pconfig->afm_win[i].v_offs),
|
||||
CIF_ISP_AFM_RB_A + i * 8);
|
||||
}
|
||||
|
||||
@@ -2279,7 +2279,7 @@ static void cifisp_afc_end(struct cif_isp10_isp_dev *isp_dev)
|
||||
static void cifisp_get_afc_meas(struct cif_isp10_isp_dev *isp_dev,
|
||||
struct cifisp_stat_buffer *pbuf)
|
||||
{
|
||||
pbuf->meas_type = CIFISP_STAT_AFM_FIN;
|
||||
pbuf->meas_type |= CIFISP_STAT_AFM_FIN;
|
||||
|
||||
pbuf->params.af.window[0].sum =
|
||||
cifisp_ioread32(CIF_ISP_AFM_SUM_A);
|
||||
@@ -3675,6 +3675,8 @@ static void cifisp_send_measurement(
|
||||
struct cif_isp10_buffer *buf = NULL;
|
||||
struct vb2_buffer *vb = NULL;
|
||||
void *mem_addr;
|
||||
struct pltfrm_cam_vcm_tim vcm_tim;
|
||||
long ret;
|
||||
|
||||
unsigned int active_meas = isp_dev->active_meas;
|
||||
struct cifisp_stat_buffer *stat_buf;
|
||||
@@ -3719,6 +3721,7 @@ static void cifisp_send_measurement(
|
||||
list_del(&buf->queue);
|
||||
spin_unlock_irqrestore(&isp_dev->irq_lock, lock_flags);
|
||||
|
||||
isp_dev->meas_stats.stat.meas_type = 0;
|
||||
if (active_meas & CIF_ISP_AWB_DONE) {
|
||||
memcpy(&isp_dev->meas_stats.stat.params.awb,
|
||||
&stat_buf->params.awb,
|
||||
@@ -3752,6 +3755,17 @@ static void cifisp_send_measurement(
|
||||
}
|
||||
isp_dev->meas_stats.g_frame_id = meas_work->frame_id;
|
||||
|
||||
ret = cif_isp10_img_src_ioctl(cif_dev->img_src,
|
||||
PLTFRM_CIFCAM_GET_VCM_MOVE_RES,
|
||||
&vcm_tim);
|
||||
if (ret == 0) {
|
||||
stat_buf->subdev_stat.vcm.vcm_start_t = vcm_tim.vcm_start_t;
|
||||
stat_buf->subdev_stat.vcm.vcm_end_t = vcm_tim.vcm_end_t;
|
||||
}
|
||||
|
||||
stat_buf->vs_t = meas_work->vs_t;
|
||||
stat_buf->fi_t = meas_work->fi_t;
|
||||
|
||||
vb2_buffer_done(vb, VB2_BUF_STATE_DONE);
|
||||
wake_up(&vb->vb2_queue->done_wq);
|
||||
|
||||
|
||||
@@ -107,6 +107,8 @@ struct cif_isp10_isp_readout_work {
|
||||
struct cif_isp10_isp_dev *isp_dev;
|
||||
|
||||
unsigned int frame_id;
|
||||
struct timeval vs_t;
|
||||
struct timeval fi_t;
|
||||
enum cif_isp10_isp_readout_cmd readout;
|
||||
struct vb2_buffer *vb;
|
||||
unsigned int stream_id;
|
||||
|
||||
@@ -125,6 +125,17 @@ struct pltfrm_cam_itf {
|
||||
(PLTFRM_CIFCAM_IOCTL_INTERNAL_BASE + 2)
|
||||
#define PLTFRM_CIFCAM_ATTACH \
|
||||
(PLTFRM_CIFCAM_IOCTL_INTERNAL_BASE + 3)
|
||||
#define PLTFRM_CIFCAM_SET_VCM_POS \
|
||||
(PLTFRM_CIFCAM_IOCTL_INTERNAL_BASE + 4)
|
||||
#define PLTFRM_CIFCAM_GET_VCM_POS \
|
||||
(PLTFRM_CIFCAM_IOCTL_INTERNAL_BASE + 5)
|
||||
#define PLTFRM_CIFCAM_GET_VCM_MOVE_RES \
|
||||
(PLTFRM_CIFCAM_IOCTL_INTERNAL_BASE + 6)
|
||||
|
||||
struct pltfrm_cam_vcm_tim {
|
||||
struct timeval vcm_start_t;
|
||||
struct timeval vcm_end_t;
|
||||
};
|
||||
|
||||
struct pltfrm_cam_defrect {
|
||||
unsigned int width;
|
||||
|
||||
@@ -219,6 +219,22 @@ struct cifisp_af_stat {
|
||||
struct cifisp_af_meas_val window[CIFISP_AFM_MAX_WINDOWS];
|
||||
};
|
||||
|
||||
enum cifisp_vcm_val {
|
||||
CIFISP_VCM_INVAL = -1,
|
||||
CIFISP_VCM_MOVE_START = 0,
|
||||
CIFISP_VCM_MOVE_RUNNING = 1,
|
||||
CIFISP_VCM_MOVE_END = 2
|
||||
};
|
||||
|
||||
struct cifisp_vcm_tim {
|
||||
struct timeval vcm_start_t;
|
||||
struct timeval vcm_end_t;
|
||||
};
|
||||
|
||||
struct cifisp_subdev_stat {
|
||||
struct cifisp_vcm_tim vcm;
|
||||
};
|
||||
|
||||
struct cifisp_stat {
|
||||
struct cifisp_awb_stat awb;
|
||||
struct cifisp_ae_stat ae;
|
||||
@@ -230,6 +246,9 @@ struct cifisp_stat_buffer {
|
||||
unsigned int meas_type;
|
||||
struct cifisp_stat params;
|
||||
struct isp_supplemental_sensor_mode_data sensor_mode;
|
||||
struct cifisp_subdev_stat subdev_stat;
|
||||
struct timeval vs_t;
|
||||
struct timeval fi_t;
|
||||
};
|
||||
|
||||
struct cifisp_dpcc_methods_config {
|
||||
|
||||
@@ -46,8 +46,6 @@ struct isp_supplemental_sensor_mode_data {
|
||||
unsigned char exposure_valid_frame[2];
|
||||
int exp_time;
|
||||
unsigned short gain;
|
||||
unsigned short af_onoff;
|
||||
unsigned int vcm_max_step;
|
||||
};
|
||||
|
||||
struct camera_module_info_s {
|
||||
@@ -64,6 +62,7 @@ struct camera_module_info_s {
|
||||
bool iq_flip;
|
||||
int flash_support;
|
||||
int flash_exp_percent;
|
||||
int af_support;
|
||||
};
|
||||
|
||||
struct flash_timeinfo_s {
|
||||
|
||||
Reference in New Issue
Block a user