|
|
求大神给下面的程序做注解,请稍详细些,谢谢。0 R+ m( Z! ^3 {# T4 P* H
#include <linux/init.h>
; g+ f. H4 A, r" K#include <linux/module.h>
1 M$ q! R+ y; }# h# B D2 r% N2 j#include <linux/kernel.h>
9 I* b+ I$ |8 N#include <linux/types.h>' w! {, b, M% D; m6 Y" ]* S ?% V5 Q
#include <linux/gpio.h>" C, X8 R6 e- q \
#include <linux/leds.h>; e# s0 L% F: x+ B# O
#include <linux/platform_device.h>
6 W4 w9 R: L, o8 U( m- g
& b! v3 x) S) f) d3 n* \4 g#include <asm/mach-types.h>
: x8 ]# g: Z0 k; Z, L( [#include <asm/mach/arch.h>( R2 o7 K; H) J, H# R
#include <mach/da8xx.h># S- I+ V* s6 w) T" b
#include <mach/mux.h>5 l, M6 }4 C% t S1 Q
: k3 R; |. _/ G#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)) y: \' M$ ~8 C( g5 x1 V( d8 d
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
$ p- u" {& C' D8 d#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
5 y, K' Z6 t4 Z0 c#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
' z6 X5 n( E/ u$ i: ~: Z9 r1 M' V: M1 q1 ^
/* assign the tl som board LED-GPIOs*/# s* M; G) \. ^5 a$ X2 w
static const short da850_evm_tl_user_led_pins[] = {! M+ s# G8 v: |. w9 r/ M0 m
/* These pins are definition at <mach/mux.h> file */
^8 ^$ Y- I$ r+ s4 n2 B# j% S0 R DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,6 |* D6 T* v$ M0 B c" ^
-1. f$ Y ~/ `* g$ q8 s. i
};
+ | b, B) N0 l+ A! {) z
$ ~$ [8 O7 v' R" P- K* v j: `, Pstatic struct gpio_led da850_evm_tl_leds[] = {
& ]% A* O6 y; B) ~( D {( f. B$ Q. Z5 O
.active_low = 0,
8 [; U+ ]* W& W- ` .gpio = DA850_USER_LED0,
- m6 g6 R/ _2 n" ?! _ .name = "user_led0",/ e7 [0 `; l4 y5 k
.default_trigger = "default-on",
; m5 W1 e7 T f- ~' Q },
9 M5 o! r0 b* _/ p {, s9 | k) Q* P# b* P- a! F/ B% _
.active_low = 0,
; f0 W0 r# g9 y1 V .gpio = DA850_USER_LED1,
* I9 ]3 l2 l/ x5 @9 I .name = "user_led1",8 P* S3 ?2 k# m
.default_trigger = "default-on",( u' f5 ?/ d/ T2 z$ Z% ?
},$ ^& P5 N$ J2 I. N# |9 d! k3 V$ E! Y
{1 T! q" {4 _1 B! } z
.active_low = 0,
% A/ F+ u- h* C. i# \! p6 |- ~: M3 d .gpio = DA850_USER_LED2,
9 g! Z- w+ g7 _2 R6 V1 n' g .name = "user_led2",
$ x( R& a9 w8 E# }! p# U .default_trigger = "default-on",8 R% ]9 _; r. \( k
},
9 h( G' ~1 g7 I& l) c9 k: f! n6 Q/ J {3 G; a3 I! O, N! P
.active_low = 0,1 F) f+ Y$ U' Z" ?. M
.gpio = DA850_USER_LED3,
' D' X) e0 [) Z+ {( C .name = "user_led3",/ }2 C8 P' w% X
.default_trigger = "default-on",
0 }4 [4 B0 I% R F! d" \ },3 X% h% B0 W* k
};1 }. {+ c' i% R+ m" I6 O% i$ p
/ {# m- a4 d5 V+ ^: Ustatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {8 k5 T' @) t9 R; z4 z% z7 K7 X
.leds = da850_evm_tl_leds,
5 A( Y1 z9 b7 T5 Q .num_leds = ARRAY_SIZE(da850_evm_tl_leds),
# Q5 ]4 E; y3 \8 G% k, D+ P3 J/ |};
2 u3 T |: H. D0 {* o* G9 m( i! M
* U7 ~0 b" D* K+ q: astatic void led_dev_release(struct device *dev)
; Q8 T, c: j \0 y+ K7 `* g9 c9 F{, A5 a+ B/ N; t; l
};
% U$ w" P9 L7 x' X& j+ k; f
+ g! h& U, B9 k, i1 M% S7 t! g' Xstatic struct platform_device da850_evm_tl_leds_device = {& y+ e3 n7 ?5 v/ f' i
.name = "leds-gpio",
0 P( a% b- a2 }* h, ]$ P9 s. m .id = 1,
- X- D. i' }, B8 X4 H0 p .dev = {! }% k$ `/ t9 g8 [, I* u
.platform_data = &da850_evm_tl_leds_pdata,% Y0 h! U( i9 f0 E! l, @
.release = led_dev_release,+ {5 N: P4 ~6 t9 N& k/ Y
}
, o* |$ ^2 s" G/ t( R! N};' W3 F. |0 n% _3 C
# U! F5 m) W- _+ u% v2 N- [( ustatic int __init led_platform_init(void)" n5 w6 T2 |5 y1 Y9 y/ R7 [; |% t
{. @/ ~ S: Z4 K( o/ `3 K
int ret;! J# g N+ Q$ v9 e; `+ g3 {# A) W d. G
#if 0
/ v- s" y$ A: u1 G2 f, }& e ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
. J ~: H" i5 R+ J$ M if (ret)
! ?7 c5 K% b6 f5 @ pr_warning("da850_evm_tl_leds_init : User LED mux failed :"0 o; Q1 j/ a, r! W6 C* T
"%d\n", ret);! M: B0 b. Q5 |- m* w# y
#endif4 x, z1 H- y4 B6 G7 I. ~* b
ret = platform_device_register(&da850_evm_tl_leds_device);9 w: F9 c. O4 I0 V0 y0 B+ x
if (ret)6 H6 H3 ]7 K J
pr_warning("Could not register som GPIO expander LEDS");3 r0 f6 y5 }" r
else
) a8 T5 V9 ]+ r6 t. m1 G% w printk(KERN_INFO "LED register sucessful!\n");) [2 K% Q. B, s
1 i2 a5 r: i5 J$ b2 U$ ?3 s- H return ret;" i8 F% E1 q, ?% f3 V' C( ?
}" X* D0 b+ V: \: G: h. t5 w7 q6 c c' ~
- `1 k' ~6 m; c# g$ Z: `* f& l
static void __exit led_platform_exit(void)
0 B `' ~* Q& n( `8 n' ~* H{
* v- Z( [, I$ e platform_device_unregister(&da850_evm_tl_leds_device);
9 F8 D, A2 A9 t$ e& r. s0 M. o8 Q# c& ?' I+ Y
printk(KERN_INFO "LED unregister!\n");0 `- K9 Q5 |3 f" y* v2 c- K
}
/ H' p" q7 B2 V5 U9 k, a, ]& G' l* U5 l
module_init(led_platform_init);
4 A6 x2 F1 ?4 j2 F/ [module_exit(led_platform_exit);
' F I( _, a9 j# u2 S
( J" ~ F0 |9 \2 [$ `. O4 z! vMODULE_DESCRIPTION("Led platform driver");
3 Q( u) d, L# E8 Z6 W$ mMODULE_AUTHOR("Tronlong");
6 u3 z9 O$ ?5 nMODULE_LICENSE("GPL");! z& t" H5 e1 _
# _+ {) j# g8 E, T* f |
|