|
|
求大神给下面的程序做注解,请稍详细些,谢谢。3 E5 w0 `9 n$ t9 b# J) ]6 {
#include <linux/init.h>' v1 [' x; f* F
#include <linux/module.h>& I/ S' A' j8 S8 }4 n8 {
#include <linux/kernel.h>
+ ^6 Z# N* G/ X7 W' n3 u+ @5 V' N#include <linux/types.h>
0 o1 y4 ~1 v6 w: m#include <linux/gpio.h>
& w J; W- l+ k" [7 ?#include <linux/leds.h>4 G# T8 n; _5 D& z2 h/ z! V
#include <linux/platform_device.h>' Y+ F/ D5 B' [! V! B% r- W" X
7 x$ }# l: ?8 A9 f8 x! W
#include <asm/mach-types.h>
) V2 y% W: E: o4 L#include <asm/mach/arch.h>5 y0 v" p: j, G* z" g4 ] s
#include <mach/da8xx.h>
3 k$ j0 H. Z3 ?: s7 Q#include <mach/mux.h>9 u* M/ [8 y/ }" w A
: I. S5 Z" z" X% u#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
1 }- d ~1 W7 n#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
! j; ~4 U* h. i" ~5 w3 A+ X#define DA850_USER_LED2 GPIO_TO_PIN(0, 1) R0 ]3 S8 l! J, ^+ \! T
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
$ ~) \9 C* Y- x7 ^3 {! d$ f: r+ m: g: c* b# ]+ I
/* assign the tl som board LED-GPIOs*/
7 W9 w+ A8 F) F; P9 U8 G4 |- Sstatic const short da850_evm_tl_user_led_pins[] = {9 @9 m3 F1 r/ c1 \# t' U
/* These pins are definition at <mach/mux.h> file */5 ^" P! A3 E. R
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,: \9 U, J: I/ y' x6 T" l0 r, }
-1
( Y- k: y# T. K. C};
9 G u- M& y2 P, R( J! C8 b9 k) l1 H' }* P8 d! V
static struct gpio_led da850_evm_tl_leds[] = {
& c/ G7 z- S! [! W9 l" ^ {
& w- I! x2 ?$ N+ c .active_low = 0,1 e% R1 E+ ?2 L k; k# }
.gpio = DA850_USER_LED0,! q- ^$ q: z ^ W
.name = "user_led0",3 k8 K- r* s+ U l
.default_trigger = "default-on",
- l8 z! E0 D% C: n$ Y }," V# p) R/ h" p/ v
{5 v& p& g- Y7 h6 |
.active_low = 0,
! [+ e! ~3 T r/ y3 Q+ y4 e8 Y .gpio = DA850_USER_LED1,+ p3 n) e! M4 A8 m. z$ E$ ^) j
.name = "user_led1"," N* a. s$ }7 @( V& l, q3 q0 e4 {/ E
.default_trigger = "default-on",4 U _* S* l% E
},! I: J. T# x- G* p, ^
{
# f; R v( j9 D8 E# N .active_low = 0,
# l/ Z) _3 P: j; D# S .gpio = DA850_USER_LED2,
" G, K6 q( I4 j' q) F .name = "user_led2",
& o" x( `! V9 B) d .default_trigger = "default-on",
. u$ F! t3 s% a }," R4 G. n. q# B4 A- _
{9 r' I# i% }7 X' q& Z, J6 q- `
.active_low = 0,; q' s3 `0 q% a, M: ^2 X
.gpio = DA850_USER_LED3,
# U* P* [! _" m) P8 k4 k .name = "user_led3",
2 E4 {" j8 |- V; K: N .default_trigger = "default-on",
# `: R+ r# Z* `3 Y8 D9 N1 j },
! x2 z: `; h' K! @) P6 C};- ]2 q- _3 u2 x8 n; B
1 {! v2 F- q8 g& V: h8 |7 C4 Nstatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {/ p3 m5 {5 h+ ^( q! |+ P
.leds = da850_evm_tl_leds,, f6 F# X9 | `+ ^/ h# d, Y
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),+ V" F- B( z6 @5 E9 R
};
. w, _ |1 a( l; g2 O, Q O* S7 T: H- c0 `1 O, r: Y9 C
static void led_dev_release(struct device *dev)
7 k/ }1 ~% F$ B9 W{
7 P- D [/ D8 d( s N};
+ d* b5 d* I b4 ~
f; f. Z4 U( _: ]static struct platform_device da850_evm_tl_leds_device = {
- a7 |- z7 H2 X* d6 o( P D .name = "leds-gpio",. f; v: g# b% \7 v
.id = 1,
& a+ m) v9 J4 \. \- D# g* n .dev = {
9 T" d/ `( A5 V1 m7 I7 O0 K; } .platform_data = &da850_evm_tl_leds_pdata,, [7 x% I: u/ k/ Q8 i6 a7 m! i
.release = led_dev_release,$ @ I4 Q5 ]7 E; V
}
3 r# X! q2 U9 i; o2 O$ _* C};
+ q8 s2 Q+ Y# e
) p' R/ T! T8 J! E5 {1 Nstatic int __init led_platform_init(void)
. y! h+ \7 G5 e* E9 d) s; ]5 h{
1 ]% O. |: a* W6 L( {! s int ret;' O. o0 |% Z* P$ j9 Y6 t
#if 03 I3 J) {3 {- C$ G) p
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
: q0 p- D5 [' N: r if (ret)
- ?4 t( v( F$ S) q' w pr_warning("da850_evm_tl_leds_init : User LED mux failed :". ~) e) g$ u' i+ z# o* _8 }
"%d\n", ret);
" X' u. f" w3 y( T2 O7 \% ?" [#endif
, d" c# k# m4 k- f/ N ret = platform_device_register(&da850_evm_tl_leds_device);, {7 f$ v6 E4 D; ?
if (ret)$ H+ V7 x/ ?3 k. k2 K j
pr_warning("Could not register som GPIO expander LEDS");
5 C3 e% M6 v! f' x% u else- `4 V2 {& W( G- Y7 Q3 @
printk(KERN_INFO "LED register sucessful!\n");/ S$ m }& ~& J# ]
- `/ d' {6 a- H4 v; }; s
return ret;
( P0 Z& K& b; S9 ~( q$ r}' t+ Y) `+ ]6 T: y) S4 M
! N- P$ j) b6 K% a
static void __exit led_platform_exit(void)2 K9 {- o9 E, L5 y
{( ]# v, T: W6 g; M2 |' R
platform_device_unregister(&da850_evm_tl_leds_device);
' {8 V! o# @% x! |' u
; X' l; W' q4 J: B% l2 P1 A6 ^ printk(KERN_INFO "LED unregister!\n");
- h4 I- K9 H: q4 x$ m7 o}
/ [! c9 d, B' M, x8 I+ U4 O! z! p. c' p& X
module_init(led_platform_init);3 r2 ]& s3 u& K$ U
module_exit(led_platform_exit);/ @5 t, e% r( }, w6 D; E
, p, }& W+ i6 R. ]6 s0 PMODULE_DESCRIPTION("Led platform driver");# B! J, I% w+ {. K4 P
MODULE_AUTHOR("Tronlong");
8 m$ M( X0 v% oMODULE_LICENSE("GPL");
/ z; C! K8 Z9 C0 V- f0 e& A: ?6 P' x0 R" k/ m
|
|