|
|
求大神给下面的程序做注解,请稍详细些,谢谢。" y$ z( E3 ?" e, x, p) y7 Y
#include <linux/init.h>
: p& B3 a9 j3 d9 V$ n% B1 }1 _#include <linux/module.h>8 ?: K$ b$ Q3 b
#include <linux/kernel.h>
( Y* E( ^9 Y0 g0 G7 S v#include <linux/types.h>
' _+ r0 W. L& h& k#include <linux/gpio.h>& ^! U. n0 w7 o4 G
#include <linux/leds.h>
+ i9 \3 Z; L- S7 e7 X( A, y#include <linux/platform_device.h>1 }7 c9 b1 U3 Y' T' L* S9 d
( d$ r7 n! }$ K' T9 X& l$ J$ q3 F" E
#include <asm/mach-types.h>
* S/ J4 j" k/ B# y2 ]; K9 |( }8 }6 A5 m#include <asm/mach/arch.h># O" y! }& a* r+ V7 t6 A
#include <mach/da8xx.h>5 h2 o' G3 ~+ E: }
#include <mach/mux.h>/ [ m8 @9 H- s% z m! T
+ p! N B$ Z6 {
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
# K. t5 ?; Y, Q5 z' \+ x#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
6 e; `/ d, P5 u! a) x#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
3 v1 y- y& c# [. u( i& H#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
! \) J9 K2 w( S8 ?
7 x9 O! ?' c- f6 M/ w( S/* assign the tl som board LED-GPIOs*/2 p* S! K1 i2 _/ H+ @
static const short da850_evm_tl_user_led_pins[] = {' R1 T5 |$ w2 } A M4 A4 L% `
/* These pins are definition at <mach/mux.h> file */
! [1 Z, {% n* Y DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
% w l* R o9 Y# F -1
" r2 p# Z, U4 x! j% |" y# {4 X};+ U2 b2 x8 ]& G! r
# b% Y( y& Z% d$ c
static struct gpio_led da850_evm_tl_leds[] = {4 l+ c" d0 a; g$ H; W
{
( \ i1 b3 K0 _2 q4 Y9 w .active_low = 0,
2 n; G0 x- S9 q8 E, y d9 E+ B" ` .gpio = DA850_USER_LED0,) m/ B; E1 s' f" i/ A4 @& g% v5 x
.name = "user_led0",9 ~- ^2 R+ a2 O0 c
.default_trigger = "default-on",2 S2 f6 ]2 [6 W/ w
},& i$ J. N$ r# n$ a
{4 F) V) P4 c6 s9 y$ T
.active_low = 0,
' M. o" B2 c, C; Y& L; i .gpio = DA850_USER_LED1,
/ o, b9 L8 h1 a3 Y8 U# Y: k4 p .name = "user_led1",2 {7 n3 S8 y1 l& W
.default_trigger = "default-on",9 V1 S; f: x' Q: R
},# S2 o g$ y5 C' z4 Y. w6 i6 x
{: N7 F( z: u# K# u2 m+ n
.active_low = 0,
( x+ V+ Z3 {* ^/ Q; {. n1 g .gpio = DA850_USER_LED2," N8 Y* r/ _" {) f/ L; J
.name = "user_led2",6 Y* d/ B' u0 k' W4 S" |
.default_trigger = "default-on",
% b2 M _ E a$ P3 B/ M. g },
7 j# v5 k9 H7 t/ z; L {! Y1 G2 f! k7 m$ S! {) ^
.active_low = 0,
; C" E9 E7 j& u .gpio = DA850_USER_LED3,) ^( K4 V6 g1 `+ E2 W; ^6 d+ m
.name = "user_led3",; g; ^! h; L' l, f1 z. a
.default_trigger = "default-on",. K; Y" X+ K! X1 C, d% d+ l, w2 J; |
},
) {0 T1 ]" w( B0 V; [};( t4 O% _3 y7 Z; K" ~ z$ A
2 b- l9 Z; m7 j/ Ostatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
2 b4 n) X0 x4 x# [6 W9 K i .leds = da850_evm_tl_leds,: p6 e1 z1 Q7 m. F2 ?* M
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),
/ r& S, c S3 D. y" {: z" a};
/ b+ w) R4 H0 g8 m1 E5 G
7 V1 @) @; c4 c$ X ostatic void led_dev_release(struct device *dev)
- a: A( E1 `% p% f8 m5 f3 k{0 H3 o5 F- a% C
};* B) i/ Q* ^4 B' u+ Y' ]- R4 _
3 j1 V& T" L' t0 }static struct platform_device da850_evm_tl_leds_device = {. j e( c. X3 f/ i
.name = "leds-gpio",0 y! G2 g% `8 n+ V3 [
.id = 1,
% j# q f, i) {5 ]5 ~# {* D# K( ? .dev = {8 R( y& h$ u% m+ n
.platform_data = &da850_evm_tl_leds_pdata,
" Y+ M% U) ~( A+ e! M# h .release = led_dev_release,' ]2 J+ p) m! {7 c0 M- B$ P( `
}$ O2 h2 R# X0 i! J
};
7 Z' z2 U d& z9 l$ p& u; I0 Y+ b8 _. Z% t: ]! L
static int __init led_platform_init(void)
( N5 B9 e) F& R1 }; I" ]{
6 c# {7 @( R0 B" l% L- ]! ` int ret;
+ \8 X6 T/ O' I. B. l#if 0& p2 |& X% c7 Y
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
0 G5 }# _; Z) d% j6 C if (ret)0 T5 h( w3 n3 N) X
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
9 ^% f4 _. r6 \& B$ @ "%d\n", ret);0 r; w( \. H: z. N
#endif( U# c" Y: {2 S0 T% A
ret = platform_device_register(&da850_evm_tl_leds_device);+ E e0 y. d/ F4 i7 K
if (ret)4 h8 N- \, _& W! N8 d; c. d
pr_warning("Could not register som GPIO expander LEDS");* ~( u3 R2 i; S$ M7 k
else
/ Z. t# o/ B# I; h( S: f- ? printk(KERN_INFO "LED register sucessful!\n");
" h6 ]/ s& [# P5 }( ?5 j i) d' \+ }) A* Q8 m' }
return ret;8 P9 @ C( G4 g# H. j; x# k! m& `
}" j4 H" e! J& ?* z+ Q" f
8 Z7 [) q) i/ y& v3 I! {
static void __exit led_platform_exit(void)
9 |6 u- o0 d2 I8 j, P: y{
% z; ?5 f$ h" B v1 r, v2 H9 K platform_device_unregister(&da850_evm_tl_leds_device);! F! [( o1 ~7 Y5 G1 c$ N
9 h3 o/ F" K4 m5 D# z
printk(KERN_INFO "LED unregister!\n");
+ q) t: A8 H" D I}* n" A/ e7 C+ u/ x+ P2 c
. Q9 m6 B1 {# m* Omodule_init(led_platform_init);
5 i5 f8 @5 Z+ [! R& Omodule_exit(led_platform_exit);
) B6 ^/ D/ `' w G0 i+ Z' Y! U5 n* t: `) |6 Q! J' y& x4 O
MODULE_DESCRIPTION("Led platform driver");
- `$ ~- v: m! a* QMODULE_AUTHOR("Tronlong");
+ g: }8 G9 t" cMODULE_LICENSE("GPL");2 I- J2 C0 O% B2 @# C: q: m
/ q a) H8 H2 |: {/ h8 [ |
|