|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
0 P6 G, r! A5 @! U2 D#include <linux/init.h>
w& O, B5 x) k#include <linux/module.h>: S. e( y2 T1 d; b( P) P* M
#include <linux/kernel.h>6 |: A& \5 ~: J
#include <linux/types.h>
3 T: M; T3 |5 W0 H#include <linux/gpio.h>
$ m3 r% X; F" P% p3 h#include <linux/leds.h>8 I+ g5 y' i: m3 `! H9 T) g
#include <linux/platform_device.h>
# o% G% x$ ]1 v& Z' p
, I; m L5 [- E#include <asm/mach-types.h>* v5 c/ B" u/ g
#include <asm/mach/arch.h>
! ~. v- V9 X, `4 f8 E$ t#include <mach/da8xx.h>
: ^+ P' g: b+ O# r% S5 L! C#include <mach/mux.h>" u4 ]2 I2 }8 h+ X" L4 y) k2 ^
0 n U3 q7 f3 ?" n#define DA850_USER_LED0 GPIO_TO_PIN(0, 0). u% q- d7 {7 Q% B( w- _7 r" i
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
2 p$ v& q- o% a#define DA850_USER_LED2 GPIO_TO_PIN(0, 1); Q' p. ~3 h0 r1 q1 h) i4 Z! H
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
( u$ n. J! ^& b1 b' c. n( D" \* p9 l: l) o9 v4 Q# e
/* assign the tl som board LED-GPIOs*/
9 o# L' L" f- i7 F' j8 G1 f# sstatic const short da850_evm_tl_user_led_pins[] = {0 L1 t+ \5 }" d. H7 W1 n
/* These pins are definition at <mach/mux.h> file */
, p) T! \4 k. d! w DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
x8 l5 d' Z8 b -1+ q1 q" @0 I1 M! K8 Q, p; j' ]
};# E% G0 ^, N* o. f
( |; `( f" h4 i( |2 V D
static struct gpio_led da850_evm_tl_leds[] = {
- M) k9 n6 a; U( a% Z5 y: g {& H4 k6 N u# D: _5 N% o& Z- Q5 A8 U
.active_low = 0, y3 n7 h/ `0 @4 L4 N4 p9 b1 X
.gpio = DA850_USER_LED0,
) o4 Q f1 u8 Z7 A .name = "user_led0",+ v( Y7 x- v: O4 N! t k
.default_trigger = "default-on",
, h: e g5 f/ A* x },9 {# i7 U, F9 [1 X0 n
{7 ?3 I" _# P( b& v ]% g
.active_low = 0,' }5 m2 S8 V7 z _# v! ~# \) b
.gpio = DA850_USER_LED1,
' f; E! {5 O! h/ ]% o .name = "user_led1",: Y: }, v# M/ X/ n4 S$ D# f
.default_trigger = "default-on",( M( O* \: W; J& _) y; Q2 R
},
/ I, D" E; ^+ F( I F {
. Q9 q. X* G I4 e2 w/ x .active_low = 0,8 ], W! ?& S z+ }/ O5 ], x
.gpio = DA850_USER_LED2,
" ]9 u5 W4 X8 G5 i: a ^% k .name = "user_led2",
- D) s* h6 X) s" S' z* s .default_trigger = "default-on",7 E0 l$ D+ ^* R1 B% \+ Y
},
- K0 @2 ^/ D5 v7 {3 J {
7 d# c& @( F' v: Z: B9 c9 W .active_low = 0,
" p2 E6 X+ S) n .gpio = DA850_USER_LED3,
/ v2 v% f% }; S7 t! W1 j .name = "user_led3",, A, m. e# W: M0 O0 q
.default_trigger = "default-on",: H3 ^8 V$ N( b6 R- x8 S
},0 @( H: p$ m4 _1 ^
};) P: x4 }. z+ {+ \
) i/ Y7 H! W; {% @: V0 U8 Tstatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
0 R9 p! _- t0 L3 j6 `8 ~! i- x/ c1 o/ v .leds = da850_evm_tl_leds,
& N; D4 r3 Q9 ? .num_leds = ARRAY_SIZE(da850_evm_tl_leds),
" m8 v7 l, j/ P3 o- ?: s};
+ Y! s3 _# a* e) } _( z/ m8 `1 ^8 U3 n, i- V) R! ] s9 U9 j
static void led_dev_release(struct device *dev)
/ J3 [( a7 `/ l4 R{: U" l+ p, F5 R8 c. N$ v% _: c
};
1 Z" P0 F" `; W2 r/ T
: j0 g6 |- [& L* A9 f* u8 q0 dstatic struct platform_device da850_evm_tl_leds_device = {
7 O! H" H3 I( o" F9 ? .name = "leds-gpio",! f4 t5 q; T& c
.id = 1,
N% \& a, z# i .dev = {
% u. G$ h7 I. l' m( {% x .platform_data = &da850_evm_tl_leds_pdata,9 O, |7 n5 S# [7 L, @4 L2 N
.release = led_dev_release,
1 u( r# p8 L/ A' n* h; T" ]0 g }- V$ A, b& T7 ~9 y" E( Z
};
8 O$ _4 `5 F. j0 P J$ O, q7 \: v9 w
static int __init led_platform_init(void)
8 n. I! u; x# n! m! l B{' j5 j% d9 I4 f' X3 d! Z9 S3 d, c
int ret; f5 ^: y' k& ]! L
#if 0
6 D1 _6 v/ y. k# N" b ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);* l4 O+ L. ?5 ?, g7 o8 v9 I8 f# \- J
if (ret)" A+ Z; S4 I* a8 C7 E# k9 a: D
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
6 c( C" H' `8 J8 B! ?2 z0 ] "%d\n", ret);1 Z$ U1 [1 Q- [' _9 ^
#endif
* S2 |) U' ^' K8 l( {" L ret = platform_device_register(&da850_evm_tl_leds_device);
* [$ M H1 V6 ^' z/ S if (ret)
. ]. g4 ]2 E/ ?2 q2 ^ pr_warning("Could not register som GPIO expander LEDS");: a; k/ K+ q# O* K: E3 |
else
, |! `' r/ ~& W- o v printk(KERN_INFO "LED register sucessful!\n");
1 b% J' m* J5 R* K
7 S' o# q0 P) M: C! ~3 p return ret;6 {' K! h0 \* ?
}# @2 G# @# I4 I) M% p* V8 [, F
- H/ D! B) O5 K" r+ Qstatic void __exit led_platform_exit(void)
! e: S E5 U) |3 W& [) k6 c' b{
. n `7 w' q1 h9 _& s- f* r* F* }1 G platform_device_unregister(&da850_evm_tl_leds_device);
0 j' D, `# H( _- @7 m
6 v' t X0 i3 w5 m, c) g7 k7 o2 a printk(KERN_INFO "LED unregister!\n");: L ^* c, @$ p$ o9 |- D
}
1 I8 }; U6 X0 y7 O
5 [% T2 {4 |1 V. ymodule_init(led_platform_init);
9 b9 ~$ S8 z- ~& y+ ?0 J! Emodule_exit(led_platform_exit);* v0 I# j% y' C9 v
$ P) l8 y- c8 F% }- i; z$ d4 a; N6 e
MODULE_DESCRIPTION("Led platform driver");1 v: S! J; A' n1 Y7 Y- a: Y1 v. F
MODULE_AUTHOR("Tronlong");7 F2 h- r$ q% U6 Q( b5 K
MODULE_LICENSE("GPL");
. n& l# _- A- m6 Z3 B# j
+ z5 k( Z s! [& e |
|