|
|
求大神给下面的程序做注解,请稍详细些,谢谢。, }2 s, ^' K( O
#include <linux/init.h>
* Q' e! T+ M6 g/ g% g8 B#include <linux/module.h>
$ W7 t+ F, L% m9 d( Y) C5 T#include <linux/kernel.h>) Z, }% `8 _) @
#include <linux/types.h>
; {/ v" v/ g# m) `; @#include <linux/gpio.h>
2 a0 W& z1 J" ?" V: u#include <linux/leds.h>9 G5 [! J- E+ x+ M5 s
#include <linux/platform_device.h>
' ^5 y1 i, a) ?# ?, z5 |/ X& B+ c2 {0 B& o- \, L9 Q
#include <asm/mach-types.h>6 z3 j6 k) o$ i
#include <asm/mach/arch.h>7 L) L2 _3 l. Z
#include <mach/da8xx.h>& W, M0 A# e/ N" z2 E* ^7 G
#include <mach/mux.h>, d0 Y0 y; h8 O- ~8 a
3 ?0 V7 R' }8 g% f9 E( k9 @0 R#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)- G9 T5 i) Z8 l8 [' [6 F* q
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
1 ~( A+ W2 T+ q7 f#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)) x/ {& S! ~3 W+ R% P
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2). w9 y" v* B" N% Z- n
% U J/ F8 p: m3 N0 g- }5 D M; E
/* assign the tl som board LED-GPIOs*/
2 W$ X5 J+ A5 X Astatic const short da850_evm_tl_user_led_pins[] = {
7 E9 x* p% K( G6 o- | /* These pins are definition at <mach/mux.h> file */& n* C. R" J& c2 V: N/ f+ t
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,' V! r* T: F% C
-1
& O3 [4 ]8 B! q& G' u9 |1 S4 U};# ^* }9 N) Q) B) R# e E% I
& [3 A9 a; @9 G# r0 |0 @, Zstatic struct gpio_led da850_evm_tl_leds[] = {, [" L$ O" V: p+ H0 I/ z. a' `+ ^
{) E, W# i5 P \ f$ v' H7 X( O
.active_low = 0,
+ W! x2 X" }% B0 N+ w, T .gpio = DA850_USER_LED0,
1 j! k- {7 ?% E/ e .name = "user_led0",
" d2 y0 m1 t! i .default_trigger = "default-on",$ }% O" A$ D6 m0 R& R$ t4 o# q
},
1 l/ h: ]' e- M9 w$ R/ q' C {
) P( n- O2 e/ q4 T3 s .active_low = 0,
# y. p& f! Q3 r$ \, y .gpio = DA850_USER_LED1,
2 v8 D) q" q `" E1 |0 l .name = "user_led1",
; @' U/ t" D6 g .default_trigger = "default-on",
( ]7 B3 n' F8 h4 Y }," K9 o' ^* w: O- s
{8 [1 h" ]. i' g; h: F( e
.active_low = 0, u5 J& @. }3 T' z
.gpio = DA850_USER_LED2,
4 u" y& A2 u( a g+ Q" A .name = "user_led2",
# i, F: |& \% j" n. ]; u0 } .default_trigger = "default-on",
7 `$ [7 W, ?: Y8 X }: {9 [$ o+ D% }4 K },- X4 M( C$ s% c0 l1 {4 I4 Z. A
{
) r9 L4 _7 D. S: M d# Q4 U .active_low = 0,9 n7 P/ [/ E+ D" D! ^, j
.gpio = DA850_USER_LED3,1 S& @2 l2 M+ N, Y5 e* z
.name = "user_led3",% n0 G& ?4 R5 W0 Z5 d
.default_trigger = "default-on",! P5 g9 P; n2 r; G+ Z& E1 V
},5 P. k' T9 q! o5 o/ f
};0 g% J" c) t" i; V7 i% }" V6 E
5 v% _; y/ s j8 I5 i* Gstatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {! q. r1 H7 @5 @) p2 E4 v, Y. }6 D
.leds = da850_evm_tl_leds,& Z" s S: N0 m2 b
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),+ {& x5 c" S& Q0 N' D$ K
};' V+ N3 D) L: R3 m
( |" _! n, p4 Z! Q: c
static void led_dev_release(struct device *dev)/ g* X2 E$ m7 ?- c! Q2 G
{3 d _- v+ T/ `7 A! b& Y" h. `9 c
};
: P* v. `% Z1 ~! W
: O0 t; v0 I3 L) P& p+ d+ l& O3 zstatic struct platform_device da850_evm_tl_leds_device = {6 }/ `5 F% h* h9 @% D; Z
.name = "leds-gpio",
3 s. H8 {- Q9 z3 `3 J .id = 1,- z, G1 M% B9 K2 R. H `3 e/ C
.dev = {
. ^. h+ U, {7 R0 A .platform_data = &da850_evm_tl_leds_pdata,
! u: U* l1 U _2 k/ C .release = led_dev_release,- U. T; H7 W/ {9 t! ]! J* [
}
8 o$ }+ K8 E$ S- B- b' J$ g};; N& M* M* G9 v' B
8 p% \$ N, U0 ~3 r0 `7 _0 xstatic int __init led_platform_init(void), m4 X+ m6 V! [+ v- M6 V6 v
{' a: H* G3 d* {$ d( A, O( f5 {* w
int ret;
8 {/ d3 R" r# V* g#if 0% k& }3 E9 {- Y1 V7 T8 f, W H* C
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
, }' J1 v" K* a% E if (ret): u+ M: e& `0 {+ Q
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
& V* s4 K! W1 }6 z- p "%d\n", ret);8 a% e0 I9 K+ \9 T7 p% M" X
#endif
" C$ g2 v' `. V9 E0 @ ret = platform_device_register(&da850_evm_tl_leds_device);: Z4 ?0 T2 t$ T( n, i$ R1 {5 Q" D
if (ret)( f+ k( ~0 G9 |5 k, d
pr_warning("Could not register som GPIO expander LEDS");
f5 `, E# H& p w5 I# V v else/ ^! i/ c' w3 V5 P- r( i( J k2 c( P w
printk(KERN_INFO "LED register sucessful!\n");5 o; V" } H* t( U1 l( a. a
' y6 |' s& C+ Y. P8 R3 l8 y return ret;% T4 X" Y `# s" W, l" M% y! Q
}6 a5 _) d; y, w* U% S
) ? Z) S& U9 X4 T! x4 k) |
static void __exit led_platform_exit(void)
8 U7 E' {% K1 {{
# \. q; d5 p3 B5 `0 b. D platform_device_unregister(&da850_evm_tl_leds_device);
& Z5 v9 y a z4 G- U7 N
) j* F# m4 }* m; y( e+ L, v printk(KERN_INFO "LED unregister!\n");
6 ?4 q/ G( M5 F0 B% i* N# S; B}, j* w0 f! h- c) V. O$ H3 C& L
- S8 z6 X; w6 p; I+ v- @- Fmodule_init(led_platform_init);
9 J' k( l- P% L, t* ?module_exit(led_platform_exit);% P9 f4 z% N4 _3 r" ?
5 r6 \3 x, ? d# QMODULE_DESCRIPTION("Led platform driver");+ h6 r. K# Q/ f0 \, ]) O
MODULE_AUTHOR("Tronlong");
, I" Q1 j1 j1 C! BMODULE_LICENSE("GPL");$ I5 {; Q# u: o4 x% w7 \; r% `
$ p ^$ @, ?% Z) Z* M* ` |
|