/* SPDX-License-Identifier: GPL-2.0+ */ /* * TI OMAP4 ISS V4L2 Driver - ISP IPIPEIF module * * Copyright (C) 2012 Texas Instruments, Inc. * * Author: Sergio Aguirre <sergio.a.aguirre@gmail.com> */ #ifndef OMAP4_ISS_IPIPEIF_H #define OMAP4_ISS_IPIPEIF_H #include "iss_video.h" enum ipipeif_input_entity { IPIPEIF_INPUT_NONE, IPIPEIF_INPUT_CSI2A, IPIPEIF_INPUT_CSI2B }; #define IPIPEIF_OUTPUT_MEMORY BIT(0) #define IPIPEIF_OUTPUT_VP BIT(1) /* Sink and source IPIPEIF pads */ #define IPIPEIF_PAD_SINK 0 #define IPIPEIF_PAD_SOURCE_ISIF_SF 1 #define IPIPEIF_PAD_SOURCE_VP 2 #define IPIPEIF_PADS_NUM 3 /* * struct iss_ipipeif_device - Structure for the IPIPEIF module to store its own * information * @subdev: V4L2 subdevice * @pads: Sink and source media entity pads * @formats: Active video formats * @input: Active input * @output: Active outputs * @video_out: Output video node * @error: A hardware error occurred during capture * @alaw: A-law compression enabled (1) or disabled (0) * @lpf: Low pass filter enabled (1) or disabled (0) * @obclamp: Optical-black clamp enabled (1) or disabled (0) * @fpc_en: Faulty pixels correction enabled (1) or disabled (0) * @blcomp: Black level compensation configuration * @clamp: Optical-black or digital clamp configuration * @fpc: Faulty pixels correction configuration * @lsc: Lens shading compensation configuration * @update: Bitmask of controls to update during the next interrupt * @shadow_update: Controls update in progress by userspace * @syncif: Interface synchronization configuration * @vpcfg: Video port configuration * @underrun: A buffer underrun occurred and a new buffer has been queued * @state: Streaming state * @lock: Serializes shadow_update with interrupt handler * @wait: Wait queue used to stop the module * @stopping: Stopping state * @ioctl_lock: Serializes ioctl calls and LSC requests freeing */ struct iss_ipipeif_device { struct v4l2_subdev subdev; struct media_pad pads[IPIPEIF_PADS_NUM]; struct v4l2_mbus_framefmt formats[IPIPEIF_PADS_NUM]; enum ipipeif_input_entity input; unsigned int output; struct iss_video video_out; unsigned int error; enum iss_pipeline_stream_state state; wait_queue_head_t wait; atomic_t stopping; }; struct iss_device; int omap4iss_ipipeif_init(struct iss_device *iss); int omap4iss_ipipeif_create_links(struct iss_device *iss); void omap4iss_ipipeif_cleanup(struct iss_device *iss); int omap4iss_ipipeif_register_entities(struct iss_ipipeif_device *ipipeif, struct v4l2_device *vdev); void omap4iss_ipipeif_unregister_entities(struct iss_ipipeif_device *ipipeif); int omap4iss_ipipeif_busy(struct iss_ipipeif_device *ipipeif); void omap4iss_ipipeif_isr(struct iss_ipipeif_device *ipipeif, u32 events); void omap4iss_ipipeif_restore_context(struct iss_device *iss); void omap4iss_ipipeif_max_rate(struct iss_ipipeif_device *ipipeif, unsigned int *max_rate); #endif /* OMAP4_ISS_IPIPEIF_H */