|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
6 [- s' C Q/ @3 A$ d#include <linux/init.h># g4 W, L1 {; s6 e0 }
#include <linux/module.h>
5 u% w) n2 |, ?2 v- `4 J#include <linux/kernel.h>
$ F9 ~ W4 A7 x" z+ f% v$ n% s. X7 D#include <linux/types.h>
$ M- F# r# \0 N# i#include <linux/gpio.h>/ \5 s6 M- X, [
#include <linux/leds.h>
' C h8 E3 J- |+ p/ ?#include <linux/platform_device.h>
; \" M2 }" E: f% C, Q! V& L/ W6 C! D6 ]( a6 M$ O+ q, G, R
#include <asm/mach-types.h>
. s$ M/ P. @3 f$ X9 y#include <asm/mach/arch.h>
% n/ y3 l3 c* h#include <mach/da8xx.h>
0 z5 K$ L, w% {; p. j( b8 _#include <mach/mux.h>. b- m4 X7 n& u; k8 v$ a
+ F, j' Y& B7 y0 Y k
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)$ K$ N5 O% j' O! u
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)4 t, q q8 ]1 `3 K1 R
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)$ \7 C$ q7 M0 |" _: C+ S1 Q) V
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
9 f" d* M, z7 N' }+ o' r5 B
4 V0 q, D! ^% B2 k0 a6 f/* assign the tl som board LED-GPIOs*/% n* }( |: @* ]* x; K9 z- z8 a, t
static const short da850_evm_tl_user_led_pins[] = {
8 `; D- J! o& v, B8 J4 G* a- Y /* These pins are definition at <mach/mux.h> file */
( Q; k! K W4 x" G9 O9 S- r DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,% E1 } j# y% F) r& B! k
-1
) m5 g9 S v8 g! f};) b& G' A1 a2 G& @
& F6 j1 \" D$ Dstatic struct gpio_led da850_evm_tl_leds[] = {
) X: W* P" n$ u. b1 C9 q! f0 ^ a {! w6 k4 P' _& Q. e
.active_low = 0,1 k' {! i2 W1 J! B
.gpio = DA850_USER_LED0,
; ~0 R9 R3 y4 x8 E& W, Y1 m- x .name = "user_led0",8 u- e% F8 w8 q' U. M; ?
.default_trigger = "default-on",, H7 i" |8 M- Z0 h6 e" q' h
},! [" I/ t& X2 N0 i! S( I, D5 Z
{9 Q. C- `6 T; g x* K
.active_low = 0,
/ ?0 z6 @1 ~: C+ h$ g0 N) B .gpio = DA850_USER_LED1,0 g. _3 O- b! F
.name = "user_led1",- J. ?- t8 y% K0 a+ z- ?
.default_trigger = "default-on",
/ L1 d0 a7 ?5 Q$ P3 W },
$ O! a" q! B1 K4 _) h% U {
$ J! D2 b) }% E .active_low = 0,
- Y& ?1 ?3 Q9 w8 a2 X. x2 ^+ e .gpio = DA850_USER_LED2,9 j. ` L6 t ?; m
.name = "user_led2",$ y# O0 ]/ D% O6 _+ z k1 j
.default_trigger = "default-on",; x6 D/ W/ I* x8 y: v: a8 n
},
; e) a2 U5 S f. O/ b& Q$ v+ z { }' ] e, a$ U* h$ T9 {. V
.active_low = 0,2 I% ^# b3 |, S" Z
.gpio = DA850_USER_LED3,
: V: G) Z5 v2 R7 Z5 T" a .name = "user_led3",! C8 Y) X4 \: K8 S; P' v1 {
.default_trigger = "default-on",
6 _( U2 V+ p% g7 K },9 R* ?; `( j8 O' Q2 M
};
! B! J$ k6 p8 R* B- R: K: ~: b( T9 R3 v
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
! b0 ~ R$ e: ?; _ .leds = da850_evm_tl_leds,
) k. Z \$ w" k, J .num_leds = ARRAY_SIZE(da850_evm_tl_leds),
' R1 d# n$ j! s8 R( w* Z) W$ _}; L9 _. t7 |5 p+ t) v5 g
: F3 j: }0 _& }8 `
static void led_dev_release(struct device *dev)
6 @5 y! s e+ C& Q# _2 G ]{
1 J+ ]" l, o9 P};
( l8 F' Y+ g, d0 t" C* q- }' e3 t- h4 \9 d/ ]# U" X! }
static struct platform_device da850_evm_tl_leds_device = {% @ t6 B7 N+ M, c
.name = "leds-gpio"," f* B4 A$ q2 m! j( |: e" `
.id = 1,0 x7 U( n6 c& B* R u# f& ]
.dev = {
3 j7 r% q: w$ ^# k1 q4 m, J .platform_data = &da850_evm_tl_leds_pdata,- \$ j. A6 U3 d, @: A
.release = led_dev_release,
+ Y# m' j1 U) G: Y5 K' B }
6 q( h5 A2 a3 s/ F1 N5 p# o};
; _) a. W! U* U9 R t
" x1 I5 X( H* x; Q( p- k6 Gstatic int __init led_platform_init(void)
0 E+ r; Q, Q3 N{
. O2 U" T# `( \ int ret;
/ L5 p* K- h& _% j3 n2 y#if 0& `' ^/ Q7 M) o/ E4 ?
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
# a1 S7 q0 W) V1 P% o4 | if (ret)
: H+ \2 ]8 T5 k% k pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
3 K3 o$ K0 O% j6 V# a: j b& A "%d\n", ret);- B+ z& l2 x& g2 r0 c
#endif
5 x. Z6 O* x, h9 r ret = platform_device_register(&da850_evm_tl_leds_device);
9 D( J9 B+ T( o, n if (ret); _( {* L: i O* D: L; \5 A
pr_warning("Could not register som GPIO expander LEDS");. s* @+ k. p8 p3 K- T+ {
else8 T. G5 t' s- r) Y/ U
printk(KERN_INFO "LED register sucessful!\n");
0 U7 Z& h: M8 ]6 z' [
- h* O4 n# _9 ]2 f9 |$ r. c return ret;
( M. a/ J4 t& y; f8 P* r}
# v5 m3 U `8 ? b/ e; G! A+ ?2 x4 Q3 I! q- k
static void __exit led_platform_exit(void)% e+ C2 I$ f( M
{$ E+ N# E. E' B$ U
platform_device_unregister(&da850_evm_tl_leds_device);
6 K( x* R7 R1 T) W
5 S9 A6 {3 _# }9 |! z printk(KERN_INFO "LED unregister!\n");+ C! a; q( [9 i& l2 x; i6 k6 [4 G
}. V* l1 I9 x w+ j0 i
# e& L& u2 x' m) `
module_init(led_platform_init);
' A0 ^: B: c* W& k- o$ Xmodule_exit(led_platform_exit);
( `" L& Y2 M( W" B& w% a9 I. q
1 D: k1 E& N9 M, n7 o2 RMODULE_DESCRIPTION("Led platform driver");. W. R* J. F* f0 z3 d& |% i
MODULE_AUTHOR("Tronlong");, E% r" X. K$ k: x' x
MODULE_LICENSE("GPL");+ u m6 \7 e0 I* ~. }5 ~+ B) n
2 b5 e8 { B. P$ M# h/ Z! o |
|