기존 이솝 임베디드 포럼의 지식인 서비스가 게시판 형태로 변경되었습니다.

안녕하세요

임베디드 리눅스 초보 개발자 입니다.
SPI 인터페이스를 사용하는 카메라를 개발하고 있구요
카메라 기본 동작및 테스트를 위해 S5PV210 보드에 포팅하고 있습니다.
커널은 2.6.32 Android(Froyo) 버전사용합니다.

 

카메라 디바이스 구조체에는 기본적으로 I2C 를 사용하도록 되어 있어서
인터넷에서 찾은 내용을 토대로 v4l2의 내용을 일부 수정했구요

해당 카메라 드라이버는 다른 SPI를 사용하는 Driver 형식을 참고했습니다.

 

문제는 init() 함수는 제대로 타는데, probe() 함수를 실행하지 못하고 있습니다.
몇일째 삽질을 하고 있습니다만 워낙 아는것이 없어 같은 자리만 계속 돌고 있습니다.

어디를 참고 해야 할지, 어디가 잘못되었는지...

 

고수분들의 지식을 좀 나눠주세요
감사합니다.


제가 작업한 부분은 아래와 같습니다.
SPI 관련 정보를 추가
v4l2-common.c
+ void v4l2_spi_subdev_init(struct v4l2_subdev *sd, struct spi_device *spi,
+                            const struct v4l2_subdev_ops *ops)
+ struct v4l2_subdev *v4l2_spi_new_subdev(struct v4l2_device *v4l2_dev,
+                     struct spi_master *master, struct spi_board_info *info)

v4l2-device.c
- v4l2_device_unregister()
+ if (sd->flags & V4L2_SUBDEV_FL_IS_SPI) {
+  struct spi_device *spi = v4l2_get_subdevdata(sd);
+  if (spi)
+   spi_unregister_device(spi);
+ }

v4l2-common.h
+ struct spi_device;
+ struct v4l2_subdev *v4l2_spi_new_subdev(struct v4l2_device *v4l2_dev, struct spi_master *master,
+                                          struct spi_board_info *info);
+ void v4l2_spi_subdev_init(struct v4l2_subdev *sd, struct spi_device *spi,
+                            const struct v4l2_subdev_ops *ops);

v4l2-subdev.h
+ #define V4L2_SUBDEV_FL_IS_SPI (1U << 1)

위의 내용은 http://lwn.net/Articles/378783/ 에 내용을 참고 했구요.

카메라 드라이버
static int mt9d111_probe(struct spi_device *spi)
{
   int ret;
   struct mt9d111_state *state;
   struct v4l2_subdev *sd;

 

   printk("ttn[REDZONE] MT9D111 Probe !!!n");

 

   state = kzalloc(sizeof(struct mt9d111_state), GFP_KERNEL);

   if (state == NULL)
       return -ENOMEM;

 

   sd = &state->sd;
   strcpy(sd->name, "camera_spi");

 

   spi->bits_per_word = 8;
   spi->mode = SPI_MODE_0;

   ret = spi_setup(spi);

 

   g_spi = spi;

 

   /* Registering subdev */
   v4l2_spi_subdev_init(sd, spi, &mt9d111_ops);

   g_state = state;

   mt9d111_initialize();

 

   dev_info(&spi->dev, "mt9d111 has been probedn");

   return 0;
}


static int mt9d111_remove(struct spi_device *spi)
{
 struct v4l2_subdev *sd = spi_get_drvdata(spi);
 v4l2_device_unregister_subdev(sd);
 kfree(to_state(sd));
 return 0;
}

static struct spi_driver mt9d111_driver = {
 .driver = {
  .name = "camera_spi", //MT9D111_DRIVER_NAME,
  .owner = THIS_MODULE,
 },
 .probe  = mt9d111_probe,
 .remove  = __exit_p(mt9d111_remove),
 .suspend = NULL,
 .resume  = NULL,
};

static int __init mt9d111_init(void)
{
 int ret;
 ret = spi_register_driver(&mt9d111_driver);
 printk("t[REDZONE] %s %dn", __func__, ret);
 return ret;
}

static void __exit mt9d111_exit(void)
{
 spi_unregister_driver(&mt9d111_driver);
}

module_init(mt9d111_init);
module_exit(mt9d111_exit);

 

부팅 완료후에 /sys/bus/spi/drivers/camera_spi 라고 뭔가 생기긴 했습니다... ㅡㅡ"


파일럿

2010.12.15 04:17:10
*.136.60.126

module_init(mt9d111_init); <- 이부분에 의해서 kernel에 built in 되거나 module 로딩에 의해

 

mt9d111_init() 함수는 불리지만 probe 함수를 부르기 위해선 해당 장치에 대한 정보(platform resource)가 필요합니다.

 

해당 정보 부분은 arch/arm/mach-xxxx/devices.c 부분에 등록 하시면 됩니다. 등록할때 위에 첨부하신 소스중

 

  .name = "camera_spi", //MT9D111_DRIVER_NAME,

의 이름과 동일하게 해주셔야 probe()함수가 수행 됩니다.

List of Articles
번호 제목 글쓴이 날짜sort 조회 수
2268 안드로이드에서 Power Management 쪽은 어느 D/D 를 봐야 할까요 ... [1] 장석원 2010-12-12 672
2267 V210 Android환경에서 KGDB사용하기 곽성훈 2010-12-13 1008
2266 터치센서 IC 종류에 따른 TSP 구현 방법 [1] 워리어 2010-12-13 1083
2265 u-boot 1.1.2 (aESOP-S3C2440용)을 빌드하면 hello_world.srec를 만들... [2] 소노공 2010-12-13 733
2264 오드로이드S A/S 문의 [2] 추억만이 2010-12-14 521
2263 오드로이드 7 [1] 마테우쓰 2010-12-14 471
2262 안드로이드 java 설치 버전 [1] jacket 2010-12-14 676
2261 u-boot 컴파일 관련 질문입니다. [4] sonbong 2010-12-14 745
2260 이클립스에서 안드로이드 네이티브(파일시스템) 소스 컴파일 하는 방법 [5] 훌러덩 2010-12-14 1157
2259 H.264 / MPEG4 Full HD 디코딩, Full HD 출력, Gigabit ether... [4] 시안 2010-12-14 952
2258 컴파일에러... 안선종 2010-12-14 777
» S5PV210 보드 Camera( SPI )컨트롤 관련 문의 사항. [1] 김도현 2010-12-14 1059
2256 안드로이드 init에서 coldboot시 uevent 발생시키는 루틴에 질문이... [1] 하지홍 2010-12-14 977
2255 terminal emulator에서 permission관리문의입니다. dkdk 2010-12-22 506
2254 gingerbread 빌드관련하여 질문드립니다~ [1] 곽성훈 2010-12-22 833
2253 오드로이드에서 사용되는 sd 메모리가 리눅스에서 인식 불가인 경우 [1] 밤만일해 2010-12-22 703
2252 Mplayer ALSA 사운드 출력 오류 (오드로이드7) [2] 생명의돌 2010-12-22 1030
2251 usb 부팅 어떻게 하는건지요? [1] nyanya01 2010-12-23 577
2250 S5PV210에 HDMI input 회로 구성 [2] 전승관 2010-12-23 1178
2249 ODROID-T froyo업데이트 후 hdmi 연결시 화면이 나오지 않네요. [1] 루이벨 2010-12-23 702

사용자 로그인