Commit cf2e0516 authored by Hans de Goede's avatar Hans de Goede Committed by Mauro Carvalho Chehab

media: atomisp: Remove const/fixed camera_caps

The code checks a camera_caps struct in various places, but this always
points to the same const camera_caps struct.

Remove the checks, keeping the code paths which would be taken with
the fixed camera caps struct still in place and remove the camera_caps
struct itself.

Note this completely removes atomisp_pause_buffer_event() because that
only ever does something if camera_caps.sensors[0].is_slave is true and
that never is true.
Reviewed-by: default avatarAndy Shevchenko <andriy.shevchenko@linux.intel.com>
Signed-off-by: default avatarHans de Goede <hdegoede@redhat.com>
Signed-off-by: default avatarMauro Carvalho Chehab <mchehab@kernel.org>
parent e226e9a4
...@@ -141,23 +141,6 @@ struct atomisp_platform_data { ...@@ -141,23 +141,6 @@ struct atomisp_platform_data {
struct intel_v4l2_subdev_table *subdevs; struct intel_v4l2_subdev_table *subdevs;
}; };
/* Describe the capacities of one single sensor. */
struct atomisp_sensor_caps {
/* The number of streams this sensor can output. */
int stream_num;
bool is_slave;
};
/* Describe the capacities of sensors connected to one camera port. */
struct atomisp_camera_caps {
/* The number of sensors connected to this camera port. */
int sensor_num;
/* The capacities of each sensor. */
struct atomisp_sensor_caps sensor[MAX_SENSORS_PER_PORT];
/* Define whether stream control is required for multiple streams. */
bool multi_stream_ctrl;
};
/* /*
* Sensor of external ISP can send multiple steams with different mipi data * Sensor of external ISP can send multiple steams with different mipi data
* type in the same virtual channel. This information needs to come from the * type in the same virtual channel. This information needs to come from the
...@@ -235,7 +218,6 @@ struct camera_mipi_info { ...@@ -235,7 +218,6 @@ struct camera_mipi_info {
}; };
const struct atomisp_platform_data *atomisp_get_platform_data(void); const struct atomisp_platform_data *atomisp_get_platform_data(void);
const struct atomisp_camera_caps *atomisp_get_default_camera_caps(void);
/* API from old platform_camera.h, new CPUID implementation */ /* API from old platform_camera.h, new CPUID implementation */
#define __IS_SOC(x) (boot_cpu_data.x86_vendor == X86_VENDOR_INTEL && \ #define __IS_SOC(x) (boot_cpu_data.x86_vendor == X86_VENDOR_INTEL && \
......
...@@ -770,24 +770,6 @@ static struct atomisp_video_pipe *__atomisp_get_pipe( ...@@ -770,24 +770,6 @@ static struct atomisp_video_pipe *__atomisp_get_pipe(
enum ia_css_pipe_id css_pipe_id, enum ia_css_pipe_id css_pipe_id,
enum ia_css_buffer_type buf_type) enum ia_css_buffer_type buf_type)
{ {
struct atomisp_device *isp = asd->isp;
if (css_pipe_id == IA_CSS_PIPE_ID_COPY &&
isp->inputs[asd->input_curr].camera_caps->
sensor[asd->sensor_curr].stream_num > 1) {
switch (stream_id) {
case ATOMISP_INPUT_STREAM_PREVIEW:
return &asd->video_out_preview;
case ATOMISP_INPUT_STREAM_POSTVIEW:
return &asd->video_out_vf;
case ATOMISP_INPUT_STREAM_VIDEO:
return &asd->video_out_video_capture;
case ATOMISP_INPUT_STREAM_CAPTURE:
default:
return &asd->video_out_capture;
}
}
/* video is same in online as in continuouscapture mode */ /* video is same in online as in continuouscapture mode */
if (asd->vfpp->val == ATOMISP_VFPP_DISABLE_LOWLAT) { if (asd->vfpp->val == ATOMISP_VFPP_DISABLE_LOWLAT) {
/* /*
...@@ -5051,12 +5033,7 @@ static void atomisp_check_copy_mode(struct atomisp_sub_device *asd, ...@@ -5051,12 +5033,7 @@ static void atomisp_check_copy_mode(struct atomisp_sub_device *asd,
src = atomisp_subdev_get_ffmt(&asd->subdev, NULL, src = atomisp_subdev_get_ffmt(&asd->subdev, NULL,
V4L2_SUBDEV_FORMAT_ACTIVE, source_pad); V4L2_SUBDEV_FORMAT_ACTIVE, source_pad);
if ((sink->code == src->code && if (sink->code == src->code && sink->width == f->width && sink->height == f->height)
sink->width == f->width &&
sink->height == f->height) ||
((asd->isp->inputs[asd->input_curr].type == SOC_CAMERA) &&
(asd->isp->inputs[asd->input_curr].camera_caps->
sensor[asd->sensor_curr].stream_num > 1)))
asd->copy_mode = true; asd->copy_mode = true;
else else
asd->copy_mode = false; asd->copy_mode = false;
...@@ -5282,58 +5259,7 @@ int atomisp_set_fmt(struct file *file, void *unused, struct v4l2_format *f) ...@@ -5282,58 +5259,7 @@ int atomisp_set_fmt(struct file *file, void *unused, struct v4l2_format *f)
f->fmt.pix.height = r.height; f->fmt.pix.height = r.height;
} }
if (source_pad == ATOMISP_SUBDEV_PAD_SOURCE_PREVIEW && if (source_pad == ATOMISP_SUBDEV_PAD_SOURCE_PREVIEW) {
(asd->isp->inputs[asd->input_curr].type == SOC_CAMERA) &&
(asd->isp->inputs[asd->input_curr].camera_caps->
sensor[asd->sensor_curr].stream_num > 1)) {
/* For M10MO outputing YUV preview images. */
u16 video_index =
atomisp_source_pad_to_stream_id(asd,
ATOMISP_SUBDEV_PAD_SOURCE_VIDEO);
ret = atomisp_css_copy_get_output_frame_info(asd,
video_index, &output_info);
if (ret) {
dev_err(isp->dev,
"copy_get_output_frame_info ret %i", ret);
return -EINVAL;
}
if (!asd->yuvpp_mode) {
/*
* If viewfinder was configured into copy_mode,
* we switch to using yuvpp pipe instead.
*/
asd->yuvpp_mode = true;
ret = atomisp_css_copy_configure_output(
asd, video_index, 0, 0, 0, 0);
if (ret) {
dev_err(isp->dev,
"failed to disable copy pipe");
return -EINVAL;
}
ret = atomisp_css_yuvpp_configure_output(
asd, video_index,
output_info.res.width,
output_info.res.height,
output_info.padded_width,
output_info.format);
if (ret) {
dev_err(isp->dev,
"failed to set up yuvpp pipe\n");
return -EINVAL;
}
atomisp_css_video_enable_online(asd, false);
atomisp_css_preview_enable_online(asd,
ATOMISP_INPUT_STREAM_GENERAL, false);
}
atomisp_css_yuvpp_configure_viewfinder(asd, video_index,
f->fmt.pix.width, f->fmt.pix.height,
format_bridge->planar ? f->fmt.pix.bytesperline
: f->fmt.pix.bytesperline * 8
/ format_bridge->depth, format_bridge->sh_fmt);
atomisp_css_yuvpp_get_viewfinder_frame_info(
asd, video_index, &output_info);
} else if (source_pad == ATOMISP_SUBDEV_PAD_SOURCE_PREVIEW) {
atomisp_css_video_configure_viewfinder(asd, atomisp_css_video_configure_viewfinder(asd,
f->fmt.pix.width, f->fmt.pix.height, f->fmt.pix.width, f->fmt.pix.height,
format_bridge->planar ? f->fmt.pix.bytesperline format_bridge->planar ? f->fmt.pix.bytesperline
...@@ -5918,31 +5844,7 @@ int atomisp_flash_enable(struct atomisp_sub_device *asd, int num_frames) ...@@ -5918,31 +5844,7 @@ int atomisp_flash_enable(struct atomisp_sub_device *asd, int num_frames)
int atomisp_source_pad_to_stream_id(struct atomisp_sub_device *asd, int atomisp_source_pad_to_stream_id(struct atomisp_sub_device *asd,
uint16_t source_pad) uint16_t source_pad)
{ {
int stream_id; return ATOMISP_INPUT_STREAM_GENERAL;
struct atomisp_device *isp = asd->isp;
if (isp->inputs[asd->input_curr].camera_caps->
sensor[asd->sensor_curr].stream_num == 1)
return ATOMISP_INPUT_STREAM_GENERAL;
switch (source_pad) {
case ATOMISP_SUBDEV_PAD_SOURCE_CAPTURE:
stream_id = ATOMISP_INPUT_STREAM_CAPTURE;
break;
case ATOMISP_SUBDEV_PAD_SOURCE_VF:
stream_id = ATOMISP_INPUT_STREAM_POSTVIEW;
break;
case ATOMISP_SUBDEV_PAD_SOURCE_PREVIEW:
stream_id = ATOMISP_INPUT_STREAM_PREVIEW;
break;
case ATOMISP_SUBDEV_PAD_SOURCE_VIDEO:
stream_id = ATOMISP_INPUT_STREAM_VIDEO;
break;
default:
stream_id = ATOMISP_INPUT_STREAM_GENERAL;
}
return stream_id;
} }
bool atomisp_is_vf_pipe(struct atomisp_video_pipe *pipe) bool atomisp_is_vf_pipe(struct atomisp_video_pipe *pipe)
...@@ -6217,13 +6119,6 @@ int atomisp_get_invalid_frame_num(struct video_device *vdev, ...@@ -6217,13 +6119,6 @@ int atomisp_get_invalid_frame_num(struct video_device *vdev,
struct ia_css_pipe_info p_info; struct ia_css_pipe_info p_info;
int ret; int ret;
if (asd->isp->inputs[asd->input_curr].camera_caps->
sensor[asd->sensor_curr].stream_num > 1) {
/* External ISP */
*invalid_frame_num = 0;
return 0;
}
pipe_id = atomisp_get_pipe_id(pipe); pipe_id = atomisp_get_pipe_id(pipe);
if (!asd->stream_env[ATOMISP_INPUT_STREAM_GENERAL].pipes[pipe_id]) { if (!asd->stream_env[ATOMISP_INPUT_STREAM_GENERAL].pipes[pipe_id]) {
dev_warn(asd->isp->dev, dev_warn(asd->isp->dev,
......
...@@ -369,45 +369,6 @@ static int atomisp_get_css_buf_type(struct atomisp_sub_device *asd, ...@@ -369,45 +369,6 @@ static int atomisp_get_css_buf_type(struct atomisp_sub_device *asd,
return IA_CSS_BUFFER_TYPE_VF_OUTPUT_FRAME; return IA_CSS_BUFFER_TYPE_VF_OUTPUT_FRAME;
} }
static int atomisp_qbuffers_to_css_for_all_pipes(struct atomisp_sub_device *asd)
{
enum ia_css_buffer_type buf_type;
enum ia_css_pipe_id css_capture_pipe_id = IA_CSS_PIPE_ID_COPY;
enum ia_css_pipe_id css_preview_pipe_id = IA_CSS_PIPE_ID_COPY;
enum ia_css_pipe_id css_video_pipe_id = IA_CSS_PIPE_ID_COPY;
enum atomisp_input_stream_id input_stream_id;
struct atomisp_video_pipe *capture_pipe;
struct atomisp_video_pipe *preview_pipe;
struct atomisp_video_pipe *video_pipe;
capture_pipe = &asd->video_out_capture;
preview_pipe = &asd->video_out_preview;
video_pipe = &asd->video_out_video_capture;
buf_type = atomisp_get_css_buf_type(
asd, css_preview_pipe_id,
atomisp_subdev_source_pad(&preview_pipe->vdev));
input_stream_id = ATOMISP_INPUT_STREAM_PREVIEW;
atomisp_q_video_buffers_to_css(asd, preview_pipe,
input_stream_id,
buf_type, css_preview_pipe_id);
buf_type = atomisp_get_css_buf_type(asd, css_capture_pipe_id,
atomisp_subdev_source_pad(&capture_pipe->vdev));
input_stream_id = ATOMISP_INPUT_STREAM_GENERAL;
atomisp_q_video_buffers_to_css(asd, capture_pipe,
input_stream_id,
buf_type, css_capture_pipe_id);
buf_type = atomisp_get_css_buf_type(asd, css_video_pipe_id,
atomisp_subdev_source_pad(&video_pipe->vdev));
input_stream_id = ATOMISP_INPUT_STREAM_VIDEO;
atomisp_q_video_buffers_to_css(asd, video_pipe,
input_stream_id,
buf_type, css_video_pipe_id);
return 0;
}
/* queue all available buffers to css */ /* queue all available buffers to css */
int atomisp_qbuffers_to_css(struct atomisp_sub_device *asd) int atomisp_qbuffers_to_css(struct atomisp_sub_device *asd)
{ {
...@@ -423,11 +384,6 @@ int atomisp_qbuffers_to_css(struct atomisp_sub_device *asd) ...@@ -423,11 +384,6 @@ int atomisp_qbuffers_to_css(struct atomisp_sub_device *asd)
bool raw_mode = atomisp_is_mbuscode_raw( bool raw_mode = atomisp_is_mbuscode_raw(
asd->fmt[asd->capture_pad].fmt.code); asd->fmt[asd->capture_pad].fmt.code);
if (asd->isp->inputs[asd->input_curr].camera_caps->
sensor[asd->sensor_curr].stream_num == 2 &&
!asd->yuvpp_mode)
return atomisp_qbuffers_to_css_for_all_pipes(asd);
if (asd->vfpp->val == ATOMISP_VFPP_DISABLE_SCALER) { if (asd->vfpp->val == ATOMISP_VFPP_DISABLE_SCALER) {
video_pipe = &asd->video_out_video_capture; video_pipe = &asd->video_out_video_capture;
css_video_pipe_id = IA_CSS_PIPE_ID_VIDEO; css_video_pipe_id = IA_CSS_PIPE_ID_VIDEO;
......
...@@ -134,24 +134,6 @@ static DEFINE_MUTEX(vcm_lock); ...@@ -134,24 +134,6 @@ static DEFINE_MUTEX(vcm_lock);
static struct gmin_subdev *find_gmin_subdev(struct v4l2_subdev *subdev); static struct gmin_subdev *find_gmin_subdev(struct v4l2_subdev *subdev);
/*
* Legacy/stub behavior copied from upstream platform_camera.c. The
* atomisp driver relies on these values being non-NULL in a few
* places, even though they are hard-coded in all current
* implementations.
*/
const struct atomisp_camera_caps *atomisp_get_default_camera_caps(void)
{
static const struct atomisp_camera_caps caps = {
.sensor_num = 1,
.sensor = {
{ .stream_num = 1, },
},
};
return &caps;
}
EXPORT_SYMBOL_GPL(atomisp_get_default_camera_caps);
const struct atomisp_platform_data *atomisp_get_platform_data(void) const struct atomisp_platform_data *atomisp_get_platform_data(void)
{ {
return &pdata; return &pdata;
......
...@@ -127,9 +127,7 @@ ...@@ -127,9 +127,7 @@
* Moorefield/Baytrail platform. * Moorefield/Baytrail platform.
*/ */
#define ATOMISP_SOC_CAMERA(asd) \ #define ATOMISP_SOC_CAMERA(asd) \
(asd->isp->inputs[asd->input_curr].type == SOC_CAMERA \ (asd->isp->inputs[asd->input_curr].type == SOC_CAMERA)
&& asd->isp->inputs[asd->input_curr].camera_caps-> \
sensor[asd->sensor_curr].stream_num == 1)
#define ATOMISP_USE_YUVPP(asd) \ #define ATOMISP_USE_YUVPP(asd) \
(ATOMISP_SOC_CAMERA(asd) && ATOMISP_CSS_SUPPORT_YUVPP && \ (ATOMISP_SOC_CAMERA(asd) && ATOMISP_CSS_SUPPORT_YUVPP && \
...@@ -162,7 +160,6 @@ struct atomisp_input_subdev { ...@@ -162,7 +160,6 @@ struct atomisp_input_subdev {
*/ */
struct atomisp_sub_device *asd; struct atomisp_sub_device *asd;
const struct atomisp_camera_caps *camera_caps;
int sensor_index; int sensor_index;
}; };
......
...@@ -1431,16 +1431,6 @@ enum ia_css_pipe_id atomisp_get_css_pipe_id(struct atomisp_sub_device *asd) ...@@ -1431,16 +1431,6 @@ enum ia_css_pipe_id atomisp_get_css_pipe_id(struct atomisp_sub_device *asd)
static unsigned int atomisp_sensor_start_stream(struct atomisp_sub_device *asd) static unsigned int atomisp_sensor_start_stream(struct atomisp_sub_device *asd)
{ {
struct atomisp_device *isp = asd->isp;
if (isp->inputs[asd->input_curr].camera_caps->
sensor[asd->sensor_curr].stream_num > 1) {
if (asd->high_speed_mode)
return 1;
else
return 2;
}
if (asd->vfpp->val != ATOMISP_VFPP_ENABLE || if (asd->vfpp->val != ATOMISP_VFPP_ENABLE ||
asd->copy_mode) asd->copy_mode)
return 1; return 1;
...@@ -1459,31 +1449,15 @@ static unsigned int atomisp_sensor_start_stream(struct atomisp_sub_device *asd) ...@@ -1459,31 +1449,15 @@ static unsigned int atomisp_sensor_start_stream(struct atomisp_sub_device *asd)
int atomisp_stream_on_master_slave_sensor(struct atomisp_device *isp, int atomisp_stream_on_master_slave_sensor(struct atomisp_device *isp,
bool isp_timeout) bool isp_timeout)
{ {
unsigned int master = -1, slave = -1, delay_slave = 0; unsigned int master, slave, delay_slave = 0;
int i, ret; int ret;
/*
* ISP only support 2 streams now so ignore multiple master/slave
* case to reduce the delay between 2 stream_on calls.
*/
for (i = 0; i < isp->num_of_streams; i++) {
int sensor_index = isp->asd[i].input_curr;
if (isp->inputs[sensor_index].camera_caps->
sensor[isp->asd[i].sensor_curr].is_slave)
slave = sensor_index;
else
master = sensor_index;
}
if (master == -1 || slave == -1) { master = ATOMISP_DEPTH_DEFAULT_MASTER_SENSOR;
master = ATOMISP_DEPTH_DEFAULT_MASTER_SENSOR; slave = ATOMISP_DEPTH_DEFAULT_SLAVE_SENSOR;
slave = ATOMISP_DEPTH_DEFAULT_SLAVE_SENSOR; dev_warn(isp->dev,
dev_warn(isp->dev, "depth mode use default master=%s.slave=%s.\n",
"depth mode use default master=%s.slave=%s.\n", isp->inputs[master].camera->name,
isp->inputs[master].camera->name, isp->inputs[slave].camera->name);
isp->inputs[slave].camera->name);
}
ret = v4l2_subdev_call(isp->inputs[master].camera, core, ret = v4l2_subdev_call(isp->inputs[master].camera, core,
ioctl, ATOMISP_IOC_G_DEPTH_SYNC_COMP, ioctl, ATOMISP_IOC_G_DEPTH_SYNC_COMP,
...@@ -1517,24 +1491,6 @@ int atomisp_stream_on_master_slave_sensor(struct atomisp_device *isp, ...@@ -1517,24 +1491,6 @@ int atomisp_stream_on_master_slave_sensor(struct atomisp_device *isp,
return 0; return 0;
} }
static void atomisp_pause_buffer_event(struct atomisp_device *isp)
{
struct v4l2_event event = {0};
int i;
event.type = V4L2_EVENT_ATOMISP_PAUSE_BUFFER;
for (i = 0; i < isp->num_of_streams; i++) {
int sensor_index = isp->asd[i].input_curr;
if (isp->inputs[sensor_index].camera_caps->
sensor[isp->asd[i].sensor_curr].is_slave) {
v4l2_event_queue(isp->asd[i].subdev.devnode, &event);
break;
}
}
}
/* Input system HW workaround */ /* Input system HW workaround */
/* Input system address translation corrupts burst during */ /* Input system address translation corrupts burst during */
/* invalidate. SW workaround for this is to set burst length */ /* invalidate. SW workaround for this is to set burst length */
...@@ -1608,8 +1564,7 @@ static int atomisp_streamon(struct file *file, void *fh, ...@@ -1608,8 +1564,7 @@ static int atomisp_streamon(struct file *file, void *fh,
/* Reset pending capture request count. */ /* Reset pending capture request count. */
asd->pending_capture_request = 0; asd->pending_capture_request = 0;
if ((atomisp_subdev_streaming_count(asd) > sensor_start_stream) && if (atomisp_subdev_streaming_count(asd) > sensor_start_stream) {
(!isp->inputs[asd->input_curr].camera_caps->multi_stream_ctrl)) {
/* trigger still capture */ /* trigger still capture */
if (asd->continuous_mode->val && if (asd->continuous_mode->val &&
atomisp_subdev_source_pad(vdev) atomisp_subdev_source_pad(vdev)
...@@ -1651,9 +1606,6 @@ static int atomisp_streamon(struct file *file, void *fh, ...@@ -1651,9 +1606,6 @@ static int atomisp_streamon(struct file *file, void *fh,
asd->params.offline_parm.offset); asd->params.offline_parm.offset);
if (ret) if (ret)
return -EINVAL; return -EINVAL;
if (asd->depth_mode->val)
atomisp_pause_buffer_event(isp);
} }
} }
atomisp_qbuffers_to_css(asd); atomisp_qbuffers_to_css(asd);
...@@ -1809,17 +1761,10 @@ int atomisp_streamoff(struct file *file, void *fh, enum v4l2_buf_type type) ...@@ -1809,17 +1761,10 @@ int atomisp_streamoff(struct file *file, void *fh, enum v4l2_buf_type type)
* do only videobuf_streamoff for capture & vf pipes in * do only videobuf_streamoff for capture & vf pipes in
* case of continuous capture * case of continuous capture
*/ */
if ((asd->continuous_mode->val || if (asd->continuous_mode->val &&
isp->inputs[asd->input_curr].camera_caps->multi_stream_ctrl) && atomisp_subdev_source_pad(vdev) != ATOMISP_SUBDEV_PAD_SOURCE_PREVIEW &&
atomisp_subdev_source_pad(vdev) != atomisp_subdev_source_pad(vdev) != ATOMISP_SUBDEV_PAD_SOURCE_VIDEO) {
ATOMISP_SUBDEV_PAD_SOURCE_PREVIEW && if (atomisp_subdev_source_pad(vdev) == ATOMISP_SUBDEV_PAD_SOURCE_CAPTURE) {
atomisp_subdev_source_pad(vdev) !=
ATOMISP_SUBDEV_PAD_SOURCE_VIDEO) {
if (isp->inputs[asd->input_curr].camera_caps->multi_stream_ctrl) {
v4l2_subdev_call(isp->inputs[asd->input_curr].camera,
video, s_stream, 0);
} else if (atomisp_subdev_source_pad(vdev)
== ATOMISP_SUBDEV_PAD_SOURCE_CAPTURE) {
/* stop continuous still capture if needed */ /* stop continuous still capture if needed */
if (asd->params.offline_parm.num_captures == -1) if (asd->params.offline_parm.num_captures == -1)
atomisp_css_offline_capture_configure(asd, atomisp_css_offline_capture_configure(asd,
......
...@@ -313,9 +313,6 @@ struct atomisp_sub_device { ...@@ -313,9 +313,6 @@ struct atomisp_sub_device {
/* This field specifies which camera (v4l2 input) is selected. */ /* This field specifies which camera (v4l2 input) is selected. */
int input_curr; int input_curr;
/* This field specifies which sensor is being selected when there
are multiple sensors connected to the same MIPI port. */
int sensor_curr;
atomic_t sof_count; atomic_t sof_count;
atomic_t sequence; /* Sequence value that is assigned to buffer. */ atomic_t sequence; /* Sequence value that is assigned to buffer. */
......
...@@ -1007,7 +1007,6 @@ static int atomisp_subdev_probe(struct atomisp_device *isp) ...@@ -1007,7 +1007,6 @@ static int atomisp_subdev_probe(struct atomisp_device *isp)
&subdevs->v4l2_subdev.board_info; &subdevs->v4l2_subdev.board_info;
struct i2c_adapter *adapter = struct i2c_adapter *adapter =
i2c_get_adapter(subdevs->v4l2_subdev.i2c_adapter_id); i2c_get_adapter(subdevs->v4l2_subdev.i2c_adapter_id);
int sensor_num, i;
dev_info(isp->dev, "Probing Subdev %s\n", board_info->type); dev_info(isp->dev, "Probing Subdev %s\n", board_info->type);
...@@ -1066,22 +1065,7 @@ static int atomisp_subdev_probe(struct atomisp_device *isp) ...@@ -1066,22 +1065,7 @@ static int atomisp_subdev_probe(struct atomisp_device *isp)
* pixel_format. * pixel_format.
*/ */
isp->inputs[isp->input_cnt].frame_size.pixel_format = 0; isp->inputs[isp->input_cnt].frame_size.pixel_format = 0;
isp->inputs[isp->input_cnt].camera_caps =
atomisp_get_default_camera_caps();
sensor_num = isp->inputs[isp->input_cnt]
.camera_caps->sensor_num;
isp->input_cnt++; isp->input_cnt++;
for (i = 1; i < sensor_num; i++) {
if (isp->input_cnt >= ATOM_ISP_MAX_INPUTS) {
dev_warn(isp->dev,
"atomisp inputs out of range\n");
break;
}
isp->inputs[isp->input_cnt] =
isp->inputs[isp->input_cnt - 1];
isp->inputs[isp->input_cnt].sensor_index = i;
isp->input_cnt++;
}
break; break;
case CAMERA_MOTOR: case CAMERA_MOTOR:
if (isp->motor) { if (isp->motor) {
...@@ -1239,8 +1223,6 @@ static int atomisp_register_entities(struct atomisp_device *isp) ...@@ -1239,8 +1223,6 @@ static int atomisp_register_entities(struct atomisp_device *isp)
"TPG detected, camera_cnt: %d\n", isp->input_cnt); "TPG detected, camera_cnt: %d\n", isp->input_cnt);
isp->inputs[isp->input_cnt].type = TEST_PATTERN; isp->inputs[isp->input_cnt].type = TEST_PATTERN;
isp->inputs[isp->input_cnt].port = -1; isp->inputs[isp->input_cnt].port = -1;
isp->inputs[isp->input_cnt].camera_caps =
atomisp_get_default_camera_caps();
isp->inputs[isp->input_cnt++].camera = &isp->tpg.sd; isp->inputs[isp->input_cnt++].camera = &isp->tpg.sd;
} else { } else {
dev_warn(isp->dev, "too many atomisp inputs, TPG ignored.\n"); dev_warn(isp->dev, "too many atomisp inputs, TPG ignored.\n");
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment