|
求大神给下面的程序做注解,请稍详细些,谢谢。* Q$ H, R$ u; m6 h1 t
#include <linux/init.h># I* S3 ?- Q1 ~, k
#include <linux/module.h>( M1 R) W' j0 i: \) w
#include <linux/kernel.h>. D7 `# p' f- c9 @
#include <linux/types.h>0 ~, {+ U3 K5 F( ^# h
#include <linux/gpio.h>
) y! s/ k" m% v% r/ J! D" L#include <linux/leds.h>9 W3 u8 g# y) j8 `0 F' T
#include <linux/platform_device.h>
3 j. l. B5 l" S& b9 m
0 j$ Q4 o t h! J2 E8 g" j. ]#include <asm/mach-types.h>) J4 f5 s q1 N2 M- N5 Z& j
#include <asm/mach/arch.h>
0 p/ s) A ^, g#include <mach/da8xx.h>
) H5 F+ l: w1 }#include <mach/mux.h>
' R$ T5 g3 ^$ F: g: O' O' b% Q+ y" } A9 L( d' n0 w" W9 x
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)8 q# ?* m. p% }- L
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
* k1 ^; n8 ~. M#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
: B8 n' Q# a# v( K: `#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
) x4 f/ H; U! B: D* l4 r. w" b8 W7 q' u8 h3 ]1 w
/* assign the tl som board LED-GPIOs*/7 X. p w4 {0 {# ?* k
static const short da850_evm_tl_user_led_pins[] = {6 B4 V( S9 ]$ }
/* These pins are definition at <mach/mux.h> file */7 u3 W; Z6 M( V: ] h: ^+ c
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,+ y/ [8 Q- D6 x$ e5 N* x
-10 x/ S4 D' j5 w: T6 F
};; C- p6 y( A/ @
; u& z; E0 \/ S" _ y' g8 }
static struct gpio_led da850_evm_tl_leds[] = {! }- `5 X: i' L
{6 }$ W* E, ?/ I7 u- E
.active_low = 0,. y- m& ~1 ?9 T, z4 Y: q; j; \
.gpio = DA850_USER_LED0,
6 _. M- X8 w7 K .name = "user_led0",; n" D$ }1 a$ X5 T
.default_trigger = "default-on",
6 v+ O; W4 O/ q },7 O. m+ [) x* k; c
{
& N: i5 s- g, w% p( g .active_low = 0,
' L: Y. p. _5 b; M3 { .gpio = DA850_USER_LED1,
! L W2 f% g2 [) i% ^ .name = "user_led1",1 C6 S+ X! M: D! N' Y3 p7 a* l' Z
.default_trigger = "default-on",
( h+ A) a4 n2 t4 P },! c3 w6 l. y" m9 A* d# U
{
* C) D. j/ O- \( v! w2 @( }: N .active_low = 0,
8 C2 p, p% N% }. ?( s" j1 o .gpio = DA850_USER_LED2,0 |3 |# v8 q1 P& m1 H
.name = "user_led2", X f# ^- Q8 z
.default_trigger = "default-on",
- }1 b0 k! W+ u% U0 _) n },$ V2 z' ^- r4 P' X7 x7 j
{
) g2 L& I' v# A6 P$ u: ` .active_low = 0,, Q- C' i( P/ ]: a5 @
.gpio = DA850_USER_LED3, @* X' I+ p+ _9 [4 ~
.name = "user_led3",& [3 d. m h. E0 r, @+ M$ I$ ^
.default_trigger = "default-on",) O% u H% B4 H" Y
},
6 u$ I& x2 \% V* f}; F* p/ E' y; S" h9 d
* T" @7 ]: t5 C O; z7 H) {static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
' i8 Y1 P7 o; A; F0 m .leds = da850_evm_tl_leds,5 D9 @- \1 \; {5 b; ~* D4 [
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),
1 k2 s T/ x- l5 [};( w& Y# d$ Q, e+ k9 R W/ i
" g r9 H* f6 d
static void led_dev_release(struct device *dev)
+ u- U9 F: B5 V{2 l: B5 ?( i& n' Q) J# p
};6 M$ e$ d) `4 Q" Y0 G1 n) O5 c
( S( S* i% N: V' _0 ]: G/ x/ Gstatic struct platform_device da850_evm_tl_leds_device = {
3 O) \& `% t' y! S' ~9 O$ o8 i8 c7 t& K* w .name = "leds-gpio",
7 Q. ]" K! a3 t0 z2 T .id = 1,. y+ @# z7 f1 y! l6 z
.dev = {
1 W( @1 V' o0 R( q6 r .platform_data = &da850_evm_tl_leds_pdata,
- D" f3 P/ L2 d0 v5 O .release = led_dev_release,
( g! I! h. n/ x. x: u: a }* v3 C/ @: g8 W: h2 g* |; b
};7 z/ o7 A1 L! P ~
* c& Z. C* L1 z0 Z7 q
static int __init led_platform_init(void)
( D9 F% R c& v0 ` {, V6 W* X{
8 h k( q, v! f! C' X+ Q) S int ret;) |$ \! K6 w, X: F" @+ J9 _1 P. H
#if 01 s6 K/ i/ ^, d; l) f. j
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins); Y/ W- f ?2 ` ^- l6 s. { X
if (ret)* {% {. F* N7 W- O7 Z
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
, [) n& Z7 Z# J, u* L "%d\n", ret);
. \ b- _9 Y; S3 q9 |, ?#endif! Q3 @+ h- E) x" s( T6 k
ret = platform_device_register(&da850_evm_tl_leds_device);. o- C. Q2 I/ Z/ I! C! k5 ^& k# l2 \
if (ret)1 h/ { n( ~( P3 M; d2 a
pr_warning("Could not register som GPIO expander LEDS");( n7 S, h* c; q' n7 M1 Z
else
" P* v4 u9 ?0 g/ e+ e- m; \ printk(KERN_INFO "LED register sucessful!\n");+ N& M' V" t$ j& m/ N
7 u/ [) T4 X( a8 F$ G( \7 h return ret;
: _% R4 j9 Q3 E7 K+ o9 r8 K}
7 H% j6 U# E% Y6 |' d# s% ^# ~3 c6 @- K% e+ m" G3 p: m
static void __exit led_platform_exit(void)# X- x X4 ~# Y
{
' m; \- k2 R: }; k# u platform_device_unregister(&da850_evm_tl_leds_device);. D/ v+ s1 A& }0 @' U5 Q! P
! I) l# r+ c6 [3 H printk(KERN_INFO "LED unregister!\n");# Q5 K$ D" b7 r4 T% E7 ]
}' Z3 ]/ U4 O/ m @* _- v
7 P* F: m5 L# G, K4 emodule_init(led_platform_init);" d: J; O: D# l* B- b0 J" ~
module_exit(led_platform_exit);
2 W5 M& d5 l. X" ^
I7 ~ p0 [* W5 a' n4 AMODULE_DESCRIPTION("Led platform driver");. Q2 v- h" s* ~; b+ E6 u9 z
MODULE_AUTHOR("Tronlong");
3 ?/ J# M4 o2 X% a" [MODULE_LICENSE("GPL");/ }$ `; } B) `
5 [5 L( y! p \8 d9 u: r |
|