• «
  • 1
  • 2
  • 3
  • »
  • Pages: 1/3     Go
主题 : 再次请教关于36内核中,camera接口的问题 复制链接 | 浏览器收藏 | 打印
级别: 侠客
UID: 8824
精华: 0
发帖: 54
金钱: 285 两
威望: 63 点
综合积分: 108 分
注册时间: 2009-09-07
最后登录: 2018-02-08
楼主  发表于: 2011-04-07 15:16

 再次请教关于36内核中,camera接口的问题

经过几天的尝试,我试着将在28内核中已经调通的驱动移植到3Z核中。由于之前mindee已经明确告诉我,36、38内核中,fimc的接口没有变化,所以我仅修改了3Z核中,i2c的部分代码(因为28内核与3Z核在i2c驱动部分有变化)。编译之后,在内核的打印信息里也加载上了我的驱动。但是,始终无图像输出。对于5150的操作我已经用示波器量过了,都是对的,包括I2C的地址数据,都没问题。问题应该就在与3Z核中,fimc的接口。

添上我的源码:
static struct s3c_fimc_camera tvp5150_data = {
    .id         = CONFIG_VIDEO_FIMC_CAM_CH,
    .type        = CAM_TYPE_ITU,
    .mode        = ITU_656_YCBCR422_8BIT,
    .order422    = CAM_ORDER422_8BIT_CBYCRY,//YCRYCB,
    .clockrate    = 24000000,
    .width        = 720,//640,//800,
    .height        = 240,//480,//600,
    .offset        = {
        .h1 = 0,
        .h2 = 0,
        .v1 = 0,
        .v2 = 0,
    },

    .polarity    = {
        .pclk    = 0,
        .vsync    = 1,
        .href    = 0,
        .hsync    = 0,
    },

    .initialized    = 0,
};
static __init int tvp5150_init(void)
{
    int ret;
    ret=i2c_add_driver(&tvp5150_i2c_driver);
    s3c_fimc_register_camera(&tvp5150_data);

    return ret;

static int tvp5150_probe(struct i2c_client *c,
             const struct i2c_device_id *id)
{
    struct i2c_client *state;
    struct device *dev =&c->dev;    
    state=kzalloc(sizeof(struct i2c_client),GFP_KERNEL);
    if (!state){
        dev_err(dev,"faile to create tvp5150\n");
        return -ENOMEM;
    }
    state=c;        
    i2c_set_clientdata(c, state);
    tvp5150_data.client=state;
    dev_info(dev,"tvp5150 client create!\n");
    return 0;
}
static void tvp5150_start(struct i2c_client *client)
{
    int i;

    //printk("[CAM] TVP5150 init reg start...\n");

        s3c_fimc_i2c_write(client,0x05,0x01);
        udelay(5);
    for (i = 0; i < TVP5150_INIT_REGS; i++) {
        s3c_fimc_i2c_write(client, TVP5150_init_reg.subaddr, \
                    TVP5150_init_reg.value);
    }
    //printk("[CAM] TVP5150 init reg end.\n");
        
}


再加上我的内核打印信息



i2c /dev entries driver
Linux video capture interface: v2.00
s3c-fimc: controller 0 registered successfully
s3c-fimc: controller 1 registered successfully
FIMC Driver, 2010 ported by FriendlyARM http://www.arm9.net
S3C6400 MFC Driver, (c) 2007 Samsung Electronics, 2010 ported by FriendlyARM http://www.arm9.net
S3C6400 MFC Driver init OK.
S3C PostProcessor Driver v3.12, (c) 2009 Samsung Electronics
S3C6410 TV encoder Driver, (c) 2008 Samsung Electronics
S3C6410 TV encoder Driver init OK.
S3C6410 TV scaler Driver, (c) 2008 Samsung Electronics
S3C6410 TV scaler Driver init OK.
S3C Rotator Driver, (c) 2008 Samsung Electronics
s3c_rotator_probe called
s3c_rotator_probe success
S3C JPEG Driver, (c) 2007 Samsung Electronics
s3c_g2d_probe called
s3c_g2d_probe Success
S3C G2D Init : Done
S3C G3D Driver, (c) 2007-2009 Samsung Electronics
s3c_g3d version : 0x1050000
S3C G3D Init : Done
tvp5150 0-005c: tvp5150 client create!
parent clock for camera: 266.000 MHz, divisor: 9
[CAM]RESET CAM.
[ 此帖被outfind在2011-04-12 17:21重新编辑 ]
级别: 侠客
UID: 8824
精华: 0
发帖: 54
金钱: 285 两
威望: 63 点
综合积分: 108 分
注册时间: 2009-09-07
最后登录: 2018-02-08
1楼  发表于: 2011-04-07 15:20
屏蔽了0v965x的mach-mini6410.c

static struct i2c_board_info i2c_devs0[] __initdata = {
    //{ I2C_BOARD_INFO("ov965x", 0x60), },
    {I2C_BOARD_INFO("tvp5150",0xb8>>1),/*(dev_type, dev_addr)*/},
};


mindee,不知可否把3Z核中0v965x.c的源码发给我。我知道友善是为了保护你们自己的fimc驱动,没有开源,但是ov965x.c应该不会涉及你们的知识产权啊,它只是相当于,给一个调用你们的fimc驱动的接口程序示例而已。
如果有可能,请给我们一个例程。这样我们也可以照猫画虎把其他的芯片给驱动起来。这样不也是很好吗?
39412884@qq.com
级别: 侠客
UID: 8824
精华: 0
发帖: 54
金钱: 285 两
威望: 63 点
综合积分: 108 分
注册时间: 2009-09-07
最后登录: 2018-02-08
2楼  发表于: 2011-04-08 09:17
顶起来,等答复
^很多问题的背后都是简单的原因......
级别: 荣誉会员
UID: 34780
精华: 0
发帖: 1219
金钱: 6230 两
威望: 1246 点
综合积分: 2438 分
注册时间: 2010-12-21
最后登录: 2017-09-18
3楼  发表于: 2011-04-08 11:24
在2.6.28中已经能工作了? 是linux还是Android ?
级别: 侠客
UID: 8824
精华: 0
发帖: 54
金钱: 285 两
威望: 63 点
综合积分: 108 分
注册时间: 2009-09-07
最后登录: 2018-02-08
4楼  发表于: 2011-04-08 14:12
linux....    tvp5150与ov965x的操作累似,在28内核中,只需要将i2c的地址,以及一些初始化的数据修改一下,照着28内核中的ov965x的样子改一改就没问题了。
[ 此帖被outfind在2011-04-08 17:30重新编辑 ]
级别: 侠客
UID: 8824
精华: 0
发帖: 54
金钱: 285 两
威望: 63 点
综合积分: 108 分
注册时间: 2009-09-07
最后登录: 2018-02-08
5楼  发表于: 2011-04-08 17:34
由于看不到友善3Z核中的源码,只好从i2c-core.c里找友善操作ov965x的过程,在i2c_transfer中加了打印,发现,不论是不是选中了OVT965X,只要选了多媒体驱动,就会对0v965x的地址写复位。应该是s3c_fimc_i2c_write(0x30,0,0);
级别: 侠客
UID: 8824
精华: 0
发帖: 54
金钱: 285 两
威望: 63 点
综合积分: 108 分
注册时间: 2009-09-07
最后登录: 2018-02-08
6楼  发表于: 2011-04-11 08:44
顶起来
^很多问题的背后都是简单的原因......
级别: 荣誉会员
UID: 34780
精华: 0
发帖: 1219
金钱: 6230 两
威望: 1246 点
综合积分: 2438 分
注册时间: 2010-12-21
最后登录: 2017-09-18
7楼  发表于: 2011-04-11 09:52
尽量不要修改kernel配置
在mach-mini6410.c中删除ov965x的I2C地址就好了

另外, 28中, 你是不是只是增加了tvp5150且没有修改多媒体的其它部分?
级别: 侠客
UID: 8824
精华: 0
发帖: 54
金钱: 285 两
威望: 63 点
综合积分: 108 分
注册时间: 2009-09-07
最后登录: 2018-02-08
8楼  发表于: 2011-04-11 15:54
28中,我只是按ov965x.c的模式写了一份关于tvp5150的初始化。其他的什么都没有变。
在3Z核中,我并没有修改kernel的配置,如果说有修改,只是在camer的选项里,做了修改,添加了tvp5150的选项,这与28内核中的改动是一致的。
在mach-mini6410.c中,我已经删了0v965x的地址。
级别: 侠客
UID: 8824
精华: 0
发帖: 54
金钱: 285 两
威望: 63 点
综合积分: 108 分
注册时间: 2009-09-07
最后登录: 2018-02-08
9楼  发表于: 2011-04-11 15:58
在menuconfig里,选了tvp5150之后,就没再选0v965x.


另外,我在i2c-core.c中,i2c_transfer打印发现,不论是不是在mach-mini6410.c有没有ov965x 的配置,也不管在make menuconfig中有没有ov965x的选择,只要有多媒体的选项,那么就一定会有ov965x的probe。就是先在i2c addr  0x30地址读数据。
  • «
  • 1
  • 2
  • 3
  • »
  • Pages: 1/3     Go