查看: 11735|回复: 0
收起左侧

MTK平台camera AF马达驱动调试流程分析

[复制链接]
发表于 2015-4-12 13:53:04 | 显示全部楼层 |阅读模式
《CameraAF分析》
5 y' M) l4 |: b* Q  J& K" i一、AFkernel代码分析:6 s: @- I1 ~7 f, V& i7 l9 s
涉及文件主要有:
& Y6 O- I5 L) B9 Dmediatek/config/mt6592/init.rc: C3 J0 ]1 f" w8 y4 I7 M8 `* w
mediatek/config/huaqin92_wet_b2a_tdd/at808p/ProjectConfig.mk
& ^3 L5 ?' l/ ]% y9 c2 Tmediatek/platform/mt6592/kernel/core/mt_devs.c2 g8 k, i% A$ G
mediatek /custom/huaqin_bsp/at808p/base/kernel/lens/ov8865af/OV8865AF.c' m* ?6 a1 N8 V7 v& O
mediatek/custom/common/kernel/lens/inc/OV8865AF.h
; v8 M4 O8 K2 L, f2 i! ]  n
9 Z4 A, z5 H) I  w5 i& l. G
a)       mediatek/config/mt6592/init.rc; E7 X6 i) M/ o, V$ z  N/ z
作用是来修改文件的权限和将该文件的拥有者改为system用户,添加如下部分:
2 q0 M! p& G0 M. _6 x: E" `4 \, d2 e1 L1 `1 j
[cpp] view plaincopyprint?
2 U- f/ K* q5 \  J+ M, j: _0 ?/ W0 T4 e7 ~0 E$ }( Y
! C0 M5 Q9 E" m( W5 d: j, E  }
  • chmod 0660 /dev/OV8865AF  
  • chown system camera /dev/OV8865AF  
    1 i0 Z: m1 Z  i' s% H1 m( A

    ' h1 R1 W+ M! O' @7 ?7 O/ m" {# j
6 v7 p. t( ^( U- ?
1 l$ B/ n' [: x+ ^5 g$ E7 V4 r

( U2 L) E4 I' S) W: ~
b)       mediatek/config/huaqin92_wet_b2a_tdd/at808p/ProjectConfig.mk
/ Z! K9 E( }! [" H5 t( v  d修改部分如下图:
" h% a) M0 X1 M- A9 u$ M6 B1 K& B/ }见附件11图片: A5 R; O: p$ E, n/ ~7 p' m  i: A

. Y, l  k; n% Q! A6 B$ J; J
c)       mediatek/platform/mt6592/kernel/core/mt_devs.c4 j: D  R1 R: D6 n' W) }3 s* _
这个文件时用来注册平台设备的。
3 ~; _6 k! [! k; S5 _+ u在mt_board_init函数中添加% d- j. @: H2 d

' O+ x2 P) O  k  U) s[cpp] view plaincopyprint?% ^& n/ \9 I  d# x+ K4 G2 m
, G7 P+ @& D) Y' H6 N

0 z& T5 B$ }; [2 F9 C) g
  • 2197 #if 1 //defined(CONFIG_ACTUATOR)  
  • 2198    retval = platform_device_register(&actuator_dev);  
  • 2199    if (retval != 0){  
  • 2200        return retval;  
  • 2201    }  
  • 2202    retval = platform_device_register(&actuator_dev1);  
  • 2203    if (retval != 0){  
  • 2204        return retval;  
  • 2205    }  
  • 2206 #endif  
    ; J( ?) s/ t2 D5 [
    0 e' y/ y% J6 u- N; O! x

; }* r$ s9 d- u
! ]+ V! H0 L$ f- r% R. U3 Y- j6 M( I1 q( {* A

3 L$ [/ ]6 ?& P" Q9 S9 f9 y[cpp] view plaincopyprint?6 H- u/ z* Q6 p5 B
' u* o2 W( l/ g/ k

* _. k9 X2 B) Z
  • 1533 staticstruct platform_device actuator_dev1 = {  
  • 1534     .name         = "lens_actuator1",  
  • 1535     .id      = -1,  
  • 1536 };  
    1 l! Y/ h" l; t0 t1 J+ Y6 ^- k! |
    , M$ B/ k4 B$ U& @# C

  F; i: H  x0 s2 t% \) H" D: C5 t# `4 N" S" }) \

/ n" Z' m# N, S; J1 q
' a! C  f9 @- M6 x" P- |8 C
其中name “lens_actuator1”是用来和我们驱动文件中的name进行匹配的。8 f7 N/ |0 W0 c5 O0 h6 r; r
d)       mediatek/custom/huaqin_bsp/at808p/base/kernel/lens/ov8865af/OV8865AF.c
/ ]& C0 i0 N3 O3 D重要说道驱动文件了,这个文件的头文件是:9 p! W( `- H# z" Q/ v. R5 g5 |
mediatek/custom/common/kernel/lens/inc/OV8865AF.h
1 x4 A' x& o+ n主要完成一下任务:+ g; }( ~! E* x$ D4 a
1.   module_init(OV8865AF_i2C_init);——启动方式,也就是开机启动kernel后一段加载;
' X( z9 Q/ Q" j0 z7 t# j+ x( \2.   i2c_register_board_info(LENS_I2C_BUSNUM,&kd_lens_dev, 1);;——挂载到I2C总线上;- ?  P/ A, t7 g% d" ^6 x
3.   platform_driver_register(&g_stOV8865AF_Driver);——注册平台驱动;
9 Q- h1 X2 X$ O2 S' ~
. M$ b: ?& C2 Y* ^[cpp] view plaincopyprint?
$ F  ?0 t2 \- K& }' C2 T0 k
; o% y7 {6 V: F! q2 N! q" |( a, v' a7 P7 ]
  • 491 static structplatform_driver g_stOV8865AF_Driver = {  
  • 492     .probe     = OV8865AF_probe,  
  • 493     .remove = OV8865AF_remove,  
  • 494     .suspend   = OV8865AF_suspend,  
  • 495     .resume = OV8865AF_resume,  
  • 496     .driver    = {  
  • 497         .name  = "lens_actuator1",  
  • 498         .owner = THIS_MODULE,  
  • 499     }  
  • 500 };  
    ) I* C6 {, o: H0 r6 F2 o

    1 o9 k; R, c4 C+ {

+ |) W. v! S$ D3 x+ l4 E* j/ z; E, L" n

1 I9 Y# V  Q' \; |0 z# l& l+ f
4.    然后进入OV8865AF_probe,加载i2c驱动:
) X) ]$ I8 f: x8 y7 l4 _, {1 X# n" Z& v& ~) P1 q, r$ V) p3 U5 \
[cpp] view plaincopyprint?  M# D) c0 U+ _, K6 t

7 H+ Y, V5 U6 l& H
" o8 Z( j' v4 U$ v! `5 n; l
  • 469 static intOV8865AF_probe(struct platform_device *pdev)  
  • 470 {  
  • 471     returni2c_add_driver(&OV8865AF_i2c_driver);  
  • 472 }  
  • 423 struct i2c_driver OV8865AF_i2c_driver= {  
  • 424    .probe = OV8865AF_i2c_probe,  
  • 425    .remove = OV8865AF_i2c_remove,  
  • 426    .driver.name = OV8865AF_DRVNAME,  
  • 427    .id_table = OV8865AF_i2c_id,  
  • 428 };  
    & p% ^* G/ r1 ?. H9 V6 H

    " M3 h2 J# M  @% d- D

7 y) \3 C9 F! P6 M  u" A- S* o' J3 f, R
8 o) j0 }. |1 h4 B

9 d. r, P& Z8 X* m+ m8 }3 i
5.   再就是OV8865AF_i2c_probe,就是注册字符驱动,以此就连接到我们的&g_stOV8865AF_fops,给上层提供Ioctl接口;% u! l6 ?" L1 V( \3 f

9 C0 k$ d" Y: p4 s0 F# \! _4 a& n6 P$ P9 G; I' X7 m
二、AFHAL层分析:
+ G* ]  c# X4 ^% g) J  a* mHAL层涉及的文件:
  @6 t# s% Z1 L; {  P3 Zmediatek/custom/common/hal/inc/camera_custom_lens.h
' w) `' i4 A5 A1 i, T& Omediatek/custom/huaqin92_wet_b2a_tdd/hal/lens/src/lenslist.cpp
! s, c7 f3 V( s+ Tmediatek/custom/huaqin_bsp/at808p/base/hal/lens/ov8865af/lens_para_OV8865AF.cpp; o5 o/ Q  O' y6 p2 g" H
) ?- F! a- {" D/ o  J
a)       mediatek/custom/huaqin92_wet_b2a_tdd/hal/lens/src/lenslist.cpp' i3 @3 M& m& C
添加LensList:
4 u& h$ @2 e. [( U( J5 j) X. b
8 [$ O9 o0 d1 X1 n( O[cpp] view plaincopyprint?
1 m6 X3 w+ g/ X2 r8 ^# p3 |1 ?0 c( N9 c5 F! g  n

6 L  n+ t# T% m
  • 70 #if defined(OV8865AF)  
  • 71{OV8865_SENSOR_ID, OV8865AF_LENS_ID,"OV8865AF", pOV8865AF_getDefaultData},  
  • 72 #endif  : V) C, E' z  Q1 T, h9 P

    : f/ U: L5 o- ]3 s; ~

% w2 q& m; g6 \% |
9 \; H1 m$ |( V0 n+ Q0 e0 A
OV8865AF_LENS_ID 在camera_custom_lens.h加以定义,
# X% b% X$ ?$ G& g. q" b% m$ v  o7 b% N- Q! A7 Q
[cpp] view plaincopyprint?1 |9 e: G  |$ G. l4 p  p
, n( a% m0 o# j

7 V+ L9 w7 z8 n4 W2 Z0 l
  • 如:#define OV8865AF_LENS_ID                     0x0009  
    " m* Z9 o8 [, T7 h- y7 ]
    7 S0 z% o; u% L* `/ Q$ D1 z5 Z5 G: ^+ ~

6 i0 R( \- e) ]
2 ?5 j0 {0 Y2 M& U* k
OV8865_SENSOR_ID 是kernel层定义的:6 v( P$ X. F2 v. ~' U% z
mediatek/custom/common /kernel/imgsensor/inc/kd_imgsensor.h
8 I9 [+ \: F" M9 Y# a! F是跟我们的camera驱动进行匹配的。
6 D4 c4 _& s& `* o! z& `' rpOV8865AF_getDefaultData是在lens_para_OV8865AF.cpp中完成的。
/ k4 P4 Y0 N& l/ J, j+ b. O
: N7 R( a/ j2 P+ K% M" ?

  {2 k* e8 ]1 _4 R* r; d
高级模式
B Color Image Link Quote Code Smilies @朋友 |上传

本版积分规则

在线客服

客服电话

欢迎来电咨询

188-9985 8350

微信关注

手机APP程序:
扫码下载访问

微信公众平台:
摄像头之家公众号

微信小程序:
摄像头小程序

返回顶部

QQ|站点统计|小黑屋|手机版|Archiver|摄像头模组论坛网-摄像头方案网CCM99 ( 粤ICP备18155214号 )

Powered by Discuz! X3.4 Licensed© 2001-2013 Comsenz Inc.