|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
( b& R- T9 y$ F, ?6 i) i B# z#include <linux/init.h>
, V1 X H# X* n& `3 r$ B#include <linux/module.h>
8 z5 V- `7 H4 ]( A#include <linux/kernel.h>
) M3 z0 h) i& [7 U5 i- x#include <linux/types.h>
: ^ \# ^% `2 L6 u) V' [3 p#include <linux/gpio.h>) k% ]$ O: p- p" i4 S& @; x- p
#include <linux/leds.h>! X! p1 d7 B' \( L. \2 h- y
#include <linux/platform_device.h>% p/ g5 O4 \7 V Q( q4 I4 ^0 T7 Y {: z
! [1 ~8 A: k- T: Q) v
#include <asm/mach-types.h>. C; E$ n7 O- u' S* a) h
#include <asm/mach/arch.h>
+ p5 z: z' r: `0 j. {3 {#include <mach/da8xx.h>
. u- v5 e0 d3 r% v9 @9 _# U" t& v#include <mach/mux.h>
4 E% {& K0 {2 R6 R% a" r0 Q \# ^& z- s9 ~% c
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)4 u- f* }: H) {. q
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)$ p1 B- \3 d. u: @& Y
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1); q6 s% B7 {6 W- e5 u1 @: Z
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)' F# z* L! y% [) o* P
* Z! E1 G& L) i! ?. k
/* assign the tl som board LED-GPIOs*/
4 ~4 S5 }! P: ^8 xstatic const short da850_evm_tl_user_led_pins[] = {
3 U8 S! R" Z8 a$ [, ^, y, k, @ /* These pins are definition at <mach/mux.h> file */& `+ V' v4 j4 z% a E( s
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,! F. g* W0 u5 y" D) b
-1
# C. H1 s) M+ C};- B3 }2 Z$ K9 o8 d1 D4 F& v
3 l: ` E# j( G$ j0 B. X
static struct gpio_led da850_evm_tl_leds[] = {
' x1 V& ~/ i6 ]" Q {
2 N% X3 s4 A8 G s" C7 \) B3 m: j .active_low = 0,3 O, X0 S: [ K: N( j
.gpio = DA850_USER_LED0,0 s2 D$ ^2 S: V F! k8 Q
.name = "user_led0",( q$ S, x& [' z, W2 b5 R- S; V
.default_trigger = "default-on",1 [. ^ H, Y1 i* v' B U
},9 A" }) J4 T2 @5 T+ L' E C6 N, W
{
6 V: s4 ` U- u .active_low = 0,% p# {+ b; a2 _: [
.gpio = DA850_USER_LED1,
- B! N0 |* u$ X) z, \4 H .name = "user_led1",
( ?% p7 ?5 l$ R# C7 H) o .default_trigger = "default-on",7 G7 U$ X0 ]0 p6 j" v6 p. Q
},
/ Y7 W, V/ X& M/ Y L {# K: Z z) U% S, D
.active_low = 0,) g6 W( c+ @' q. K1 n4 a4 K+ r
.gpio = DA850_USER_LED2,
+ H7 f8 F9 t# p$ F( e4 L .name = "user_led2",' w8 a$ P5 n* j3 }, g
.default_trigger = "default-on",
4 k5 r+ B* p% s* z },
6 C8 E, t: x1 t {
: A6 T0 k. W1 X& `% K% ] .active_low = 0,/ k7 L1 ~' u0 o8 K! V- A T
.gpio = DA850_USER_LED3,: ?8 O3 `6 s# _
.name = "user_led3",/ R; e! W) ]2 k; J( F( y
.default_trigger = "default-on",8 ~- m! h F2 V$ ~7 Y" n6 ]* d
},
" n, D- ]; R3 a. L9 J1 y$ C};
7 h G% C$ o, `
; T( P; J: F* s; e Y, F- w3 Ystatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {$ E1 w7 e! j% ]( S7 @0 g" r
.leds = da850_evm_tl_leds,* ?2 d: ~+ ^: z& H
.num_leds = ARRAY_SIZE(da850_evm_tl_leds), R b4 I) t* k/ D1 A$ N
};
8 B1 W3 @% d6 y1 Q
# v8 f# g2 c: G; o5 D) Tstatic void led_dev_release(struct device *dev)
( \( U+ V/ _' w* _: r0 c{) ^0 P o6 h7 M% g, @
};8 F# B$ C2 h8 b+ x& B! ?
" K2 L- r( F/ q2 z0 D$ l! Qstatic struct platform_device da850_evm_tl_leds_device = {
8 B+ C$ l9 p0 a$ _* f& P+ N .name = "leds-gpio",
1 x8 v4 A0 E/ t2 F7 D6 k { .id = 1,7 h& F8 m$ h* f. i5 o) v! C5 \4 a, g
.dev = {8 t% s, G5 w# A' s& b& {: j; d; @5 \
.platform_data = &da850_evm_tl_leds_pdata,* v! ~0 S- x$ P5 s- q/ V
.release = led_dev_release,: p7 ^: O# L. Q" R3 g- I' L
}
+ ~ j$ C: S- M5 f};
' L: `' I3 k4 E; F$ @
: @5 Z! i9 R) M z/ ~/ C" Pstatic int __init led_platform_init(void)
$ A! o1 \. ~; f2 v{
C) d" K" x- w. `1 b5 y; E3 m int ret;
) a0 }0 q! U9 M! a S& }#if 0
7 F- `0 W$ V! T ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);1 _( {$ c2 s% q3 F" u
if (ret)" q3 I( k. l% k
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"/ B+ e7 f5 i) p j( ~
"%d\n", ret);
7 R, Y7 N+ n2 b* x9 o#endif
- y! y* ]3 X# R! v9 i1 \ ret = platform_device_register(&da850_evm_tl_leds_device);; M7 L" V' j/ q7 I# z- W
if (ret) P, X' _' g. Y4 i# o
pr_warning("Could not register som GPIO expander LEDS");
w' ^2 G# V& ~ else7 z( r% r& u- Z% c6 \3 N, V
printk(KERN_INFO "LED register sucessful!\n");
) w( l0 j- |- v6 v3 C; i. K& L9 v- p4 i0 p& ~
return ret;
0 K8 h; `6 i& [/ i1 W}
6 Z& ^, Q/ p0 U* r0 R# a* g- E, U4 w. ]% u. e/ v
static void __exit led_platform_exit(void)
8 X- J8 C( }( F0 E) D5 Z$ y7 X( D{
i$ u2 t4 M0 T+ P8 p# y1 H1 l platform_device_unregister(&da850_evm_tl_leds_device);
' c+ Y7 w N/ t$ y8 ]* p1 c4 A. N3 p
printk(KERN_INFO "LED unregister!\n");
- S( T) \8 _" Q' Z# r* k. H}
) k" @, K) d! m0 o4 l6 e
9 `' d4 P9 C! k% h9 S5 @module_init(led_platform_init);$ h) e5 Y: p; ~( e& y4 M+ F
module_exit(led_platform_exit);& n( u* n3 u2 I( R( d6 M* E
6 f" ~, Z& u" v
MODULE_DESCRIPTION("Led platform driver");# _2 @$ o- D8 K' `( c# F
MODULE_AUTHOR("Tronlong");) |$ U# m, E8 k
MODULE_LICENSE("GPL");
+ A& k8 ?; y1 K0 K
" s1 E6 J4 \; _: W: P5 ^ |
|