|
|
求大神给下面的程序做注解,请稍详细些,谢谢。6 Z7 S' y% P6 P
#include <linux/init.h>
8 W6 g: f# }& D @$ d#include <linux/module.h>
2 h7 j3 {# N# Z6 [& V#include <linux/kernel.h>( O4 A- J2 L I7 C; c( ]
#include <linux/types.h>' Y) W1 z* C. _/ B) O% H
#include <linux/gpio.h>! K% s& l5 V5 ^( D- D" G
#include <linux/leds.h>
" Y \. q. f5 P- ~# }; o8 P#include <linux/platform_device.h>1 n L6 G, B$ Z4 D1 q+ E
. ?/ z6 N+ z: p! k# u5 U- R
#include <asm/mach-types.h>6 \' |8 E/ R: p% l( N
#include <asm/mach/arch.h>& p3 E! c% a& t8 {4 w, k. H( T
#include <mach/da8xx.h>
" u6 Z, N" M f$ r% I#include <mach/mux.h>- w) o& V, e, p0 |2 P8 j; x
5 N0 g- y5 ]* R7 H3 T+ L4 `#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
& D5 a" [$ W% ~3 V: k, d#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
1 R! J, Z1 o: I6 F5 [#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)% c$ |: W! l+ s; h: [' o5 m2 G
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)5 o' p( F1 `1 |+ ?& k, e/ e: ^+ p
: w! i3 F4 Y& l2 R8 {3 J
/* assign the tl som board LED-GPIOs*/3 L) o6 R) t9 d+ i! e
static const short da850_evm_tl_user_led_pins[] = {% L. w& O/ L+ _* L* D
/* These pins are definition at <mach/mux.h> file */
. g5 t7 a& a D% j- k5 _ M DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,9 u1 }0 h, g& B( h4 L' n3 X
-1
/ {% H4 y" [2 G+ S& J& J};7 a& ?1 H3 J2 O( M
- I/ K; y: z) ~ [static struct gpio_led da850_evm_tl_leds[] = {
% n5 O0 t- K+ K6 j {
" t" H/ M9 _5 X4 A' Z3 D .active_low = 0,5 f( |1 u; S' _1 d2 d8 b) U' R4 g& ^
.gpio = DA850_USER_LED0,* \8 t" c$ S( Y6 L* M
.name = "user_led0",
! J- ]" Z3 t5 i% e6 g3 B .default_trigger = "default-on",1 E- C* ^$ ^! [) n; |7 ~2 H
},3 B! }! l6 V# _6 L
{7 E6 a* C, k3 S( e2 ]3 p" l- c
.active_low = 0,
p4 k/ t/ Y9 G8 J3 C! v6 c .gpio = DA850_USER_LED1,
{8 r0 E1 {& {9 m .name = "user_led1",( T5 t: r, n) t+ w7 M
.default_trigger = "default-on"," }' y5 ~ {5 G% U! l2 w! q, z
},
( h; @& f0 @4 i$ ~, p' [7 f5 F {
2 B, h& R( y4 V& g( f: w" Y! @ .active_low = 0,
& C7 V. i1 ?/ o# l .gpio = DA850_USER_LED2, |- s& q. _8 d% a% G d
.name = "user_led2",1 m0 o# o* U6 `. ]7 `# n
.default_trigger = "default-on",
* d. b( c& }0 c7 p2 i },6 Y- Y) }7 m& ^ V
{
$ D0 j! {$ K$ r .active_low = 0,6 d3 A& z, L9 |, G! B/ m
.gpio = DA850_USER_LED3,
, p& b7 |7 E6 T! {9 q: P .name = "user_led3",
; C- D2 E1 \# ~- @. A" j .default_trigger = "default-on",/ r$ l$ |* W, ?* V! g
},
% k! W4 v3 G$ A. b};
2 V! X9 U7 O* C: W+ [* h1 N6 e" X& D
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
, |& A4 p5 e" w3 k1 ~7 E: U .leds = da850_evm_tl_leds,
( K& _1 U! X9 Q, l: A .num_leds = ARRAY_SIZE(da850_evm_tl_leds),
0 O/ L; G: Q' I};4 W; _5 O8 U; L
[6 j+ W W- k! q* L- Y. d- y5 @static void led_dev_release(struct device *dev), U) f0 H: |$ v
{
% d1 I% X/ a' _3 ~9 z};
3 M% ^8 }5 X, t9 A
2 h' X7 {! P- S" x! Dstatic struct platform_device da850_evm_tl_leds_device = {
3 u' H# `8 k( `- m& `6 ~ .name = "leds-gpio",
3 ]2 w/ Q, f2 y1 U' l5 I .id = 1,
( \' e& _: w) y S" {8 n .dev = {7 ^6 q/ Y' T% j$ ^ t3 B1 @
.platform_data = &da850_evm_tl_leds_pdata,) a$ \. c& [# P( h6 I
.release = led_dev_release,; p( J; [& U) a; L: X
}$ ?5 P) z* B0 g- A; R0 }" C9 B
};6 F- V) A0 l) ~5 {* k, y) d0 f
3 T9 a! l! |# S& jstatic int __init led_platform_init(void)' B# ?+ B. ~" ^ ~
{
w( a0 _) N, X! j% r/ |$ y |& q int ret;$ D( N) r, m: c: L4 r$ m" z
#if 0; ~& R) y5 D5 b
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
4 Z) c$ Z5 r0 s, K |0 F if (ret): I. C% t$ j/ D; R9 {4 }4 p" T: \
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
; q: ]8 z& j/ K- _" H "%d\n", ret);
3 Q( h! O3 I# l1 B#endif
+ K7 h3 }; h+ ?6 b ret = platform_device_register(&da850_evm_tl_leds_device);1 G" n/ o/ f& n% D$ V: v% P5 D
if (ret)$ d' J% D# S8 g' H6 d7 J6 M
pr_warning("Could not register som GPIO expander LEDS");
7 L- O( |$ a6 e, M9 h& [ else4 f! w) \! Q+ {+ m+ l5 S
printk(KERN_INFO "LED register sucessful!\n");
5 F% Q- L, d8 M$ Z* q8 Z: W
F& z8 ~- e7 Y+ Z* Z% i return ret;
$ L8 O+ f r: f {; [) A}
( d9 g- {9 B$ `* ]2 O0 S4 O, N' O: ?) `; j' H
static void __exit led_platform_exit(void)" W, n: F; \& A/ j5 O: M" T k
{$ f$ d9 e; F- m
platform_device_unregister(&da850_evm_tl_leds_device);
* h) M' ?/ P5 q: I+ W" s
+ S2 V T3 b5 L, W printk(KERN_INFO "LED unregister!\n");- C9 {7 m( j" i, O }2 P/ S
}8 J' m! L- R, q/ z( d
) Q8 r0 _) b4 Z- ?" D+ {
module_init(led_platform_init);- p \7 E) K! d9 H# i
module_exit(led_platform_exit);
4 A% O8 W, h( o' m. c
k* I9 c; g( x2 zMODULE_DESCRIPTION("Led platform driver");6 L8 k3 J1 K) F8 ~ g
MODULE_AUTHOR("Tronlong");/ C& h: Q7 e9 ? }7 V, _8 P
MODULE_LICENSE("GPL");1 ~% V2 x x f. \
& E% k$ I) Q! k0 L4 C8 w5 ` |
|