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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? ov5640.c

?? linux下ov5640驅動源碼
?? C
?? 第 1 頁 / 共 5 頁
字號:
    {0x518d, 0x42},     {0x518e, 0x3a},     {0x518f, 0x56},     {0x5190, 0x46},     {0x5191, 0xf0},     {0x5192, 0xf},     {0x5193, 0x70},     {0x5194, 0xf0},     {0x5195, 0xf0},     {0x5196, 0x3},     {0x5197, 0x1},     {0x5198, 0x6},     {0x5199, 0x62},     {0x519a, 0x4},     {0x519b, 0x0},     {0x519c, 0x4},     {0x519d, 0xe7},     {0x519e, 0x38}, };static const struct regval ov5640_qsxga_regs[] = {    {0x3820, 0x40},  /* diff. init */    {0x3821, 0x06},    {0x3814, 0x11}, /* image windowing */    {0x3815, 0x11},    {0x3803, 0x00},    {0x3807, 0x9f},    {0x3808, 0x0a}, /* 0x0a20==2592 */    {0x3809, 0x20},    {0x380a, 0x07}, /* 0x798==1944 */    {0x380b, 0x98},    {0x380c, 0x0b},    {0x380d, 0x1c},    {0x380e, 0x07},    {0x380f, 0xb0},    {0x3813, 0x04},        {0x3618, 0x04},    {0x3612, 0x4b},    {0x3708, 0x21},    {0x3709, 0x12},    {0x370c, 0x00},    {0x3a02, 0x07}, /* night mode */    {0x3a03, 0xb0},    {0x3a0e, 0x06},    {0x3a0d, 0x08},    {0x3a14, 0x07},    {0x3a15, 0xb0},        {0x4004, 0x06}, /* BLC line number */    {0x5000, 0x07}, /* black/white pixel cancell, color interp. enable */    {0x5181, 0x52}, /* AWB */    {0x5182, 0x00},    {0x5197, 0x01},    {0x519e, 0x38},        {0x3035, 0x21}, /* SC PLL */    {0x5000, 0x27},     {0x5001, 0x83}, /* special effect, color matrix, AWB enable */    {0x3035, 0x71},    {0x4713, 0x02}, /* jpeg mode 2 */    {0x3036, 0x69},    {0x4407, 0x0c}, /* jpeg ctrl */    {0x460b, 0x37},    {0x460c, 0x20},    {0x3824, 0x01},    {0x4005, 0x1A},};/*static const struct regval ov5640_qsxga_to_qvga_regs[] = {};*/static const struct regval ov5640_qsxga_to_vga_regs[] = {    {0x3800, 0x00}, /* image windowing */    {0x3801, 0x00},    {0x3802, 0x00},    {0x3803, 0x00},    {0x3804, 0xA },    {0x3805, 0x3f},    {0x3806, 0x7 },    {0x3807, 0x9f},    {0x3808, 0x2 }, /* 0x280== 640*/    {0x3809, 0x80},    {0x380a, 0x1 }, /* 0x1e0== 480*/    {0x380b, 0xe0},    {0x380c, 0xc },    {0x380d, 0x80},    {0x380e, 0x7 },    {0x380f, 0xd0},        {0x5001, 0xa3}, /* SDE, scaling, color matrix, AWB enable */    {0x5680, 0x0 }, /* AVG ctrl */    {0x5681, 0x0 },    {0x5682, 0xA },    {0x5683, 0x20},    {0x5684, 0x0 },    {0x5685, 0x0 },    {0x5686, 0x7 },    {0x5687, 0x98},};static const struct regval ov5640_qsxga_to_xga_regs[] = {    {0x3800, 0x00},    {0x3801, 0x00},    {0x3802, 0x00},    {0x3803, 0x00},    {0x3804, 0xA },    {0x3805, 0x3f},    {0x3806, 0x7 },    {0x3807, 0x9f},    {0x3808, 0x4 }, /* 0x400==1024 */    {0x3809, 0x0 },    {0x380a, 0x3 }, /* 0x300== 768*/    {0x380b, 0x0 },    {0x380c, 0xc },    {0x380d, 0x80},    {0x380e, 0x7 },    {0x380f, 0xd0},    {0x5001, 0xa3},    {0x5680, 0x0 },    {0x5681, 0x0 },    {0x5682, 0xA },    {0x5683, 0x20},    {0x5684, 0x0 },    {0x5685, 0x0 },    {0x5686, 0x7 },    {0x5687, 0x98},};static const struct regval ov5640_qsxga_to_sxga_regs[] = {    {0x3800, 0x00},    {0x3801, 0x00},    {0x3802, 0x00},    {0x3803, 0x00},    {0x3804, 0xA },    {0x3805, 0x3f},    {0x3806, 0x7 },    {0x3807, 0x9f},    {0x3808, 0x5 }, /* 0x500==1280 */    {0x3809, 0x0 },    {0x380a, 0x3 }, /* 0x3c0==960 */    {0x380b, 0xc0},    {0x380c, 0xc },    {0x380d, 0x80},    {0x380e, 0x7 },    {0x380f, 0xd0},    {0x5001, 0xa3},    {0x5680, 0x0 },    {0x5681, 0x0 },    {0x5682, 0xA },    {0x5683, 0x20},    {0x5684, 0x0 },    {0x5685, 0x0 },    {0x5686, 0x7 },    {0x5687, 0x98},};static const struct regval ov5640_qsxga_to_uxga_regs[] = {    {0x3800, 0x00},    {0x3801, 0x00},    {0x3802, 0x00},    {0x3803, 0x00},    {0x3804, 0xA },    {0x3805, 0x3f},    {0x3806, 0x7 },    {0x3807, 0x9f},    {0x3808, 0x6 }, /* 0x640== 1600*/    {0x3809, 0x40},    {0x380a, 0x4 }, /* 0x4b0==1200 */    {0x380b, 0xb0},    {0x380c, 0xc },    {0x380d, 0x80},    {0x380e, 0x7 },    {0x380f, 0xd0},    {0x5001, 0xa3},    {0x5680, 0x0 },    {0x5681, 0x0 },    {0x5682, 0xA },    {0x5683, 0x20},    {0x5684, 0x0 },    {0x5685, 0x0 },    {0x5686, 0x7 },    {0x5687, 0x98},};static const struct regval ov5640_qsxga_to_qxga_regs[] = {    {0x3800, 0x00},    {0x3801, 0x00},    {0x3802, 0x00},    {0x3803, 0x00},    {0x3804, 0xA },    {0x3805, 0x3f},    {0x3806, 0x7 },    {0x3807, 0x9f},    {0x3808, 0x8 }, /* 0x800==2048 */    {0x3809, 0x0 },    {0x380a, 0x6 }, /* 0x600==1536 */    {0x380b, 0x0 },    {0x380c, 0xc },    {0x380d, 0x80},    {0x380e, 0x7 },    {0x380f, 0xd0},    {0x5001, 0xa3},    {0x5680, 0x0 },    {0x5681, 0x0 },    {0x5682, 0xA },    {0x5683, 0x20},    {0x5684, 0x0 },    {0x5685, 0x0 },    {0x5686, 0x7 },    {0x5687, 0x98},};#if 0static const struct v4l2_queryctrl ov5640_controls[] = {	{		.id		= V4L2_CID_VFLIP,		.type		= V4L2_CTRL_TYPE_BOOLEAN,		.name		= "Flip Vertically",		.minimum	= 0,		.maximum	= 1,		.step		= 1,		.default_value	= 0,	},	{		.id		= V4L2_CID_HFLIP,		.type		= V4L2_CTRL_TYPE_BOOLEAN,		.name		= "Flip Horizontally",		.minimum	= 0,		.maximum	= 1,		.step		= 1,		.default_value	= 0,	},};#endif/* QVGA: 320*240 */ /*static const struct ov5640_win_size ov5640_win_qvga = {	.name     = "QVGA",	.width    = QVGA_WIDTH,	.height   = QVGA_HEIGHT,	.regs     = ov5640_qsxga_to_qvga_regs,};*/static const struct ov5640_win_size ov5640_wins[] = {    {        .name    = "VGA",    /* VGA: 640*480 */        .resv    = RESV_VGA,        .width   = VGA_WIDTH,         .height  = VGA_HEIGHT,        .regs    = ov5640_qsxga_to_vga_regs,    },    {        .name    = "XGA",    /* XGA: 1024*768 */        .resv    = RESV_XGA,        .width   = XGA_WIDTH,        .height  = XGA_HEIGHT,        .regs    = ov5640_qsxga_to_xga_regs,    },    {        .name    = "SXGA",    /* SXGA: 1280*960  */        .resv    = RESV_SXGA,        .width   = SXGA_WIDTH,        .height  = SXGA_HEIGHT,        .regs    = ov5640_qsxga_to_sxga_regs,    },    {        .name    = "UXGA",    /* UXGA: 1600*1200 */        .resv    = RESV_UXGA,        .width   = UXGA_WIDTH,        .height  = UXGA_HEIGHT,        .regs    = ov5640_qsxga_to_uxga_regs,    },    {        .name    = "QXGA",    /* QXGA: 2048*1536 */        .resv    = RESV_QXGA,        .width   = QXGA_WIDTH,        .height  = QXGA_HEIGHT,        .regs    = ov5640_qsxga_to_qxga_regs,    },    {        .name    = "QSXGA",    /* QSXGA: 2560*1920*/        .resv    = RESV_QSXGA,        .width   = QSXGA_WIDTH,        .height  = QSXGA_HEIGHT,        .regs    = ov5640_qsxga_regs,    },};/* * supported color format list */static const struct ov5640_color_format ov5640_cfmts[] = {	{		.code		= V4L2_MBUS_FMT_YUYV8_2X8_BE,		.colorspace	= V4L2_COLORSPACE_JPEG,	},	{		.code		= V4L2_MBUS_FMT_YUYV8_2X8_LE,		.colorspace	= V4L2_COLORSPACE_JPEG,	},};static int i2cc_get_reg(struct i2c_client *client,     unsigned short reg, unsigned char *value){    unsigned char buffer[2];    int ret = 0;    int err = 0;    buffer[0] = (reg >> 8) & 0xFF;    buffer[1] = reg & 0xFF;    if (2 != (ret = i2c_master_send(client, buffer, 2))) {        err = -2;        OV_ERR("i2cc out error: ret == %d (should be 2)\n", ret);    }    if (1 != (ret = i2c_master_recv(client, buffer, 1))) {        err = -1;        OV_ERR("i2cc in error: ret == %d (should be 1)\n", ret);    }    //OV_INFO("ov5640 client: read 0x%x = 0x%x\n", reg, buffer[0]);    *value = buffer[0];    return (err);}static int i2cc_set_reg(struct i2c_client *client,    unsigned short reg, unsigned char value){    unsigned char buffer[3];    int ret = 0;    int err = 0;    buffer[0] = (reg >> 8) & 0xFF;    buffer[1] = reg & 0xFF;    buffer[2] = value;    //OV_INFO("ov5640 client: writing 0x%x = 0x%x\n", reg, value);    if (3 != (ret = i2c_master_send(client, buffer, 3))) {        OV_ERR("i2cc out error: ret = %d (should be 3)\n", ret);        err = -3;    }    return (err);}static inline struct ov5640_priv *to_ov5640(const struct i2c_client *client){	return container_of(i2c_get_clientdata(client), struct ov5640_priv, subdev);}static int write_regs(struct i2c_client *client,     const struct regval *regs, int array_len){    int i;    int ret = 0;    for (i = 0; i < array_len; i++) {        if ((ret = i2cc_set_reg(client, regs->reg, regs->val))) {            OV_ERR("error to set reg:0x%d -> value:%d(index:%d)\n", regs->reg,                 regs->val, i);            break;        }        regs++;    }    INFO_BLUE("------*------- write array regs over -------*------ \n");    return (ret);}static int ov5640_set_bus_param(struct soc_camera_device *icd,     unsigned long flags){    INFO_PURLPLE("\n");	return 0;}static unsigned long ov5640_query_bus_param(struct soc_camera_device *icd){	struct soc_camera_link *icl = to_soc_camera_link(icd);        /* camera can do 10 bit transfers,  but omit it now */	unsigned long flags = SOCAM_PCLK_SAMPLE_RISING | SOCAM_MASTER |		SOCAM_VSYNC_ACTIVE_HIGH | SOCAM_HSYNC_ACTIVE_HIGH |		SOCAM_DATA_ACTIVE_HIGH | SOCAM_DATAWIDTH_8;	return soc_camera_apply_sensor_flags(icl, flags);}static int ov5640_g_chip_ident(struct v4l2_subdev *sd,			       struct v4l2_dbg_chip_ident *id){	struct i2c_client *client = v4l2_get_subdevdata(sd);	struct ov5640_priv *priv = to_ov5640(client);	id->ident = priv->model;	id->revision = 0;	return (0);}static const struct ov5640_win_size *select_win(    unsigned int width, unsigned int height){    const struct ov5640_win_size *ret = NULL;    int size = ARRAY_SIZE(ov5640_wins);    unsigned int diff = -1;    unsigned int tmp;    int i;    for (i = 0; i < size; i++) {        tmp = abs(width - ov5640_wins[i].width) +             abs(height - ov5640_wins[i].height);        if (tmp < diff) {            diff = tmp;            ret = ov5640_wins + i;        }    }    return (ret); }static int ov5640_try_fmt(struct v4l2_subdev *sd,    struct v4l2_mbus_framefmt *vmf){    struct i2c_client *client = v4l2_get_subdevdata(sd);    struct ov5640_priv *priv = to_ov5640(client);    const struct ov5640_win_size *win;    int found = 0;    int i;        win = select_win(vmf->width, vmf->height);    vmf->width = win->width;    vmf->height = win->height;    vmf->field = V4L2_FIELD_NONE;    for (i = 0; i < ARRAY_SIZE(ov5640_cfmts); i++) {        if (ov5640_cfmts[i].code == vmf->code) {            found = 1;            break;        }    }    if (found) {        vmf->colorspace = ov5640_cfmts[i].colorspace;    } else {        /* Unsupported format requested. Propose either */		if (priv->cfmt) {			/* the current one or */			vmf->colorspace = priv->cfmt->colorspace;			vmf->code = priv->cfmt->code;		} else {			/* the default one */			vmf->colorspace = ov5640_cfmts[0].colorspace;			vmf->code = ov5640_cfmts[0].code;		}    }    INFO_GREEN("code:%d-%s %dX%d\n",         vmf->code, win->name, vmf->width, vmf->height);    return (0);}/* start or stop streaming from the device */static int ov5640_s_stream(struct v4l2_subdev *sd, int enable){    struct i2c_client *client = v4l2_get_subdevdata(sd);    struct ov5640_priv *priv = to_ov5640(client);    if (!enable) {        INFO_PURLPLE("stream down\n");        // set regs to enter sleep mode, already in DVP mode        i2cc_set_reg(client, 0x3008, 0x42);        return (0);    }    if (NULL == priv->win || NULL == priv->cfmt) {        OV_ERR("win or cfmt select error!\n");        return (-EPERM);    }    INFO_PURLPLE("stream on\n");    //set regs to leave sleep mode, in DVP mode , needn't to set 0x300e to 0xc    i2cc_set_reg(client, 0x3008, 0x02);        INFO_GREEN("format: %d, win:%s\n", priv->cfmt->code, priv->win->name);    // wait for 2 Vsync, and capture the 3rd frame, (1 / 7.5) * 2 =. 267ms    mdelay(270);        return (0);}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
精品久久久久久久久久久久久久久久久| 亚洲视频资源在线| 中文字幕一区二区三区四区| 日韩高清一区在线| 在线播放国产精品二区一二区四区| 1000精品久久久久久久久| 国产一区二区免费在线| 日韩精品影音先锋| 国精产品一区一区三区mba视频 | 日韩一区二区三区av| 亚洲va国产天堂va久久en| 色婷婷国产精品久久包臀| 亚洲日本一区二区三区| 在线观看亚洲a| 午夜精品123| 亚洲精品在线电影| 国产91综合网| 欧美不卡激情三级在线观看| 久久99国产精品免费| 国产精品色一区二区三区| 成人午夜在线免费| 一区二区三区在线视频免费| 欧美片在线播放| 国产精品一区久久久久| 亚洲人123区| 2021久久国产精品不只是精品| 国产成人午夜片在线观看高清观看| 中文字幕第一页久久| 在线欧美日韩国产| 国产黑丝在线一区二区三区| 欧美日韩一区高清| av电影在线观看完整版一区二区| 岛国av在线一区| 国产精品国产三级国产a| 欧美日韩高清一区二区不卡| 国产在线精品免费| 亚洲成人免费观看| 亚洲国产精华液网站w | 天堂一区二区在线免费观看| 国产日韩欧美精品在线| 欧美日韩激情一区二区三区| 99re这里都是精品| 精品亚洲porn| 日本免费在线视频不卡一不卡二| 一区在线中文字幕| 中文字幕免费不卡| 久久久亚洲午夜电影| 欧美军同video69gay| 在线观看视频欧美| 色噜噜久久综合| 色综合天天视频在线观看 | 激情av综合网| 久久精品国产在热久久| 久久精品国产一区二区三| 亚洲成人福利片| 日本不卡视频一二三区| 日本欧美在线看| 另类小说视频一区二区| 久久99精品久久久| 久草在线在线精品观看| 激情综合色播激情啊| 国产一区二区调教| 色综合久久综合| 欧美日韩一区二区三区免费看| 欧美三级欧美一级| 精品国免费一区二区三区| 久久综合给合久久狠狠狠97色69| 2022国产精品视频| 国产精品美女久久久久久久久久久| 综合电影一区二区三区| 亚洲欧洲性图库| 亚洲午夜国产一区99re久久| 免费的成人av| 91丨九色丨国产丨porny| 色综合天天视频在线观看| 91精品国产色综合久久不卡电影 | 天天亚洲美女在线视频| 激情六月婷婷综合| 欧美色网站导航| www一区二区| 婷婷中文字幕一区三区| 国产·精品毛片| 91精品国产欧美日韩| 亚洲欧洲日韩一区二区三区| 日韩激情视频网站| 一本到高清视频免费精品| 精品黑人一区二区三区久久 | 秋霞电影一区二区| 日本韩国欧美一区| 日本一区二区高清| 精品亚洲porn| 精品国偷自产国产一区| 亚洲成人一二三| 欧美午夜精品久久久久久孕妇| 中文字幕欧美日韩一区| 狠狠色丁香久久婷婷综合_中| 欧美三级乱人伦电影| 亚洲一区二区三区四区五区黄| 成人精品视频一区二区三区尤物| 精品av综合导航| 久久成人久久爱| 久久久精品综合| 国产91在线|亚洲| 国产精品欧美一区喷水| 国产福利一区二区三区视频在线| 91精品国产综合久久精品性色| 一区二区三区在线免费观看| 色婷婷激情综合| 午夜一区二区三区在线观看| 欧美精品自拍偷拍动漫精品| 亚洲国产日韩综合久久精品| 欧美中文字幕久久| 免费在线看一区| 久久影院视频免费| eeuss影院一区二区三区 | 日韩av一级电影| 日韩欧美精品在线| 成人深夜在线观看| 亚洲欧美一区二区久久| 日韩一区二区三区免费看| 福利一区福利二区| 亚洲线精品一区二区三区八戒| 欧美日本免费一区二区三区| 久久99国产精品久久| 亚洲精品视频在线| 色噜噜偷拍精品综合在线| 韩国理伦片一区二区三区在线播放| 国产精品麻豆一区二区| 欧美精品粉嫩高潮一区二区| 国产麻豆精品一区二区| 亚洲国产成人av好男人在线观看| 精品国产91乱码一区二区三区 | 国产美女视频一区| 婷婷开心激情综合| 国产精品视频免费| 精品国免费一区二区三区| 欧美日韩国产精品成人| 色婷婷精品久久二区二区蜜臀av| 国产真实乱对白精彩久久| 亚洲风情在线资源站| 国产肉丝袜一区二区| 精品国产凹凸成av人导航| 欧美精品一二三| 欧美午夜精品电影| 在线观看亚洲专区| 日本高清成人免费播放| 99视频精品在线| 91麻豆6部合集magnet| 大陆成人av片| 99精品视频免费在线观看| 国产精品一区二区在线观看不卡| 精品一区二区三区免费观看| 日本美女一区二区三区| 蜜桃精品视频在线观看| 日韩精品欧美成人高清一区二区| 午夜精品久久久久久久99水蜜桃| 亚洲综合久久久久| 肉色丝袜一区二区| 精油按摩中文字幕久久| 精品中文字幕一区二区小辣椒| 久久99久久99精品免视看婷婷 | 蜜桃精品视频在线观看| 极品美女销魂一区二区三区| 国产盗摄一区二区| 99久久精品国产一区二区三区| 欧洲国产伦久久久久久久| 国产一区二区三区最好精华液| 成人手机在线视频| 欧亚洲嫩模精品一区三区| 91麻豆精品国产自产在线 | 国产精品久久午夜| 男女男精品视频| 不卡的看片网站| 日韩免费一区二区三区在线播放| 久久九九久精品国产免费直播| 1区2区3区国产精品| 视频一区二区三区在线| 成人av资源站| 久久先锋影音av鲁色资源| 亚洲人成影院在线观看| 国产一区二区三区在线观看免费| 色婷婷久久久久swag精品| 国产亚洲精品7777| 久久91精品国产91久久小草| 欧美亚洲精品一区| 亚洲欧洲性图库| 99久久婷婷国产综合精品| 久久综合久色欧美综合狠狠| 日本伊人色综合网| 欧美日韩在线电影| 亚洲午夜久久久久中文字幕久| 顶级嫩模精品视频在线看| 久久综合色8888| 美女精品一区二区| 精品奇米国产一区二区三区| 免费视频一区二区| www日韩大片| 国产麻豆成人传媒免费观看| www国产精品av| 成人网男人的天堂|