|
|
求大神给下面的程序做注解,请稍详细些,谢谢。8 F$ z! o& Y6 ]9 M1 s9 o0 `! P
#include <linux/init.h>
$ S3 w9 A" n7 k$ A/ o+ O% R% C#include <linux/module.h>" A. M" l& @4 Z* J, y+ e1 c
#include <linux/kernel.h>
0 R3 ^/ G4 |- O. O4 F#include <linux/types.h>
2 T5 q4 s$ M$ F; ]7 x#include <linux/gpio.h>
5 ~- r7 T& V2 N6 }& x) J#include <linux/leds.h>% o( K8 k$ I- H `$ S1 d5 w" a
#include <linux/platform_device.h>
0 o4 o) J6 o+ @5 I4 P- x& O$ H4 ` \" K
#include <asm/mach-types.h>
5 h5 ]; v; @' S" V- v+ n: C#include <asm/mach/arch.h>
- V2 p1 a; g7 [% |1 f) j1 k4 S#include <mach/da8xx.h>
+ B% W! o' ]& A7 M, \9 x) O#include <mach/mux.h>
* @6 P/ j" g* s: M$ J+ U
+ p0 {6 D. t, f9 U7 E+ g" A#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
; x* a8 U* v6 H# g& }#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
2 I5 Z! `3 O# }5 ?3 Y' H+ G# }#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)% ^% A E0 P: L) E
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)7 A% S$ m/ l" h9 @% h
9 U! ?* _, c) D8 w/* assign the tl som board LED-GPIOs*/
+ l5 C1 e+ A* s8 Kstatic const short da850_evm_tl_user_led_pins[] = {' \, B% V( P1 o7 u
/* These pins are definition at <mach/mux.h> file */
5 I5 Y7 }- `5 m: W# Q6 C DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,; Y* N8 z9 K8 b0 x
-1
+ |7 J+ p; _( P; f};& h; H5 X4 m. e% w) r5 W! \
& B) H' x/ j1 Q( E8 J& f0 q
static struct gpio_led da850_evm_tl_leds[] = {3 y. _# k% J$ T0 g7 t: ]
{
# U3 h1 R: ^# h3 u+ C .active_low = 0,; B, S k% s" i5 p6 h* r8 n
.gpio = DA850_USER_LED0,# a5 k4 |$ h, I% p
.name = "user_led0",; f5 K( x7 w0 P: v. k
.default_trigger = "default-on",7 F! ^0 x! P; ]- U
},% X$ m5 I5 q- e! j! t: F
{" r: o" b9 p# n. {
.active_low = 0,
+ ^8 w* D) @9 F .gpio = DA850_USER_LED1,. ^$ X g; T# k; j0 B
.name = "user_led1",. k$ i& |8 O# h4 a0 d1 a
.default_trigger = "default-on",
5 }3 Z" D9 D4 |& t; Y$ F },1 ^& E' T: i- Z: O: i
{
2 u D" n1 H8 j/ G3 j .active_low = 0,4 W* t1 o1 l0 s4 S
.gpio = DA850_USER_LED2,( n/ R- _3 G1 N, j4 R. R# t6 X
.name = "user_led2",# v) n6 w) u8 W$ r: Q0 o9 a) S
.default_trigger = "default-on",! r/ P4 s& n+ I# F) G1 r
},7 M& N; w) o* C7 s5 s) |. ]9 {
{0 V- P8 f! p ^5 T, g
.active_low = 0,
* x Y) f+ h" K+ A) k4 Y# k+ r .gpio = DA850_USER_LED3,. K( k+ ^" R1 |9 h2 P' z% w
.name = "user_led3",
" Y$ o: k# R/ S o .default_trigger = "default-on",4 M, K7 k1 A( i, E0 }, B" ]
},, X& R( x* ]' O: V% a7 s, c
};
! D. J( J2 F3 u5 j* t8 `2 ^3 X+ {7 j+ t H
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
2 f9 l3 @: @0 D8 S& c/ R9 N( f9 ~ .leds = da850_evm_tl_leds,8 w- p: Y0 A. w/ A' N
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),
1 }' n# M1 i# S# A$ }, A1 ]% `3 R};* ~4 s2 d2 z. D0 z! S
" ~& i6 F1 o% \6 \. E
static void led_dev_release(struct device *dev)
, m- l# V5 |5 T9 W; p{$ G; g+ @. y3 o- w1 I; ^
};
, g4 Z* Y$ w) H$ F* m* K6 q9 ]# r9 z( X) t% ~) K
static struct platform_device da850_evm_tl_leds_device = {
* |+ @' S$ u, o0 K9 h .name = "leds-gpio",8 S. i0 t( a/ O! ~" S* y
.id = 1,3 @2 {: O+ r0 r9 P- b/ G( S( G
.dev = {5 l/ Y9 d( ?( y3 U' g5 _* v
.platform_data = &da850_evm_tl_leds_pdata,; P, d+ h4 Q, p: W
.release = led_dev_release,
0 A1 X5 S% p" l- X q7 e* f }
8 i4 r8 L# v; _};
$ U2 d$ N( B: F n; q: q
1 @! A1 a( Y2 v8 @: K( ?2 u. Estatic int __init led_platform_init(void)$ ?) R3 J8 y! T2 n7 k$ h* g
{
) i) P" S4 E* h3 _1 Y& j8 Z+ F2 P int ret;% S3 O/ N# z2 Z0 w
#if 0
+ B6 l+ o4 k8 I7 a1 q7 ? ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);$ }8 c# A# U& ^- q
if (ret)$ X8 [; O6 C5 b- \
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"7 |9 B* R* J: ]
"%d\n", ret);$ y& c9 m0 n' B2 [" U
#endif5 d O1 p4 t6 c9 @1 [
ret = platform_device_register(&da850_evm_tl_leds_device);5 d3 X. w* g) V# E' {* P
if (ret)- e* Y2 }9 Q# Q: y
pr_warning("Could not register som GPIO expander LEDS");! C) X/ F* b6 O# q! G& g/ R! |/ l" o
else
6 t# ]6 i' ?) L2 c$ k1 R printk(KERN_INFO "LED register sucessful!\n");) M; z; t4 E3 F, v; T' w2 R
; }0 i7 {4 @# D0 n% `, W% q
return ret;9 x* f7 X: Q) T3 L
}
. O# `; N6 z, X7 e2 M. e% n, ~" v$ e7 m* m4 x
static void __exit led_platform_exit(void)
7 a7 w4 w, u0 K6 J1 i/ c5 w. _4 o{
m- _$ B! H( |0 L platform_device_unregister(&da850_evm_tl_leds_device);
! P* u& {4 O9 N) n% O2 y( I9 z# J) |* I/ ~) m6 Q7 }
printk(KERN_INFO "LED unregister!\n");/ T6 y5 y/ H- v
}
* T: Y7 A, ]$ Y9 o S
$ Z/ x6 v |9 B: ?! Q. pmodule_init(led_platform_init);& o b+ O5 _9 g& a
module_exit(led_platform_exit);
- s5 d& Y. m9 ] E6 }5 U" E4 f9 o- u( u/ ~& }6 D. T
MODULE_DESCRIPTION("Led platform driver");
! x7 Q- X$ k- RMODULE_AUTHOR("Tronlong");/ V q v' Q' U5 D. z b4 v3 h
MODULE_LICENSE("GPL");# t7 Y" q( Q! h7 A, S7 a9 W
, u9 B1 z J/ m3 a
|
|