|
|
求大神给下面的程序做注解,请稍详细些,谢谢。* G5 j6 q: {/ }- f% P
#include <linux/init.h>
) K5 U( \8 U1 t9 f2 ~5 p9 f#include <linux/module.h>
0 I9 O$ }5 T! S; N$ O4 V5 K; o: a#include <linux/kernel.h>
5 d1 d t; f3 ^: F# S1 Z( Y% P#include <linux/types.h>
) t! D M" h, c; o% F* l#include <linux/gpio.h>
$ ~$ t! O- ^- Q: b" T9 H, T7 Q6 l#include <linux/leds.h>
6 Z1 P% k! ~3 Q#include <linux/platform_device.h>
) Y# m& y, }* C! p' t' E" R* U
#include <asm/mach-types.h>& X: n4 X2 G8 V5 R- N: a' `
#include <asm/mach/arch.h>
u9 ]# Y3 v4 S1 p# T! j#include <mach/da8xx.h>
" G) E" y6 |2 I2 z5 z3 w3 r#include <mach/mux.h>
, {1 W2 a9 j6 A2 h1 p
0 T# X( _6 j( a' ?) S#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
$ X) v: l, Q- O% ^; P5 \' Y#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)( v1 i2 n4 p! ?6 o, x5 F
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)9 o/ q5 M3 B( F) F+ }
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
8 N% B9 M* J A8 L( {
' H O! t+ r# q, N" X2 ]! u/* assign the tl som board LED-GPIOs*/
( d* O4 W1 p4 f# c3 @( m5 d# ystatic const short da850_evm_tl_user_led_pins[] = {3 d( r' Y; l4 n# ]/ ^2 t
/* These pins are definition at <mach/mux.h> file */, E' f2 d1 v @* t1 o
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,1 O5 e V/ F6 y
-1/ \! M/ h O: v
};
" E3 Z: w# N: Y' t
5 W2 h) V3 b" C( |8 V& |/ Mstatic struct gpio_led da850_evm_tl_leds[] = {
8 i0 B7 R, f! N4 F {
5 O9 B. f" p3 o, F0 Z3 [ .active_low = 0,* ^" {" R* ]1 {* S: h; c
.gpio = DA850_USER_LED0,
8 r& j: z0 Z# s- Z( ^ .name = "user_led0",
- d) b, z6 m7 s7 z# F& c% Y .default_trigger = "default-on",( o( s4 o8 f* o7 [# x
},0 i$ N O' x5 `
{9 ] w. B& v/ s+ o; h" B4 E
.active_low = 0,
* `- p6 |' Y3 F/ P .gpio = DA850_USER_LED1,
# X' T0 u9 n" O, a7 Q .name = "user_led1",. W% H* \: k" P( {
.default_trigger = "default-on",
, J7 k4 f& ~7 l9 b },: u# t& B) Z* O9 x/ i6 B1 D
{) R+ o0 p! F: h( ? h
.active_low = 0,; w" }8 y* y6 h% N
.gpio = DA850_USER_LED2,% u& H* d- [$ B$ W& b3 k
.name = "user_led2",2 A; W5 v# f. H0 G0 A
.default_trigger = "default-on",. g7 i" R- \- I
},
2 u8 r- E( C3 M( V- x {$ P0 R4 [: k( S L$ `* C$ \9 I
.active_low = 0,2 p8 R3 Z' t3 n f+ H1 D& l$ m# L
.gpio = DA850_USER_LED3,7 q" ~6 Y+ _$ w7 x% {: x8 _
.name = "user_led3",
6 h8 ]7 h. e! e/ A# w .default_trigger = "default-on",
% Z) U5 v3 V. u G8 S- P }," u* [% v3 k. S. q
};' E1 {$ }- s+ y6 X/ ^4 v
, E" Z* Q8 T5 m+ E) a5 h, s
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
; k% J! Y! {8 W; z .leds = da850_evm_tl_leds," c. t& R. t) f) q K* W
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),
( \3 C3 s l+ M4 D};
: s: U' l" i+ ?4 l# ^! z; n6 ]( D3 N K# F; t
static void led_dev_release(struct device *dev)8 q8 D" I! ]! W0 s$ ]( B8 z9 J
{
1 \+ m5 @- d2 `7 B( K p};$ u- {7 r) }. H1 n, |
1 {; F1 z2 y: }- m4 b$ S( Q( P
static struct platform_device da850_evm_tl_leds_device = {
8 Q( j* J6 o7 e+ H A) R .name = "leds-gpio",
& Y: G% G9 U" U6 L" _6 w3 R6 ~5 Y .id = 1,
2 H; F# y! V9 h+ M0 |) ~% ]/ e; j .dev = {. F4 [0 G6 [7 N) U
.platform_data = &da850_evm_tl_leds_pdata,
* k7 a' H) m5 H- i+ y! N. q .release = led_dev_release,; Y0 R d4 ^* z7 i [, N6 U
}' \. d L; |0 V+ F. x0 h: Z
};
; l, F/ b% p4 \3 `$ @1 U3 h& v0 c Q( d% E' I" ]
static int __init led_platform_init(void)5 k& b4 ?% ]2 v5 z& f: ^
{
! c! u/ d- p6 `- y int ret;
8 T. S' t: _3 h6 ?1 r#if 0! d# F4 f! z( ]% _# o' s
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);* ?$ z' _! w3 V+ A
if (ret)
0 M. q9 b0 m4 { d$ J pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
' x1 ^$ |. b! v "%d\n", ret);
% s6 Q/ w! Z" Q2 i# t#endif/ b: i( h# ^( t6 D
ret = platform_device_register(&da850_evm_tl_leds_device);
- {" |" v- X% \2 a: h) N6 u if (ret)
+ s1 C' O+ L% U$ }* L pr_warning("Could not register som GPIO expander LEDS");* o7 _# S" z, B G" x2 o; o% l3 N- p
else. U& E5 F/ W8 |7 b% S2 n
printk(KERN_INFO "LED register sucessful!\n");; g# G" e& v0 [9 r# X7 z4 g
& o! ?1 \; Z; ^! ^6 @, M return ret;
6 f9 A+ J7 G( a# v# }+ G( _- R1 ^}# m: g" X% Q9 c4 c
/ h" s! K$ N0 i5 f
static void __exit led_platform_exit(void)6 O7 F: @$ S1 P
{
1 { F( l4 V6 m$ q/ j1 X platform_device_unregister(&da850_evm_tl_leds_device);
0 s4 e7 I, w O; x
/ K+ n9 G5 q/ n: d+ x/ M, ^- \ printk(KERN_INFO "LED unregister!\n");
" j' g, C8 j }$ E) o- K! F}: \6 f3 T3 W- ]1 b: Q7 ^, z, ?
* w6 j. }; p; nmodule_init(led_platform_init);+ |% s& o$ E4 H
module_exit(led_platform_exit);
& V% r; n$ F4 G7 p) I, @) Q3 f% U; r1 ?- O) D- q2 i+ E( O# h2 K
MODULE_DESCRIPTION("Led platform driver");6 }# k' g1 ^5 s1 g* Z5 R
MODULE_AUTHOR("Tronlong");
& i3 D. B6 k- N% ^7 dMODULE_LICENSE("GPL");
! H1 Y$ O1 g" R @9 v" ?& j% X: ?0 |
+ @% [8 u8 a" d" J4 X |
|