|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
/ w1 Z8 q8 |+ b. Y0 O8 I) p3 F#include <linux/init.h>- @6 D& [9 Q8 V
#include <linux/module.h>' R; z2 `5 T7 K3 b& C
#include <linux/kernel.h>
; i/ v5 C( h$ T$ r6 ^- Z#include <linux/types.h>
7 J4 e: i0 |$ K8 D#include <linux/gpio.h>! m/ I# K% K2 q5 {! Y7 K
#include <linux/leds.h>( o. V- z- I* ~) ^4 Z
#include <linux/platform_device.h>
! W+ k7 n6 g; z9 y. j k& K+ T' D% |& y1 w j; \0 ]2 l
#include <asm/mach-types.h>
" w# g) n: @4 O) n9 y6 |5 k#include <asm/mach/arch.h>4 k$ R! j: ?- c
#include <mach/da8xx.h>: @: f$ u X% K$ t4 v' ]5 j
#include <mach/mux.h>( G, T# h" ~5 s1 q( v
( j& g% z$ t8 R1 s
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
3 Q& r5 w$ F0 O) G/ N#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)7 ]5 F( R" d3 {1 m/ k
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
' C1 Y, C/ }, T: q) S k#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
; q0 q3 }& Z7 y. }3 d+ B1 _
$ F. O8 ~3 p( ?3 D4 t) w/* assign the tl som board LED-GPIOs*/* O$ U2 B9 o) a% [; q: p
static const short da850_evm_tl_user_led_pins[] = {0 v/ f5 V' s7 E; L+ q# c
/* These pins are definition at <mach/mux.h> file */
5 z( f R' k H/ G% ]; _+ x DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
+ J I4 P" g. t% h0 q& F -1
( `# k: `8 C" ]& m};1 a; J/ c( l( A/ l
- w, @$ @3 y1 Z) g4 {9 Cstatic struct gpio_led da850_evm_tl_leds[] = {& _, R! R: s; b4 R0 Q
{0 f4 M, X( G! u, k. C5 i
.active_low = 0,
9 J; r$ R4 |# J. \2 k4 } .gpio = DA850_USER_LED0,2 C) w( Z- G9 j7 j# b
.name = "user_led0",
: f* X0 @) Y9 Y$ p! u .default_trigger = "default-on",
) {( p2 R8 [- p& K: F4 |# B }," q5 o" B: j' `. s$ W! [& G- j
{. ?6 D Q" R. k/ q7 W( d3 h4 T3 J
.active_low = 0,
4 S& Q% ^7 u$ v( L3 a .gpio = DA850_USER_LED1,
6 Z/ g* D$ {3 Q- { .name = "user_led1",
& I. `; i( y% K( ?+ Y: Y .default_trigger = "default-on",2 v9 s! T& P$ \
},
9 H" Y! e9 T$ `: B- |3 M {& ^5 ]7 c' T8 [$ I
.active_low = 0,
7 x% l/ G' u5 _! h7 H4 s .gpio = DA850_USER_LED2,1 l) F) U4 s) b* Q: P; G0 Q
.name = "user_led2",
5 m+ E) C8 s, i) x% h6 \7 E .default_trigger = "default-on",- a0 ]( P4 N; b8 W* c+ |
},
9 _' u4 s) ~. n2 ? {" D4 R" q7 `) i" V( N4 ?
.active_low = 0,
! t& `' M1 ]: B/ V" N# D7 V+ K .gpio = DA850_USER_LED3,
" n' W, k3 S+ Q$ E; ^6 O .name = "user_led3",
' X! U% p2 b' m6 p9 a .default_trigger = "default-on",3 e6 @' V6 g n3 ^: d
},
& r6 X2 q6 G! v( o; A( e};
/ W# s5 m! v1 _' ^" O4 x+ Z4 q) X3 S7 }$ Y4 K2 s" p; v. ]$ a' a
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {+ p3 o9 G: z0 |$ I
.leds = da850_evm_tl_leds,
. Z. i; `. h, ]+ \, k .num_leds = ARRAY_SIZE(da850_evm_tl_leds),
) l/ e$ R- _2 i. C};* v1 t2 D5 M9 \5 @
X9 F* f" H% ~4 R) [static void led_dev_release(struct device *dev)5 }1 d% y/ D" ^, ~; E
{
# f3 f; U3 k- D+ b, | i};7 w% P2 L% D3 i; ]( l
! t7 w$ I' V7 ^: J9 z( G" G6 I
static struct platform_device da850_evm_tl_leds_device = {" P$ q6 `' j! X: |7 K, G/ p9 F
.name = "leds-gpio",
+ a/ y; U3 B6 g .id = 1,2 x' q* [1 E3 H4 t/ P! N5 J# B! r
.dev = {' u* g, L: D ~5 }+ N0 F
.platform_data = &da850_evm_tl_leds_pdata,
L9 f y7 _4 f& ]8 O .release = led_dev_release,
" ?) C* w. e$ l0 p4 y5 b0 [ }$ B. _3 X* _* ^! `0 c; _% }
};3 d; n. C% a( h3 n
5 m* d6 a# ]- k9 E. |! z- T
static int __init led_platform_init(void)/ Q! E# Q1 l4 J0 N
{
( W V) P* w) t4 c int ret;
8 ^5 v% v: E/ c8 B8 m s#if 07 q% z) y! Y$ e+ U; U2 h
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);1 I5 x! d3 y% B4 J; K) w
if (ret)- h5 U! g% |5 ]3 {) m6 _4 i8 A6 h
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
. a* P" w0 \5 o( n w7 `. s6 _* o* B "%d\n", ret);) ~; Q) M [3 A0 ]' D
#endif. x% ~1 e: k* i: \8 b
ret = platform_device_register(&da850_evm_tl_leds_device);
2 F c A$ n' g1 p# b if (ret)
( Y' ~. `9 N0 t; I% w pr_warning("Could not register som GPIO expander LEDS");; h/ r& f. Z- ]) M# X' e
else! V% }4 ^- y4 [1 ~0 R: v/ X
printk(KERN_INFO "LED register sucessful!\n"); @+ w A9 R# h% l) ]9 R
6 ^+ C, K0 I8 D/ {3 V, A return ret;
$ E2 J1 G, T8 ^# s. R0 [' P5 X}
3 x6 O+ ] L5 j
; d0 z' y. y2 ]% kstatic void __exit led_platform_exit(void)
+ s* Q7 P' n, K. Z" |{
# L6 [/ r7 n$ n! `! e platform_device_unregister(&da850_evm_tl_leds_device);
/ a! z9 D$ I* p. ?7 ?6 y
% M. o2 ] f5 \. ?/ c D( t4 e2 H printk(KERN_INFO "LED unregister!\n");
+ R/ N3 C9 r, A' \0 L}
3 M- ~+ W9 C8 N$ w! U, u# w x
- f8 H, Z) S9 F4 w" o. hmodule_init(led_platform_init);
3 b) D9 i Y7 e' @2 r- Amodule_exit(led_platform_exit);
4 M& ]6 s2 h2 L9 Q
) H( V+ o+ C9 W/ ]; F4 |$ C1 DMODULE_DESCRIPTION("Led platform driver");; C* e* `1 m5 G+ |2 @
MODULE_AUTHOR("Tronlong");$ c0 _( ~( ?! M, R& d! o& r. X' _
MODULE_LICENSE("GPL");. l& }- T+ k) Y: {0 Y9 f
% H1 ]* z. o8 N6 m1 C |
|