Commit ea419fda authored by Mauro Carvalho Chehab's avatar Mauro Carvalho Chehab
Browse files

media: atomisp: atomisp_cmd.c test ISP version in runtime



The logic there has lots of ifdef dependencies if the hardware
is either ISP2400 or ISP2041.

Replace them by runtime checks.

Signed-off-by: default avatarMauro Carvalho Chehab <mchehab+huawei@kernel.org>
parent e1ac35b3
Loading
Loading
Loading
Loading
+562 −647

File changed.

Preview size limit exceeded, changes collapsed.

+4 −7
Original line number Diff line number Diff line
@@ -40,13 +40,13 @@ struct atomisp_css_frame;
#define MEMORY_SPACE_ENABLE	1
#define INTR_IER		24
#define INTR_IIR		16
#ifdef ISP2401

/* ISP2401 */
#define RUNMODE_MASK (ATOMISP_RUN_MODE_VIDEO | ATOMISP_RUN_MODE_STILL_CAPTURE \
			| ATOMISP_RUN_MODE_PREVIEW)

/* FIXME: check if can go */
extern int atomisp_punit_hpll_freq;
#endif

/*
 * Helper function
@@ -59,11 +59,10 @@ struct atomisp_acc_pipe *atomisp_to_acc_pipe(struct video_device *dev);
int atomisp_reset(struct atomisp_device *isp);
void atomisp_flush_bufs_and_wakeup(struct atomisp_sub_device *asd);
void atomisp_clear_css_buffer_counters(struct atomisp_sub_device *asd);
#ifndef ISP2401
/* ISP2400 */
bool atomisp_buffers_queued(struct atomisp_sub_device *asd);
#else
/* ISP2401 */
bool atomisp_buffers_queued_pipe(struct atomisp_video_pipe *pipe);
#endif

/* TODO:should be here instead of atomisp_helper.h
extern void __iomem *atomisp_io_base;
@@ -103,14 +102,12 @@ bool atomisp_is_viewfinder_support(struct atomisp_device *isp);
 */

/*
#ifdef ISP2401
 * Function to set sensor runmode by user when
 * ATOMISP_IOC_S_SENSOR_RUNMODE ioctl was called
 */
int atomisp_set_sensor_runmode(struct atomisp_sub_device *asd,
			       struct atomisp_s_runmode *runmode);
/*
#endif
 * Function to enable/disable lens geometry distortion correction (GDC) and
 * chromatic aberration correction (CAC)
 */
+13 −15
Original line number Diff line number Diff line
@@ -28,13 +28,9 @@
#include <media/media-device.h>
#include <media/v4l2-subdev.h>

#ifndef ISP2401
/* ISP2400*/
#include "ia_css_types.h"
#include "sh_css_legacy.h"
#else
/*#include "ia_css_types.h"*/
/*#include "sh_css_legacy.h"*/
#endif

#include "atomisp_csi2.h"
#include "atomisp_file.h"
@@ -148,13 +144,12 @@
#define ATOMISP_DEPTH_DEFAULT_MASTER_SENSOR 0
#define ATOMISP_DEPTH_DEFAULT_SLAVE_SENSOR 1

#ifdef ISP2401
/* ISP2401 */
#define ATOMISP_ION_DEVICE_FD_OFFSET   16
#define ATOMISP_ION_SHARED_FD_MASK     (0xFFFF)
#define ATOMISP_ION_DEVICE_FD_MASK     (~ATOMISP_ION_SHARED_FD_MASK)
#define ION_FD_UNSET (-1)

#endif
#define DIV_NEAREST_STEP(n, d, step) \
	round_down((2 * (n) + (d) * (step)) / (2 * (d)), (step))

@@ -271,9 +266,10 @@ struct atomisp_device {
	bool isp_fatal_error;
	struct workqueue_struct *wdt_work_queue;
	struct work_struct wdt_work;
#ifndef ISP2401

	/* ISP2400 */
	atomic_t wdt_count;
#endif

	atomic_t wdt_work_queued;

	spinlock_t lock; /* Just for streaming below */
@@ -293,17 +289,19 @@ struct atomisp_device {
extern struct device *atomisp_dev;

#define atomisp_is_wdt_running(a) timer_pending(&(a)->wdt)
#ifdef ISP2401

/* ISP2401 */
void atomisp_wdt_refresh_pipe(struct atomisp_video_pipe *pipe,
			      unsigned int delay);
#endif
void atomisp_wdt_refresh(struct atomisp_sub_device *asd, unsigned int delay);
#ifndef ISP2401

/* ISP2400 */
void atomisp_wdt_start(struct atomisp_sub_device *asd);
#else
void atomisp_wdt_start(struct atomisp_video_pipe *pipe);

/* ISP2401 */
void atomisp_wdt_start_pipe(struct atomisp_video_pipe *pipe);
void atomisp_wdt_stop_pipe(struct atomisp_video_pipe *pipe, bool sync);
#endif

void atomisp_wdt_stop(struct atomisp_sub_device *asd, bool sync);

#endif /* __ATOMISP_INTERNAL_H__ */
+14 −16
Original line number Diff line number Diff line
@@ -106,16 +106,15 @@ struct atomisp_video_pipe {
	 */
	unsigned int frame_request_config_id[VIDEO_MAX_FRAME];
	struct atomisp_css_params_with_list *frame_params[VIDEO_MAX_FRAME];
#ifdef ISP2401

	/*
	* move wdt from asd struct to create wdt for each pipe
	*/
	/* ISP2401 */
	struct timer_list wdt;
	unsigned int wdt_duration;	/* in jiffies */
	unsigned long wdt_expires;
	atomic_t wdt_count;
#endif
};

struct atomisp_acc_pipe {
@@ -314,13 +313,12 @@ struct atomisp_sub_device {
	struct v4l2_ctrl *continuous_raw_buffer_size;
	struct v4l2_ctrl *continuous_viewfinder;
	struct v4l2_ctrl *enable_raw_buffer_lock;
#ifdef ISP2401

	/* ISP2401 */
	struct v4l2_ctrl *ion_dev_fd;
#endif
	struct v4l2_ctrl *disable_dz;
#ifdef ISP2401
	struct v4l2_ctrl *select_isp_version;
#endif

	struct v4l2_ctrl *disable_dz;

	struct {
		struct list_head fw;
@@ -400,20 +398,18 @@ struct atomisp_sub_device {
	int raw_buffer_locked_count;
	spinlock_t raw_buffer_bitmap_lock;

#ifndef ISP2401
	/* ISP 2400 */
	struct timer_list wdt;
	unsigned int wdt_duration;	/* in jiffies */
	unsigned long wdt_expires;

#endif
	/* ISP2401 */
	bool re_trigger_capture;

	struct atomisp_resolution sensor_array_res;
	bool high_speed_mode; /* Indicate whether now is a high speed mode */
	int pending_capture_request; /* Indicates the number of pending capture requests. */
#ifndef ISP2401

#else
	bool re_trigger_capture;
#endif
	unsigned int preview_exp_id;
	unsigned int postview_exp_id;
};
@@ -423,14 +419,16 @@ extern const struct atomisp_in_fmt_conv atomisp_in_fmt_conv[];
u32 atomisp_subdev_uncompressed_code(u32 code);
bool atomisp_subdev_is_compressed(u32 code);
const struct atomisp_in_fmt_conv *atomisp_find_in_fmt_conv(u32 code);
#ifndef ISP2401

/* ISP2400 */
const struct atomisp_in_fmt_conv *atomisp_find_in_fmt_conv_by_atomisp_in_fmt(
    enum atomisp_input_format atomisp_in_fmt);
#else

/* ISP2401 */
const struct atomisp_in_fmt_conv
*atomisp_find_in_fmt_conv_by_atomisp_in_fmt(enum atomisp_input_format
	atomisp_in_fmt);
#endif

const struct atomisp_in_fmt_conv *atomisp_find_in_fmt_conv_compressed(u32 code);
bool atomisp_subdev_format_conversion(struct atomisp_sub_device *asd,
				      unsigned int source_pad);