|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
' s. }, V1 W2 ~8 K+ s# l; e#include <linux/init.h>2 Q5 K, I1 `! [+ ?) b
#include <linux/module.h>" K; b1 A0 d) q7 F+ z5 d5 i
#include <linux/kernel.h>2 E- d- N$ _7 r+ r) \) \) n( l) C
#include <linux/types.h>% I9 }5 a0 [7 P: R% s
#include <linux/gpio.h>
' N7 x5 C. l( c- e' A#include <linux/leds.h>
u/ I. i, Q d#include <linux/platform_device.h>% Z. f4 H2 c! y& e# H8 r, s& d
2 N1 Y3 q2 D) j- T& r; p" n. ~' H#include <asm/mach-types.h>
3 _5 @! I, `( P5 `#include <asm/mach/arch.h>) a9 W# U$ n& p5 Q
#include <mach/da8xx.h>0 i* q; Z6 H9 {+ G! p' g- w
#include <mach/mux.h># C& L2 K @2 ~5 X" _, t
# Z Y3 W+ h& r( B, G8 o0 Y1 `3 [#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
4 h# T2 \4 p; V: L$ q#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
$ J. d, k! ?3 g' u+ Y3 E#define DA850_USER_LED2 GPIO_TO_PIN(0, 1): ? Y8 Q2 e, S+ I9 Z0 M4 x
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)6 Z* z' s' b; f; _2 ~$ Y
3 ^0 ?5 D/ D% a" f N; A% \4 M ^9 |
/* assign the tl som board LED-GPIOs*/
4 B# f" |6 \" _2 b; y5 H2 W- |- [' K8 Fstatic const short da850_evm_tl_user_led_pins[] = {
; _* G$ P4 Q0 v /* These pins are definition at <mach/mux.h> file */
. E" u6 |: a( ?% O$ F1 `! k( ` DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,1 f+ k- u' `& }
-1+ w1 t% l/ ~% B
};, q7 ]1 {1 q( f f3 \, y% G, A
9 I; ~4 ?/ c! a$ u6 d& Z" T% m
static struct gpio_led da850_evm_tl_leds[] = {/ r7 y% }" L \5 B& f+ I+ L# a; H2 H
{
$ v+ e* m( i. o1 g& c& m2 i .active_low = 0,' _3 g/ c0 U9 @% _
.gpio = DA850_USER_LED0,- w& K/ ^+ x2 X9 E N, @8 @9 e
.name = "user_led0",
/ j: x: r) f3 n .default_trigger = "default-on",1 P6 q) Z. _2 m8 i
},: k8 ?+ V: M& n3 H: v
{
2 w2 a, p/ A4 V& d0 P .active_low = 0,, }- \# I; m% J. T
.gpio = DA850_USER_LED1,4 I2 s% J' i; i
.name = "user_led1",# V" h3 A9 Q! K
.default_trigger = "default-on",
7 Z' B( q8 d$ y) B$ R, W* {5 y+ w },
1 a9 z7 A& p' z/ C+ a9 J {
+ ~5 p1 z( U2 Q9 d .active_low = 0,9 t7 X' m1 Q6 e5 q
.gpio = DA850_USER_LED2,' t+ k. l( h4 E" M
.name = "user_led2",
* \5 }$ r% K) F9 B7 t M .default_trigger = "default-on",0 t) _; i! z* o) ^4 l
},6 W( V3 h9 n/ t3 C/ a1 d( T
{
M9 E/ o5 a* Q. V9 u# P .active_low = 0,
- A6 X; I! U/ s- m) o/ { .gpio = DA850_USER_LED3,
* g% X5 N/ D" A" H8 G4 u( s .name = "user_led3",
7 T* H( {; }% G$ D .default_trigger = "default-on",
7 s* g" i9 v0 z# o r8 L9 n% v g },' u7 v g7 D* n0 V, E
};
3 Y2 l; p: W5 I$ ~; N% |
) ]' a2 C }) e0 Y9 t9 Sstatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {- A e$ v' d ^+ E: E2 M& i. H) }
.leds = da850_evm_tl_leds,
; v, q0 o% e8 e5 @3 d, \ y .num_leds = ARRAY_SIZE(da850_evm_tl_leds),0 S8 B, ~8 k* O, P
};
; v+ Q$ |, s% A1 d! \8 {0 o
/ U# G$ ~4 i3 vstatic void led_dev_release(struct device *dev)
2 r: c' ^/ B: I; d* Q4 c4 P, N! w{
2 J9 p8 u. N9 R/ I' Z! x};. o( P. k( A5 }. G# y
* W+ g$ ?: n" Y8 j0 u" V* S
static struct platform_device da850_evm_tl_leds_device = {
1 t7 U9 t1 o, I% G. J6 E .name = "leds-gpio",
3 ?" v* I& W; w7 O3 T .id = 1,6 `5 Q3 t- }) X4 S- X5 L9 n Q
.dev = {
0 R6 m3 j) g# S .platform_data = &da850_evm_tl_leds_pdata,- n5 ?) ^# a. o3 ~+ X' _2 j
.release = led_dev_release,
! G: h5 o0 g( R7 y5 o9 m# }* O }
8 t# `2 N. @- e+ N; h: i. N};
) y) ~6 {! J+ p9 l0 m( r3 J8 D( n1 Z$ H e4 z
static int __init led_platform_init(void)
8 t. p% ^4 u, {% S* N: C O{
$ o' Y# Y2 W1 M int ret;
% g; u4 A4 f/ p/ U8 g0 X, d#if 0# a h7 @9 R5 ~% n+ F: U
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
3 R' m5 K$ }: m: i/ O) k7 M if (ret)
0 O- x4 H1 W A; s2 b. k2 i pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
. d0 H) W0 l* a. z "%d\n", ret);# f& ?3 S* _2 m* h
#endif2 y: V% S% ?4 A' N: K0 P" g
ret = platform_device_register(&da850_evm_tl_leds_device);* h6 v# @6 \' L5 W
if (ret)
8 @) n$ P( M6 A( T4 j pr_warning("Could not register som GPIO expander LEDS");
$ |( |$ L9 R" [1 z& d else
0 \. r2 v4 k$ |. ]) W9 m printk(KERN_INFO "LED register sucessful!\n");( t3 Z# E' W% o4 s B
. [% m1 P3 z: z6 d: D* j' Y return ret;
9 @) F0 {+ K) N}# g4 f! [8 O" ` g8 ~% z6 D
# u! ]: Z% s. S
static void __exit led_platform_exit(void)
* f; G& _9 o" [2 ~6 u{% a1 ?! i, Z. g' \4 O1 d
platform_device_unregister(&da850_evm_tl_leds_device);
& B" E3 n. M5 l$ o; B1 ^2 u# Z: R9 b: k' V
printk(KERN_INFO "LED unregister!\n");
4 _! @/ Z3 E+ s0 n0 q( t}
. n7 D) n& Y8 F
8 Q* R! U; a2 Imodule_init(led_platform_init);
, Z3 C% V/ }6 `! _6 nmodule_exit(led_platform_exit);; }! d4 g( @; b! a) E" U3 B: k
, Z$ y9 q7 k5 g* [MODULE_DESCRIPTION("Led platform driver");9 o ^; p' V# P* b4 D
MODULE_AUTHOR("Tronlong");
) t4 M' I% s, I+ H( m& ]MODULE_LICENSE("GPL");
& v9 U+ q$ g# O% m' g8 g% y) ^) m
|
|