mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2026-05-03 12:24:37 -04:00
media: atomisp: Remove a bunch of sensor related custom IOCTLs
Remove a bunch of sensor related custom IOCTLs because: 1. They are custom IOCTLs and all custom IOCTLs should be removed 2. Userspace should directly talk to the sensor v4l2-subdev, rather then relying on ioctl-s on the output /dev/video# node to pass through ioctl-s to the senor 3. Some of these rely on the atomisp specific camera_mipi_info struct which is going away as we are switching to using standard v4l2 sensor drivers 4. In the case of ATOMISP_IOC_S_EXPOSURE_WINDOW this was using the v4l2-subdev set_selection API in an undocumented atomisp custom way Link: https://lore.kernel.org/r/20230529103741.11904-8-hdegoede@redhat.com Signed-off-by: Hans de Goede <hdegoede@redhat.com> Reviewed-by: Andy Shevchenko <andy.shevchenko@gmail.com> Signed-off-by: Mauro Carvalho Chehab <mchehab@kernel.org>
This commit is contained in:
committed by
Mauro Carvalho Chehab
parent
a5cc2f0dc5
commit
503bf3090a
@@ -726,51 +726,11 @@ static void *ov5693_otp_read(struct v4l2_subdev *sd)
|
||||
return buf;
|
||||
}
|
||||
|
||||
static int ov5693_g_priv_int_data(struct v4l2_subdev *sd,
|
||||
struct v4l2_private_int_data *priv)
|
||||
{
|
||||
struct i2c_client *client = v4l2_get_subdevdata(sd);
|
||||
struct ov5693_device *dev = to_ov5693_sensor(sd);
|
||||
u8 __user *to = priv->data;
|
||||
u32 read_size = priv->size;
|
||||
int ret;
|
||||
|
||||
/* No need to copy data if size is 0 */
|
||||
if (!read_size)
|
||||
goto out;
|
||||
|
||||
if (IS_ERR(dev->otp_data)) {
|
||||
dev_err(&client->dev, "OTP data not available");
|
||||
return PTR_ERR(dev->otp_data);
|
||||
}
|
||||
|
||||
/* Correct read_size value only if bigger than maximum */
|
||||
if (read_size > OV5693_OTP_DATA_SIZE)
|
||||
read_size = OV5693_OTP_DATA_SIZE;
|
||||
|
||||
ret = copy_to_user(to, dev->otp_data, read_size);
|
||||
if (ret) {
|
||||
dev_err(&client->dev, "%s: failed to copy OTP data to user\n",
|
||||
__func__);
|
||||
return -EFAULT;
|
||||
}
|
||||
|
||||
pr_debug("%s read_size:%d\n", __func__, read_size);
|
||||
|
||||
out:
|
||||
/* Return correct size */
|
||||
priv->size = dev->otp_size;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static long ov5693_ioctl(struct v4l2_subdev *sd, unsigned int cmd, void *arg)
|
||||
{
|
||||
switch (cmd) {
|
||||
case ATOMISP_IOC_S_EXPOSURE:
|
||||
return ov5693_s_exposure(sd, arg);
|
||||
case ATOMISP_IOC_G_SENSOR_PRIV_INT_DATA:
|
||||
return ov5693_g_priv_int_data(sd, arg);
|
||||
default:
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
@@ -149,12 +149,6 @@ enum atomisp_calibration_type {
|
||||
calibration_type3
|
||||
};
|
||||
|
||||
struct atomisp_calibration_group {
|
||||
unsigned int size;
|
||||
unsigned int type;
|
||||
unsigned short *calb_grp_values;
|
||||
};
|
||||
|
||||
struct atomisp_gc_config {
|
||||
__u16 gain_k1;
|
||||
__u16 gain_k2;
|
||||
@@ -265,26 +259,6 @@ enum atomisp_metadata_type {
|
||||
ATOMISP_METADATA_TYPE_NUM,
|
||||
};
|
||||
|
||||
struct atomisp_metadata_with_type {
|
||||
/* to specify which type of metadata to get */
|
||||
enum atomisp_metadata_type type;
|
||||
void __user *data;
|
||||
u32 width;
|
||||
u32 height;
|
||||
u32 stride; /* in bytes */
|
||||
u32 exp_id; /* exposure ID */
|
||||
u32 *effective_width; /* mipi packets valid data size */
|
||||
};
|
||||
|
||||
struct atomisp_metadata {
|
||||
void __user *data;
|
||||
u32 width;
|
||||
u32 height;
|
||||
u32 stride; /* in bytes */
|
||||
u32 exp_id; /* exposure ID */
|
||||
u32 *effective_width; /* mipi packets valid data size */
|
||||
};
|
||||
|
||||
struct atomisp_ext_isp_ctrl {
|
||||
u32 id;
|
||||
u32 data;
|
||||
@@ -298,14 +272,6 @@ struct atomisp_3a_statistics {
|
||||
u32 isp_config_id; /* isp config ID */
|
||||
};
|
||||
|
||||
struct atomisp_ae_window {
|
||||
int x_left;
|
||||
int x_right;
|
||||
int y_top;
|
||||
int y_bottom;
|
||||
int weight;
|
||||
};
|
||||
|
||||
/* White Balance (Gain Adjust) */
|
||||
struct atomisp_wb_config {
|
||||
unsigned int integer_bits;
|
||||
@@ -754,53 +720,6 @@ struct atomisp_s_runmode {
|
||||
__u32 mode;
|
||||
};
|
||||
|
||||
struct atomisp_update_exposure {
|
||||
unsigned int gain;
|
||||
unsigned int digi_gain;
|
||||
unsigned int update_gain;
|
||||
unsigned int update_digi_gain;
|
||||
};
|
||||
|
||||
/*
|
||||
* V4L2 private internal data interface.
|
||||
* -----------------------------------------------------------------------------
|
||||
* struct v4l2_private_int_data - request private data stored in video device
|
||||
* internal memory.
|
||||
* @size: sanity check to ensure userspace's buffer fits whole private data.
|
||||
* If not, kernel will make partial copy (or nothing if @size == 0).
|
||||
* @size is always corrected for the minimum necessary if IOCTL returns
|
||||
* no error.
|
||||
* @data: pointer to userspace buffer.
|
||||
*/
|
||||
struct v4l2_private_int_data {
|
||||
__u32 size;
|
||||
void __user *data;
|
||||
__u32 reserved[2];
|
||||
};
|
||||
|
||||
enum atomisp_sensor_ae_bracketing_mode {
|
||||
SENSOR_AE_BRACKETING_MODE_OFF = 0,
|
||||
SENSOR_AE_BRACKETING_MODE_SINGLE, /* back to SW standby after bracketing */
|
||||
SENSOR_AE_BRACKETING_MODE_SINGLE_TO_STREAMING, /* back to normal streaming after bracketing */
|
||||
SENSOR_AE_BRACKETING_MODE_LOOP, /* continue AE bracketing in loop mode */
|
||||
};
|
||||
|
||||
struct atomisp_sensor_ae_bracketing_info {
|
||||
unsigned int modes; /* bit mask to indicate supported modes */
|
||||
unsigned int lut_depth;
|
||||
};
|
||||
|
||||
struct atomisp_sensor_ae_bracketing_lut_entry {
|
||||
__u16 coarse_integration_time;
|
||||
__u16 analog_gain;
|
||||
__u16 digital_gain;
|
||||
};
|
||||
|
||||
struct atomisp_sensor_ae_bracketing_lut {
|
||||
struct atomisp_sensor_ae_bracketing_lut_entry *lut;
|
||||
unsigned int lut_size;
|
||||
};
|
||||
|
||||
/*Private IOCTLs for ISP */
|
||||
#define ATOMISP_IOC_G_XNR \
|
||||
_IOR('v', BASE_VIDIOC_PRIVATE + 0, int)
|
||||
@@ -905,20 +824,12 @@ struct atomisp_sensor_ae_bracketing_lut {
|
||||
#define ATOMISP_IOC_S_EXPOSURE \
|
||||
_IOW('v', BASE_VIDIOC_PRIVATE + 21, struct atomisp_exposure)
|
||||
|
||||
/* sensor calibration registers group */
|
||||
#define ATOMISP_IOC_G_SENSOR_CALIBRATION_GROUP \
|
||||
_IOWR('v', BASE_VIDIOC_PRIVATE + 22, struct atomisp_calibration_group)
|
||||
|
||||
/* white balance Correction */
|
||||
#define ATOMISP_IOC_G_3A_CONFIG \
|
||||
_IOR('v', BASE_VIDIOC_PRIVATE + 23, struct atomisp_3a_config)
|
||||
#define ATOMISP_IOC_S_3A_CONFIG \
|
||||
_IOW('v', BASE_VIDIOC_PRIVATE + 23, struct atomisp_3a_config)
|
||||
|
||||
/* sensor OTP memory read */
|
||||
#define ATOMISP_IOC_G_SENSOR_PRIV_INT_DATA \
|
||||
_IOWR('v', BASE_VIDIOC_PRIVATE + 26, struct v4l2_private_int_data)
|
||||
|
||||
/* LCS (shading) table write */
|
||||
#define ATOMISP_IOC_S_ISP_SHD_TAB \
|
||||
_IOWR('v', BASE_VIDIOC_PRIVATE + 27, struct atomisp_shading_table)
|
||||
@@ -930,19 +841,9 @@ struct atomisp_sensor_ae_bracketing_lut {
|
||||
#define ATOMISP_IOC_S_ISP_GAMMA_CORRECTION \
|
||||
_IOW('v', BASE_VIDIOC_PRIVATE + 28, struct atomisp_gc_config)
|
||||
|
||||
/* motor internal memory read */
|
||||
#define ATOMISP_IOC_G_MOTOR_PRIV_INT_DATA \
|
||||
_IOWR('v', BASE_VIDIOC_PRIVATE + 29, struct v4l2_private_int_data)
|
||||
|
||||
#define ATOMISP_IOC_S_PARAMETERS \
|
||||
_IOW('v', BASE_VIDIOC_PRIVATE + 32, struct atomisp_parameters)
|
||||
|
||||
#define ATOMISP_IOC_G_METADATA \
|
||||
_IOWR('v', BASE_VIDIOC_PRIVATE + 34, struct atomisp_metadata)
|
||||
|
||||
#define ATOMISP_IOC_G_METADATA_BY_TYPE \
|
||||
_IOWR('v', BASE_VIDIOC_PRIVATE + 34, struct atomisp_metadata_with_type)
|
||||
|
||||
#define ATOMISP_IOC_EXT_ISP_CTRL \
|
||||
_IOWR('v', BASE_VIDIOC_PRIVATE + 35, struct atomisp_ext_isp_ctrl)
|
||||
|
||||
@@ -961,27 +862,9 @@ struct atomisp_sensor_ae_bracketing_lut {
|
||||
#define ATOMISP_IOC_S_FORMATS_CONFIG \
|
||||
_IOW('v', BASE_VIDIOC_PRIVATE + 39, struct atomisp_formats_config)
|
||||
|
||||
#define ATOMISP_IOC_S_EXPOSURE_WINDOW \
|
||||
_IOW('v', BASE_VIDIOC_PRIVATE + 40, struct atomisp_ae_window)
|
||||
|
||||
#define ATOMISP_IOC_INJECT_A_FAKE_EVENT \
|
||||
_IOW('v', BASE_VIDIOC_PRIVATE + 42, int)
|
||||
|
||||
#define ATOMISP_IOC_G_SENSOR_AE_BRACKETING_INFO \
|
||||
_IOR('v', BASE_VIDIOC_PRIVATE + 43, struct atomisp_sensor_ae_bracketing_info)
|
||||
|
||||
#define ATOMISP_IOC_S_SENSOR_AE_BRACKETING_MODE \
|
||||
_IOW('v', BASE_VIDIOC_PRIVATE + 43, unsigned int)
|
||||
|
||||
#define ATOMISP_IOC_G_SENSOR_AE_BRACKETING_MODE \
|
||||
_IOR('v', BASE_VIDIOC_PRIVATE + 43, unsigned int)
|
||||
|
||||
#define ATOMISP_IOC_S_SENSOR_AE_BRACKETING_LUT \
|
||||
_IOW('v', BASE_VIDIOC_PRIVATE + 43, struct atomisp_sensor_ae_bracketing_lut)
|
||||
|
||||
#define ATOMISP_IOC_G_INVALID_FRAME_NUM \
|
||||
_IOR('v', BASE_VIDIOC_PRIVATE + 44, unsigned int)
|
||||
|
||||
#define ATOMISP_IOC_S_ARRAY_RESOLUTION \
|
||||
_IOW('v', BASE_VIDIOC_PRIVATE + 45, struct atomisp_resolution)
|
||||
|
||||
@@ -995,9 +878,6 @@ struct atomisp_sensor_ae_bracketing_lut {
|
||||
#define ATOMISP_IOC_S_SENSOR_RUNMODE \
|
||||
_IOW('v', BASE_VIDIOC_PRIVATE + 48, struct atomisp_s_runmode)
|
||||
|
||||
#define ATOMISP_IOC_G_UPDATE_EXPOSURE \
|
||||
_IOWR('v', BASE_VIDIOC_PRIVATE + 49, struct atomisp_update_exposure)
|
||||
|
||||
/*
|
||||
* Reserved ioctls. We have customer implementing it internally.
|
||||
* We can't use both numbers to not cause ABI conflict.
|
||||
|
||||
@@ -1851,161 +1851,6 @@ int atomisp_3a_stat(struct atomisp_sub_device *asd, int flag,
|
||||
return 0;
|
||||
}
|
||||
|
||||
int atomisp_get_metadata(struct atomisp_sub_device *asd, int flag,
|
||||
struct atomisp_metadata *md)
|
||||
{
|
||||
struct atomisp_device *isp = asd->isp;
|
||||
struct ia_css_stream_info *stream_info;
|
||||
struct camera_mipi_info *mipi_info;
|
||||
struct atomisp_metadata_buf *md_buf;
|
||||
enum atomisp_metadata_type md_type = ATOMISP_MAIN_METADATA;
|
||||
int ret, i;
|
||||
|
||||
if (flag != 0)
|
||||
return -EINVAL;
|
||||
|
||||
stream_info = &asd->stream_env[ATOMISP_INPUT_STREAM_GENERAL].
|
||||
stream_info;
|
||||
|
||||
/* We always return the resolution and stride even if there is
|
||||
* no valid metadata. This allows the caller to get the information
|
||||
* needed to allocate user-space buffers. */
|
||||
md->width = stream_info->metadata_info.resolution.width;
|
||||
md->height = stream_info->metadata_info.resolution.height;
|
||||
md->stride = stream_info->metadata_info.stride;
|
||||
|
||||
/* sanity check to avoid writing into unallocated memory.
|
||||
* This does not return an error because it is a valid way
|
||||
* for applications to detect that metadata is not enabled. */
|
||||
if (md->width == 0 || md->height == 0 || !md->data)
|
||||
return 0;
|
||||
|
||||
/* This is done in the atomisp_buf_done() */
|
||||
if (list_empty(&asd->metadata_ready[md_type])) {
|
||||
dev_warn(isp->dev, "Metadata queue is empty now!\n");
|
||||
return -EAGAIN;
|
||||
}
|
||||
|
||||
mipi_info = atomisp_to_sensor_mipi_info(
|
||||
isp->inputs[asd->input_curr].camera);
|
||||
if (!mipi_info)
|
||||
return -EINVAL;
|
||||
|
||||
if (mipi_info->metadata_effective_width) {
|
||||
for (i = 0; i < md->height; i++)
|
||||
md->effective_width[i] =
|
||||
mipi_info->metadata_effective_width[i];
|
||||
}
|
||||
|
||||
md_buf = list_entry(asd->metadata_ready[md_type].next,
|
||||
struct atomisp_metadata_buf, list);
|
||||
md->exp_id = md_buf->metadata->exp_id;
|
||||
if (md_buf->md_vptr) {
|
||||
ret = copy_to_user(md->data,
|
||||
md_buf->md_vptr,
|
||||
stream_info->metadata_info.size);
|
||||
} else {
|
||||
hmm_load(md_buf->metadata->address,
|
||||
asd->params.metadata_user[md_type],
|
||||
stream_info->metadata_info.size);
|
||||
|
||||
ret = copy_to_user(md->data,
|
||||
asd->params.metadata_user[md_type],
|
||||
stream_info->metadata_info.size);
|
||||
}
|
||||
if (ret) {
|
||||
dev_err(isp->dev, "copy to user failed: copied %d bytes\n",
|
||||
ret);
|
||||
return -EFAULT;
|
||||
}
|
||||
|
||||
list_del_init(&md_buf->list);
|
||||
list_add_tail(&md_buf->list, &asd->metadata[md_type]);
|
||||
|
||||
dev_dbg(isp->dev, "%s: HAL de-queued metadata type %d with exp_id %d\n",
|
||||
__func__, md_type, md->exp_id);
|
||||
return 0;
|
||||
}
|
||||
|
||||
int atomisp_get_metadata_by_type(struct atomisp_sub_device *asd, int flag,
|
||||
struct atomisp_metadata_with_type *md)
|
||||
{
|
||||
struct atomisp_device *isp = asd->isp;
|
||||
struct ia_css_stream_info *stream_info;
|
||||
struct camera_mipi_info *mipi_info;
|
||||
struct atomisp_metadata_buf *md_buf;
|
||||
enum atomisp_metadata_type md_type;
|
||||
int ret, i;
|
||||
|
||||
if (flag != 0)
|
||||
return -EINVAL;
|
||||
|
||||
stream_info = &asd->stream_env[ATOMISP_INPUT_STREAM_GENERAL].
|
||||
stream_info;
|
||||
|
||||
/* We always return the resolution and stride even if there is
|
||||
* no valid metadata. This allows the caller to get the information
|
||||
* needed to allocate user-space buffers. */
|
||||
md->width = stream_info->metadata_info.resolution.width;
|
||||
md->height = stream_info->metadata_info.resolution.height;
|
||||
md->stride = stream_info->metadata_info.stride;
|
||||
|
||||
/* sanity check to avoid writing into unallocated memory.
|
||||
* This does not return an error because it is a valid way
|
||||
* for applications to detect that metadata is not enabled. */
|
||||
if (md->width == 0 || md->height == 0 || !md->data)
|
||||
return 0;
|
||||
|
||||
md_type = md->type;
|
||||
if (md_type < 0 || md_type >= ATOMISP_METADATA_TYPE_NUM)
|
||||
return -EINVAL;
|
||||
|
||||
/* This is done in the atomisp_buf_done() */
|
||||
if (list_empty(&asd->metadata_ready[md_type])) {
|
||||
dev_warn(isp->dev, "Metadata queue is empty now!\n");
|
||||
return -EAGAIN;
|
||||
}
|
||||
|
||||
mipi_info = atomisp_to_sensor_mipi_info(
|
||||
isp->inputs[asd->input_curr].camera);
|
||||
if (!mipi_info)
|
||||
return -EINVAL;
|
||||
|
||||
if (mipi_info->metadata_effective_width) {
|
||||
for (i = 0; i < md->height; i++)
|
||||
md->effective_width[i] =
|
||||
mipi_info->metadata_effective_width[i];
|
||||
}
|
||||
|
||||
md_buf = list_entry(asd->metadata_ready[md_type].next,
|
||||
struct atomisp_metadata_buf, list);
|
||||
md->exp_id = md_buf->metadata->exp_id;
|
||||
if (md_buf->md_vptr) {
|
||||
ret = copy_to_user(md->data,
|
||||
md_buf->md_vptr,
|
||||
stream_info->metadata_info.size);
|
||||
} else {
|
||||
hmm_load(md_buf->metadata->address,
|
||||
asd->params.metadata_user[md_type],
|
||||
stream_info->metadata_info.size);
|
||||
|
||||
ret = copy_to_user(md->data,
|
||||
asd->params.metadata_user[md_type],
|
||||
stream_info->metadata_info.size);
|
||||
}
|
||||
if (ret) {
|
||||
dev_err(isp->dev, "copy to user failed: copied %d bytes\n",
|
||||
ret);
|
||||
return -EFAULT;
|
||||
} else {
|
||||
list_del_init(&md_buf->list);
|
||||
list_add_tail(&md_buf->list, &asd->metadata[md_type]);
|
||||
}
|
||||
dev_dbg(isp->dev, "%s: HAL de-queued metadata type %d with exp_id %d\n",
|
||||
__func__, md_type, md->exp_id);
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*
|
||||
* Function to calculate real zoom region for every pipe
|
||||
*/
|
||||
@@ -4665,30 +4510,6 @@ int atomisp_set_shading_table(struct atomisp_sub_device *asd,
|
||||
return ret;
|
||||
}
|
||||
|
||||
/*
|
||||
* set auto exposure metering window to camera sensor
|
||||
*/
|
||||
int atomisp_s_ae_window(struct atomisp_sub_device *asd,
|
||||
struct atomisp_ae_window *arg)
|
||||
{
|
||||
struct atomisp_device *isp = asd->isp;
|
||||
/* Coverity CID 298071 - initialzize struct */
|
||||
struct v4l2_subdev_selection sel = { 0 };
|
||||
|
||||
sel.r.left = arg->x_left;
|
||||
sel.r.top = arg->y_top;
|
||||
sel.r.width = arg->x_right - arg->x_left + 1;
|
||||
sel.r.height = arg->y_bottom - arg->y_top + 1;
|
||||
|
||||
if (v4l2_subdev_call(isp->inputs[asd->input_curr].camera,
|
||||
pad, set_selection, NULL, &sel)) {
|
||||
dev_err(isp->dev, "failed to call sensor set_selection.\n");
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
int atomisp_flash_enable(struct atomisp_sub_device *asd, int num_frames)
|
||||
{
|
||||
struct atomisp_device *isp = asd->isp;
|
||||
@@ -4868,64 +4689,3 @@ int atomisp_inject_a_fake_event(struct atomisp_sub_device *asd, int *event)
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int atomisp_get_pipe_id(struct atomisp_video_pipe *pipe)
|
||||
{
|
||||
struct atomisp_sub_device *asd = pipe->asd;
|
||||
|
||||
if (!asd) {
|
||||
dev_err(pipe->isp->dev, "%s(): asd is NULL, device is %s\n",
|
||||
__func__, pipe->vdev.name);
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
if (asd->vfpp->val == ATOMISP_VFPP_DISABLE_SCALER) {
|
||||
return IA_CSS_PIPE_ID_VIDEO;
|
||||
} else if (asd->vfpp->val == ATOMISP_VFPP_DISABLE_LOWLAT) {
|
||||
return IA_CSS_PIPE_ID_CAPTURE;
|
||||
} else if (asd->run_mode->val == ATOMISP_RUN_MODE_VIDEO) {
|
||||
return IA_CSS_PIPE_ID_VIDEO;
|
||||
} else if (asd->run_mode->val == ATOMISP_RUN_MODE_PREVIEW) {
|
||||
return IA_CSS_PIPE_ID_PREVIEW;
|
||||
} else if (asd->run_mode->val == ATOMISP_RUN_MODE_STILL_CAPTURE) {
|
||||
if (asd->copy_mode)
|
||||
return IA_CSS_PIPE_ID_COPY;
|
||||
else
|
||||
return IA_CSS_PIPE_ID_CAPTURE;
|
||||
}
|
||||
|
||||
/* fail through */
|
||||
dev_warn(asd->isp->dev, "%s failed to find proper pipe\n",
|
||||
__func__);
|
||||
return IA_CSS_PIPE_ID_CAPTURE;
|
||||
}
|
||||
|
||||
int atomisp_get_invalid_frame_num(struct video_device *vdev,
|
||||
int *invalid_frame_num)
|
||||
{
|
||||
struct atomisp_video_pipe *pipe = atomisp_to_video_pipe(vdev);
|
||||
struct atomisp_sub_device *asd = pipe->asd;
|
||||
enum ia_css_pipe_id pipe_id;
|
||||
struct ia_css_pipe_info p_info;
|
||||
int ret;
|
||||
|
||||
pipe_id = atomisp_get_pipe_id(pipe);
|
||||
if (!asd->stream_env[ATOMISP_INPUT_STREAM_GENERAL].pipes[pipe_id]) {
|
||||
dev_warn(asd->isp->dev,
|
||||
"%s pipe %d has not been created yet, do SET_FMT first!\n",
|
||||
__func__, pipe_id);
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
ret = ia_css_pipe_get_info(
|
||||
asd->stream_env[ATOMISP_INPUT_STREAM_GENERAL]
|
||||
.pipes[pipe_id], &p_info);
|
||||
if (!ret) {
|
||||
*invalid_frame_num = p_info.num_invalid_frames;
|
||||
return 0;
|
||||
} else {
|
||||
dev_warn(asd->isp->dev, "%s get pipe infor failed %d\n",
|
||||
__func__, ret);
|
||||
return -EINVAL;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -159,13 +159,6 @@ int atomisp_set_dis_vector(struct atomisp_sub_device *asd,
|
||||
int atomisp_3a_stat(struct atomisp_sub_device *asd, int flag,
|
||||
struct atomisp_3a_statistics *config);
|
||||
|
||||
/* Function to get metadata from isp */
|
||||
int atomisp_get_metadata(struct atomisp_sub_device *asd, int flag,
|
||||
struct atomisp_metadata *config);
|
||||
|
||||
int atomisp_get_metadata_by_type(struct atomisp_sub_device *asd, int flag,
|
||||
struct atomisp_metadata_with_type *config);
|
||||
|
||||
int atomisp_set_parameters(struct video_device *vdev,
|
||||
struct atomisp_parameters *arg);
|
||||
|
||||
@@ -267,9 +260,6 @@ int atomisp_set_shading_table(struct atomisp_sub_device *asd,
|
||||
|
||||
void atomisp_free_internal_buffers(struct atomisp_sub_device *asd);
|
||||
|
||||
int atomisp_s_ae_window(struct atomisp_sub_device *asd,
|
||||
struct atomisp_ae_window *arg);
|
||||
|
||||
int atomisp_flash_enable(struct atomisp_sub_device *asd,
|
||||
int num_frames);
|
||||
|
||||
|
||||
@@ -67,26 +67,6 @@ struct atomisp_3a_statistics32 {
|
||||
u32 isp_config_id;
|
||||
};
|
||||
|
||||
struct atomisp_metadata_with_type32 {
|
||||
/* to specify which type of metadata to get */
|
||||
enum atomisp_metadata_type type;
|
||||
compat_uptr_t data;
|
||||
u32 width;
|
||||
u32 height;
|
||||
u32 stride; /* in bytes */
|
||||
u32 exp_id; /* exposure ID */
|
||||
compat_uptr_t effective_width;
|
||||
};
|
||||
|
||||
struct atomisp_metadata32 {
|
||||
compat_uptr_t data;
|
||||
u32 width;
|
||||
u32 height;
|
||||
u32 stride;
|
||||
u32 exp_id;
|
||||
compat_uptr_t effective_width;
|
||||
};
|
||||
|
||||
struct atomisp_morph_table32 {
|
||||
unsigned int enabled;
|
||||
unsigned int height;
|
||||
@@ -134,18 +114,6 @@ struct atomisp_overlay32 {
|
||||
unsigned int overlay_start_y;
|
||||
};
|
||||
|
||||
struct atomisp_calibration_group32 {
|
||||
unsigned int size;
|
||||
unsigned int type;
|
||||
compat_uptr_t calb_grp_values;
|
||||
};
|
||||
|
||||
struct v4l2_private_int_data32 {
|
||||
__u32 size;
|
||||
compat_uptr_t data;
|
||||
__u32 reserved[2];
|
||||
};
|
||||
|
||||
struct atomisp_shading_table32 {
|
||||
__u32 enable;
|
||||
__u32 sensor_width;
|
||||
@@ -249,11 +217,6 @@ struct atomisp_dvs_6axis_config32 {
|
||||
compat_uptr_t ycoords_uv;
|
||||
};
|
||||
|
||||
struct atomisp_sensor_ae_bracketing_lut32 {
|
||||
compat_uptr_t lut;
|
||||
unsigned int lut_size;
|
||||
};
|
||||
|
||||
#define ATOMISP_IOC_G_HISTOGRAM32 \
|
||||
_IOWR('v', BASE_VIDIOC_PRIVATE + 3, struct atomisp_histogram32)
|
||||
#define ATOMISP_IOC_S_HISTOGRAM32 \
|
||||
@@ -283,28 +246,10 @@ struct atomisp_sensor_ae_bracketing_lut32 {
|
||||
#define ATOMISP_IOC_S_ISP_OVERLAY32 \
|
||||
_IOW('v', BASE_VIDIOC_PRIVATE + 18, struct atomisp_overlay32)
|
||||
|
||||
#define ATOMISP_IOC_G_SENSOR_CALIBRATION_GROUP32 \
|
||||
_IOWR('v', BASE_VIDIOC_PRIVATE + 22, struct atomisp_calibration_group32)
|
||||
|
||||
#define ATOMISP_IOC_G_SENSOR_PRIV_INT_DATA32 \
|
||||
_IOWR('v', BASE_VIDIOC_PRIVATE + 26, struct v4l2_private_int_data32)
|
||||
|
||||
#define ATOMISP_IOC_S_ISP_SHD_TAB32 \
|
||||
_IOWR('v', BASE_VIDIOC_PRIVATE + 27, struct atomisp_shading_table32)
|
||||
|
||||
#define ATOMISP_IOC_G_MOTOR_PRIV_INT_DATA32 \
|
||||
_IOWR('v', BASE_VIDIOC_PRIVATE + 29, struct v4l2_private_int_data32)
|
||||
|
||||
#define ATOMISP_IOC_S_PARAMETERS32 \
|
||||
_IOW('v', BASE_VIDIOC_PRIVATE + 32, struct atomisp_parameters32)
|
||||
|
||||
#define ATOMISP_IOC_G_METADATA32 \
|
||||
_IOWR('v', BASE_VIDIOC_PRIVATE + 34, struct atomisp_metadata32)
|
||||
|
||||
#define ATOMISP_IOC_G_METADATA_BY_TYPE32 \
|
||||
_IOWR('v', BASE_VIDIOC_PRIVATE + 34, struct atomisp_metadata_with_type32)
|
||||
|
||||
#define ATOMISP_IOC_S_SENSOR_AE_BRACKETING_LUT32 \
|
||||
_IOW('v', BASE_VIDIOC_PRIVATE + 43, struct atomisp_sensor_ae_bracketing_lut32)
|
||||
|
||||
#endif /* __ATOMISP_COMPAT_IOCTL32_H__ */
|
||||
|
||||
@@ -1763,14 +1763,8 @@ static long atomisp_vidioc_default(struct file *file, void *fh,
|
||||
struct video_device *vdev = video_devdata(file);
|
||||
struct atomisp_device *isp = video_get_drvdata(vdev);
|
||||
struct atomisp_sub_device *asd = atomisp_to_video_pipe(vdev)->asd;
|
||||
struct v4l2_subdev *motor;
|
||||
int err;
|
||||
|
||||
if (!IS_ISP2401)
|
||||
motor = isp->inputs[asd->input_curr].motor;
|
||||
else
|
||||
motor = isp->motor;
|
||||
|
||||
switch (cmd) {
|
||||
case ATOMISP_IOC_S_SENSOR_RUNMODE:
|
||||
if (IS_ISP2401)
|
||||
@@ -1921,31 +1915,10 @@ static long atomisp_vidioc_default(struct file *file, void *fh,
|
||||
err = atomisp_fixed_pattern_table(asd, arg);
|
||||
break;
|
||||
|
||||
case ATOMISP_IOC_G_MOTOR_PRIV_INT_DATA:
|
||||
if (motor)
|
||||
err = v4l2_subdev_call(motor, core, ioctl, cmd, arg);
|
||||
else
|
||||
err = v4l2_subdev_call(isp->inputs[asd->input_curr].camera,
|
||||
core, ioctl, cmd, arg);
|
||||
break;
|
||||
|
||||
case ATOMISP_IOC_S_EXPOSURE:
|
||||
case ATOMISP_IOC_G_SENSOR_CALIBRATION_GROUP:
|
||||
case ATOMISP_IOC_G_SENSOR_PRIV_INT_DATA:
|
||||
case ATOMISP_IOC_G_SENSOR_AE_BRACKETING_INFO:
|
||||
case ATOMISP_IOC_S_SENSOR_AE_BRACKETING_MODE:
|
||||
case ATOMISP_IOC_G_SENSOR_AE_BRACKETING_MODE:
|
||||
case ATOMISP_IOC_S_SENSOR_AE_BRACKETING_LUT:
|
||||
err = v4l2_subdev_call(isp->inputs[asd->input_curr].camera,
|
||||
core, ioctl, cmd, arg);
|
||||
break;
|
||||
case ATOMISP_IOC_G_UPDATE_EXPOSURE:
|
||||
if (IS_ISP2401)
|
||||
err = v4l2_subdev_call(isp->inputs[asd->input_curr].camera,
|
||||
core, ioctl, cmd, arg);
|
||||
else
|
||||
err = -EINVAL;
|
||||
break;
|
||||
|
||||
case ATOMISP_IOC_S_ISP_SHD_TAB:
|
||||
err = atomisp_set_shading_table(asd, arg);
|
||||
@@ -1963,12 +1936,6 @@ static long atomisp_vidioc_default(struct file *file, void *fh,
|
||||
err = atomisp_set_parameters(vdev, arg);
|
||||
break;
|
||||
|
||||
case ATOMISP_IOC_G_METADATA:
|
||||
err = atomisp_get_metadata(asd, 0, arg);
|
||||
break;
|
||||
case ATOMISP_IOC_G_METADATA_BY_TYPE:
|
||||
err = atomisp_get_metadata_by_type(asd, 0, arg);
|
||||
break;
|
||||
case ATOMISP_IOC_EXT_ISP_CTRL:
|
||||
err = v4l2_subdev_call(isp->inputs[asd->input_curr].camera,
|
||||
core, ioctl, cmd, arg);
|
||||
@@ -1989,15 +1956,9 @@ static long atomisp_vidioc_default(struct file *file, void *fh,
|
||||
case ATOMISP_IOC_S_FORMATS_CONFIG:
|
||||
err = atomisp_formats(asd, 1, arg);
|
||||
break;
|
||||
case ATOMISP_IOC_S_EXPOSURE_WINDOW:
|
||||
err = atomisp_s_ae_window(asd, arg);
|
||||
break;
|
||||
case ATOMISP_IOC_INJECT_A_FAKE_EVENT:
|
||||
err = atomisp_inject_a_fake_event(asd, arg);
|
||||
break;
|
||||
case ATOMISP_IOC_G_INVALID_FRAME_NUM:
|
||||
err = atomisp_get_invalid_frame_num(vdev, arg);
|
||||
break;
|
||||
case ATOMISP_IOC_S_ARRAY_RESOLUTION:
|
||||
err = atomisp_set_array_res(asd, arg);
|
||||
break;
|
||||
|
||||
Reference in New Issue
Block a user