summaryrefslogtreecommitdiff
path: root/linux/drivers/media/video/davinci/vpif.h
diff options
context:
space:
mode:
Diffstat (limited to 'linux/drivers/media/video/davinci/vpif.h')
-rw-r--r--linux/drivers/media/video/davinci/vpif.h48
1 files changed, 29 insertions, 19 deletions
diff --git a/linux/drivers/media/video/davinci/vpif.h b/linux/drivers/media/video/davinci/vpif.h
index fca26dcb5..188841b47 100644
--- a/linux/drivers/media/video/davinci/vpif.h
+++ b/linux/drivers/media/video/davinci/vpif.h
@@ -19,6 +19,7 @@
#include <linux/io.h>
#include <linux/videodev2.h>
#include <mach/hardware.h>
+#include <mach/dm646x.h>
/* Maximum channel allowed */
#define VPIF_NUM_CHANNELS (4)
@@ -26,7 +27,9 @@
#define VPIF_DISPLAY_NUM_CHANNELS (2)
/* Macros to read/write registers */
-static void __iomem *vpif_base;
+extern void __iomem *vpif_base;
+extern spinlock_t vpif_lock;
+
#define regr(reg) readl((reg) + vpif_base)
#define regw(value, reg) writel(value, (reg + vpif_base))
@@ -280,6 +283,10 @@ static inline void enable_channel1(int enable)
/* inline function to enable interrupt for channel0 */
static inline void channel0_intr_enable(int enable)
{
+ unsigned long flags;
+
+ spin_lock_irqsave(&vpif_lock, flags);
+
if (enable) {
regw((regr(VPIF_INTEN) | 0x10), VPIF_INTEN);
regw((regr(VPIF_INTEN_SET) | 0x10), VPIF_INTEN_SET);
@@ -292,11 +299,16 @@ static inline void channel0_intr_enable(int enable)
regw((regr(VPIF_INTEN_SET) | VPIF_INTEN_FRAME_CH0),
VPIF_INTEN_SET);
}
+ spin_unlock_irqrestore(&vpif_lock, flags);
}
/* inline function to enable interrupt for channel1 */
static inline void channel1_intr_enable(int enable)
{
+ unsigned long flags;
+
+ spin_lock_irqsave(&vpif_lock, flags);
+
if (enable) {
regw((regr(VPIF_INTEN) | 0x10), VPIF_INTEN);
regw((regr(VPIF_INTEN_SET) | 0x10), VPIF_INTEN_SET);
@@ -309,6 +321,7 @@ static inline void channel1_intr_enable(int enable)
regw((regr(VPIF_INTEN_SET) | VPIF_INTEN_FRAME_CH1),
VPIF_INTEN_SET);
}
+ spin_unlock_irqrestore(&vpif_lock, flags);
}
/* inline function to set buffer addresses in case of Y/C non mux mode */
@@ -431,6 +444,10 @@ static inline void enable_channel3(int enable)
/* inline function to enable interrupt for channel2 */
static inline void channel2_intr_enable(int enable)
{
+ unsigned long flags;
+
+ spin_lock_irqsave(&vpif_lock, flags);
+
if (enable) {
regw((regr(VPIF_INTEN) | 0x10), VPIF_INTEN);
regw((regr(VPIF_INTEN_SET) | 0x10), VPIF_INTEN_SET);
@@ -442,11 +459,16 @@ static inline void channel2_intr_enable(int enable)
regw((regr(VPIF_INTEN_SET) | VPIF_INTEN_FRAME_CH2),
VPIF_INTEN_SET);
}
+ spin_unlock_irqrestore(&vpif_lock, flags);
}
/* inline function to enable interrupt for channel3 */
static inline void channel3_intr_enable(int enable)
{
+ unsigned long flags;
+
+ spin_lock_irqsave(&vpif_lock, flags);
+
if (enable) {
regw((regr(VPIF_INTEN) | 0x10), VPIF_INTEN);
regw((regr(VPIF_INTEN_SET) | 0x10), VPIF_INTEN_SET);
@@ -459,6 +481,7 @@ static inline void channel3_intr_enable(int enable)
regw((regr(VPIF_INTEN_SET) | VPIF_INTEN_FRAME_CH3),
VPIF_INTEN_SET);
}
+ spin_unlock_irqrestore(&vpif_lock, flags);
}
/* inline function to enable raw vbi data for channel2 */
@@ -571,7 +594,7 @@ struct vpif_channel_config_params {
v4l2_std_id stdid;
};
-struct vpif_interface;
+struct vpif_video_params;
struct vpif_params;
struct vpif_vbi_params;
@@ -579,13 +602,6 @@ int vpif_set_video_params(struct vpif_params *vpifparams, u8 channel_id);
void vpif_set_vbi_display_params(struct vpif_vbi_params *vbiparams,
u8 channel_id);
int vpif_channel_getfid(u8 channel_id);
-void vpif_base_addr_init(void __iomem *base);
-
-/* Enumerated data types */
-enum vpif_capture_pinpol {
- VPIF_CAPTURE_PINPOL_SAME = 0,
- VPIF_CAPTURE_PINPOL_INVERT = 1
-};
enum data_size {
_8BITS = 0,
@@ -593,13 +609,6 @@ enum data_size {
_12BITS,
};
-struct vpif_capture_params_raw {
- enum data_size data_sz;
- enum vpif_capture_pinpol fid_pol;
- enum vpif_capture_pinpol vd_pol;
- enum vpif_capture_pinpol hd_pol;
-};
-
/* Structure for vpif parameters for raw vbi data */
struct vpif_vbi_params {
__u32 hstart0; /* Horizontal start of raw vbi data for first field */
@@ -613,18 +622,19 @@ struct vpif_vbi_params {
};
/* structure for vpif parameters */
-struct vpif_interface {
+struct vpif_video_params {
__u8 storage_mode; /* Indicates field or frame mode */
unsigned long hpitch;
v4l2_std_id stdid;
};
struct vpif_params {
- struct vpif_interface video_params;
+ struct vpif_interface iface;
+ struct vpif_video_params video_params;
struct vpif_channel_config_params std_info;
union param {
struct vpif_vbi_params vbi_params;
- struct vpif_capture_params_raw raw_params;
+ enum data_size data_sz;
} params;
};