Path: blob/master/drivers/media/video/davinci/vpif.h
17633 views
/*1* VPIF header file2*3* Copyright (C) 2009 Texas Instruments Incorporated - http://www.ti.com/4*5* This program is free software; you can redistribute it and/or6* modify it under the terms of the GNU General Public License as7* published by the Free Software Foundation version 2.8*9* This program is distributed .as is. WITHOUT ANY WARRANTY of any10* kind, whether express or implied; without even the implied warranty11* of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the12* GNU General Public License for more details.13*/1415#ifndef VPIF_H16#define VPIF_H1718#include <linux/io.h>19#include <linux/videodev2.h>20#include <mach/hardware.h>21#include <mach/dm646x.h>2223/* Maximum channel allowed */24#define VPIF_NUM_CHANNELS (4)25#define VPIF_CAPTURE_NUM_CHANNELS (2)26#define VPIF_DISPLAY_NUM_CHANNELS (2)2728/* Macros to read/write registers */29extern void __iomem *vpif_base;30extern spinlock_t vpif_lock;3132#define regr(reg) readl((reg) + vpif_base)33#define regw(value, reg) writel(value, (reg + vpif_base))3435/* Register Address Offsets */36#define VPIF_PID (0x0000)37#define VPIF_CH0_CTRL (0x0004)38#define VPIF_CH1_CTRL (0x0008)39#define VPIF_CH2_CTRL (0x000C)40#define VPIF_CH3_CTRL (0x0010)4142#define VPIF_INTEN (0x0020)43#define VPIF_INTEN_SET (0x0024)44#define VPIF_INTEN_CLR (0x0028)45#define VPIF_STATUS (0x002C)46#define VPIF_STATUS_CLR (0x0030)47#define VPIF_EMULATION_CTRL (0x0034)48#define VPIF_REQ_SIZE (0x0038)4950#define VPIF_CH0_TOP_STRT_ADD_LUMA (0x0040)51#define VPIF_CH0_BTM_STRT_ADD_LUMA (0x0044)52#define VPIF_CH0_TOP_STRT_ADD_CHROMA (0x0048)53#define VPIF_CH0_BTM_STRT_ADD_CHROMA (0x004c)54#define VPIF_CH0_TOP_STRT_ADD_HANC (0x0050)55#define VPIF_CH0_BTM_STRT_ADD_HANC (0x0054)56#define VPIF_CH0_TOP_STRT_ADD_VANC (0x0058)57#define VPIF_CH0_BTM_STRT_ADD_VANC (0x005c)58#define VPIF_CH0_SP_CFG (0x0060)59#define VPIF_CH0_IMG_ADD_OFST (0x0064)60#define VPIF_CH0_HANC_ADD_OFST (0x0068)61#define VPIF_CH0_H_CFG (0x006c)62#define VPIF_CH0_V_CFG_00 (0x0070)63#define VPIF_CH0_V_CFG_01 (0x0074)64#define VPIF_CH0_V_CFG_02 (0x0078)65#define VPIF_CH0_V_CFG_03 (0x007c)6667#define VPIF_CH1_TOP_STRT_ADD_LUMA (0x0080)68#define VPIF_CH1_BTM_STRT_ADD_LUMA (0x0084)69#define VPIF_CH1_TOP_STRT_ADD_CHROMA (0x0088)70#define VPIF_CH1_BTM_STRT_ADD_CHROMA (0x008c)71#define VPIF_CH1_TOP_STRT_ADD_HANC (0x0090)72#define VPIF_CH1_BTM_STRT_ADD_HANC (0x0094)73#define VPIF_CH1_TOP_STRT_ADD_VANC (0x0098)74#define VPIF_CH1_BTM_STRT_ADD_VANC (0x009c)75#define VPIF_CH1_SP_CFG (0x00a0)76#define VPIF_CH1_IMG_ADD_OFST (0x00a4)77#define VPIF_CH1_HANC_ADD_OFST (0x00a8)78#define VPIF_CH1_H_CFG (0x00ac)79#define VPIF_CH1_V_CFG_00 (0x00b0)80#define VPIF_CH1_V_CFG_01 (0x00b4)81#define VPIF_CH1_V_CFG_02 (0x00b8)82#define VPIF_CH1_V_CFG_03 (0x00bc)8384#define VPIF_CH2_TOP_STRT_ADD_LUMA (0x00c0)85#define VPIF_CH2_BTM_STRT_ADD_LUMA (0x00c4)86#define VPIF_CH2_TOP_STRT_ADD_CHROMA (0x00c8)87#define VPIF_CH2_BTM_STRT_ADD_CHROMA (0x00cc)88#define VPIF_CH2_TOP_STRT_ADD_HANC (0x00d0)89#define VPIF_CH2_BTM_STRT_ADD_HANC (0x00d4)90#define VPIF_CH2_TOP_STRT_ADD_VANC (0x00d8)91#define VPIF_CH2_BTM_STRT_ADD_VANC (0x00dc)92#define VPIF_CH2_SP_CFG (0x00e0)93#define VPIF_CH2_IMG_ADD_OFST (0x00e4)94#define VPIF_CH2_HANC_ADD_OFST (0x00e8)95#define VPIF_CH2_H_CFG (0x00ec)96#define VPIF_CH2_V_CFG_00 (0x00f0)97#define VPIF_CH2_V_CFG_01 (0x00f4)98#define VPIF_CH2_V_CFG_02 (0x00f8)99#define VPIF_CH2_V_CFG_03 (0x00fc)100#define VPIF_CH2_HANC0_STRT (0x0100)101#define VPIF_CH2_HANC0_SIZE (0x0104)102#define VPIF_CH2_HANC1_STRT (0x0108)103#define VPIF_CH2_HANC1_SIZE (0x010c)104#define VPIF_CH2_VANC0_STRT (0x0110)105#define VPIF_CH2_VANC0_SIZE (0x0114)106#define VPIF_CH2_VANC1_STRT (0x0118)107#define VPIF_CH2_VANC1_SIZE (0x011c)108109#define VPIF_CH3_TOP_STRT_ADD_LUMA (0x0140)110#define VPIF_CH3_BTM_STRT_ADD_LUMA (0x0144)111#define VPIF_CH3_TOP_STRT_ADD_CHROMA (0x0148)112#define VPIF_CH3_BTM_STRT_ADD_CHROMA (0x014c)113#define VPIF_CH3_TOP_STRT_ADD_HANC (0x0150)114#define VPIF_CH3_BTM_STRT_ADD_HANC (0x0154)115#define VPIF_CH3_TOP_STRT_ADD_VANC (0x0158)116#define VPIF_CH3_BTM_STRT_ADD_VANC (0x015c)117#define VPIF_CH3_SP_CFG (0x0160)118#define VPIF_CH3_IMG_ADD_OFST (0x0164)119#define VPIF_CH3_HANC_ADD_OFST (0x0168)120#define VPIF_CH3_H_CFG (0x016c)121#define VPIF_CH3_V_CFG_00 (0x0170)122#define VPIF_CH3_V_CFG_01 (0x0174)123#define VPIF_CH3_V_CFG_02 (0x0178)124#define VPIF_CH3_V_CFG_03 (0x017c)125#define VPIF_CH3_HANC0_STRT (0x0180)126#define VPIF_CH3_HANC0_SIZE (0x0184)127#define VPIF_CH3_HANC1_STRT (0x0188)128#define VPIF_CH3_HANC1_SIZE (0x018c)129#define VPIF_CH3_VANC0_STRT (0x0190)130#define VPIF_CH3_VANC0_SIZE (0x0194)131#define VPIF_CH3_VANC1_STRT (0x0198)132#define VPIF_CH3_VANC1_SIZE (0x019c)133134#define VPIF_IODFT_CTRL (0x01c0)135136/* Functions for bit Manipulation */137static inline void vpif_set_bit(u32 reg, u32 bit)138{139regw((regr(reg)) | (0x01 << bit), reg);140}141142static inline void vpif_clr_bit(u32 reg, u32 bit)143{144regw(((regr(reg)) & ~(0x01 << bit)), reg);145}146147/* Macro for Generating mask */148#ifdef GENERATE_MASK149#undef GENERATE_MASK150#endif151152#define GENERATE_MASK(bits, pos) \153((((0xFFFFFFFF) << (32 - bits)) >> (32 - bits)) << pos)154155/* Bit positions in the channel control registers */156#define VPIF_CH_DATA_MODE_BIT (2)157#define VPIF_CH_YC_MUX_BIT (3)158#define VPIF_CH_SDR_FMT_BIT (4)159#define VPIF_CH_HANC_EN_BIT (8)160#define VPIF_CH_VANC_EN_BIT (9)161162#define VPIF_CAPTURE_CH_NIP (10)163#define VPIF_DISPLAY_CH_NIP (11)164165#define VPIF_DISPLAY_PIX_EN_BIT (10)166167#define VPIF_CH_INPUT_FIELD_FRAME_BIT (12)168169#define VPIF_CH_FID_POLARITY_BIT (15)170#define VPIF_CH_V_VALID_POLARITY_BIT (14)171#define VPIF_CH_H_VALID_POLARITY_BIT (13)172#define VPIF_CH_DATA_WIDTH_BIT (28)173174#define VPIF_CH_CLK_EDGE_CTRL_BIT (31)175176/* Mask various length */177#define VPIF_CH_EAVSAV_MASK GENERATE_MASK(13, 0)178#define VPIF_CH_LEN_MASK GENERATE_MASK(12, 0)179#define VPIF_CH_WIDTH_MASK GENERATE_MASK(13, 0)180#define VPIF_CH_LEN_SHIFT (16)181182/* VPIF masks for registers */183#define VPIF_REQ_SIZE_MASK (0x1ff)184185/* bit posotion of interrupt vpif_ch_intr register */186#define VPIF_INTEN_FRAME_CH0 (0x00000001)187#define VPIF_INTEN_FRAME_CH1 (0x00000002)188#define VPIF_INTEN_FRAME_CH2 (0x00000004)189#define VPIF_INTEN_FRAME_CH3 (0x00000008)190191/* bit position of clock and channel enable in vpif_chn_ctrl register */192193#define VPIF_CH0_CLK_EN (0x00000002)194#define VPIF_CH0_EN (0x00000001)195#define VPIF_CH1_CLK_EN (0x00000002)196#define VPIF_CH1_EN (0x00000001)197#define VPIF_CH2_CLK_EN (0x00000002)198#define VPIF_CH2_EN (0x00000001)199#define VPIF_CH3_CLK_EN (0x00000002)200#define VPIF_CH3_EN (0x00000001)201#define VPIF_CH_CLK_EN (0x00000002)202#define VPIF_CH_EN (0x00000001)203204#define VPIF_INT_TOP (0x00)205#define VPIF_INT_BOTTOM (0x01)206#define VPIF_INT_BOTH (0x02)207208#define VPIF_CH0_INT_CTRL_SHIFT (6)209#define VPIF_CH1_INT_CTRL_SHIFT (6)210#define VPIF_CH2_INT_CTRL_SHIFT (6)211#define VPIF_CH3_INT_CTRL_SHIFT (6)212#define VPIF_CH_INT_CTRL_SHIFT (6)213214/* enabled interrupt on both the fields on vpid_ch0_ctrl register */215#define channel0_intr_assert() (regw((regr(VPIF_CH0_CTRL)|\216(VPIF_INT_BOTH << VPIF_CH0_INT_CTRL_SHIFT)), VPIF_CH0_CTRL))217218/* enabled interrupt on both the fields on vpid_ch1_ctrl register */219#define channel1_intr_assert() (regw((regr(VPIF_CH1_CTRL)|\220(VPIF_INT_BOTH << VPIF_CH1_INT_CTRL_SHIFT)), VPIF_CH1_CTRL))221222/* enabled interrupt on both the fields on vpid_ch0_ctrl register */223#define channel2_intr_assert() (regw((regr(VPIF_CH2_CTRL)|\224(VPIF_INT_BOTH << VPIF_CH2_INT_CTRL_SHIFT)), VPIF_CH2_CTRL))225226/* enabled interrupt on both the fields on vpid_ch1_ctrl register */227#define channel3_intr_assert() (regw((regr(VPIF_CH3_CTRL)|\228(VPIF_INT_BOTH << VPIF_CH3_INT_CTRL_SHIFT)), VPIF_CH3_CTRL))229230#define VPIF_CH_FID_MASK (0x20)231#define VPIF_CH_FID_SHIFT (5)232233#define VPIF_NTSC_VBI_START_FIELD0 (1)234#define VPIF_NTSC_VBI_START_FIELD1 (263)235#define VPIF_PAL_VBI_START_FIELD0 (624)236#define VPIF_PAL_VBI_START_FIELD1 (311)237238#define VPIF_NTSC_HBI_START_FIELD0 (1)239#define VPIF_NTSC_HBI_START_FIELD1 (263)240#define VPIF_PAL_HBI_START_FIELD0 (624)241#define VPIF_PAL_HBI_START_FIELD1 (311)242243#define VPIF_NTSC_VBI_COUNT_FIELD0 (20)244#define VPIF_NTSC_VBI_COUNT_FIELD1 (19)245#define VPIF_PAL_VBI_COUNT_FIELD0 (24)246#define VPIF_PAL_VBI_COUNT_FIELD1 (25)247248#define VPIF_NTSC_HBI_COUNT_FIELD0 (263)249#define VPIF_NTSC_HBI_COUNT_FIELD1 (262)250#define VPIF_PAL_HBI_COUNT_FIELD0 (312)251#define VPIF_PAL_HBI_COUNT_FIELD1 (313)252253#define VPIF_NTSC_VBI_SAMPLES_PER_LINE (720)254#define VPIF_PAL_VBI_SAMPLES_PER_LINE (720)255#define VPIF_NTSC_HBI_SAMPLES_PER_LINE (268)256#define VPIF_PAL_HBI_SAMPLES_PER_LINE (280)257258#define VPIF_CH_VANC_EN (0x20)259#define VPIF_DMA_REQ_SIZE (0x080)260#define VPIF_EMULATION_DISABLE (0x01)261262extern u8 irq_vpif_capture_channel[VPIF_NUM_CHANNELS];263264/* inline function to enable/disable channel0 */265static inline void enable_channel0(int enable)266{267if (enable)268regw((regr(VPIF_CH0_CTRL) | (VPIF_CH0_EN)), VPIF_CH0_CTRL);269else270regw((regr(VPIF_CH0_CTRL) & (~VPIF_CH0_EN)), VPIF_CH0_CTRL);271}272273/* inline function to enable/disable channel1 */274static inline void enable_channel1(int enable)275{276if (enable)277regw((regr(VPIF_CH1_CTRL) | (VPIF_CH1_EN)), VPIF_CH1_CTRL);278else279regw((regr(VPIF_CH1_CTRL) & (~VPIF_CH1_EN)), VPIF_CH1_CTRL);280}281282/* inline function to enable interrupt for channel0 */283static inline void channel0_intr_enable(int enable)284{285unsigned long flags;286287spin_lock_irqsave(&vpif_lock, flags);288289if (enable) {290regw((regr(VPIF_INTEN) | 0x10), VPIF_INTEN);291regw((regr(VPIF_INTEN_SET) | 0x10), VPIF_INTEN_SET);292293regw((regr(VPIF_INTEN) | VPIF_INTEN_FRAME_CH0), VPIF_INTEN);294regw((regr(VPIF_INTEN_SET) | VPIF_INTEN_FRAME_CH0),295VPIF_INTEN_SET);296} else {297regw((regr(VPIF_INTEN) & (~VPIF_INTEN_FRAME_CH0)), VPIF_INTEN);298regw((regr(VPIF_INTEN_SET) | VPIF_INTEN_FRAME_CH0),299VPIF_INTEN_SET);300}301spin_unlock_irqrestore(&vpif_lock, flags);302}303304/* inline function to enable interrupt for channel1 */305static inline void channel1_intr_enable(int enable)306{307unsigned long flags;308309spin_lock_irqsave(&vpif_lock, flags);310311if (enable) {312regw((regr(VPIF_INTEN) | 0x10), VPIF_INTEN);313regw((regr(VPIF_INTEN_SET) | 0x10), VPIF_INTEN_SET);314315regw((regr(VPIF_INTEN) | VPIF_INTEN_FRAME_CH1), VPIF_INTEN);316regw((regr(VPIF_INTEN_SET) | VPIF_INTEN_FRAME_CH1),317VPIF_INTEN_SET);318} else {319regw((regr(VPIF_INTEN) & (~VPIF_INTEN_FRAME_CH1)), VPIF_INTEN);320regw((regr(VPIF_INTEN_SET) | VPIF_INTEN_FRAME_CH1),321VPIF_INTEN_SET);322}323spin_unlock_irqrestore(&vpif_lock, flags);324}325326/* inline function to set buffer addresses in case of Y/C non mux mode */327static inline void ch0_set_videobuf_addr_yc_nmux(unsigned long top_strt_luma,328unsigned long btm_strt_luma,329unsigned long top_strt_chroma,330unsigned long btm_strt_chroma)331{332regw(top_strt_luma, VPIF_CH0_TOP_STRT_ADD_LUMA);333regw(btm_strt_luma, VPIF_CH0_BTM_STRT_ADD_LUMA);334regw(top_strt_chroma, VPIF_CH1_TOP_STRT_ADD_CHROMA);335regw(btm_strt_chroma, VPIF_CH1_BTM_STRT_ADD_CHROMA);336}337338/* inline function to set buffer addresses in VPIF registers for video data */339static inline void ch0_set_videobuf_addr(unsigned long top_strt_luma,340unsigned long btm_strt_luma,341unsigned long top_strt_chroma,342unsigned long btm_strt_chroma)343{344regw(top_strt_luma, VPIF_CH0_TOP_STRT_ADD_LUMA);345regw(btm_strt_luma, VPIF_CH0_BTM_STRT_ADD_LUMA);346regw(top_strt_chroma, VPIF_CH0_TOP_STRT_ADD_CHROMA);347regw(btm_strt_chroma, VPIF_CH0_BTM_STRT_ADD_CHROMA);348}349350static inline void ch1_set_videobuf_addr(unsigned long top_strt_luma,351unsigned long btm_strt_luma,352unsigned long top_strt_chroma,353unsigned long btm_strt_chroma)354{355356regw(top_strt_luma, VPIF_CH1_TOP_STRT_ADD_LUMA);357regw(btm_strt_luma, VPIF_CH1_BTM_STRT_ADD_LUMA);358regw(top_strt_chroma, VPIF_CH1_TOP_STRT_ADD_CHROMA);359regw(btm_strt_chroma, VPIF_CH1_BTM_STRT_ADD_CHROMA);360}361362static inline void ch0_set_vbi_addr(unsigned long top_vbi,363unsigned long btm_vbi, unsigned long a, unsigned long b)364{365regw(top_vbi, VPIF_CH0_TOP_STRT_ADD_VANC);366regw(btm_vbi, VPIF_CH0_BTM_STRT_ADD_VANC);367}368369static inline void ch0_set_hbi_addr(unsigned long top_vbi,370unsigned long btm_vbi, unsigned long a, unsigned long b)371{372regw(top_vbi, VPIF_CH0_TOP_STRT_ADD_HANC);373regw(btm_vbi, VPIF_CH0_BTM_STRT_ADD_HANC);374}375376static inline void ch1_set_vbi_addr(unsigned long top_vbi,377unsigned long btm_vbi, unsigned long a, unsigned long b)378{379regw(top_vbi, VPIF_CH1_TOP_STRT_ADD_VANC);380regw(btm_vbi, VPIF_CH1_BTM_STRT_ADD_VANC);381}382383static inline void ch1_set_hbi_addr(unsigned long top_vbi,384unsigned long btm_vbi, unsigned long a, unsigned long b)385{386regw(top_vbi, VPIF_CH1_TOP_STRT_ADD_HANC);387regw(btm_vbi, VPIF_CH1_BTM_STRT_ADD_HANC);388}389390/* Inline function to enable raw vbi in the given channel */391static inline void disable_raw_feature(u8 channel_id, u8 index)392{393u32 ctrl_reg;394if (0 == channel_id)395ctrl_reg = VPIF_CH0_CTRL;396else397ctrl_reg = VPIF_CH1_CTRL;398399if (1 == index)400vpif_clr_bit(ctrl_reg, VPIF_CH_VANC_EN_BIT);401else402vpif_clr_bit(ctrl_reg, VPIF_CH_HANC_EN_BIT);403}404405static inline void enable_raw_feature(u8 channel_id, u8 index)406{407u32 ctrl_reg;408if (0 == channel_id)409ctrl_reg = VPIF_CH0_CTRL;410else411ctrl_reg = VPIF_CH1_CTRL;412413if (1 == index)414vpif_set_bit(ctrl_reg, VPIF_CH_VANC_EN_BIT);415else416vpif_set_bit(ctrl_reg, VPIF_CH_HANC_EN_BIT);417}418419/* inline function to enable/disable channel2 */420static inline void enable_channel2(int enable)421{422if (enable) {423regw((regr(VPIF_CH2_CTRL) | (VPIF_CH2_CLK_EN)), VPIF_CH2_CTRL);424regw((regr(VPIF_CH2_CTRL) | (VPIF_CH2_EN)), VPIF_CH2_CTRL);425} else {426regw((regr(VPIF_CH2_CTRL) & (~VPIF_CH2_CLK_EN)), VPIF_CH2_CTRL);427regw((regr(VPIF_CH2_CTRL) & (~VPIF_CH2_EN)), VPIF_CH2_CTRL);428}429}430431/* inline function to enable/disable channel3 */432static inline void enable_channel3(int enable)433{434if (enable) {435regw((regr(VPIF_CH3_CTRL) | (VPIF_CH3_CLK_EN)), VPIF_CH3_CTRL);436regw((regr(VPIF_CH3_CTRL) | (VPIF_CH3_EN)), VPIF_CH3_CTRL);437} else {438regw((regr(VPIF_CH3_CTRL) & (~VPIF_CH3_CLK_EN)), VPIF_CH3_CTRL);439regw((regr(VPIF_CH3_CTRL) & (~VPIF_CH3_EN)), VPIF_CH3_CTRL);440}441}442443/* inline function to enable interrupt for channel2 */444static inline void channel2_intr_enable(int enable)445{446unsigned long flags;447448spin_lock_irqsave(&vpif_lock, flags);449450if (enable) {451regw((regr(VPIF_INTEN) | 0x10), VPIF_INTEN);452regw((regr(VPIF_INTEN_SET) | 0x10), VPIF_INTEN_SET);453regw((regr(VPIF_INTEN) | VPIF_INTEN_FRAME_CH2), VPIF_INTEN);454regw((regr(VPIF_INTEN_SET) | VPIF_INTEN_FRAME_CH2),455VPIF_INTEN_SET);456} else {457regw((regr(VPIF_INTEN) & (~VPIF_INTEN_FRAME_CH2)), VPIF_INTEN);458regw((regr(VPIF_INTEN_SET) | VPIF_INTEN_FRAME_CH2),459VPIF_INTEN_SET);460}461spin_unlock_irqrestore(&vpif_lock, flags);462}463464/* inline function to enable interrupt for channel3 */465static inline void channel3_intr_enable(int enable)466{467unsigned long flags;468469spin_lock_irqsave(&vpif_lock, flags);470471if (enable) {472regw((regr(VPIF_INTEN) | 0x10), VPIF_INTEN);473regw((regr(VPIF_INTEN_SET) | 0x10), VPIF_INTEN_SET);474475regw((regr(VPIF_INTEN) | VPIF_INTEN_FRAME_CH3), VPIF_INTEN);476regw((regr(VPIF_INTEN_SET) | VPIF_INTEN_FRAME_CH3),477VPIF_INTEN_SET);478} else {479regw((regr(VPIF_INTEN) & (~VPIF_INTEN_FRAME_CH3)), VPIF_INTEN);480regw((regr(VPIF_INTEN_SET) | VPIF_INTEN_FRAME_CH3),481VPIF_INTEN_SET);482}483spin_unlock_irqrestore(&vpif_lock, flags);484}485486/* inline function to enable raw vbi data for channel2 */487static inline void channel2_raw_enable(int enable, u8 index)488{489u32 mask;490491if (1 == index)492mask = VPIF_CH_VANC_EN_BIT;493else494mask = VPIF_CH_HANC_EN_BIT;495496if (enable)497vpif_set_bit(VPIF_CH2_CTRL, mask);498else499vpif_clr_bit(VPIF_CH2_CTRL, mask);500}501502/* inline function to enable raw vbi data for channel3*/503static inline void channel3_raw_enable(int enable, u8 index)504{505u32 mask;506507if (1 == index)508mask = VPIF_CH_VANC_EN_BIT;509else510mask = VPIF_CH_HANC_EN_BIT;511512if (enable)513vpif_set_bit(VPIF_CH3_CTRL, mask);514else515vpif_clr_bit(VPIF_CH3_CTRL, mask);516}517518/* inline function to set buffer addresses in case of Y/C non mux mode */519static inline void ch2_set_videobuf_addr_yc_nmux(unsigned long top_strt_luma,520unsigned long btm_strt_luma,521unsigned long top_strt_chroma,522unsigned long btm_strt_chroma)523{524regw(top_strt_luma, VPIF_CH2_TOP_STRT_ADD_LUMA);525regw(btm_strt_luma, VPIF_CH2_BTM_STRT_ADD_LUMA);526regw(top_strt_chroma, VPIF_CH3_TOP_STRT_ADD_CHROMA);527regw(btm_strt_chroma, VPIF_CH3_BTM_STRT_ADD_CHROMA);528}529530/* inline function to set buffer addresses in VPIF registers for video data */531static inline void ch2_set_videobuf_addr(unsigned long top_strt_luma,532unsigned long btm_strt_luma,533unsigned long top_strt_chroma,534unsigned long btm_strt_chroma)535{536regw(top_strt_luma, VPIF_CH2_TOP_STRT_ADD_LUMA);537regw(btm_strt_luma, VPIF_CH2_BTM_STRT_ADD_LUMA);538regw(top_strt_chroma, VPIF_CH2_TOP_STRT_ADD_CHROMA);539regw(btm_strt_chroma, VPIF_CH2_BTM_STRT_ADD_CHROMA);540}541542static inline void ch3_set_videobuf_addr(unsigned long top_strt_luma,543unsigned long btm_strt_luma,544unsigned long top_strt_chroma,545unsigned long btm_strt_chroma)546{547regw(top_strt_luma, VPIF_CH3_TOP_STRT_ADD_LUMA);548regw(btm_strt_luma, VPIF_CH3_BTM_STRT_ADD_LUMA);549regw(top_strt_chroma, VPIF_CH3_TOP_STRT_ADD_CHROMA);550regw(btm_strt_chroma, VPIF_CH3_BTM_STRT_ADD_CHROMA);551}552553/* inline function to set buffer addresses in VPIF registers for vbi data */554static inline void ch2_set_vbi_addr(unsigned long top_strt_luma,555unsigned long btm_strt_luma,556unsigned long top_strt_chroma,557unsigned long btm_strt_chroma)558{559regw(top_strt_luma, VPIF_CH2_TOP_STRT_ADD_VANC);560regw(btm_strt_luma, VPIF_CH2_BTM_STRT_ADD_VANC);561}562563static inline void ch3_set_vbi_addr(unsigned long top_strt_luma,564unsigned long btm_strt_luma,565unsigned long top_strt_chroma,566unsigned long btm_strt_chroma)567{568regw(top_strt_luma, VPIF_CH3_TOP_STRT_ADD_VANC);569regw(btm_strt_luma, VPIF_CH3_BTM_STRT_ADD_VANC);570}571572#define VPIF_MAX_NAME (30)573574/* This structure will store size parameters as per the mode selected by user */575struct vpif_channel_config_params {576char name[VPIF_MAX_NAME]; /* Name of the mode */577u16 width; /* Indicates width of the image */578u16 height; /* Indicates height of the image */579u8 frm_fmt; /* Interlaced (0) or progressive (1) */580u8 ycmux_mode; /* This mode requires one (0) or two (1)581channels */582u16 eav2sav; /* length of eav 2 sav */583u16 sav2eav; /* length of sav 2 eav */584u16 l1, l3, l5, l7, l9, l11; /* Other parameter configurations */585u16 vsize; /* Vertical size of the image */586u8 capture_format; /* Indicates whether capture format587* is in BT or in CCD/CMOS */588u8 vbi_supported; /* Indicates whether this mode589* supports capturing vbi or not */590u8 hd_sd; /* HDTV (1) or SDTV (0) format */591v4l2_std_id stdid; /* SDTV format */592u32 dv_preset; /* HDTV format */593};594595extern const unsigned int vpif_ch_params_count;596extern const struct vpif_channel_config_params ch_params[];597598struct vpif_video_params;599struct vpif_params;600struct vpif_vbi_params;601602int vpif_set_video_params(struct vpif_params *vpifparams, u8 channel_id);603void vpif_set_vbi_display_params(struct vpif_vbi_params *vbiparams,604u8 channel_id);605int vpif_channel_getfid(u8 channel_id);606607enum data_size {608_8BITS = 0,609_10BITS,610_12BITS,611};612613/* Structure for vpif parameters for raw vbi data */614struct vpif_vbi_params {615__u32 hstart0; /* Horizontal start of raw vbi data for first field */616__u32 vstart0; /* Vertical start of raw vbi data for first field */617__u32 hsize0; /* Horizontal size of raw vbi data for first field */618__u32 vsize0; /* Vertical size of raw vbi data for first field */619__u32 hstart1; /* Horizontal start of raw vbi data for second field */620__u32 vstart1; /* Vertical start of raw vbi data for second field */621__u32 hsize1; /* Horizontal size of raw vbi data for second field */622__u32 vsize1; /* Vertical size of raw vbi data for second field */623};624625/* structure for vpif parameters */626struct vpif_video_params {627__u8 storage_mode; /* Indicates field or frame mode */628unsigned long hpitch;629v4l2_std_id stdid;630};631632struct vpif_params {633struct vpif_interface iface;634struct vpif_video_params video_params;635struct vpif_channel_config_params std_info;636union param {637struct vpif_vbi_params vbi_params;638enum data_size data_sz;639} params;640};641642#endif /* End of #ifndef VPIF_H */643644645646