|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
" G! L7 g! l: A" d( E0 j#include <linux/init.h>
# l2 D4 ]/ g8 W; R#include <linux/module.h>9 X) H' p6 s: a
#include <linux/kernel.h># } {3 g- n0 X$ W$ W: x
#include <linux/types.h>
* f/ ]( q% j) _4 \( z#include <linux/gpio.h>. N* x, m2 v( d& q" U
#include <linux/leds.h>
( w! N1 K8 R; s#include <linux/platform_device.h>
+ t" G/ L3 E, Y- M: S$ ~" n+ f. B! c1 r/ \/ j" M
#include <asm/mach-types.h>
2 X" `. P9 s2 x4 d: \1 A; l#include <asm/mach/arch.h>2 p5 F0 a' ~$ G( K! V. P
#include <mach/da8xx.h>( y1 H9 K0 y4 D/ O. j
#include <mach/mux.h>/ z, f" ^7 ^$ {' f
9 l- N4 Z8 f( v2 o9 v+ p5 p#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)7 T( ^8 z$ k1 c
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
; i9 d2 b; y$ u* z9 S/ w3 ?#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
$ Z) k, J9 X& n1 V8 f#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)+ b6 V# I4 z& `0 @" C u2 u
" P/ _5 A( C/ E0 p
/* assign the tl som board LED-GPIOs*/
9 E5 q! t N& Q' P6 istatic const short da850_evm_tl_user_led_pins[] = {
7 g% t6 m) g/ d /* These pins are definition at <mach/mux.h> file */
8 I! f9 @' H/ K) k: Y6 ~ DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,' M0 d7 N9 L* B* Y- m
-1
7 F M8 I1 ~8 W};
1 j: B1 ?5 N" v
4 P- y% H5 g& j' c% C* o. C: v' Hstatic struct gpio_led da850_evm_tl_leds[] = {& T y, N, P% Y' q% p2 i, C! f, R: \8 x
{
# P8 { `4 p, { .active_low = 0,
' B+ v: v+ \: S/ T8 o0 q* ]; q .gpio = DA850_USER_LED0,2 O: h5 f* A) Y9 R
.name = "user_led0",- r& @$ H6 ]( J3 U: w
.default_trigger = "default-on",. O$ R7 {! r- s' q% K3 G& y
},8 @7 S. b5 F. Q5 c8 |
{0 u/ C+ Z. P( Q, f/ P) _4 R) f
.active_low = 0,
, R d" B5 M& s .gpio = DA850_USER_LED1,+ t3 d' J$ E5 H, C7 O4 W& [+ F
.name = "user_led1",1 F' z. m% l4 h+ m6 q, V9 N
.default_trigger = "default-on",
' w5 a* s: C _+ @/ |8 | },
3 n% V9 q5 N& U3 ^8 p, x) _; l {3 m& C, u( X; s4 T* t. f
.active_low = 0,
0 I7 t6 d5 o V0 h ?8 F4 N8 u7 g .gpio = DA850_USER_LED2,
Y' Y# A1 a y4 O8 `4 J' F .name = "user_led2",
5 z7 ]' d1 Q: Z3 B" S .default_trigger = "default-on",
7 N$ |! h( @/ ~. t1 G },' V& @2 W0 A: B) I+ f* S4 J: R
{7 Q7 F* u6 q" h* a$ T7 O
.active_low = 0,
1 u8 I% Q( B* R$ q( [ .gpio = DA850_USER_LED3,
: A$ f7 l9 _# i8 F6 c% F .name = "user_led3",8 q j0 e1 G& z, ]& ^) A
.default_trigger = "default-on",, n( r. F' X* \+ ? p: d! r
},0 `! v: M& U- s% t2 e" D P
};; @( `6 P% a J3 q- G' f. u4 S
' j( @& h" l# s$ ~" S" O. pstatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
7 F J$ a9 i) d5 o/ d) {1 ? .leds = da850_evm_tl_leds,
2 q A8 | G4 P8 {, {- a .num_leds = ARRAY_SIZE(da850_evm_tl_leds),7 L. ^% E% p0 M& k
};/ n; z! N; Q4 {, G0 \9 Z; h5 `: G. Y
0 x$ U7 v+ x: H6 b$ P' ]" `
static void led_dev_release(struct device *dev)
8 ^" O! k k" S! i{
2 U+ C. q/ I' i};
+ Z% Y3 _5 D0 W: v; G3 P, w- @& F3 H! c; ?, P* h$ i. ] r
static struct platform_device da850_evm_tl_leds_device = {) V- @/ o" n. X3 f5 W) J
.name = "leds-gpio",
, y" Q2 C3 x0 N* I$ m .id = 1,! J+ V9 Q9 S1 g% ?) F2 E$ [) X
.dev = {. W0 q) j7 x) R
.platform_data = &da850_evm_tl_leds_pdata,
6 F: q4 e) b2 x2 o .release = led_dev_release,
1 y. O/ _" }" D ~% d, I9 s }4 d s" Q+ ^" S% |
};2 S Q: b6 Q: J' v7 y8 \6 d
- w1 E" U( u: O, x( E( x
static int __init led_platform_init(void)7 I- p& E$ x8 C$ H. q4 @+ X3 d
{
; Q. Z4 S7 j3 d% V) h$ b" K int ret;8 b2 K$ X' A5 W! y
#if 0
# v9 y$ ~& c+ b k ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);+ \7 t$ h7 I5 O% \& B6 A! x
if (ret)
9 O" O' e" l0 `) m pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
9 v1 B, b7 ^; r8 d( N' m- D0 j "%d\n", ret);' h- q2 K9 S) P' h9 \
#endif
V' C' A1 r8 U% X b6 H ret = platform_device_register(&da850_evm_tl_leds_device);# k1 l. {2 p. u* Y. A
if (ret)
1 C% p: v" ]9 m0 B$ v2 A pr_warning("Could not register som GPIO expander LEDS");5 @5 c* T* _( t3 W
else
5 L5 a& l3 ^% V3 P7 E$ D, p1 z printk(KERN_INFO "LED register sucessful!\n");: c! U: X3 t# L0 X
' F" p/ R4 y' m
return ret;
- i7 ^) }( U: ` Z}
% ^. Z8 |; m9 j" T+ v& _+ p8 H
" q7 }2 y, ]- e) sstatic void __exit led_platform_exit(void)
/ X7 L. J. ?9 _6 n# i* N{7 E/ {( Q, N2 ^
platform_device_unregister(&da850_evm_tl_leds_device);
4 |* s2 ^' | k' Q
+ b; k3 P' o# z9 }% u) ~ printk(KERN_INFO "LED unregister!\n");2 f/ K2 `! u* [3 G# S6 o
}8 y) e$ j( G" f5 u7 ?; K
( Z0 W' O; L$ R8 S2 g$ _5 I
module_init(led_platform_init);
4 q! \0 P$ D' X4 g! N1 amodule_exit(led_platform_exit);
. c# o8 ^+ e9 v/ h
R" E* E# h- j0 xMODULE_DESCRIPTION("Led platform driver");
0 M% \5 m+ ]5 c" qMODULE_AUTHOR("Tronlong");5 s8 E3 ?) D! w" x' r5 O
MODULE_LICENSE("GPL");. j+ V- ^$ }# m, B2 w5 R5 G
. G- u" P- h7 u6 R7 u, {. I
|
|