|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
" [' A& O' _$ Y#include <linux/init.h>. D8 S% G; E; z, b$ R; Z
#include <linux/module.h>
_" V* ]5 Z% s: g! Z( H#include <linux/kernel.h>4 O* T9 v4 [% B1 Q, j5 O* z* Q
#include <linux/types.h>1 J5 X, E( ~- f9 |0 C1 K5 i
#include <linux/gpio.h>
9 i% o- y' R: E#include <linux/leds.h>) X& X+ t9 O5 U1 |, [4 @" f" Y
#include <linux/platform_device.h>
& Y( W! v2 E* }6 z) y
9 x3 `( b. |% E5 h! k#include <asm/mach-types.h># J/ D4 J# S ]/ _- k
#include <asm/mach/arch.h>
: g) r* W; d6 g0 V- h" X5 ?#include <mach/da8xx.h>: Q4 o6 U4 K9 I* Y
#include <mach/mux.h>+ q& m9 Z: [" ?( H. c( w- y
8 c9 Z* R) L0 w
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
) I1 K* g6 w `+ N+ W3 S#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
6 z, k9 @4 @+ D: X: s) \3 i#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)' e$ R5 s- v K9 z! x$ J! u
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2); M* V0 p0 [: ^7 C. Y; g6 m4 e* N
W& S% |3 ^2 U' I
/* assign the tl som board LED-GPIOs*/
' i- C$ t" V$ n3 K- X. t) Y, C- Qstatic const short da850_evm_tl_user_led_pins[] = {6 z: \$ R- q! ~4 }
/* These pins are definition at <mach/mux.h> file */
) d: {$ \6 A5 k/ [ DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,# I% I; F- n2 n v( @
-19 D2 t. s- g; S v/ _
};
7 U2 s- O1 U- D2 M9 d5 {( W* g4 |
static struct gpio_led da850_evm_tl_leds[] = {4 }; h: `& [( g/ c
{* g7 V1 i4 x% U1 n7 R F/ W2 N0 i. t
.active_low = 0,2 A4 G$ q3 A1 M& _5 _2 E
.gpio = DA850_USER_LED0,
: i& Q2 f) K+ {* j. M! T0 C .name = "user_led0",: T" \8 q! e- r) L
.default_trigger = "default-on",) n. y4 X3 ~( _) o
},
" G; n9 v% i5 r. I1 L {9 E5 j% q% h o
.active_low = 0,
# W- Q( G+ W$ h# J .gpio = DA850_USER_LED1,
; t, c6 v7 C) v2 |2 T- b0 p .name = "user_led1",, \, \1 ?+ G* `, {5 p- m- g& q8 j( C6 U& Q3 p
.default_trigger = "default-on",
" p% w4 S6 w( v2 T8 x },
0 V" W5 v: F c) M2 o0 R$ U5 f) r {
, M# c8 y9 H/ f$ U# H0 Q2 D .active_low = 0,
. n; G6 {7 I8 Z; [% w, [ .gpio = DA850_USER_LED2,
( Z i7 W/ m* Q7 q' ?4 i .name = "user_led2",' ^: h# M/ G- t! G$ H6 l3 g& }2 C- Y
.default_trigger = "default-on",
0 y( Z7 o$ b& ] h, F },( v4 ~# y: `4 K7 ?$ W3 j7 A
{
U* Z9 k0 X% c .active_low = 0,5 D* Z5 h& G) K: l' \) M2 v+ _" |
.gpio = DA850_USER_LED3,5 q# \& D8 H3 S
.name = "user_led3",
+ y8 i+ v- ~: E: \- p .default_trigger = "default-on",
3 a- |* h2 Q9 v* p },
* l7 @, D$ l9 y' z/ |. Y+ t};
' n* L! t3 w( p) p5 _/ @+ X/ X
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
8 _* ]% w: l) u0 b# G! F! M; ?/ b .leds = da850_evm_tl_leds,
7 W+ L, T) a- C% g+ H9 @ .num_leds = ARRAY_SIZE(da850_evm_tl_leds),5 \0 g6 W, f1 w0 G9 m
};. Z# P4 Z4 T; A0 c
4 C" f$ @' s2 h- W& M5 C9 Ystatic void led_dev_release(struct device *dev)
! Z8 c+ S6 s# G{0 t6 R- l7 N8 H( r C
};# a+ b( ]- }8 b& t
$ n& X1 i# t7 F: G/ Vstatic struct platform_device da850_evm_tl_leds_device = {
8 e& b! ` Q/ p( Z; }' h8 m .name = "leds-gpio", I5 p* P$ s2 W
.id = 1,
8 x* X+ x* C/ g .dev = {$ k) [% g% w# I7 ~
.platform_data = &da850_evm_tl_leds_pdata,$ Y1 L% a# l, n% Q9 Y# d% \9 B
.release = led_dev_release,
4 u" n$ v( e( r }% _# X" h+ ]8 r& ?
};
7 `. a0 F1 `. r* s) J; b/ F8 N
! ~$ ]" @! o1 X, ~4 D! {static int __init led_platform_init(void)
4 u7 h3 G, {: j9 F* q% l{& H* @& F3 A! q" V8 Y# H
int ret;) t$ f* D8 u* {* [# v- q/ m
#if 03 I4 T, ^. E _, C# @$ L8 P
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
, d2 o2 |0 t5 U if (ret)
, o4 H( c g* e- J/ M3 g pr_warning("da850_evm_tl_leds_init : User LED mux failed :"' ?) n( @/ |; X& i, C7 H
"%d\n", ret);
5 L$ A" r+ e8 c2 T V; D0 ?1 ]7 Y#endif
- k, V+ p2 ^7 I2 G! ^) m! } v ret = platform_device_register(&da850_evm_tl_leds_device);: M0 J6 X# [ v% b
if (ret)' @' ~2 H5 h0 b
pr_warning("Could not register som GPIO expander LEDS");
& R% n/ X5 B+ r/ i6 R else# v7 |: O, L1 Q3 r; [% Q* b
printk(KERN_INFO "LED register sucessful!\n");" _4 s" @- z* v1 L
; c. h( U6 H- Y* C6 P# l& m+ p return ret;# g# ]$ J2 z5 t% d
}
) `0 W6 A I$ `3 g1 k( m& ?" }+ ^' ~3 ^+ K5 v$ I
static void __exit led_platform_exit(void), d& d4 B3 a: H
{
- N# [$ N4 Z" Q6 G platform_device_unregister(&da850_evm_tl_leds_device);/ [# T; I3 L" R5 a5 ?" ^2 \1 }; [; U
& @% v0 _3 n) x6 | printk(KERN_INFO "LED unregister!\n");
: T3 S4 }( y1 @) e7 B3 B. @* p}: H& }. D7 E# m% @. U/ ]3 y8 H
* }# R! m* k( {module_init(led_platform_init);
7 Y2 n A. A/ G. o$ C4 {5 i: smodule_exit(led_platform_exit);& C9 \7 y2 j2 |6 h0 h7 M% z
6 [: k; R! o: J' jMODULE_DESCRIPTION("Led platform driver");
U" C2 ?2 Q( ?7 k& j: _# s/ N" AMODULE_AUTHOR("Tronlong");% F) H' Z6 b# q& Z/ v# v
MODULE_LICENSE("GPL");: ~! e+ {: j2 Q& D1 s/ {* P% |
/ e) k& {% g2 I+ f
|
|