|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
* L1 e# U! W9 Q$ K0 v4 r#include <linux/init.h>
! w' G( a# c: l7 @( v9 R#include <linux/module.h>! r' ?3 e. V- {
#include <linux/kernel.h>. ^ G9 a7 a) c# ~- J8 O: e
#include <linux/types.h>. Z" s) E9 ^, r
#include <linux/gpio.h>
( C: c7 d9 E4 v: q! S% i#include <linux/leds.h>
/ ?9 O2 Q) W4 X* e: p- F! c9 o S#include <linux/platform_device.h>
2 B. T, u4 O+ \9 p* [, Q; v/ A& d; I; _" v0 h& m9 @) M F
#include <asm/mach-types.h>: k/ C5 I3 H3 O- d* K
#include <asm/mach/arch.h>9 i3 |* ^; S3 h* r1 h
#include <mach/da8xx.h>
) v. e f5 n: R" t0 T& D#include <mach/mux.h>
- e8 v# A, n4 Y+ \; v1 X/ M7 B0 K: @9 z8 K+ f) ~: ?3 ~9 [. ]
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)2 I! S/ j4 N, h# r( C
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)+ z' C- w* s- f1 r
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)$ J8 i: w: c# t
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
6 B, F1 D4 l. R: q4 B# K9 }7 ]& U1 y1 g9 _, T1 {2 H
/* assign the tl som board LED-GPIOs*/" e7 W# `: ]. o& e* c. y
static const short da850_evm_tl_user_led_pins[] = {
7 S- H8 O- F% r2 f( j! T( p /* These pins are definition at <mach/mux.h> file */
5 B+ `% D# f# h7 }) Z4 {4 y4 n DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
* {/ K6 R3 d: p( L* r -17 l1 @. t6 v9 q' k6 g1 X1 m7 L" Q1 g
};% c4 t1 M' I# F+ {- F! q3 [# p
$ m0 X6 p/ I5 k; S* j3 x u2 g4 ]
static struct gpio_led da850_evm_tl_leds[] = {
) q3 V! C& B8 L& Q8 T2 R: H) @ {
7 \' t: @1 F6 V .active_low = 0,
; A! F8 n+ X" B7 M) U .gpio = DA850_USER_LED0,2 H7 R& r$ e' k
.name = "user_led0",
# r7 u9 ~) d' A3 S .default_trigger = "default-on",
9 v( t, ]- a" z9 y: V; F, | }," [, P% w5 J, {0 l: U+ w! M: U
{) D+ `8 Z0 b6 K- _( R6 x
.active_low = 0,
8 f+ H( b5 X9 I .gpio = DA850_USER_LED1,
- O4 I d( t$ S; [3 p .name = "user_led1",
$ m6 p( ?0 m, O- ~: W& Q2 @7 n .default_trigger = "default-on",: z; @0 g3 J& ?7 _
}," f/ ?& [# k% y6 h) t# c3 o% Y7 p0 I
{4 r; V; u% q( c
.active_low = 0,
# {* j% r9 v9 |( y( C; m .gpio = DA850_USER_LED2,
+ f9 y- B1 J* g" u. ?+ E .name = "user_led2",! a0 w! l' y5 I
.default_trigger = "default-on",
" O; P! y. G5 q" U5 g- p },
& F* r* e' n& S0 C {
# E- W+ ^; r: I8 g6 }' ]' T .active_low = 0,
( z- h4 H- h, v% c9 _; I .gpio = DA850_USER_LED3,
7 T! l" c$ g5 c4 { .name = "user_led3",% b* y( j+ p& _' p$ D+ o
.default_trigger = "default-on",
/ d2 Q4 T3 t( R- T4 R },
0 M0 I9 L, A% `9 v& L6 L6 O; d};0 N+ S3 v) b6 z
& @ b. e0 N& B9 A2 o U; m
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
+ X8 _( e1 C! [1 Z2 V' x' Y .leds = da850_evm_tl_leds,
7 |7 @5 Y. L9 r7 B& B, L .num_leds = ARRAY_SIZE(da850_evm_tl_leds),
% p S, l! U6 U! r8 g- ]};
& g4 F0 R) U0 |: M% v" Z, t" K' f( M( q1 _$ a& u9 L: m
static void led_dev_release(struct device *dev)
2 O, u8 `- V! z5 R2 C{8 I3 Q. g2 Q* _3 L" f
};
1 O) I# i. h: A+ ]8 Q7 X; m0 f5 D' o5 n% \# b5 U
static struct platform_device da850_evm_tl_leds_device = {
; t2 b+ t: g. Z .name = "leds-gpio",
7 i6 c/ o" k7 i" I3 y7 w8 Y .id = 1,
( K7 E: b. x! Z' b .dev = {9 r+ l9 ]+ N7 W, e5 D/ {
.platform_data = &da850_evm_tl_leds_pdata," P# X8 h) c, z- I
.release = led_dev_release,
: v0 k; E$ z% n" p }; O6 h8 w4 J e7 y2 T, A
}; Y. M. b( M7 s& X
4 k* J# i% ~' F7 @- ?7 _, f
static int __init led_platform_init(void)
3 l, x% }$ W7 M$ l9 D% U{8 P( Y/ a% b1 N& l t0 |( {8 x; m
int ret;9 m3 H8 Q8 S: ^2 f" W1 y3 G
#if 0! y4 f: c8 L! k4 H
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);! r! r. [9 C. \& [
if (ret)
2 O2 ]( l( K( w' t$ W8 H. V pr_warning("da850_evm_tl_leds_init : User LED mux failed :"+ u% }! ]( B# P6 X/ f c
"%d\n", ret);4 ^4 X% t* X d# z( d
#endif2 i: H. @/ x2 i& o* P
ret = platform_device_register(&da850_evm_tl_leds_device);
$ u' k7 p4 M1 q9 h if (ret)/ }" U+ _) g8 |& O$ T
pr_warning("Could not register som GPIO expander LEDS");
1 g0 d: ~3 [0 B( e @ else- }& S( i7 X$ I K( r/ G8 y- U
printk(KERN_INFO "LED register sucessful!\n");2 s% n7 x- [7 M' g& s3 P$ N
2 I! t, D4 ?; [) ~" }
return ret;* Y! U b' m( {8 _8 \' p' K# a3 V2 A
}
) A+ ]* c$ q) r1 f9 c- L
5 q& d( G" R. K" p! Pstatic void __exit led_platform_exit(void), i& V+ E: f, |2 Z6 ^6 P9 b
{0 [1 ?$ N. e6 u1 }2 A3 ~
platform_device_unregister(&da850_evm_tl_leds_device);
: u) F. i; l" g: {$ H8 q0 j4 T( n1 N8 ~; ^
printk(KERN_INFO "LED unregister!\n");
" \; O1 O7 V+ ^. Q" ?: E9 L}* i. N' q5 z9 r. H3 l; X5 w4 z& F( R
3 t W, u. B! n
module_init(led_platform_init);& s7 J1 q' x s( d; h" g5 |8 R+ V* w
module_exit(led_platform_exit);
# z5 y7 ~8 c# d, f! g5 Y. w# a: _" g# u" I; }2 E& J- q$ t& I4 Y
MODULE_DESCRIPTION("Led platform driver");7 K& \& [. c: d
MODULE_AUTHOR("Tronlong");8 p( ~. c8 l+ N2 ~3 @+ A& _
MODULE_LICENSE("GPL");
# F% I( {3 I8 ~3 e5 V
4 z: w9 J+ r0 W3 u/ n) m0 D( E |
|