|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
2 p- k3 `- A3 c" O#include <linux/init.h>
& h& ^& \' G$ E3 u9 t$ Y! o#include <linux/module.h>; m& c2 d6 N" [+ p/ L; u
#include <linux/kernel.h>0 P0 O6 U6 B0 H5 X# e
#include <linux/types.h>
$ _0 U6 a0 } f#include <linux/gpio.h>
- Q! @$ a- y0 C4 K+ F#include <linux/leds.h>
/ A( R" Y% j5 `% i* ]8 F. Z#include <linux/platform_device.h>
1 z5 u& R& X. I" G' h# T% _5 {( ]* g, o. M: Z, e, e# @( P3 u C
#include <asm/mach-types.h>
8 ?1 u2 P0 W$ [' E+ Z8 e' f O) ?#include <asm/mach/arch.h>2 o4 ?4 M2 ]; I% v' v, [3 k8 }( P; H
#include <mach/da8xx.h>
( H, p' }2 F- \, r# H$ v, ]. S: J#include <mach/mux.h>
. ?0 ?0 P$ `* L$ K& \) y
2 M4 F0 F& a/ @# k- T+ u% ?#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
4 Y. A" @+ z \$ ^9 P: p#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
9 L3 }* t, }: j8 w; }#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
" i6 v+ r" D+ r+ z6 f4 U7 t#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)6 K5 V9 g; S9 D3 ^
: i/ r3 Z( b _4 {2 G/* assign the tl som board LED-GPIOs*/
8 [. {) w6 l7 _. D$ e/ j1 q5 `! |static const short da850_evm_tl_user_led_pins[] = {: Q5 B3 p n- I
/* These pins are definition at <mach/mux.h> file */
* L* k2 ], G7 \( z3 H- j' D; _ DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,2 _7 P. @5 o' S% C2 [! h V$ ~
-1
: F5 c4 t& n6 B0 M9 v& E};
3 w9 v% r0 P) ~+ a- b* q
6 ~. J5 G C6 o ?, J0 ystatic struct gpio_led da850_evm_tl_leds[] = {( r8 X9 y! O, q6 X$ b
{! F- D. h: l3 z9 S
.active_low = 0, {$ z& n5 K4 W
.gpio = DA850_USER_LED0,
_6 B3 T3 d7 F .name = "user_led0",
% R7 K/ j. T; k% r" | .default_trigger = "default-on",* ?$ l+ g: o; W0 |
},
7 W( c/ w. g) e: m {6 V1 J) j+ ?2 P1 Y
.active_low = 0,
2 N" [! q5 Z. w! Y2 ` .gpio = DA850_USER_LED1,- u: }3 L% P: b2 u$ }6 S
.name = "user_led1",
' ~+ T {2 N% o' d; \) A .default_trigger = "default-on",- L+ Y+ ~2 D7 j- b% c: p7 ?
},
2 g# w$ A; o# \, L! I! @ {
* ~( [) U. f9 R! q .active_low = 0,. i2 k" N* F' z* X( ^; D
.gpio = DA850_USER_LED2,
' H" ]8 ~/ v/ u) G* B: p .name = "user_led2",
$ E. e8 c; \! g0 n- }) r6 f .default_trigger = "default-on",
! n2 m: @9 d4 k$ c9 _5 r },
* v9 e3 H) Z) c) r& [ {
3 J3 c: Y- A. {+ ~" C .active_low = 0,
8 K7 p4 F6 A; D3 H4 D .gpio = DA850_USER_LED3,$ ]$ b& ^! H6 k
.name = "user_led3",4 E4 n- V+ r* I% E! D
.default_trigger = "default-on",
' K4 p0 i5 k: s1 r t },
9 I# L1 R2 h' ^0 G7 p};+ i5 H8 j7 R" J% s/ X+ s/ C
& ~1 A4 [4 F2 C# ^, b; f# \static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
* x' _: B+ J: b( j+ m- i: ^ .leds = da850_evm_tl_leds,
" t0 B# [+ w4 M% ]0 v6 ~2 O, T .num_leds = ARRAY_SIZE(da850_evm_tl_leds),- A% r. o: Z3 [6 `
};
8 J8 Z3 N e" d+ R' C. D# `8 n. L, U: L) C7 M" v' y# m2 z
static void led_dev_release(struct device *dev)7 T) Z$ L9 r. B- _& N+ m
{" y1 `7 ]0 n/ B
};# J: \7 E$ E7 m8 ?9 c" @3 F
" M* `; C. s( o: s- r1 Tstatic struct platform_device da850_evm_tl_leds_device = {
+ f# O6 K: F& L' ^ B- G7 U& u .name = "leds-gpio",
( A5 h# g. b( d. P .id = 1,
/ X; a, X" p6 I .dev = {
% J' f+ k8 b" \1 R' x5 g& S) Y .platform_data = &da850_evm_tl_leds_pdata,$ {! p2 ~: |+ g& } n1 ^1 i
.release = led_dev_release,$ p8 Y! N2 b0 R) E. o2 i
}
" O" F. r, [7 \7 R% ]- \};( ^7 y1 K0 }* A" u4 I& P
+ R$ k4 f, h8 v/ h* l0 j8 Z) Nstatic int __init led_platform_init(void)- a$ Z; o4 e2 V1 X8 `
{& p5 @% \8 r8 R. ~! s0 M" F1 Q
int ret; T0 S4 a% V0 M: ]
#if 07 b+ g% D; B; |0 v/ G$ r% m# x
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);* x5 W. n) r3 d$ B {) H% L
if (ret)$ w2 f% \; t$ M" [+ X5 T0 m7 n
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
- R# `+ D; W& O "%d\n", ret);
) A' j8 p( c. ?; K( v#endif
# d+ V* @; F( Q6 x! ^. a8 c+ { ret = platform_device_register(&da850_evm_tl_leds_device);" z( H8 P) s# l
if (ret)4 f9 }! r" `+ _ Q: g) D( A/ {5 n
pr_warning("Could not register som GPIO expander LEDS");! ~" r% q2 u# i7 R* J8 w- Z0 m
else
% ~9 F$ D3 w { printk(KERN_INFO "LED register sucessful!\n");/ Z5 O0 H; R/ y9 n
, I, k4 M, f3 u8 b$ C+ s" | return ret;
7 j9 H: |' ]; l* N L! @, m}/ `7 e6 ~3 A% O# ?/ @ l$ ?
5 w+ k4 U* f2 c
static void __exit led_platform_exit(void)
' B/ h: f# [; Q. J; j2 ~$ `& p{3 N; Y$ j8 N. O! ^8 @1 X" |2 h
platform_device_unregister(&da850_evm_tl_leds_device);& W, c8 r& ]8 `" H
- W N, w! \ e; X: c3 \: W& a+ u printk(KERN_INFO "LED unregister!\n");
3 {& L; f1 @$ q0 r: h9 b}1 e2 R5 w2 I" N+ X) C, \, h
, B; \$ g" b& P0 Q
module_init(led_platform_init);
5 }. v) X: L7 O; ?module_exit(led_platform_exit);6 }9 z: w* G( ?" ?0 K3 @! V( D
5 N& R9 y: X8 O0 n( oMODULE_DESCRIPTION("Led platform driver");
/ O: m& g* n9 B! Q( t* }3 T% V m) ?MODULE_AUTHOR("Tronlong");! ~% ?! c3 C. w0 `6 O
MODULE_LICENSE("GPL");
6 n+ F; r. `* r8 {$ R
: ^2 ^! {' b+ }8 b+ g |
|