/* 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 */
|