亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? tw2834.c

?? tw2834 linux下的2834驅(qū)動程序
?? C
?? 第 1 頁 / 共 3 頁
字號:
 */
static void tw2834_initpage0(int norm)
{
    int  t1;

    if(norm == VIDEO_NORM_NTSC){
        for (t1=0; t1<4; t1++){
            tw2834_write_table(PAGE0,0x00+0x40*t1,tbl_ntsc_page0_common,36);
            tw2834_write_byte(PAGE0,0x22+0x40*t1,t1);
            }

        tw2834_write_table(PAGE0,0x38,tbl_ntsc_page0_sfr1,8);
        tw2834_write_table(PAGE0,0x78,tbl_ntsc_page0_sfr2,8);
        tw2834_write_table(PAGE0,0xb8,tbl_ntsc_page0_sfr3,8);
        tw2834_write_table(PAGE0,0xf8,tbl_ntsc_page0_sfr4,8);
        }
    else{
        for(t1=0; t1<4; t1++){
            tw2834_write_table(PAGE0,0x00+0x40*t1,tbl_pal_page0_common,36);
            tw2834_write_byte(PAGE0,0x22+0x40*t1,t1);
        }

        tw2834_write_table(PAGE0,0x38,tbl_pal_page0_sfr1,8);
        tw2834_write_table(PAGE0,0x78,tbl_pal_page0_sfr2,8);
        tw2834_write_table(PAGE0,0xb8,tbl_pal_page0_sfr3,8);
        tw2834_write_table(PAGE0,0xf8,tbl_pal_page0_sfr4,8);
    }
}

/*
 * initialize the page1's register
 * return value: nothing
 */
static void tw2834_initpage1(int norm)
{
    unsigned char t1;

    tw2834_write_table(PAGE1,0x01,tbl_page1_x_com,15);
    tw2834_write_table(PAGE1,0x10,tbl_page1_x_ch_nrml,32);
    tw2834_write_table(PAGE1,0x50,tbl_page1_y_com,16);
    tw2834_write_table(PAGE1,0x60,tbl_page1_y_ch_nrml_pic_quad,16);
    tw2834_write_table(PAGE1,0x70,tbl_page1_cas_popup,14);

    if(norm==VIDEO_NORM_NTSC){
        tw2834_write_table(PAGE1,0x30,tbl_ntsc_page1_x_pic_quad,16);
        tw2834_write_table(PAGE1,0x40,tbl_ntsc_page1_dumy,16);
        tw2834_write_table(PAGE1,0x80,tbl_ntsc_page1_enc,15);
        tw2834_write_byte(PAGE1,0x00,0x00);
    }
    else{
        tw2834_write_table(PAGE1,0x30,tbl_pal_page1_x_pic_quad,16);
        tw2834_write_table(PAGE1,0x40,tbl_pal_page1_dumy,16);
        tw2834_write_table(PAGE1,0x80,tbl_pal_page1_enc,15);
        tw2834_write_byte(PAGE1,0x00,0x80);
    }

    tw2834_write_table(PAGE1,0xc0,tbl_page1_channel_id_ctrl,16);

    tw2834_write_byte(PAGE1,REG_CLK_CTL,0x41);           /*... DAC clock control*/

    tw2834_write_byte(PAGE1,REG_MPP_SET,0xbb);

    for (t1 = 0; t1 < 4; t1++) {
        tw2834_write_byte(PAGE1,REG_QUE_DATA,t1);
        tw2834_write_byte(PAGE1,REG_QUE_ADDR,QUE_WR|t1);
    }
    tw2834_write_byte(PAGE1,0x8d,0x60);                  /*... when cascade*/
    tw2834_write_byte(PAGE1,0x80,0x22);                  /*... when cascade*/
}

/*
 * initialize the page2's register
 * return value: nothing
 */
static void tw2834_initpage2(int norm)
{
    unsigned char t1;
    unsigned char reg_curctl;

    tw2834_write_table(PAGE2,0x00,tbl_page2_cur_3d_box,96);
    if (norm == VIDEO_NORM_NTSC)
        tw2834_write_table(PAGE2,0x60,tbl_ntsc_page2_ary_box,32);
    else
        tw2834_write_table(PAGE2,0x60,tbl_pal_page2_ary_box,32);
    for (t1 = 0; t1 < 4; t1++) {
        tw2834_write_table(PAGE2,0x80+0x20*t1,tbl_page2_motn_sens,6);
        tw2834_write_table(PAGE2,0x86+0x20*t1,tbl_page2_motn_mask,24);
    }

    reg_curctl = tw2834_read_byte(PAGE2,REG_CURCTL);
}

/*
 * first initialize tw2834 routine
 * return value: nothing
 */
static void tw2834_init_0(void)
{
    unsigned char reg;

    reg = tw2834_read_byte(PAGE0,0xFE);
    if(reg==0x10)
        setmemclock(0x99);  /*rev version B*/
    else if(reg==0x11)
        setmemclock(0x77);  /*rev version C*/
    udelay(1000);           /*delay 1ms    */
}

/*
 * second initialize tw2834 routine
 * return value: nothing
 */
static void tw2834_init_1(void)
{
    tw2834_initpage0(norm_mode);
    tw2834_initpage1(norm_mode);
    tw2834_initpage2(norm_mode);

    /*set the digital channel ID offset default 10*/
    tw2834_ch_id_config(10);
    set_display_d1(0);

    if (mchannel == 0)
    {
        if (videosize == 0)
        {
            set1cif(0);
        }
        else if (videosize == 1)
        {
            setd1(0);
        }
    }
    else
    {
        if (videosize == 0)
        {
            set4cif();
        }
        else if (videosize == 1)
        {
            set_2halfd1();
        }
        else if (videosize == 2)
        {
            set4d1();
            return;
        }
        else if (videosize == 3)
        {
            set4qcif();
            return;
        }
        else if (videosize == 4)
        {
            set2cif();
            return;
        }
        else
        {
            setd1(0);
            return;
        }
    }
}

/*
 * tw2834 read routine.
 * do nothing.
 */
ssize_t tw2834_read(struct file * file, char __user * buf, size_t count, loff_t * offset)
{
    return 0;
}

/*
 * tw2834 write routine.
 * do nothing.
 */
ssize_t tw2834_write(struct file * file, const char __user * buf, size_t count, loff_t * offset)
{
    return 0;
}

/*
 * tw2834 open routine.
 * do nothing.
 */
int tw2834_open(struct inode * inode, struct file * file)
{
    return 0;
}

/*
 * tw2834 close routine.
 * do nothing.
 */
int tw2834_close(struct inode * inode, struct file * file)
{
    return 0;
}

/******************************************************************************/

/*
 * tw2834 io control routine
 * @param inode: pointer of the node;
 * @param file: pointer of the file;
 * @param cmd: command from the app:
 * @param arg:arg from app layer.
 */
int tw2834_ioctl(struct inode *inode, struct file *file, unsigned int cmd, unsigned long arg)
{
    int ret = 0;
    void __user *argp = (void __user *)arg;
    unsigned long val;

    if (copy_from_user(&val, argp, sizeof(val)))
    {
        printk("\tTW2834_ERROR: WRONG cpy val is %lu\n",val);
        return -EFAULT;
    }

    switch (cmd)
    {
    /*read register */
    case TW2834_READ_REG:
        {
            val = tw2834_read_byte((val>>8) & 0xff, val & 0xff);

            return copy_to_user(argp, &val, sizeof(val)) ? -EFAULT : 0;
        }
    /*write register*/
    case TW2834_SET_REG:
        {
            tw2834_write_byte((val>>16) & 0xff, (val>>8) & 0xff, val & 0xff);
            return 0;
        }
    case  TW2834_GETNORM:
        {
            //int chn;
            //unsigned char byte_tmp;
            int norm_read;
            /*
            chn = (unsigned char)(val & 0xff);
            byte_tmp = tw2834_read_byte(PAGE0, (0x40 * chn));
            if(((byte_tmp & 0xe0) >> 5) < 4)
                norm_read = VIDEO_NORM_PAL;
            else
                norm_read = VIDEO_NORM_NTSC;
            */
            norm_read = norm_mode;
            printk ("norm: %d\n", norm_mode);
            return copy_to_user(argp, &norm_read, sizeof(norm_read)) ? -EFAULT : 0;


        }

    /*set the value of bright*/
    case TW2834_SET_BRIGHT:
        {
            int chn;
            unsigned char bright;

            chn    = (unsigned char)(val & 0xff);
            bright = (unsigned char)((val & 0xff00) >> 8);

            if(chn<0 || chn>3)
                return -EINVAL;
            tw2834_write_byte(PAGE0,0x12+0x40*chn,bright);
            return 0;
        }
    /*set the value of contrast*/
    case TW2834_SET_CONTRAST:
        {
            int chn;
            unsigned char cont;

            chn  = (unsigned char)(val & 0xff);
            cont = (unsigned char)((val & 0xff00) >> 8);

            if(chn<0 || chn>3)
                return -EINVAL;
            tw2834_write_byte(PAGE0,0x11+0x40*chn,cont);
            return 0;
        }
    /*set the value of hue*/
    case TW2834_SET_HUE:
        {
            int chn;
            unsigned char hue;

            chn = (unsigned char)(val & 0xff);
            hue = (unsigned char)((val & 0xff00) >> 8);

            if(chn<0 || chn>3)
                return -EINVAL;
            tw2834_write_byte(PAGE0,0x0f+0x40*chn,hue);
            return 0;
        }
    /*set the value of sat*/
    case TW2834_SET_SAT:
        {
            int chn;
            unsigned char sat;

            chn = (unsigned char)(val & 0xff);
            sat = (unsigned char)((val & 0xff00) >> 8);

            if(chn<0 || chn>3)
                return -EINVAL;
            tw2834_write_byte(PAGE0,0x10+0x40*chn,sat);
            return 0;
        }
    /*initialize register and set norm */
    case TW2834_SETNORM:  /*initialize all the register*/
        {
            mchannel  = 0;
            videosize = 0;

            if(val == VIDEO_NORM_NTSC){
                norm_mode = VIDEO_NORM_NTSC;
                tw2834_init_1();
            }
            else if(val == VIDEO_NORM_PAL){
                norm_mode = VIDEO_NORM_PAL;
                tw2834_init_1();
            }
            else
                return -EINVAL;
            return 0;
        }
    /*set record path mod to 4qcif*/
    case TW2834_SET_4QCIF:
        {
            set4qcif();
            return 0;
        }
    /*set record path mod to 4 cif*/
    case TW2834_SET_4CIF:
        {
            set4cif();
            return 0;
        }
    /*set record path mod to 1 cif*/
    case TW2834_SET_1CIF:
        {
            int chn = val;
            if(chn<0 || chn>3)
                return -EINVAL;

            set1cif(chn);
            return 0;
        }
    /*set record path mod to 1 d1*/
    case TW2834_SET_1D1:
        {
            int chn = val;
            if(chn<0 || chn>3)
                return -EINVAL;

            setd1(chn);
            return 0;
        }
    /*set record path mod to 4 d1*/
    case TW2834_SET_4D1:
        {
            set4d1();
            return 0;
        }
    /*set record path mod to switch*/
    case TW2834_SET_Y_SWITCH:
        {
            if (val>1023)
            {
                printk("\tTW2834_ERROR: period more than 1023, is %lu\n",val);
                return -EINVAL;
            }
            set_record_switch(val);
            return 0;
        }

    /*set record path mod to half d1*/
    case TW2834_SET_2HALF_D1:
        {
            set_2halfd1();
            return 0;
        }
    /*set record path mod to 2 cif*/
    case TW2834_SET_2CIF:
        {
            set2cif();
            return 0;
        }
    /*set display path mod to 1 d1*/
    case TW2834_SET_X_D1:
        {
            set_display_d1(0);
            return 0;
        }
    /*set display path mod to quad*/
    case TW2834_SET_X_QUAD:
        {
            set_display_quad();
            return 0;
        }
    /* Set the digital id offset of vbi*/
    case TW2834_SET_VBI_OFFSET_V:
        {
            if(val>20 || val<1)
            {
                printk("\tTW2834_ERROR: offset more than 20,or less than 1 : %lu\n",val);
                return -EINVAL;
            }
            tw2834_ch_id_config(val&0xff);
            return 0;
        }
    /* Get the digital id vertical offset of vbi*/
    case TW2834_GET_VBI_OFFSET_V:
        {
            val = tw2834_get_chid_offsetv();
            return copy_to_user(argp, &val, sizeof(val)) ? -EFAULT : 0;
        }
    /* Get the digital id horizontal offset of vbi*/
    case TW2834_GET_VBI_OFFSET_H:
        {
            val = 2;
            return copy_to_user(argp, &val, sizeof(val)) ? -EFAULT : 0;
        }
    /*cmd wrong, do nothing*/
    default:
        {
            return -EINVAL;
        }
    }
    return ret;
}

/*
 *      The various file operations we support.
 */
static struct file_operations tw2834_fops = {
    .owner      = THIS_MODULE,
    .read       = tw2834_read,
    .write      = tw2834_write,
    .ioctl      = tw2834_ioctl,
    .open       = tw2834_open,
    .release    = tw2834_close
};

static struct miscdevice tw2834_dev = {
    MISC_DYNAMIC_MINOR,
    "tw2834dev",
    &tw2834_fops,
};
/******************************************************************************/

/*
 * tw2834 device initializing routine
 */
static int tw2834_device_init(void)
{
    init_gpio_control();
    tw2834_init_0();
    tw2834_init_1();

    return 0;
}

static int __init tw2834_init(void)
{
    int ret = 0;

    printk("TW2834 driver init start ... \n");
    ret = misc_register(&tw2834_dev);
    if (ret)
    {
        printk("\tTW2834_ERROR: could not register tw2834 devices. \n");
        return ret;
    }
    if (tw2834_device_init() < 0)
    {
        misc_deregister(&tw2834_dev);
        printk("\tTW2834_ERROR: tw2834 driver init fail for device init error!\n");
        return -1;
    }

    printk("TW2834 driver init successful!\n");
    return ret;
}

static void __exit tw2834_exit(void)
{
    release_gpio_control();
    misc_deregister(&tw2834_dev);
}

/******************************************************************************/
module_init(tw2834_init);
module_exit(tw2834_exit);

module_param(mchannel, int, S_IRUGO);
module_param(videosize, int, S_IRUGO);
module_param(norm_mode, int, S_IRUGO);

#ifdef MODULE
#include <linux/compile.h>
#endif

MODULE_INFO(build, UTS_VERSION);
MODULE_LICENSE("GPL");
MODULE_AUTHOR("hisilicon");

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
精品一区在线看| 久久久亚洲综合| 亚洲mv大片欧洲mv大片精品| 欧美性淫爽ww久久久久无| 亚洲韩国一区二区三区| 欧美日韩成人综合天天影院| 日韩va亚洲va欧美va久久| 日韩欧美你懂的| 丁香天五香天堂综合| 亚洲国产精品精华液2区45| 欧美疯狂性受xxxxx喷水图片| 丝袜诱惑制服诱惑色一区在线观看 | 欧美男男青年gay1069videost| 日韩av在线发布| 国产日韩精品视频一区| 一本大道久久a久久精品综合| 亚洲国产另类av| 精品av久久707| 色av成人天堂桃色av| 午夜日韩在线观看| 国产视频一区二区在线观看| 欧美中文字幕一区二区三区亚洲| 青青草伊人久久| 中文字幕av免费专区久久| 欧美日韩国产免费| 国产91精品一区二区| 亚洲国产成人av| 久久精品一区八戒影视| 欧美三级日韩在线| 国产精品自拍在线| 亚洲在线成人精品| 国产日韩亚洲欧美综合| 欧美日韩国产首页| 成人av在线一区二区三区| 免费日本视频一区| 亚洲精品日韩综合观看成人91| 欧美tickling网站挠脚心| 色偷偷成人一区二区三区91| 久久精品久久综合| 亚洲国产乱码最新视频| 中文av字幕一区| 精品少妇一区二区三区免费观看 | 欧美午夜理伦三级在线观看| 极品少妇一区二区| 亚洲国产欧美在线| 中文字幕日本不卡| 国产日韩欧美麻豆| 91精品婷婷国产综合久久竹菊| voyeur盗摄精品| 精品无人码麻豆乱码1区2区 | 国内成+人亚洲+欧美+综合在线| 一区二区三区国产豹纹内裤在线| 国产日韩欧美综合在线| 精品久久久久久无| 欧美一区二区网站| 欧美日韩精品一区二区三区四区| av不卡一区二区三区| 精品一区二区三区久久久| 天天做天天摸天天爽国产一区| 亚洲四区在线观看| 国产精品久久久久永久免费观看| 亚洲精品一区二区三区精华液| 欧美一区二区啪啪| 91精品麻豆日日躁夜夜躁| 欧美亚一区二区| 91高清视频在线| 欧美影片第一页| 欧美亚洲一区三区| 欧洲国产伦久久久久久久| 91网站在线播放| 色综合久久久网| 色哟哟在线观看一区二区三区| 99久久精品国产导航| 91在线国产福利| 色婷婷国产精品综合在线观看| 色噜噜夜夜夜综合网| 色婷婷av一区二区三区gif| 色综合视频在线观看| 在线观看日韩毛片| 欧美日韩视频在线第一区| 8x福利精品第一导航| 日韩欧美在线综合网| 精品国精品国产尤物美女| 久久色中文字幕| 国产精品天干天干在观线| 国产成人在线看| 成人美女视频在线看| 91网址在线看| 欧美日韩国产首页| 精品久久人人做人人爽| 久久亚洲精精品中文字幕早川悠里| 久久综合久久综合九色| 国产精品久久免费看| 亚洲美女免费视频| 一区二区国产盗摄色噜噜| 天天色图综合网| 国产在线麻豆精品观看| 成人av在线资源| 欧美日本在线播放| 精品福利一二区| 国产精品乱人伦中文| 亚洲一二三专区| 美女一区二区三区在线观看| 国产成人在线看| 欧美丝袜丝nylons| 欧美成人aa大片| 国产精品乱码人人做人人爱| 亚洲国产乱码最新视频| 国产一区二区三区黄视频 | 久久免费美女视频| 亚洲蜜臀av乱码久久精品| 日本少妇一区二区| www.亚洲色图.com| 日韩一级大片在线观看| 国产精品久久久久四虎| 日韩高清电影一区| 99国产精品99久久久久久| 91精品国产综合久久久久久漫画 | 亚洲区小说区图片区qvod| 调教+趴+乳夹+国产+精品| 成人免费看视频| 欧美日韩综合不卡| 欧美激情一区二区三区蜜桃视频| 午夜精品一区二区三区三上悠亚 | 91啪亚洲精品| 久久综合av免费| 午夜激情一区二区| 99精品视频在线观看免费| 精品国产第一区二区三区观看体验 | 国产精品69久久久久水密桃| 亚洲免费观看高清完整版在线 | 欧美一级在线视频| 亚洲欧美日韩中文播放| 国内精品久久久久影院一蜜桃| 欧洲视频一区二区| 中文字幕一区在线| 国产美女主播视频一区| 在线播放欧美女士性生活| 亚洲另类春色校园小说| 国产白丝精品91爽爽久久| 欧美一级片免费看| 亚洲一区二区三区中文字幕| 丁香婷婷综合色啪| 久久久久青草大香线综合精品| 日韩高清一区在线| 欧洲亚洲国产日韩| 亚洲日本va午夜在线电影| 国产盗摄一区二区三区| 精品久久久久久久久久久久久久久久久| 亚洲一区二区高清| 色婷婷一区二区| 亚洲精品一二三四区| av电影在线观看一区| 中文字幕va一区二区三区| 国产成人精品免费网站| 久久午夜电影网| 国产在线看一区| 欧美xxxx在线观看| 日韩精品亚洲一区二区三区免费| 色婷婷激情一区二区三区| 亚洲美女免费在线| 色噜噜狠狠色综合中国| 亚洲男人天堂av| 91影院在线观看| 亚洲女人小视频在线观看| 91免费国产在线| 一区二区三区四区在线| 在线观看国产91| 亚洲国产精品精华液网站| 日韩理论在线观看| 日本道免费精品一区二区三区| 亚洲黄色免费网站| 欧美欧美欧美欧美| 蜜桃视频在线一区| 久久午夜羞羞影院免费观看| 国产精品一区二区在线观看网站| 久久蜜桃av一区二区天堂| 国产成人免费在线视频| 成人免费小视频| 色综合激情久久| 婷婷综合另类小说色区| 欧美一区午夜精品| 狠狠色综合日日| 国产精品久久久久永久免费观看| 色综合久久88色综合天天| 亚洲高清免费视频| 26uuu久久天堂性欧美| 成人av资源在线| 婷婷久久综合九色国产成人| 精品日韩av一区二区| 国产精品一二二区| 一区二区三区产品免费精品久久75| 欧美日韩国产中文| 韩日精品视频一区| 亚洲婷婷国产精品电影人久久| 1区2区3区欧美| 日韩视频一区二区| 成人午夜av电影| 日日嗨av一区二区三区四区| 国产亚洲欧美日韩俺去了|