|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
9 o9 {" ~& s, q#include <linux/init.h>
, d, S6 ]! R6 u: P% v9 \0 O#include <linux/module.h>
9 d1 f# G* ?2 @1 _% w#include <linux/kernel.h>
( t/ ^* k6 r1 Q4 @/ m4 X3 |#include <linux/types.h>8 U0 y' U- P+ E/ q
#include <linux/gpio.h>4 w6 X2 R- k! b' L: j0 s3 c' F* P
#include <linux/leds.h>: ]! \: B: q8 V, Z2 `8 d. ?* g2 U
#include <linux/platform_device.h>
% X: n: a0 U. V9 w0 _+ i1 T
7 a) Z1 v F' t5 n. d#include <asm/mach-types.h> X2 F' y! D2 Y6 Z0 C3 U G
#include <asm/mach/arch.h>
/ } o' R* a* w7 o) n2 h I) K#include <mach/da8xx.h>+ r$ j! I# _% ?1 _+ p- d( c
#include <mach/mux.h>
3 Q. p) h0 T5 ]
1 N" X/ v/ P2 ]: J1 Q& `#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)7 V) E) X) x/ {1 \) Z% D0 X
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)' T: O6 K8 k# q4 H
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
- p, ^7 C$ z: a# c- a; k# K#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
0 n& g" ` B1 a) K8 r, V# L! a9 p A# t$ n/ e3 }7 z8 L8 f
/* assign the tl som board LED-GPIOs*/
# K }0 c" v1 x' astatic const short da850_evm_tl_user_led_pins[] = {
1 L# N. @8 ?) Z4 f5 H /* These pins are definition at <mach/mux.h> file *// k# U" x/ E) k, a' L6 u. x
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
( m: |2 j* B% k e -18 _. D* {7 z! u2 K- }/ |
};
# m5 e- h3 v% p+ D# c. j
% n1 I! U: T s7 B0 [$ Pstatic struct gpio_led da850_evm_tl_leds[] = {- V _; z# D8 ?7 |3 c5 K$ |
{2 K- J/ s y2 ^$ _5 y6 O9 l
.active_low = 0,
; n& C+ F& ~; T) [( Z( O .gpio = DA850_USER_LED0,
/ _! P) }2 {1 N. z# |+ Y& W+ C .name = "user_led0",
. ], t) a* E2 ^" @3 c .default_trigger = "default-on",% w; H( E% J% s
},; }7 }, B, ?7 R7 I
{ _+ c: L* g# c( ?7 |$ A) y6 i/ ?
.active_low = 0,) J+ a+ A2 g* V( P5 I U- `
.gpio = DA850_USER_LED1,
' E+ `) {) f+ g0 R* ` .name = "user_led1",0 _/ `5 T' L( V0 \5 B* `
.default_trigger = "default-on",. d# m4 \( Y" v5 b+ ^
},$ O" i3 {6 j0 `" z; U2 o
{% j4 y$ k/ k2 x2 J; V, G
.active_low = 0,
0 [9 ^! g$ r( ^/ k: Y! i .gpio = DA850_USER_LED2,3 h0 p6 F* F% P1 l* P/ ~
.name = "user_led2",
( a5 \1 P1 x" C2 g; D .default_trigger = "default-on",6 H% }5 [% t! E1 Z" X9 W9 V
},; C( `6 }( d& U% E( S9 a `% a3 I
{
+ B4 Z/ l3 ?* k5 q/ K .active_low = 0,
! \5 `6 D% j: F- ^0 Y( P .gpio = DA850_USER_LED3,# u$ ^" k, `4 I2 Q& |" w8 z$ t
.name = "user_led3",
L+ [4 ?$ l6 f .default_trigger = "default-on",# X* q! e7 ?4 h- N( k9 F& |
},
, V; R( V1 \( z; {% |) M};4 Y( u* N9 v2 B2 o3 y
5 @! g7 [8 `4 \8 C$ D' M
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {( c/ _- O6 N7 }0 C& \
.leds = da850_evm_tl_leds,. D* Q6 X/ ?! M% V# W. o9 G% l7 W
.num_leds = ARRAY_SIZE(da850_evm_tl_leds), v* z1 g. ^% i( w
};0 _0 Q' T X" W2 V/ U2 O
8 G) t& @, e; f) e6 K
static void led_dev_release(struct device *dev)
`2 n) w% d1 ^8 {{9 h f) V |( E# O0 ~6 v2 k
};
- x0 ^2 q, s+ c/ o: h2 l
" |: P" z! q) e+ t! lstatic struct platform_device da850_evm_tl_leds_device = {8 O+ A% j* K7 Z2 R8 e8 p5 @
.name = "leds-gpio",
( ^4 ]4 a" x2 v B( ^ .id = 1,
7 D, U7 B. C1 ~/ b8 y7 } .dev = {. k6 k d6 v% h/ g
.platform_data = &da850_evm_tl_leds_pdata,4 e0 H6 p( ^& C' B. q h3 f7 b6 s
.release = led_dev_release,) E1 s2 ~9 B! c4 F" _6 R6 w7 U3 C2 p! x
}
/ Y- e- [3 G+ X: R8 \};
, e6 V2 K( _0 A. x1 Y# k
+ I; ` ^2 U) @' `4 Y. l& kstatic int __init led_platform_init(void)
6 T3 Y+ ?1 d: L$ Y* N; z1 c{' }, H2 t4 _* U$ ^; `! n
int ret;
' v& c' x) C2 Q3 b3 Q6 K; {" S#if 0
: j- w4 L7 C2 G Y' ^9 c$ v ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);/ R5 N" g" e1 E
if (ret)
. I+ f- D) b' R pr_warning("da850_evm_tl_leds_init : User LED mux failed :": ]3 v4 A7 J0 K' q
"%d\n", ret);. M# j6 _" F5 I$ v7 ]
#endif
4 I$ M! F! ?+ | ret = platform_device_register(&da850_evm_tl_leds_device);
% h! M6 O v- [ R% m if (ret)
* E1 H: Y8 g6 L pr_warning("Could not register som GPIO expander LEDS");
3 P: H& b: |+ [7 B/ I# U- f else6 I w! t3 N. `
printk(KERN_INFO "LED register sucessful!\n");
1 M+ K$ z6 U3 k- }" T0 V: [& g, E- J% m5 N' G
return ret;: g. p9 g1 O, r" ?: @% T9 ?
}$ a! o1 V. i8 ?. Q1 f4 q
9 s( t% c J. Q$ D% T# D" w
static void __exit led_platform_exit(void)2 C+ H. i+ D% U3 m B+ N
{
* X; [( f! |. y' I8 F platform_device_unregister(&da850_evm_tl_leds_device);5 W/ t4 a/ W9 n' k
* y z3 P( u; Q8 M printk(KERN_INFO "LED unregister!\n");
8 P) H ^5 s4 c5 a; K9 N7 Q}8 }- f& S7 W: a k$ j. P9 L
8 U% }8 R7 g: J3 d1 j4 \4 `' A( tmodule_init(led_platform_init); N+ `0 m5 Q! z' @, F+ N, |
module_exit(led_platform_exit);- w0 H: A9 u4 m4 |
9 D9 G8 x9 d* k6 \
MODULE_DESCRIPTION("Led platform driver");
# I0 Q; D! k5 T9 i# x: p& zMODULE_AUTHOR("Tronlong");
' N9 H; T3 o5 |! Z+ SMODULE_LICENSE("GPL");1 e) S' k2 N0 d9 w- F
7 D9 l) W: ?1 ^( G8 f) }" Z3 j
|
|