|
|
求大神给下面的程序做注解,请稍详细些,谢谢。2 T5 E8 Z( R; Z- b+ ` y! f Z
#include <linux/init.h>
+ z" J8 Q& a- I4 E#include <linux/module.h>7 u3 @9 R* L7 s6 \ l
#include <linux/kernel.h>
0 E! n# b9 d. k/ r, V8 g#include <linux/types.h>/ ^, a! Q) t5 h/ o, k
#include <linux/gpio.h>
# s$ @9 k% m* {#include <linux/leds.h>
?9 ? K; O6 a! f, k) {; r5 A4 U#include <linux/platform_device.h>
X6 S- `9 E1 h7 T' [& A
3 _/ ~1 M: M+ X) e1 V. \% N' J#include <asm/mach-types.h>& d% E7 {' Y; H* P+ L
#include <asm/mach/arch.h>
, W+ q% u: t, c% y( i/ d5 N#include <mach/da8xx.h>3 e3 P# Y1 X. F# C$ p/ ?
#include <mach/mux.h>
" P) e, h) ~# R9 K
+ d5 S: p8 i" A7 z: z- D% E) e#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)- W2 d; O. C7 |3 Z& B! p* J
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)9 o1 Z, M7 |1 l5 l
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)( X3 I6 u- }9 I' ]& ?, E1 k
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
3 j& _2 H% @3 T+ u- g8 s/ h& V$ x9 G& [( i5 _6 u( z" D
/* assign the tl som board LED-GPIOs*/
; r' K& w5 c6 _5 i; G2 [2 e8 xstatic const short da850_evm_tl_user_led_pins[] = {
# j7 O- i+ X8 A- _ /* These pins are definition at <mach/mux.h> file */5 b: ]0 ~! j0 K% O8 f- u% l
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,1 V9 n$ a" W+ h; { t2 ]
-1
% C) v4 K9 v8 H/ b n};
6 U- ]* T8 I A
3 A6 v% N, z3 d, ^4 y5 Q2 L( I" Qstatic struct gpio_led da850_evm_tl_leds[] = {: z; M0 v# p# t8 q% x7 R) B2 l
{
) h2 q. _& B$ j% ^9 V! J .active_low = 0," M$ Q- p: K1 R! S) N* C/ j8 y; A
.gpio = DA850_USER_LED0,
; [: V# w$ B {6 I3 D1 I5 T( Y .name = "user_led0",' U, [/ u: ^9 c5 x- j
.default_trigger = "default-on",5 T1 ~/ z% r! x6 P5 @5 @
},4 ^7 o' {& N7 n9 C! M
{
v- K% `6 A; c. Z3 A5 ]& J9 F .active_low = 0,
6 j6 h- [ H- |' C .gpio = DA850_USER_LED1,9 m3 |7 d; c: W. j5 c! k" A0 m: w
.name = "user_led1",- x. J, y$ @4 h1 ?. e
.default_trigger = "default-on",* ^4 z* E9 O* {- ]
},
6 v4 F6 \9 T1 E& i4 I5 X9 N {
4 Y" w* W- a. T; x! g1 K .active_low = 0,
2 K& [$ A4 d7 N2 x* Y i .gpio = DA850_USER_LED2,/ P4 [7 \, v8 `* q: A
.name = "user_led2",
2 L; r# }4 Z4 ?- p+ l9 \& D; a .default_trigger = "default-on",/ Q0 Q; z" Z4 b, J* ^- g8 a% |
},
/ P ~$ Z1 H3 m% b- n$ v K7 ? {
) e0 e+ k/ z: c3 C2 j- u8 p .active_low = 0,; X) ^8 d; u- @# m6 b+ z
.gpio = DA850_USER_LED3,
# p( c' q0 c0 Q1 v+ [ .name = "user_led3",
, C9 V, n5 f# L9 G$ t .default_trigger = "default-on",5 x. I- c5 B! T' X
},
/ ], \8 @0 e6 y4 j3 t4 x8 Y* f' F! J};
1 {: K1 p: o+ J+ c7 M1 E: a n4 a8 A' G2 [& R; T( \: M% u
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {4 f" e; B% ^8 v0 K8 f
.leds = da850_evm_tl_leds,% ?' C8 x. R0 E/ f+ @4 J8 q7 O
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),
; A. O" S. i5 N( [7 o};/ a# f* s" J0 k) i) r
$ C8 A0 {7 Y, u8 N0 G! Q9 n
static void led_dev_release(struct device *dev)* E( O& C G& D
{
" U* I r/ l7 H; u: G; j6 T};
% I' x ?6 U( s, `4 \) Q7 A% h. G
static struct platform_device da850_evm_tl_leds_device = {
/ M% R7 @- ^; O7 x .name = "leds-gpio",
0 Q- L/ j4 n y- ~9 S' L+ V. d; y% B .id = 1,
3 A f; a Z, [- q; t .dev = {
B; f7 u9 i$ G4 r5 B .platform_data = &da850_evm_tl_leds_pdata,
( S1 P+ j7 l9 o) F .release = led_dev_release,
, }1 @) I) {; }3 w2 ^ }2 O: b7 k o/ Q6 j; w
};$ n8 `: Y. X& ^+ n- o; G# N. t9 z
% b; [( A: ~- U4 b0 M% @9 fstatic int __init led_platform_init(void)1 @& x+ I2 f1 S3 ]3 R( T
{1 @& {- D7 H* M% u K
int ret;& G9 b$ S# M4 m, ^
#if 00 N# p) q" }5 C+ N# }/ l0 x; v
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);0 E- G( S* H# h) R3 R4 b
if (ret)
% \( q5 M9 s' c6 N: M7 X( A! }. Z$ L pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
+ u. Z8 C- L$ c7 G7 p% {) x# y "%d\n", ret);
% \$ {1 g/ w6 g7 M5 u#endif
' F1 o# X+ E" `& y9 \# I7 V2 D ret = platform_device_register(&da850_evm_tl_leds_device);
! }4 s" U" l) H5 T4 G if (ret)
: A, r1 f" @8 V# Y pr_warning("Could not register som GPIO expander LEDS");) _$ _( f) v& l: d1 G% I8 D" q
else
5 F- ^7 ^9 M: S7 d printk(KERN_INFO "LED register sucessful!\n");
. L! B- Z3 O8 U3 {$ s/ w5 I
* N' s4 r" g* J5 q0 X, ~: s1 }/ N return ret;
; _6 G- `5 t) M$ a9 N+ H& T& m}
9 z$ v2 [2 Q- ^
' c; z, i7 L! B$ ^% x2 i3 u' ostatic void __exit led_platform_exit(void)
9 ^8 I' N: f$ P3 A. T: _{2 e z: [) \* N# ?6 c0 D* R
platform_device_unregister(&da850_evm_tl_leds_device);
) [$ r. b! s9 i; X4 A) D" g2 T$ \. B+ |" ]5 O- S
printk(KERN_INFO "LED unregister!\n");
" y4 ]% D- ]; f+ @" K( s' F}" W# |& U1 u8 c$ d6 R" p
5 }# U# E& g" r0 z: r& {. |
module_init(led_platform_init);1 P5 U; S9 Q6 E( a) E( n4 G
module_exit(led_platform_exit);
9 P5 P; v7 g; N/ }# }! f8 o8 R% O0 w4 u* F: e5 n2 S. T ^
MODULE_DESCRIPTION("Led platform driver");/ b1 w5 X2 F4 }9 E: a5 X
MODULE_AUTHOR("Tronlong");1 t" v# k& P% z: n$ _3 z. f
MODULE_LICENSE("GPL");' t7 T8 }) e) r5 `9 Y; [& p+ V1 e9 u
2 E/ E5 }/ K0 o. e+ W: c3 C9 m. W
|
|