|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
5 N7 Q" L) j# q9 Y1 l#include <linux/init.h>6 {: P3 ^4 [& e1 M8 H5 w' [& S
#include <linux/module.h>( r; Z- D; I& H* ~
#include <linux/kernel.h>
. k4 s$ y% W1 X% g9 Y6 ~* A#include <linux/types.h>' P$ H+ j* }+ u( f; ]% W
#include <linux/gpio.h>
. R! i$ ?( }. {#include <linux/leds.h>
" o9 B0 p) L( M+ K* P8 p#include <linux/platform_device.h>
% B7 e: F2 M6 G% b& t; G: f% r2 R0 v' e2 W _% I
#include <asm/mach-types.h>2 ?. n$ `7 i$ k8 u
#include <asm/mach/arch.h>9 a, v# j- @4 I. Q6 a+ c5 z
#include <mach/da8xx.h>
Z+ [+ F5 K: R* T0 P0 }0 f#include <mach/mux.h>
; {3 Z6 [3 Q( F v: P5 Q& H+ q- |( n% G/ q9 e$ Y4 r$ m
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)+ z- h9 x5 {0 d* Y* A P
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
m: L2 D: I7 Y#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
2 y8 @, K! v4 ^+ n# M2 N" u8 I#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)- o) u" v+ p- O1 M; D
6 V1 O0 r# }$ |0 F8 E& D) n5 ^
/* assign the tl som board LED-GPIOs*/& k/ Y5 s7 L; t. }
static const short da850_evm_tl_user_led_pins[] = {
! ~3 J- V: p) k1 r( s8 ^ /* These pins are definition at <mach/mux.h> file */
* ]* R) S/ v7 o4 h2 i DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,. u0 d+ z4 H" q9 Q' `6 o- [
-1% r3 u0 \3 e; r! ~; g& u
};
' d# N3 i; z, X- `- z! Z3 H7 `% C: s" X) r. A2 Q" w U6 w0 a
static struct gpio_led da850_evm_tl_leds[] = {
v ]6 X& Q5 w; z% v% O! S {& R5 f6 g; j, D1 C
.active_low = 0,
; j: T8 W8 a- O# V. d+ j) L6 O! ?1 X .gpio = DA850_USER_LED0,
% ^1 u3 V# G" o/ J: B+ m4 \ .name = "user_led0",
1 R7 u7 W9 ?0 _! R" i) N9 K .default_trigger = "default-on",* C; K4 {! p; x6 I( y
},
. N2 K" Y7 m$ T, e% h {
4 |7 c2 M: m" F% Z" h5 ^. \ .active_low = 0,
: G3 u& d+ e6 A- H; V7 p) \1 [+ X .gpio = DA850_USER_LED1,
# K. R" T/ Y6 E4 |( H .name = "user_led1",/ i' K0 Z5 A4 E& q, D
.default_trigger = "default-on",
2 o2 v7 @& ]5 g2 d6 K( ^ g },/ j7 V0 g/ r7 \9 G6 B
{
9 r, Y8 Z% x) m" c% ] .active_low = 0,
" l( N7 Q1 D* U' ~1 ^7 K/ k1 H .gpio = DA850_USER_LED2,+ k S& @* Q% p, M, k
.name = "user_led2",
K/ @% D$ C3 H& c4 g- S+ n .default_trigger = "default-on"," a1 k& x/ B" N5 T( F: G
},3 n# m; m" z& ]8 E' R/ c. ~+ _3 z" a
{
7 ^$ W0 J# L) ?) W' C* D .active_low = 0,
, X1 N$ e. o/ f. A( A+ Z& \/ u .gpio = DA850_USER_LED3,
/ H7 {0 B2 H2 A2 ^9 l6 O .name = "user_led3",# n0 Y: W) Y; y n, A
.default_trigger = "default-on",
: z1 P* O( |+ a },6 S4 Q& i9 _, X/ C/ A) i8 u" y1 K
};
7 Q p1 C- @5 u2 U5 M- v$ W4 L; z
+ k: I* G( f3 sstatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
! Q( h8 T' _+ O/ e! b- G .leds = da850_evm_tl_leds,
1 B5 m1 h# z7 M4 p3 f/ w' G9 L; C .num_leds = ARRAY_SIZE(da850_evm_tl_leds),
$ `4 l0 P2 G( J. J5 L) K};
. c- {' d: H) Q3 N3 w0 `
$ V" S; J1 ~* D1 Z8 C; w6 h9 ~static void led_dev_release(struct device *dev)2 n- Y) j2 m% o
{
8 c8 q, e# L! J$ }4 u( ^};
+ B& o) K/ {3 u& p0 q. {6 C
m6 s! E- X6 sstatic struct platform_device da850_evm_tl_leds_device = {7 w( U. z0 Z) j
.name = "leds-gpio",0 O6 x1 ]& \4 v; o* G" @
.id = 1,
7 x! R) W! w9 P3 ]/ } .dev = {, v# v( a, ^ Q' ?! o( `0 U+ t+ q
.platform_data = &da850_evm_tl_leds_pdata,
0 t7 i6 ]) ~; h1 _ .release = led_dev_release,4 @' i; m2 o2 |% s& q% ~' w
}" N1 w) u9 _! _2 Y9 F- Q U
};
+ S* j% w2 g2 _
2 n y7 a: U: l S9 C! p* S1 }, m0 cstatic int __init led_platform_init(void)
- |, s3 o, w- B: T* z8 C{
* c6 }: a% C! X& v int ret;! v3 B& K* |. s, Y
#if 0! E" \3 M3 Q6 @6 t: v/ S+ K9 g
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);2 T9 J- U3 M2 P' m
if (ret)% Z6 _+ E+ Z5 I- r- v. z9 B, H
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
+ A! v9 W7 D5 Q/ v) V; e2 |) h+ O "%d\n", ret);
Z- ` R! a6 [" `* b9 ]#endif3 P! w& P! \( Z, V& e; ~" U
ret = platform_device_register(&da850_evm_tl_leds_device);
3 U1 J3 Q+ U6 i" |5 {# a if (ret)7 k5 x$ j1 h( N* [2 V2 T; ]
pr_warning("Could not register som GPIO expander LEDS");) q& O1 }9 W! f7 Y, `. q! z6 d5 Z
else; O2 h/ b9 [( \/ ]. |' Q
printk(KERN_INFO "LED register sucessful!\n");
! D9 w+ b4 v; M) S, w& u8 u# s- X/ g4 l1 n0 W0 w! V9 i
return ret;
( V+ u4 J+ N7 g* ~}3 z* r# T y1 R1 B& m
2 h; j% N4 E; t. M) O- T* |static void __exit led_platform_exit(void)
" i& m& E! o7 E1 Q{
' x1 N o0 W" C* W4 f0 r platform_device_unregister(&da850_evm_tl_leds_device);
X4 D- f$ I; ~$ }; U
J9 ?6 G( c$ p0 g printk(KERN_INFO "LED unregister!\n");4 U h \% Q7 r2 l; n
}
* n0 j. ?, g5 k0 O/ ? X! |: }, j# {! b% M, [
module_init(led_platform_init);
; i# C! ?6 @+ O) V) nmodule_exit(led_platform_exit);
3 q2 G) N/ L9 u! g6 q7 i; j4 ^% \8 g$ U4 z7 F
MODULE_DESCRIPTION("Led platform driver");$ s O2 e8 C6 r- U
MODULE_AUTHOR("Tronlong");3 B p# K+ m8 k" ?
MODULE_LICENSE("GPL");6 E3 X; X: A( G1 ~
0 T4 R4 M5 X& M- q
|
|