커널 버전 : 2.6.24.*
드라이버 코드들을 보다보면 다음과 같이 probe 함수에서 i2c_client 정보를 받아와서 사용하는 경우가 있다.
이러한 경우에 어느 곳에서 이것을 등록시켜 주어야 할지 난감한 경우가 있다.
kernel 에서는
i2c_register_board_info()
라는 함수를 사용해서 i2c 정보들을 등록시켜 둔다.
보통 이 함수는 한두 단계 함수로 캡슐되어 있지만, 따라가다 보면 쉽게 찾을 수 있다.
나의 수정된 커널에는 다음과 같이 구성되어 있다.
static struct i2c_board_info __initdata h2_i2c_board_info[] = {
{
I2C_BOARD_INFO("m-5mo", M5MO_I2C_ADDR),
},
{
I2C_BOARD_INFO("sfvga", SFVGA_I2C_ADDR),
},
...
}
static int __init omap3430_i2c_init(void)
{
omap_register_i2c_bus(1, 100, NULL, 0);
omap_register_i2c_bus(2, 400, h2_i2c_board_info, ARRAY_SIZE(h2_i2c_board_info));
omap_register_i2c_bus(3, 400, NULL, 0);
return 0;
}
omap_register_i2c_bus
함수내부를 따라가다 보면 등록하는 부분을 찾을 수 있다.
드라이버 코드들을 보다보면 다음과 같이 probe 함수에서 i2c_client 정보를 받아와서 사용하는 경우가 있다.
static struct i2c_driver P_i2c_driver =
{
.driver = {
.name = "P_driver",
},
.probe = P_probe,
...
};
static int P_probe (struct i2c_client *client)
{
...
if( strcmp(client->name, PROX_DEVICE_NAME) != 0 )
...
else if( (ret = P_dev_init(client)) < 0 )
...
P_dev.client = client;
}
{
.driver = {
.name = "P_driver",
},
.probe = P_probe,
...
};
static int P_probe (struct i2c_client *client)
{
...
if( strcmp(client->name, PROX_DEVICE_NAME) != 0 )
...
else if( (ret = P_dev_init(client)) < 0 )
...
P_dev.client = client;
}
이러한 경우에 어느 곳에서 이것을 등록시켜 주어야 할지 난감한 경우가 있다.
kernel 에서는
i2c_register_board_info()
라는 함수를 사용해서 i2c 정보들을 등록시켜 둔다.
보통 이 함수는 한두 단계 함수로 캡슐되어 있지만, 따라가다 보면 쉽게 찾을 수 있다.
나의 수정된 커널에는 다음과 같이 구성되어 있다.
static struct i2c_board_info __initdata h2_i2c_board_info[] = {
{
I2C_BOARD_INFO("m-5mo", M5MO_I2C_ADDR),
},
{
I2C_BOARD_INFO("sfvga", SFVGA_I2C_ADDR),
},
...
}
static int __init omap3430_i2c_init(void)
{
omap_register_i2c_bus(1, 100, NULL, 0);
omap_register_i2c_bus(2, 400, h2_i2c_board_info, ARRAY_SIZE(h2_i2c_board_info));
omap_register_i2c_bus(3, 400, NULL, 0);
return 0;
}
omap_register_i2c_bus
함수내부를 따라가다 보면 등록하는 부분을 찾을 수 있다.
'Programming > Linux_Kernel' 카테고리의 다른 글
oprofile 관련 유용한 정보들 (0) | 2010.01.08 |
---|---|
linux kernel 버전별 변경사항 check (0) | 2010.01.08 |
linux kernel 에서 file 유무 확인하기 (0) | 2009.09.09 |
커널에서 파일 오퍼레이션 하기(File operation in Kernel) (0) | 2009.09.08 |
ARM side irq disable api (0) | 2009.09.01 |