Kernel 3.8버전에서 TVP5150을 포팅하고 있습니다.
음..나름 이것 저것 자료들을 취합하고 먼가가 조금씩 진행되고 있는듯합니다.
그래서 TVP5150 드라이버도 프로핑 시키고 다음 그림과 같이 media 플랫폼에서 구성 되어 있는 것도 봤습니다.
그런데..TVP5150을 media flatform의 entity로 등록해야 하는데 ㅠㅠ; 당연히 tvp5150 드라이버가 프로빙 되면
등록이 될줄 알았느데 ㅠㅠ; 아니더군여..
tvp5150을 entity로 등록시키려면 어떻게 해야 할까여? 고수님들의 답변 부탁드립니다.
현재 상황을 보면 driver porting을 하여 drivers/* 폴더에는 포함되어 있고 kernel build시에 포함은되었다는 이야기 이겠지요. 그리고 나면 arch/arm/mach-* 중에 현재 사용하시는 mach의 기본 구성 파일이 있을 겁니다. 보통 mach-*.c 가 되겠지요. 여기에 TVP5150 관련 설정해 주시고 machine_init에 포함시켜주시면 됩니다.
망고보드에 있던 설정인데 적절히 수정해 보세요. 맞는 답변인지는 모르겠네요.
....
#include <media/tvp5150_platform.h>
.....
#if defined(CONFIG_VIDEO_TVP5150)
static struct tvp5150_platform_data tvp5150 = {
.default_width = 640,
.default_height = 480,
.pixelformat = V4L2_PIX_FMT_YUYV,
.freq = 24000000,
.is_mipi = 0,
};
static struct i2c_board_info camera_info[] = {
{
I2C_BOARD_INFO("TVP5150", 0x5c),
.platform_data = &tvp5150,
},
};
/* Camera interface setting */
static struct s3c_platform_camera camera_a = {
.id = CAMERA_PAR_A, /* FIXME */
.type = CAM_TYPE_ITU, /* 2.0M ITU */
.fmt = ITU_601_YCBCR422_8BIT,
.order422 = CAM_ORDER422_8BIT_CBYCRY,
.i2c_busnum = 0,
.info = &camera_info[0],
.pixelformat = V4L2_PIX_FMT_YUYV,
.srclk_name = "dout_mpll",
.clk_name = "sclk_cam",
.clk_rate = 24000000, /* 44MHz */
.line_length = 640, /* 640*480 */
/* default resol for preview kind of thing */
.width = 640,
.height = 480,
.window = {
.left = 0,
.top = 0,
.width = 640,
.height = 480,
},
/* Polarity */
.inv_pclk = 0,
.inv_vsync = 0,
.inv_href = 0,
.inv_hsync = 1,
.initialized = 0,
};
/* Interface setting */
static struct s3c_platform_fimc fimc_plat = {
.default_cam = CAMERA_PAR_A,
.camera = {
&camera_a,
},
.hw_ver = 0x40,
};
#endif
......
static void __init mango100_machine_init(void)
{
s3c_device_nand.dev.platform_data = &s3c_nand_mtd_part_info;
/* i2c */
s3c_i2c0_set_platdata(NULL);
i2c_register_board_info(0, i2c_devs0, ARRAY_SIZE(i2c_devs0));
#if defined(CONFIG_VIDEO_NOON130PC20) | defined(CONFIG_VIDEO_TVP5150)
/* fimc */
s3c_fimc0_set_platdata(&fimc_plat);
s3c_fimc1_set_platdata(&fimc_plat);
s3c_fimc2_set_platdata(&fimc_plat);
#else
s3c_fimc0_set_platdata(NULL);
s3c_fimc1_set_platdata(NULL);
s3c_fimc2_set_platdata(NULL);
#endif
.....
}