|
|
求大神给下面的程序做注解,请稍详细些,谢谢。0 r% _7 x3 c" c3 k% [: J! v" h
#include <linux/init.h>
; a/ Y, V2 ^* f; @7 }2 C& Y% }* \#include <linux/module.h>
* s/ x' y7 C* x K' `; U) `#include <linux/kernel.h>
$ f* \5 x4 J! h/ v- u- `% k/ A#include <linux/types.h>1 A8 A1 U4 k6 R3 q' L c8 w. b
#include <linux/gpio.h>) o! c1 @$ r5 i
#include <linux/leds.h>9 d' g8 G- P1 J# C! D) @' Z8 T8 {
#include <linux/platform_device.h>; I" z$ H9 c' ~& B- p
1 ^9 J/ _0 A* j9 r3 K5 _& j& {
#include <asm/mach-types.h># I- l2 x. G# W) D
#include <asm/mach/arch.h>4 i' E2 U$ N) w4 @
#include <mach/da8xx.h> O6 T, J0 G" L
#include <mach/mux.h>5 R5 ^6 M7 X+ v9 O
9 H. G" o5 \) |* U! C: L9 v8 s T
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
: [) O, f- V8 u8 u, C#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
& B2 s, j; u! K1 h F#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
* v( D# T: [5 K4 s#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
) w: P/ x' ^# X" ^5 H
. B8 C; @* p5 W+ x8 a/* assign the tl som board LED-GPIOs*/
& ]) r* m/ V& \ Kstatic const short da850_evm_tl_user_led_pins[] = {9 b+ P! \9 q$ Q. p
/* These pins are definition at <mach/mux.h> file */1 D7 \$ h* B9 m6 c& ], z; y6 j- s/ P
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,4 q: R& N5 t0 { r8 h0 y
-1
& ^( a* n" q6 a* H; e u};& [# @% W1 Y# R+ u( {+ l. z
) G4 M8 Y3 |5 V7 t2 Q7 @static struct gpio_led da850_evm_tl_leds[] = {% \( R( q; R7 X* Z* K# h
{
1 j+ o8 a" h, H) \& ~2 A9 a .active_low = 0,) Y2 I. w: b0 ^0 ?+ x8 d
.gpio = DA850_USER_LED0,
$ J& D. ~% k9 i: b2 h .name = "user_led0",+ L. e8 o5 ?# O( |; M4 x8 b6 p
.default_trigger = "default-on",
' m3 C: w2 t3 J$ f3 M( v* m! R },4 P8 d5 ^* v% j" Q* C
{
6 ?2 m3 d5 Y s; m8 F7 S; `) D .active_low = 0,
' ^5 L; ~% o+ @' P% C+ p" r .gpio = DA850_USER_LED1,
8 m8 v" s: F8 M) N: f& s .name = "user_led1",* ]9 J+ l* H+ v: |
.default_trigger = "default-on",# l2 T% Z1 p& W- f, |) D. m
},
( w- q3 a v5 ?* U. J+ n5 ] {- S, s6 Y7 ^& F# J
.active_low = 0, t3 i! D: s/ u: P* \: M
.gpio = DA850_USER_LED2,3 O" Y/ L, m; y( |% }
.name = "user_led2",
' M/ u. Z5 C1 f1 \ .default_trigger = "default-on",5 ]6 ~) ^8 _8 ?) M
},
' o+ d3 Y9 G3 K* U8 Y {
4 e3 k6 C+ H% T* G" N8 J; G2 b .active_low = 0,
5 T A/ Q6 K) a$ k .gpio = DA850_USER_LED3,: T) ?2 T/ s; H8 V3 z- R; ~5 R
.name = "user_led3",8 G9 h" M$ u* ?0 S5 F2 K* U
.default_trigger = "default-on",. ?$ f0 j8 |# }9 _7 d* r
}," u# s) L! L4 B u4 e3 }$ `
};
) R: \- @1 q- x5 G- @$ a7 `. s4 y( y+ `' u
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
6 i* m4 u( ^. u; r% B( I$ z: Q9 x .leds = da850_evm_tl_leds,& Z6 F4 y6 N+ H4 y8 y5 I
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),
) T2 b& D0 f" y9 d) a};: @" m+ B$ e9 j
! A) Y( w8 t5 E- b m* ^; P
static void led_dev_release(struct device *dev)
3 U9 Z) n1 `: c3 w: {. {{9 T+ b3 C. L$ ^: ^: I+ T7 Z
};
9 C, k4 b1 D! m: k
. G* L% |" ?( j. _; z0 u3 Rstatic struct platform_device da850_evm_tl_leds_device = {+ d4 X/ s% \$ V
.name = "leds-gpio",
) a. F j% E0 K1 Y/ W% M& }$ ` .id = 1,8 x( a6 Z7 K" Y1 g
.dev = {3 U5 I" b Y& u/ x% z- A
.platform_data = &da850_evm_tl_leds_pdata,( y7 t3 A% |0 V/ B
.release = led_dev_release,$ \# \* H" n. Z1 E5 L
}
/ l+ Y# I l# t" _' ~$ d};
4 f; Y9 C0 f7 f; j! v4 H1 |0 H: J
: v. u0 U [( N$ @+ M+ v7 x7 Nstatic int __init led_platform_init(void)7 {$ N! N- p; u8 W
{
3 s) _( N0 X5 {; G6 S, t6 z int ret;
/ s9 T5 X* T# T3 v+ |8 ]#if 0
( j) O; G8 f* R; H ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
6 Y1 y' p( Z- b b! o if (ret)2 O9 i- D3 v& m0 w# l
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"/ ]5 ?7 U" |7 ^$ b$ j; e" X
"%d\n", ret);
# L. S4 ]4 S. N#endif, o1 T Q7 n: X* w% m
ret = platform_device_register(&da850_evm_tl_leds_device);
1 n9 ?3 b8 h W2 p if (ret)! C Z. D3 z# E5 B5 L& v- i& ~
pr_warning("Could not register som GPIO expander LEDS");$ ~$ m" v! o0 V4 {9 e4 ?
else8 t; r9 F( ?" |) I" a) y& `6 q
printk(KERN_INFO "LED register sucessful!\n");
' r* e, Y$ M8 P: G8 H6 ^' \, c0 t6 A# E. i: D$ n+ J# L; q
return ret;4 R& T# O, P$ M- T* d1 I- @
}: N( U. K1 _3 C% B' O
9 n/ G* E1 c' j0 y
static void __exit led_platform_exit(void)$ g# S% w8 s3 v1 Z/ G( w7 z' p
{: Y) @& ?4 U5 d+ U
platform_device_unregister(&da850_evm_tl_leds_device);
0 X2 e4 z* k, F! U" p# q3 E
- V$ @$ m5 {- i% \. D printk(KERN_INFO "LED unregister!\n");
% _/ r3 P" }3 X2 @0 M/ w6 @3 u}
) q- F0 {% G) t! F
: U& C, [1 f J8 _$ t7 ^module_init(led_platform_init);
3 ]$ E3 i: |2 r9 M q' Umodule_exit(led_platform_exit);/ c- K* O9 P/ J! S( L% q/ a
# ]. }$ f( y' F) R& H7 L( K) F( HMODULE_DESCRIPTION("Led platform driver");
. h% E! J2 h1 x% @9 R, vMODULE_AUTHOR("Tronlong");
4 u6 _# A( u: X9 b# HMODULE_LICENSE("GPL");
4 Q H: u+ w8 f7 P' N5 t3 ~+ V
. B5 F' R+ H& P |
|