|
|
求大神给下面的程序做注解,请稍详细些,谢谢。+ p q R; |: |4 v: y
#include <linux/init.h>
, L/ B) X1 {& l0 Y5 t2 s#include <linux/module.h>
5 J6 }# P3 E& n#include <linux/kernel.h>
" @6 x# x$ k3 |# c' B$ e# h a1 Z#include <linux/types.h>
3 W" U0 I. C5 p; W5 \) k/ c#include <linux/gpio.h>* A6 B6 I" r. f' s4 U) ~9 L
#include <linux/leds.h>
$ k9 ~1 h! Y. u4 N: N* P5 u9 z- L#include <linux/platform_device.h>' T$ x! _3 |& m- q4 v+ @7 b
, h% V3 J X, |
#include <asm/mach-types.h>
' I/ p2 c$ S+ j9 G#include <asm/mach/arch.h>* w7 u8 u6 e2 r0 H; P5 v6 C3 G
#include <mach/da8xx.h>) P$ {+ S4 n4 ~6 S" I/ ^
#include <mach/mux.h>
. t# b5 E% j+ M1 v
$ |! D M% [8 I8 e& X#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
7 t/ _) }) r# v- ]7 a#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
9 t& C6 ?( `& R7 Q Z, _* V#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
9 l4 w) d# U: y6 E% W/ q7 I% B#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)( y7 ^8 S# C9 a4 g& W5 g
3 r0 h, G F, z9 C) H
/* assign the tl som board LED-GPIOs*/* ]. z+ p; ?5 |: B% d+ j, q
static const short da850_evm_tl_user_led_pins[] = {
! i" r5 y* f `3 C- g7 S /* These pins are definition at <mach/mux.h> file */# g& N. S2 a- e! u" U
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
3 g" e2 t9 [6 [! A n* g -1
, T& W" w, a' I5 I9 X};
1 r2 V: m0 i T* `! z, [% o6 `$ ~* Y+ l& r! o0 \! f
static struct gpio_led da850_evm_tl_leds[] = {- T1 N" ?% p$ b6 ]: N+ d9 n
{9 V/ V# C& e* _( H) T
.active_low = 0,( a/ D% G4 y; D8 n. S
.gpio = DA850_USER_LED0,; F- p' X; L7 R J( x. x
.name = "user_led0",
k( m' t ?" q$ ^: q .default_trigger = "default-on",
" x$ I' o8 g! ?+ w9 ^) W },
% S- F6 a) p) N, G' z* Q8 t {: ]) R) H6 W. v/ B3 t% Y8 l% N
.active_low = 0,
! ?% {/ }( a' L .gpio = DA850_USER_LED1,; N; C& `$ j$ w6 @' a
.name = "user_led1",
, x% C" U( B @: Z" H& M6 k .default_trigger = "default-on",
( g: D" ?* N9 E0 l& \+ g },
: m$ m# d& m0 a7 p {
, o8 p2 E, v% C, W .active_low = 0,' x! g2 N' D! `" E/ t4 L# T
.gpio = DA850_USER_LED2,8 u) a9 v& t7 X/ k3 B' X$ U, M
.name = "user_led2",
) M+ Y3 c" w* h: Y, b4 Z' S .default_trigger = "default-on",( j3 E1 X2 g* G. {# b# A3 M
},: q3 i3 p7 v* t$ ?9 h! v
{
! s: z! D# v+ l& O+ u2 n .active_low = 0,
h- p0 [. S# Y9 @% V9 V Z .gpio = DA850_USER_LED3,
# b) k# h3 v0 | .name = "user_led3",
6 N" C. a; z: |1 }$ z' n .default_trigger = "default-on",7 x$ ], r# n3 R& S) g/ n" N
},
. A& v! J' X, b/ L- n' V" b8 D2 B};
, G* x. o/ G+ W, o6 y
+ T8 Y# z# a" Y+ @/ B( Nstatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {6 o' y! }' Q! g9 J
.leds = da850_evm_tl_leds,/ b6 d3 M% r6 Q, y# [$ D: {
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),
/ ?. r$ C3 @) p};
9 {; t5 ^/ e3 {2 g
& Z% ]3 c y3 c: }8 istatic void led_dev_release(struct device *dev)" W4 p; |1 m6 {! a6 d
{: m. y _* E: _$ U
};1 m7 S: h7 x2 Q7 ]6 b5 w1 P
* h0 _+ ]) Z2 M! \6 m# K9 n i9 U$ \
static struct platform_device da850_evm_tl_leds_device = {2 h3 C7 {6 v/ R$ m( P
.name = "leds-gpio",
& J3 T3 Z B6 g. \, Y .id = 1,0 ^# P* }3 v' {3 O8 c; b
.dev = {1 ~# [7 {. U. D! a; k8 q
.platform_data = &da850_evm_tl_leds_pdata,
) e/ ]0 B3 S. a& V8 W5 j; E `- f .release = led_dev_release,% E) r- O* _! I
}5 E8 t6 y8 j& R/ g- T0 a4 E ?
};
* R2 S! M) j9 O. x
: v& B. X- v( R2 N Pstatic int __init led_platform_init(void)
, t2 _. i4 n) `- v0 J{$ Q ~+ y) @# @2 S1 o3 v
int ret;0 ~9 s+ O, a/ i2 e9 t
#if 05 \. A' r6 t- h: l* P4 B- a+ x
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);1 Y4 m+ N) d) [# O1 J+ U0 Q" Q
if (ret)9 m; I! A. k: U9 `" q
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
% f! |+ E" b8 }& H1 f) y "%d\n", ret);$ m" g6 S( f, D, R, s7 J
#endif
/ `! s U$ V- \- x- w; r H* C ret = platform_device_register(&da850_evm_tl_leds_device);
0 L( E) k C# P8 _) b+ R( ]! c' n if (ret)' z2 F$ g9 m; k# u
pr_warning("Could not register som GPIO expander LEDS");
. d1 a2 r9 n2 @' _: A3 ?5 R else
; a+ D" v- u/ Y) C0 y- C printk(KERN_INFO "LED register sucessful!\n");4 g7 ~: _( t% k4 B
m$ h \& l# M& H7 C7 b- W% J return ret;9 j. n- h, U* T
}
( e+ n; `0 v' H: w& J! `* F# m
' s( _) X( i9 q9 Bstatic void __exit led_platform_exit(void)0 n& n5 F n# i9 V/ Q
{3 }* a7 Z0 H3 M8 Y6 K2 b! H; M9 X
platform_device_unregister(&da850_evm_tl_leds_device);/ G' m2 U( _1 u- x' \ ?5 w
$ d, J0 ?- F9 z0 J) U3 c, r) e m
printk(KERN_INFO "LED unregister!\n");
7 j& u8 N- C9 J7 E+ {}+ T/ g" }; p& L) R$ l. P
% ]: D0 E- y; J8 g1 s Qmodule_init(led_platform_init);
7 i+ }; l2 g7 Y! F5 Kmodule_exit(led_platform_exit);
' ]# P! ]+ ^8 u" u6 X: ?1 k2 J! u! J A% t+ Q
MODULE_DESCRIPTION("Led platform driver");
5 G: k# D. Y/ \; IMODULE_AUTHOR("Tronlong");8 i9 E7 c" T5 U3 U
MODULE_LICENSE("GPL");! B' r* G B! e3 a+ {: @: T+ u
" P/ o. M( E* t* ^6 M" b! @ |
|