|
|
求大神给下面的程序做注解,请稍详细些,谢谢。# W' `0 g9 M) w/ v& Q
#include <linux/init.h>
; G; z4 U8 I* g" C9 W" w+ ^#include <linux/module.h>( _5 _. k) q1 v5 {; Y. X
#include <linux/kernel.h>
* g- ^ Q$ e9 C5 r( B#include <linux/types.h>7 ~% X7 p( a0 W9 T
#include <linux/gpio.h>
2 I: u3 Q" Q& W# J( J#include <linux/leds.h>- F* K7 ^8 @5 R* L( ~
#include <linux/platform_device.h>
! y; k: L; n/ Z# F7 O' |% h5 X
/ a) J7 N5 [5 q9 z+ g#include <asm/mach-types.h>. R( j: k r! g2 g- \ s0 n
#include <asm/mach/arch.h>
+ S5 Y1 j6 \2 R4 i1 c# c#include <mach/da8xx.h>
3 G5 E% T o W#include <mach/mux.h>! A" i/ u) M- k
7 G9 f1 I# b/ c& u( r; X
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
2 k! V5 [1 h k& {( z#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
8 w; v4 h7 S, J" D' Q#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)' B9 T; d9 A% O2 O
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)% ]3 l9 n0 h7 A: E! @: K1 h" ?2 g$ t
- T+ U- A8 G* e6 k- F7 m7 y
/* assign the tl som board LED-GPIOs*/2 T2 t2 L% v. K) }; e
static const short da850_evm_tl_user_led_pins[] = {4 a' W! R j0 A6 v( N, ~" {; m
/* These pins are definition at <mach/mux.h> file */9 S; x5 o7 \8 \
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
; B8 u& s: A$ F D -1
- K# r$ R( d9 n# B' S0 j/ c1 O};' Y4 t, @5 w. C- k! c' \& z
3 }) i( `2 {$ Q" B ^! Ustatic struct gpio_led da850_evm_tl_leds[] = {
- l" |9 D0 ~1 J, J' B {
' {, V6 R+ M! `; \7 b! ^; S .active_low = 0,
4 u. `6 z' }1 ^$ `( i# ] .gpio = DA850_USER_LED0,
0 r9 n0 E% s" |8 { .name = "user_led0",. _6 o- i1 E! \6 X) _; J
.default_trigger = "default-on",: y6 f# H( N: P8 d
},
* p8 E; e3 G; p$ v: Y7 z {
3 M6 J; E7 K/ [! n9 w$ r1 @8 B .active_low = 0,
6 M0 ~+ ?& k' { .gpio = DA850_USER_LED1,
' g' e% g& `. [2 S: _" O9 V) Q .name = "user_led1",! {- m! d6 v- k2 L6 e1 n' a
.default_trigger = "default-on",. G3 m+ p7 l# q A e/ m4 W
},
+ }7 } }9 {, E& B {
7 R) O/ ]& I4 Q6 k4 O5 u/ Z .active_low = 0,/ ?6 Q( i* _9 P
.gpio = DA850_USER_LED2,
% o2 p2 w1 I- G+ j( x2 E .name = "user_led2",
3 s% C9 i" Z* B4 Q. i .default_trigger = "default-on",, x4 g5 o: x7 a- J; ^; ?8 Q
},+ Q6 r) G9 F. X# _/ p
{
3 I+ M* c" l1 j$ I .active_low = 0,6 h: g; g2 p$ |
.gpio = DA850_USER_LED3,
G c# I7 X* @3 i$ M+ R .name = "user_led3",9 z2 t2 r4 a: f6 E; r3 o: q
.default_trigger = "default-on",
i4 s" G; M y) f5 _ },
" d: d) |% N% ^: T};
- v- U( M* [* \1 i$ a+ Q+ A
~; n" b- ] Q! _ x4 Xstatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
- A# o$ U8 S& j4 x .leds = da850_evm_tl_leds,
9 C% \3 w& Q. ~ .num_leds = ARRAY_SIZE(da850_evm_tl_leds),1 ^' Z7 q0 Z$ I, o
};) d" I P, H! x- @
5 V; i- P5 y/ b9 o% ?3 y, Mstatic void led_dev_release(struct device *dev)8 g5 p7 J% V9 h' i& V
{
9 @% }( y5 ^9 A) w8 k/ Z; z};1 F: ]8 S$ z) h8 {1 A8 C
$ L% g0 F' _2 I5 T% Z3 Zstatic struct platform_device da850_evm_tl_leds_device = {, u" @7 l1 Z6 z: P" h
.name = "leds-gpio",9 X7 ~( R) C: H4 ~
.id = 1,7 @/ _- o3 ^9 g. T; f( {: d1 t
.dev = {2 h4 q0 B% L, @; ]6 e
.platform_data = &da850_evm_tl_leds_pdata,
2 T7 t. n& I% J( W .release = led_dev_release,
8 r! E. R. g/ X7 a4 R t- h }
1 z( C3 G4 {; n$ A+ J};+ S" F$ a. w& I' f2 C* `8 t
6 \; V. |1 o/ n: w x/ vstatic int __init led_platform_init(void)' K! \% ^1 R6 {" S9 \# S
{
. m6 ^( Y1 C6 B) X/ @1 F- ` int ret;+ g* d2 [4 U, ?9 X
#if 0
% t1 s: n9 V6 B; _ ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
( ]5 Z' i" X0 P& f' f( g* K. m* D if (ret)- Y8 I" {0 p; e* Y/ ?0 ?) C3 E
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"$ A# Y* F4 u I$ M U3 J: i
"%d\n", ret);7 V: ?4 T! U0 u7 e2 M; [) `0 ?5 Q
#endif5 z3 c) k3 d: k. }9 H
ret = platform_device_register(&da850_evm_tl_leds_device);
Q% H: M7 i5 S* f- q& J if (ret)7 n* O! k# T- d8 D" b, ?" u
pr_warning("Could not register som GPIO expander LEDS");; S' Q2 y! T [5 w
else( j: A* b3 \, Y/ E5 U, b6 ~$ i, e
printk(KERN_INFO "LED register sucessful!\n");* _9 l l- v; ?8 o+ d2 a5 L6 _& C
+ W; e3 s5 S4 j! |* h2 f3 s
return ret;
- E; |1 M, s4 l; U" s7 i; f+ A' d}
' y' y% w: p# K) z
+ w, `0 n, e8 a4 N8 ^static void __exit led_platform_exit(void), X" \8 R# F* |) C
{( u- ^8 T4 A8 Y: A3 |
platform_device_unregister(&da850_evm_tl_leds_device);( `& V3 C7 ~* g
" n$ B6 ^4 F9 g
printk(KERN_INFO "LED unregister!\n");+ E9 ?0 u% ~# i0 J, ~& r5 d
}
# B- Q1 ~) \8 T4 _- X* p7 c+ i6 x/ ~* s; c6 n" ~% q T# c
module_init(led_platform_init);9 G* _6 T; i' G
module_exit(led_platform_exit);
3 q2 b. H( U: A, K6 \+ L- J4 o- ~! Q0 T; Z
MODULE_DESCRIPTION("Led platform driver");
" E" ^/ k; Y" U+ `, {MODULE_AUTHOR("Tronlong");( s, \# d6 e& x
MODULE_LICENSE("GPL");! P& c& Z- F5 y( i, }+ _
8 x& E0 I7 d- s* r& ~3 }
|
|