|
|
求大神给下面的程序做注解,请稍详细些,谢谢。6 {5 w% j" f# z
#include <linux/init.h>
7 G& E# X( N. Q6 [7 t! `+ R) t#include <linux/module.h>
! v: j3 L3 L8 G7 B6 P#include <linux/kernel.h>' ~! j! U/ I8 b- J5 k
#include <linux/types.h>4 H7 j( j" x* p7 o" J K5 |
#include <linux/gpio.h>
$ i4 B1 Z5 @8 i3 c9 }+ a( U#include <linux/leds.h># J# v2 z- E. h+ u
#include <linux/platform_device.h>7 o7 Q* W/ H" ?" m4 V
8 i1 h2 A2 a2 d/ m#include <asm/mach-types.h>9 [3 t+ Z' i O2 f! S3 ?
#include <asm/mach/arch.h>
1 c9 m2 |/ s. p( P9 N, D#include <mach/da8xx.h>* ?' ^$ @7 r6 M1 p- S7 e
#include <mach/mux.h> v, X4 x0 Z4 y1 |) T
/ [6 S( i# l3 W# f ^% p#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)' D. _8 }" Q2 M& ^9 L: F
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
b' [" n( Q) w6 i% `#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)4 `3 Y: I! z* W: K- p; a% e( d
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)6 ]. v h X; q$ I
% D, J: r( ]5 i n. m+ g/* assign the tl som board LED-GPIOs*/9 y: D! G) j7 d/ O+ C
static const short da850_evm_tl_user_led_pins[] = {
7 Y2 G( l+ G8 e /* These pins are definition at <mach/mux.h> file */
% k- n2 M) f3 d8 a DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,- I3 ]; c8 r5 F3 r. Y8 G
-1
" _; ~9 ]2 m2 V) ?2 I8 \# o};5 q! M- D+ E9 T% e7 ]) j& i
9 S( t# |6 ?# f, S' a2 S7 C: fstatic struct gpio_led da850_evm_tl_leds[] = {
* i0 k a0 D, o, N {8 L. |& v, W( Z+ J: m
.active_low = 0,
! G4 l% T" M# C4 Q .gpio = DA850_USER_LED0,
5 R' q% l5 f2 f( ] .name = "user_led0",- m/ r: S3 L- Z; @& @, u- p
.default_trigger = "default-on",
4 a& Z4 f: q: R' N) I" O },
1 c) D! `8 }) x) i* i0 x: P {, a1 I1 o/ [1 f
.active_low = 0,
; j6 Y2 m& @: Z. H .gpio = DA850_USER_LED1, I1 `' c) a. e5 i$ u$ B
.name = "user_led1",' ]+ Z5 y* Z5 r! L
.default_trigger = "default-on",
2 E- d3 [5 R S6 X& E; I },/ c% M5 w9 L8 `
{
# D- c% X9 E3 O8 M4 T$ M2 M .active_low = 0," |+ V4 U. u4 t. t8 h: x' s. L, g4 M
.gpio = DA850_USER_LED2,8 m* y" k( S6 L" N6 r6 V1 X
.name = "user_led2",) l: E+ B7 p: d; u
.default_trigger = "default-on",. X6 ?' S: f" ~- F5 r
},
# B$ j) i" D6 Z* u% T/ R, l {% z( j) f! Z3 K% h) O6 _- E
.active_low = 0,
6 m: w) _% |& P$ o+ S9 Y5 m .gpio = DA850_USER_LED3,
6 [6 g) j( R& {3 @+ h, m5 p .name = "user_led3",
9 a( X- G: k' h% f .default_trigger = "default-on",/ E k; `$ A4 K: J l* |) \+ l
},' B0 @. k9 P; B* q ?# l
};* s0 q8 A$ r" }, {' e9 D0 P- d
8 j$ b: ~7 f. K
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {6 @. b9 ~% z2 ]/ j. X& p! y
.leds = da850_evm_tl_leds,& _3 \9 W5 C0 N/ Q* M' ~9 t
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),
0 |) i+ m$ v/ o}; v8 O$ S( d {$ l' _: B
! |# O5 t0 b, H
static void led_dev_release(struct device *dev): E0 a* b. ?4 z$ P
{
9 r) X) j2 r" M% R# {* b};
; ^% U7 Q. C* p5 m9 i& K4 I* y9 c; [$ K3 p: G0 M# C1 q0 Y
static struct platform_device da850_evm_tl_leds_device = {1 B$ V; ]5 \" W7 F
.name = "leds-gpio",
6 Y/ q6 \: J% j- ] T .id = 1,3 ^2 |7 _' C" F
.dev = {
' z9 x' e W4 j* W9 P! a* l .platform_data = &da850_evm_tl_leds_pdata,, k E' o, Q& I! J0 f
.release = led_dev_release,
: `% |- `" e" i7 \% Y+ ^ }; B) P1 g2 f5 B. O
};
6 h$ v, |! a& }+ n1 }. b0 \, @2 b. D* {# _/ o7 H
static int __init led_platform_init(void)1 s% [6 I' ]) z3 d W! R- P- ? k
{: L9 Q8 v' H/ d/ ]
int ret;3 d: V+ |2 \# U; P. r; N
#if 0
( E5 v& ?, `2 L1 z, d ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);" ~7 u0 O% p2 @
if (ret)) M" v8 M/ j2 H/ j5 [" Q
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
, v0 m! S6 Z, u d "%d\n", ret);
; b: P1 b6 z. q( p#endif
* O6 ~0 P- V2 z0 L0 S ret = platform_device_register(&da850_evm_tl_leds_device);1 a V+ H! ^0 ?% S5 R
if (ret)
?2 b6 U" E6 r- U/ u7 J pr_warning("Could not register som GPIO expander LEDS");
+ A& J9 Q, _- _( j; i* m else0 O/ ^# Y& W' b
printk(KERN_INFO "LED register sucessful!\n");2 k2 v. p6 c% C
* \" R. ~- z& X: ?7 V. A; S return ret;
$ X$ N6 [' B; B1 \}
/ J' ]) V0 {: K8 ~& `
$ x* ]( v! p: b. @' x Ystatic void __exit led_platform_exit(void)
/ v& j2 S" q7 G* U4 B{
7 q- r# B9 G! y$ M$ h platform_device_unregister(&da850_evm_tl_leds_device);
! m- Y7 `% v [" y' U
3 u2 n4 }3 A1 V& L1 X6 N printk(KERN_INFO "LED unregister!\n");
) V# l1 F5 Z. |" d" C( t; V; y}
/ h$ L, L, B* h6 r2 h. O1 r
, |: a! [% f- G" Q8 Y/ jmodule_init(led_platform_init);
8 c7 i1 \5 _, ^+ x/ z# R/ Bmodule_exit(led_platform_exit);- D: [4 a9 n* g1 q7 f3 K6 h
) b7 F4 M/ M" h7 a. K/ a3 jMODULE_DESCRIPTION("Led platform driver");
; ? j& b: n5 \/ M; TMODULE_AUTHOR("Tronlong");
4 i5 Q/ U# F( ?; Z5 i1 ?MODULE_LICENSE("GPL");
' k' r/ {- Y9 b
+ _- \- N$ a8 q! Y, [( M8 y |
|