|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
$ u& f# I, t1 q0 o4 B#include <linux/init.h>
6 H4 k( p/ Z" U& G# ?5 E; `- a#include <linux/module.h>
/ |1 ?3 I3 {+ N8 e3 z#include <linux/kernel.h># j8 ^) C9 G: e
#include <linux/types.h>
2 J& v$ B# M5 L+ k& j! @#include <linux/gpio.h>
- N" R0 |& c8 M( R$ ]: T# m6 t) r#include <linux/leds.h>( [8 y* ], @/ Z/ J5 q, v2 v
#include <linux/platform_device.h>
h- x& s, O" T1 V: ~- u9 B( M" E1 k1 X3 i) ^. c+ w
#include <asm/mach-types.h>
" L. A$ o: h& Q( B Z% }/ O% r3 K#include <asm/mach/arch.h>
|9 v9 E) `; } f, L#include <mach/da8xx.h>
( e" J8 H7 M- n, q' C) {9 O#include <mach/mux.h>! R$ Q1 _/ S: I8 M
* _8 ]4 b; [4 i9 L6 o# j$ q#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
2 g5 \. E5 T) n#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)1 y" U5 X1 X5 e4 e- ]* c
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)$ ?$ w* Q, l% V+ @0 h3 Q
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
% i1 N8 w4 ?% g% z/ b6 u! C5 W- b8 I: m) F8 y w$ m5 }+ e
/* assign the tl som board LED-GPIOs*/
! Z1 ?8 I4 B- Jstatic const short da850_evm_tl_user_led_pins[] = {) m$ y# u+ n; H! B7 }% L9 T# h
/* These pins are definition at <mach/mux.h> file */
; n( M3 R8 P5 R# x& s DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,; V! D4 O: [ B6 P) i: p
-1
# \- ^4 V5 ~$ u2 [8 j0 `};8 B6 b- B* P* d/ r7 u6 M$ O. l- K
: N4 h/ \+ P8 d! e! Z
static struct gpio_led da850_evm_tl_leds[] = {
9 _) @2 k/ C6 n& o1 ^. h {/ @% Y8 v; I/ w
.active_low = 0,6 v- z/ ^# H2 {" u
.gpio = DA850_USER_LED0,/ q; z* ?4 Y4 Z& @ S. u& F* o
.name = "user_led0",
# B0 u2 r D5 \$ T .default_trigger = "default-on",, e7 @$ r( W% D
},- z4 }" [- w( y' h* x4 n4 D& p/ {! l
{: F; m3 i* g/ b8 {0 h7 Q
.active_low = 0,
+ c6 D# X6 O2 A2 D9 o .gpio = DA850_USER_LED1,9 M) Z8 I; |3 P9 d6 y/ |, x/ g
.name = "user_led1",$ V) _& i' x3 j; b9 ~
.default_trigger = "default-on",3 I* w) Y+ b, V" u7 v
},
- U2 u' I" i# _. H {
$ I5 b; |0 r8 v$ W2 q9 J4 g1 C .active_low = 0,0 Z2 }% R1 S- P% n
.gpio = DA850_USER_LED2,
1 S# `, A, K2 P" i2 R .name = "user_led2",1 T+ a4 S# c0 Y: F! U; \% w/ c
.default_trigger = "default-on",1 q% P4 t" O2 X, Z: a
},7 {. W/ B8 m: ` N% p0 p
{
" N% Z# f3 a4 r9 p .active_low = 0,9 u- R- P5 z; @4 F
.gpio = DA850_USER_LED3,. [- {- y' C. }2 C s; Y `- H
.name = "user_led3",) E. t, n5 Y w& l, A* }0 H
.default_trigger = "default-on",0 I7 a* L5 W! [, c& }2 Y
}," Z3 q/ B3 [ [- n; b
};: O( P' X& l5 f/ a( H
& l0 J: I9 E/ }) q4 G, n! Z
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
! f/ F' [& X4 ?" W9 | .leds = da850_evm_tl_leds,
# f; R, K. d4 S* I3 j" Y .num_leds = ARRAY_SIZE(da850_evm_tl_leds),
6 W* [1 A) t+ _; V* Y: k7 ?9 T};9 K, Q, B. j% \7 r, W* w o q! Z
; }. m: D* Y2 m. }" U
static void led_dev_release(struct device *dev)8 f ~) c. n% C
{
: V) N- x1 r; f$ r3 x};- w0 W& A0 K0 Z- {) k
7 G$ Y5 D+ i& H+ i6 V' }( x& Ostatic struct platform_device da850_evm_tl_leds_device = {; _- I& C5 q L7 _+ |9 a* c
.name = "leds-gpio",5 u9 A' R6 J+ E0 p8 ~" F) t
.id = 1,' S( Q; n9 K) H6 x. F0 K7 @5 P
.dev = {: T( Z6 k7 ]5 N, k3 V4 ^
.platform_data = &da850_evm_tl_leds_pdata,; A! [7 S3 i, a
.release = led_dev_release,
$ {2 b% [8 B8 ]" o }9 [2 U% d9 }# n+ E( N9 T6 @/ e
};5 A. P: l( t8 I
) N* P7 u/ Y4 cstatic int __init led_platform_init(void)* \3 R$ {' s2 ^* h
{' r. A" g. A1 i8 W6 ~
int ret;
5 a" W: v6 n$ ?/ A#if 0
' |" A8 ~+ _! R" t, e2 } ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
$ r6 Y0 u3 r: i if (ret)# [2 `3 d* c1 _+ U0 t& ]
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
; M$ N0 t% j' _7 d+ I: Q "%d\n", ret);
) |' M2 l; p" ?3 F& R$ g/ q#endif4 L& g4 z/ I Y1 F! y/ d
ret = platform_device_register(&da850_evm_tl_leds_device);
5 d0 L( B# ^ D! `0 W. y& o if (ret)( N4 X6 F# R7 T6 p
pr_warning("Could not register som GPIO expander LEDS");+ r, g2 t8 e; n! B7 q
else& b4 M8 [- ?, c- n0 f3 {# _6 F$ {% u
printk(KERN_INFO "LED register sucessful!\n");/ \ L) ^2 ^; g" `
9 q. z- n' E' e8 S8 `% L5 _& c return ret;$ W% P K& j" K+ O0 }% |4 P( H7 l
}0 X( }5 j8 N! l. z& p5 J' X
( B2 h6 ]# a5 F) j
static void __exit led_platform_exit(void)
; w8 N. n2 j/ j{
7 s7 u! o6 _9 g platform_device_unregister(&da850_evm_tl_leds_device);
: t/ w- }* I/ D2 g- j n# V G5 l; O w
printk(KERN_INFO "LED unregister!\n");
5 I# t9 U' S1 P6 l: Y1 O/ Y- p}
7 h, Q# O9 G1 O$ N1 q; y
0 A! t; U; {% C/ k6 R# B& y& gmodule_init(led_platform_init);- S5 M3 Z2 H' C. x7 W/ ~+ U( G
module_exit(led_platform_exit);
+ u- |0 x( j% {6 E: L- m: [- k( s7 g
MODULE_DESCRIPTION("Led platform driver");9 l0 o. r/ T8 O% }$ }* e
MODULE_AUTHOR("Tronlong");
* R) {: R- P& k6 T& I; F, T5 l2 S+ vMODULE_LICENSE("GPL");
& }; B; P/ O+ h* C$ d* }4 k; O4 M; k: [+ N
|
|