2 * TI OMAP4 ISS V4L2 Driver - ISP IPIPEIF module
4 * Copyright (C) 2012 Texas Instruments, Inc.
6 * Author: Sergio Aguirre <sergio.a.aguirre@gmail.com>
8 * This program is free software; you can redistribute it and/or modify
9 * it under the terms of the GNU General Public License as published by
10 * the Free Software Foundation; either version 2 of the License, or
11 * (at your option) any later version.
14 #ifndef OMAP4_ISS_IPIPEIF_H
15 #define OMAP4_ISS_IPIPEIF_H
17 #include "iss_video.h"
19 enum ipipeif_input_entity {
25 #define IPIPEIF_OUTPUT_MEMORY (1 << 0)
26 #define IPIPEIF_OUTPUT_VP (1 << 1)
28 /* Sink and source IPIPEIF pads */
29 #define IPIPEIF_PAD_SINK 0
30 #define IPIPEIF_PAD_SOURCE_ISIF_SF 1
31 #define IPIPEIF_PAD_SOURCE_VP 2
32 #define IPIPEIF_PADS_NUM 3
35 * struct iss_ipipeif_device - Structure for the IPIPEIF module to store its own
37 * @subdev: V4L2 subdevice
38 * @pads: Sink and source media entity pads
39 * @formats: Active video formats
40 * @input: Active input
41 * @output: Active outputs
42 * @video_out: Output video node
43 * @error: A hardware error occurred during capture
44 * @alaw: A-law compression enabled (1) or disabled (0)
45 * @lpf: Low pass filter enabled (1) or disabled (0)
46 * @obclamp: Optical-black clamp enabled (1) or disabled (0)
47 * @fpc_en: Faulty pixels correction enabled (1) or disabled (0)
48 * @blcomp: Black level compensation configuration
49 * @clamp: Optical-black or digital clamp configuration
50 * @fpc: Faulty pixels correction configuration
51 * @lsc: Lens shading compensation configuration
52 * @update: Bitmask of controls to update during the next interrupt
53 * @shadow_update: Controls update in progress by userspace
54 * @syncif: Interface synchronization configuration
55 * @vpcfg: Video port configuration
56 * @underrun: A buffer underrun occurred and a new buffer has been queued
57 * @state: Streaming state
58 * @lock: Serializes shadow_update with interrupt handler
59 * @wait: Wait queue used to stop the module
60 * @stopping: Stopping state
61 * @ioctl_lock: Serializes ioctl calls and LSC requests freeing
63 struct iss_ipipeif_device {
64 struct v4l2_subdev subdev;
65 struct media_pad pads[IPIPEIF_PADS_NUM];
66 struct v4l2_mbus_framefmt formats[IPIPEIF_PADS_NUM];
68 enum ipipeif_input_entity input;
70 struct iss_video video_out;
73 enum iss_pipeline_stream_state state;
74 wait_queue_head_t wait;
80 int omap4iss_ipipeif_init(struct iss_device *iss);
81 void omap4iss_ipipeif_cleanup(struct iss_device *iss);
82 int omap4iss_ipipeif_register_entities(struct iss_ipipeif_device *ipipeif,
83 struct v4l2_device *vdev);
84 void omap4iss_ipipeif_unregister_entities(struct iss_ipipeif_device *ipipeif);
86 int omap4iss_ipipeif_busy(struct iss_ipipeif_device *ipipeif);
87 void omap4iss_ipipeif_isr(struct iss_ipipeif_device *ipipeif, u32 events);
88 void omap4iss_ipipeif_restore_context(struct iss_device *iss);
89 void omap4iss_ipipeif_max_rate(struct iss_ipipeif_device *ipipeif,
90 unsigned int *max_rate);
92 #endif /* OMAP4_ISS_IPIPEIF_H */