|
|
求大神给下面的程序做注解,请稍详细些,谢谢。( T/ P$ u5 k. D
#include <linux/init.h>8 e9 _8 R9 c# R6 D' c! y
#include <linux/module.h># Q& p" ~7 N2 n& T3 \# a$ G1 @
#include <linux/kernel.h>! {3 f5 o$ r: _1 [) C" L
#include <linux/types.h>8 \( @$ t& Z& N+ |" j1 M
#include <linux/gpio.h>
* x4 ^! e' X, h4 E. y#include <linux/leds.h>
- Y7 E. \$ d+ q4 k$ k8 t#include <linux/platform_device.h>
. ]9 N+ ]0 M3 U/ Z( ~, l: f
: v# l; Y, z- S8 Z4 G( X#include <asm/mach-types.h>5 |0 m0 P2 ]/ W3 h; `* j
#include <asm/mach/arch.h>3 c; i& d/ C5 N$ H* h
#include <mach/da8xx.h>
& V' |* e3 A$ {* Z#include <mach/mux.h>
- C+ C0 P T) e. O& ]& Y4 G! c3 P3 [! G& ?. _* A* ~# g( n' O5 t
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)( m) R" I& a8 a! s! @9 d
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
# Q5 o+ U9 Z" z! s#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)2 M' |+ h( |. R4 k* h
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
5 M2 e: c0 D7 X" D
# c2 v" v4 T6 m, C/* assign the tl som board LED-GPIOs*/
2 j5 d; l3 [8 E. V2 zstatic const short da850_evm_tl_user_led_pins[] = {
' r+ W- x4 i, k! ^- v /* These pins are definition at <mach/mux.h> file */
( Y, g ~) g) [. c DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,0 u" l8 r8 x8 U5 K
-1
+ G5 c; ^0 b, Q% X}; w: r2 `7 A6 o
; a! @ g: p2 g7 bstatic struct gpio_led da850_evm_tl_leds[] = {- y5 V( w8 q3 ?2 p. F4 l
{$ I, j! _$ I% t. i
.active_low = 0,9 a$ q6 n# M/ p$ U$ v2 |
.gpio = DA850_USER_LED0,* |0 C% j% q. E7 _' Z$ r0 v$ B, g
.name = "user_led0",2 ~8 C/ X& e8 n
.default_trigger = "default-on",4 G7 Z# V; Q9 n: \
},
1 q7 e# O# R6 W {1 {$ \7 ~! \! k `# A
.active_low = 0,
' G. ^% ^( E9 |3 W" u .gpio = DA850_USER_LED1,
; _- j \9 e j- |( P* n .name = "user_led1",; f( }- _$ K+ j/ v" t2 O7 r' N
.default_trigger = "default-on",5 D8 e' x1 q! V3 D8 F
},# d& h3 k3 M- t4 m9 }
{
, r8 g" Z! s. y7 e( ? .active_low = 0,
: U6 V& c& ?* R1 Q o9 a. ^ .gpio = DA850_USER_LED2,
+ P, _5 q7 D. J z .name = "user_led2",
A3 M' q' z! P' O3 Z4 l% L& ` .default_trigger = "default-on",
1 y; `0 K# G5 L3 P" n, ^8 c },1 L' f; T6 E6 `, X0 U2 y
{8 @. @8 c4 v% H
.active_low = 0,
4 {4 ~; n- z# |7 W) {1 F& M .gpio = DA850_USER_LED3,
# J0 s: e$ i- Q. i4 B .name = "user_led3",* \& I& p0 b5 S
.default_trigger = "default-on",
) ]1 V% i9 s5 L" W2 \8 L* s k },
% A7 `5 x9 p3 J" }. x) M- V};
1 g9 k9 e: Y' p* V. u9 @9 B0 E) ?7 Q" B1 C; T- j' R
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {+ Q7 g0 y( t* y6 F0 o- v
.leds = da850_evm_tl_leds,
% U1 Y5 U2 o5 O- o" _2 M; [ .num_leds = ARRAY_SIZE(da850_evm_tl_leds),
6 u4 H0 W! v& K L7 |- G};. n- ]" ~7 P8 v+ E2 L1 M4 G
0 c" Q. \9 d; }* w9 D
static void led_dev_release(struct device *dev)8 _8 w4 L' Z8 X
{7 K) V3 c3 W& ]
};) T4 C: x7 y/ u2 D" U
; d( k( d1 T$ F; D1 k0 `static struct platform_device da850_evm_tl_leds_device = {9 v2 I" D4 H ]# W) }) c t$ h
.name = "leds-gpio",
& [* P* y- P: y' q0 ] .id = 1,
( T" Q: K! \( c( ~" Q .dev = {
) L4 U f6 }) L* ]' U .platform_data = &da850_evm_tl_leds_pdata,% `6 l. @* g! `" e2 d' b7 p2 d+ S
.release = led_dev_release,/ z" H7 ^& Y* R* i% J4 K9 T( x; D
}
% T& c: q6 m9 w9 R3 o};
& S3 x" C4 c% U' z* w
- b% C0 a( ~& X/ Z: ?: C. bstatic int __init led_platform_init(void)+ z7 ^' k( t4 h7 P
{+ q0 J2 Q: u) I' s& v8 a( E0 \
int ret;) y r. N3 E, Q* y1 Z
#if 01 w0 ~; ~0 {* @0 M% S
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);& L6 Y# m& j9 A0 h% a D! ?
if (ret)
7 x# t% u1 i2 O9 i# \. _! ?, |8 a pr_warning("da850_evm_tl_leds_init : User LED mux failed :"' d8 q. f( _. x' I+ Q
"%d\n", ret);' J& ^, o" J- Q2 U2 D
#endif ?2 e) g0 E$ W( ~; {
ret = platform_device_register(&da850_evm_tl_leds_device);
9 ^" D- K5 M* F) {6 o% u% i if (ret)
+ X0 r8 ]3 Y' d$ T: V. W pr_warning("Could not register som GPIO expander LEDS");/ C( r$ @! P) I
else4 b8 p. g! d0 @5 l' ]* L3 B) a C: ]
printk(KERN_INFO "LED register sucessful!\n");
* w* g. D6 j1 j; `& k6 Y! V3 n. O p# G X) a
return ret;5 K* l+ T# j7 c1 E( i9 y
}
c! U% }& [4 z+ }; h
! }8 Y" s% A& ^8 p. n/ ` F. Gstatic void __exit led_platform_exit(void)
2 E" k, V, j# X1 y# A/ j9 F{
8 B+ ^5 [! P1 G* L% Z, E4 Q4 e c platform_device_unregister(&da850_evm_tl_leds_device);
7 {& _9 `9 p4 u; b8 w/ B* `& n# ^) v; Q; t+ _. ~! l
printk(KERN_INFO "LED unregister!\n");
_, b; ]* _5 y8 d7 ^}3 a: S) {4 v9 X6 ]
/ A) G) L4 j/ r" Zmodule_init(led_platform_init);
7 s9 M, o& A" b: C9 vmodule_exit(led_platform_exit);8 l' ]7 d9 X& r; G- S
/ z! q5 }, \1 M7 h2 \- JMODULE_DESCRIPTION("Led platform driver");
$ ?$ z' V8 g5 g& d* l+ yMODULE_AUTHOR("Tronlong");/ K! g' J+ _) w, l/ x* _9 {) x, t
MODULE_LICENSE("GPL");
4 |; m2 p! W4 Y# I1 I6 W, W7 l+ o: K: p& j W
|
|