经过几天的尝试,我试着将在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重新编辑 ]