|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
1 l# g) S6 o& o% v; q- E& e#include <linux/init.h>
! z$ j6 d: Q& P- d' u+ c#include <linux/module.h>( k6 N3 {$ f/ @, i, i
#include <linux/kernel.h>4 O. @3 ?2 D8 Z- W5 U1 q' V
#include <linux/types.h>: O4 ~+ D, c) y* Z
#include <linux/gpio.h>3 n" q6 h2 W+ p* z
#include <linux/leds.h>, L4 n4 C- l/ H% Q
#include <linux/platform_device.h>
! n0 W+ g! L8 f- k5 Q2 l
1 Y0 y! Q+ R( q$ G( S+ J#include <asm/mach-types.h>. J; u2 \+ Z9 z2 x9 K
#include <asm/mach/arch.h>
: t- I* \2 T3 `( V9 l#include <mach/da8xx.h>; u' E: k' }8 ]! j( c4 g
#include <mach/mux.h>
. ]6 v# T/ H+ J0 Q, g/ D6 F
: V4 u& M9 [: j( Q#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)7 `4 z" C* ~% ~* c7 D
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)8 a/ G6 D) {: K. ?1 ~. b: }
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
5 b& ]3 T8 C" _- q2 ?#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)+ q# k" R( }) v9 }; U0 I" g# Y
0 s& W- z/ _' y; T, t& |- g8 G
/* assign the tl som board LED-GPIOs*/
6 C. B+ V. k( ?) v8 n" D$ gstatic const short da850_evm_tl_user_led_pins[] = {9 g2 x- W8 `* r7 E
/* These pins are definition at <mach/mux.h> file */8 R6 ]9 J: ~/ x4 d" {
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
: K* Z" @/ N+ ~# A3 j -1
( ~& u" `3 B9 @8 s' Y) [9 n4 [};
. B& ` W' W4 C# M9 N, i+ b% v6 R% p; E+ C. g
static struct gpio_led da850_evm_tl_leds[] = {( [' W' ^' \8 A& R
{9 _- k5 `9 g* b" @9 e( P+ m
.active_low = 0,
4 g& {2 H J- B5 ]' W3 S; M .gpio = DA850_USER_LED0,
# c" }: K/ {' v .name = "user_led0",
' i2 E* W7 M: S) v. S c) Y .default_trigger = "default-on",7 T1 z6 ]& {' h" n& `- v' o( Z
},
& h# g5 Z, u+ z9 D {+ B7 }* |+ ^0 U, Q
.active_low = 0,8 ` h( w( ^- n
.gpio = DA850_USER_LED1,0 n4 T: q! ^7 i' Z: z/ x( f5 p$ o
.name = "user_led1",# P$ h$ h* i1 q' ?
.default_trigger = "default-on",: f9 ~1 Q2 r6 W N% l
},! {/ r5 a1 F3 o. y1 n
{9 C; W) j8 }) P4 R: F
.active_low = 0,
9 C# t6 K, P1 E8 e$ x0 t .gpio = DA850_USER_LED2,( E# F$ U& d: I9 n" \: z
.name = "user_led2",+ X* H8 b- V8 d' J+ r0 C
.default_trigger = "default-on",
' G6 Z4 M: Q( G" c7 l h },' y6 y/ k) {# ]4 y6 b
{0 v+ d) L8 z5 ] M4 j
.active_low = 0,4 Y! V4 ~& j! `8 {4 ]. t
.gpio = DA850_USER_LED3,: K+ h5 M, k/ U, N! y b
.name = "user_led3",' E3 o3 {* I4 u# k4 ?( \7 d2 L; I
.default_trigger = "default-on",' H- W2 J4 A! r& f3 [3 O2 @" O
},
6 W- d+ y+ @/ j1 V) Q};/ E& B: [5 Z1 l' E
0 {9 z& [: I r4 _
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
. F, O2 l" q& S v: ]! ^! V( s8 a# b .leds = da850_evm_tl_leds,9 l( @% K9 |1 A r% t* \; M
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),; H3 }' X) G1 ?4 x' f+ L+ t
};! t9 G/ `1 F8 a7 R7 r
2 ]+ I8 _/ @' t$ U# F u% a/ Mstatic void led_dev_release(struct device *dev)
% P1 ^5 O" \* T{
0 D1 k7 Z( h1 ?) G: G$ H}; M+ D0 h9 ?; e# {" m" {4 j1 J
+ _- T; b$ U8 N! f$ Q9 h: estatic struct platform_device da850_evm_tl_leds_device = {
^% F4 N6 h4 }2 C; \ .name = "leds-gpio",8 | e1 t, x* `
.id = 1," Q) j1 n- l: O5 O$ {" f( F
.dev = {$ }* I+ x+ a8 p1 w, d
.platform_data = &da850_evm_tl_leds_pdata,4 T: f) o( G( \! ^0 m$ g
.release = led_dev_release,
h4 @# ^3 p) x$ I6 n& e% O: k+ X }
! `: W6 r, V8 l' ~5 G& p `};+ I A* h/ F* d5 `; H
1 u4 O1 c k' S; }% `: Q9 X
static int __init led_platform_init(void)
% C% S+ k/ x0 i i7 M5 Y{
) Y& J3 L: I7 [- A2 u# U4 q* X0 m: ^ int ret;
* j; Z Q4 p7 B/ z* S P#if 0' N: _# J! q9 [ E% }' a
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
% e& E: n+ }4 w B. q if (ret)3 }- @: c* p" z- g( q
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
. |, m; D+ u1 O/ P* @* M4 [7 y4 O "%d\n", ret);
# S w3 O: L/ l9 \) b#endif6 }7 N8 @/ }% [6 @1 U1 c
ret = platform_device_register(&da850_evm_tl_leds_device);4 }+ E: B5 Z( Z8 f- a
if (ret)
6 t! z2 @$ e- O+ E, E# n. K pr_warning("Could not register som GPIO expander LEDS");+ Q! ?+ M8 `7 E% E: u6 Z6 N+ d
else( K% }$ n, [0 R
printk(KERN_INFO "LED register sucessful!\n");
. V; H$ C$ N/ E/ Q& G; D3 s+ Q. o+ l% `& w1 G/ {; Y
return ret;9 N* A. ^; M9 c! a. g3 U0 E/ q
}# X1 Z: b* c8 P$ D, u3 v
$ W/ z5 [' R4 zstatic void __exit led_platform_exit(void)
* c1 \1 G3 M: Q { Z$ {2 ?' q( m{
- b: L) _' n, {! p platform_device_unregister(&da850_evm_tl_leds_device);' W4 N1 _6 q, {% [3 j: u
6 V5 _" W- R* G9 ]8 c- d6 _% N2 I9 M9 X
printk(KERN_INFO "LED unregister!\n");/ a) T: ]# O* U) m c- U4 z- p" n
}( K0 E" `# e! w8 |* b
3 e9 n+ B& Q/ V' P' V: Z9 Q
module_init(led_platform_init);9 m$ }4 {! f5 g* F, p. I
module_exit(led_platform_exit);" E: m4 Z0 H3 D0 j1 W" ~7 k& b
. d% C8 i, g6 J# r5 qMODULE_DESCRIPTION("Led platform driver");
: W! l6 w* ?/ N& v% B2 xMODULE_AUTHOR("Tronlong");1 o! d- w/ A, W; Q( K$ ^
MODULE_LICENSE("GPL");8 c/ _+ G' C3 u2 j2 Z# @
0 ^1 r3 f# t- R7 G# ?& F* j+ M" I
|
|