|
|
求大神给下面的程序做注解,请稍详细些,谢谢。- B d; F& @* h6 W' s- M5 g
#include <linux/init.h>6 _/ `0 b l4 j0 A/ g1 b
#include <linux/module.h>
* q( _1 {9 m! {4 [( U3 x6 ?7 @#include <linux/kernel.h>* Q2 I. B2 W1 N- g) T: o
#include <linux/types.h>
0 x* F" Q9 @* ]; m/ I; z#include <linux/gpio.h>
0 k% F# K, I9 X( L- x#include <linux/leds.h>
2 A( O% d2 l; G8 {! p#include <linux/platform_device.h>; M- C% b4 l; }
4 Q' N' b3 A- m7 i) ?) h
#include <asm/mach-types.h>
0 v" n* k" t, Z% E; i; O#include <asm/mach/arch.h>$ x" w2 [! v& O& k+ j
#include <mach/da8xx.h>) A1 O! Z. Q/ C: h# l
#include <mach/mux.h>; S, }1 S S E- r# x9 Y& l
3 } A! G" J& [5 ?( |#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)/ ~. l1 _; D1 V
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
( q+ z. I1 ^4 y+ c/ L#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
+ U5 }2 O, T4 x. z" M. g#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
/ s8 ]: N. r2 u" i2 f ~
# x* m8 K( j& L/* assign the tl som board LED-GPIOs*/2 G' Y9 b$ n7 |% i( D: y1 `! F
static const short da850_evm_tl_user_led_pins[] = {- n. c5 @) S* e
/* These pins are definition at <mach/mux.h> file */: v5 j9 |. r. M) T/ G
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
0 |0 J% Q6 I5 b$ [7 P, H -1
+ e# j6 Z' J* y: H' p1 }};
' z% K$ d/ {6 [7 @1 M0 c& @ C+ J8 G, d
static struct gpio_led da850_evm_tl_leds[] = {
; I5 Q6 a& t s$ X8 [/ f6 k {
7 _- v& C/ N: e3 ?8 { .active_low = 0,2 p% U5 O6 S! o. i8 E. _
.gpio = DA850_USER_LED0,
; [' B4 n; v( e/ U- U .name = "user_led0",- C$ x+ W( l1 T/ l3 W
.default_trigger = "default-on",
# w- l. X/ P8 p8 E) o" I },
2 D' j t/ Y' Q$ |+ Q9 f- l, [- X X {
3 s/ L0 Y4 t0 H) n% v .active_low = 0,; z& ?& \; z5 e# n- \
.gpio = DA850_USER_LED1,
# D" L u6 N4 R! @2 o; v .name = "user_led1",: S$ h& _( I9 {% U4 @* |% R
.default_trigger = "default-on",
9 l" P. B: M6 d' x+ ] },6 \: P! b& u' N4 P5 c4 S' M2 K
{2 b l- p# G2 D% R7 h6 S; ?1 M* N
.active_low = 0,) c5 [$ E, ?5 ^5 S1 ^
.gpio = DA850_USER_LED2,8 `5 ]3 J- q" k7 \, W: `" r- {( o
.name = "user_led2"," }( j% J9 b1 R, u: \6 o
.default_trigger = "default-on",) c. \3 T% s5 O6 u6 G9 M
},
5 [% Q% `+ g: w: c {' i: k# d+ s5 B w5 k1 d! X
.active_low = 0,( ^2 N c9 j2 P, X3 O
.gpio = DA850_USER_LED3,
2 n! i0 \; t. N* @$ v$ C .name = "user_led3",
1 w Q: s4 f2 _ .default_trigger = "default-on",
. ^$ G! p( Q7 K },
; J& ?; T9 p- d- ~( \" r% u};
8 q* h6 k- w8 O. R! l, u( B2 j" E* j8 T
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
; K7 a- r! ~% `# `. M! z .leds = da850_evm_tl_leds,% G/ s+ c; _/ D* l# H
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),0 w; W# r2 c4 R
};
% s: ]+ Z; j0 z6 J2 t
1 O6 j' i, K, Y2 \2 L0 V$ b) fstatic void led_dev_release(struct device *dev)$ R) \0 c- [/ T: S; q9 E& ]2 J
{
6 L+ o# Q+ Z) u* Y; ~7 l! j6 t% Q};
* G4 F6 h" [% L0 k. V! W
7 b6 ]) P1 a; F# F3 r6 astatic struct platform_device da850_evm_tl_leds_device = {% W7 h+ I" Q& T+ R. t
.name = "leds-gpio",: b) m4 D" u! u% [" a9 f% v: c( N
.id = 1,
! h7 Z& _/ E) o1 _ r& ? .dev = {' \( c% Y; u8 K5 D7 l& L6 X) I
.platform_data = &da850_evm_tl_leds_pdata,
& {1 H/ r5 u- }" W7 n& F+ ~: U .release = led_dev_release,
4 _. i$ {: {$ U3 }, c; L" l0 t }
. t; _7 P: y! s' s2 j" r% d; k};
3 i6 o7 E# B, C- q- T$ |* @& i5 t
5 j. w0 n: x A( Kstatic int __init led_platform_init(void)( v7 m& g6 c/ ?) ?
{
8 Q( p+ S. ^* p# j( I int ret;
2 N; ?& W; G8 [#if 0$ `0 f! y. i1 Y- O) m+ a
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);+ I- J8 `# R+ ^! `8 X" ~
if (ret)! ~9 y# G& k+ u, E- n+ k* z
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"$ a7 U8 |: v6 c
"%d\n", ret);2 N5 \& S8 j6 _5 b. W+ Z
#endif* K1 T" A2 \* v6 y5 C
ret = platform_device_register(&da850_evm_tl_leds_device);
* _; H3 W" a/ D, B' ?$ q% I. G if (ret)
$ e) v* A; {" M$ E) U P; p" v pr_warning("Could not register som GPIO expander LEDS");/ a: `- Q+ r: r9 j- x& j
else
4 y% g7 I+ E4 ^2 V6 a printk(KERN_INFO "LED register sucessful!\n");6 d, ?+ o2 Q3 E3 u
, q( Z- q' |$ J+ n5 _! j/ z
return ret;
4 W$ R* w. S U7 x# q}4 A; a7 }- `0 L+ X( O
, ] h3 U9 Y* e' s
static void __exit led_platform_exit(void)
* G1 C7 {/ Y/ v% C; \* F" Y" u: z{8 E4 v$ [$ W/ n* X4 b% D7 l6 c, D! f& a
platform_device_unregister(&da850_evm_tl_leds_device);
- i, t" {9 z) D" ^" P: H; I ~# d9 @: F# x. y( c+ e
printk(KERN_INFO "LED unregister!\n");3 P r V* z9 l, u& L3 k# P
}
; W' M- F( K" l' |0 b: g( s' O1 N% @( n$ ?/ j ~/ m3 f9 U! q! `
module_init(led_platform_init);
) w) n, ]4 O2 o; ~! i( mmodule_exit(led_platform_exit);
" Q C* \/ r2 q. N% s& ^/ h
3 q; b* G5 V8 l5 s1 x: o$ M& PMODULE_DESCRIPTION("Led platform driver");
8 m0 v" ]9 l% a6 r" C! WMODULE_AUTHOR("Tronlong");. ]. z# B: X8 P1 ?' m
MODULE_LICENSE("GPL");
" `1 }$ R# O3 j3 b+ d/ v* R8 u; `% [! [6 u
|
|