|
|
求大神给下面的程序做注解,请稍详细些,谢谢。; T7 J3 l. Y4 c: J+ g
#include <linux/init.h>
8 I6 O2 H$ g5 J" \- q3 \#include <linux/module.h>
2 C+ Y' g) L* y/ R# Z# C' Z3 c#include <linux/kernel.h>: b3 a+ T; x; y
#include <linux/types.h>- z0 r) m2 M" ?$ m! ?% x
#include <linux/gpio.h>
4 h* L& }( l$ G+ q; \! k" q" p#include <linux/leds.h>+ j$ O/ u( Y1 v" a
#include <linux/platform_device.h>
+ N5 Z( f- E6 B
5 s; e2 a0 v5 s: y; O+ X' r8 R/ x! a#include <asm/mach-types.h>2 [9 q" I, r* o/ a& I
#include <asm/mach/arch.h>9 Z$ ~7 z: y3 v5 Y7 B( D8 L
#include <mach/da8xx.h>
1 W9 m6 W, I+ U3 d; b#include <mach/mux.h>
" p$ h1 u4 ? [& N; V% _$ s! @" w: I) E3 D; J9 x' K1 B+ {
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
9 v6 ^3 O/ [7 P/ \' i$ }6 _#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
* C. W1 t! V1 `; q" c+ s#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)) l7 h5 H) S- }
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)5 x' w( z L6 C2 b$ ?9 K
" Z) |; E$ \% W+ V/* assign the tl som board LED-GPIOs*/
4 ?$ N" [1 P) T5 I5 g2 nstatic const short da850_evm_tl_user_led_pins[] = {2 ?; b8 a4 K, q# w
/* These pins are definition at <mach/mux.h> file */% _ n9 k; o) X/ W# r
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,5 @0 _/ g) ~/ d; y/ e0 a9 o. K
-1
" h# i, ]3 k9 ~ o};
/ C4 W8 H! \& V* _% q) F/ h( {! l4 s9 k# b( g0 K
static struct gpio_led da850_evm_tl_leds[] = {! j& _& E" K3 p- {" p! \9 I
{/ d) T9 |$ l6 H; I
.active_low = 0,
8 I( {% [" ]% W; Q, y1 \& y .gpio = DA850_USER_LED0,7 w8 K. m/ K3 @0 O `( B& x: e
.name = "user_led0",
% t# w2 R; O7 y6 v7 V .default_trigger = "default-on",8 G# ]$ M+ _0 c$ [) B5 P
},
+ Y$ x$ W& b4 H% ~8 M$ q0 j {
, V# r" {6 {) s .active_low = 0,
2 _9 ?9 b* R r .gpio = DA850_USER_LED1,) \" x0 Q6 K. G( W
.name = "user_led1",% b# ~) Z R. i. `2 c G2 j
.default_trigger = "default-on",
* D6 A" Y9 k) O: C7 s, x8 L },
( w) l* n: h9 t3 D/ m" V4 K {
; j I/ e0 J2 p# B* q .active_low = 0,
- z, Q; J- x/ M- Y4 ?$ @7 ~# i1 E9 B .gpio = DA850_USER_LED2,0 v5 X% y7 w b* M7 T6 n, ?" \
.name = "user_led2",
) B' K- b7 ~7 D .default_trigger = "default-on",, Z2 J& S7 {1 V' e8 I
},
I' s( y9 d+ y- G( `3 m! ~ {. M1 Z. y3 C% { s: t+ T" I. x
.active_low = 0,
) k/ |% o# c5 h+ s+ ^$ r9 } .gpio = DA850_USER_LED3,6 {. \3 |0 f" A$ o8 s
.name = "user_led3",
* f/ v# k% q# R! h4 K" x7 U5 i .default_trigger = "default-on",* U: L- Q) n' S
},
3 I& O' M z% Q8 k( z. }};
7 ^8 ?2 s+ W4 q$ w
+ C5 V3 B7 I6 N+ w, H5 M |static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {3 j( D& G4 o) x: g S
.leds = da850_evm_tl_leds,/ I7 X I, F. `7 R# u' a0 H7 P
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),
# m t; h) P/ d ]1 a};
d* l5 n E8 G$ {9 [8 ^
3 Q" I! m# E/ Y4 Cstatic void led_dev_release(struct device *dev)0 h h9 \9 [* A
{# j; z' r+ V& K1 Z9 v; \
};7 c$ d' {# ^% l* v6 A
$ q6 N2 J6 K2 F
static struct platform_device da850_evm_tl_leds_device = {3 i9 t! `# d% j! U( E' D" |" b8 U" C
.name = "leds-gpio",- E; K: I* U) G% e f, b6 L
.id = 1,
7 W" w/ l# D) r4 w A .dev = {3 Q' u. ~% q; ?4 g; m
.platform_data = &da850_evm_tl_leds_pdata,1 u, H$ C; g; ] E+ g {5 x
.release = led_dev_release,
' [- n& }3 J' w- @6 h K4 I }
; U+ e0 T. c' c6 w5 R& A) ]};( w2 ^' [# {( q9 v
: u: t' I! k* w# Y
static int __init led_platform_init(void)3 a7 T# |* {' w+ c0 t. }! q1 P8 m* n% o
{; n1 M0 u% J% Z
int ret;
1 \" e4 k8 o/ Z# o3 ?! P5 k#if 09 l9 c1 k! K, `& G
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
! e/ F# f( J& K9 `! M if (ret)
2 l" |6 w& e9 d8 |1 o4 U6 a pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
9 C/ @7 p/ l8 F% D "%d\n", ret);0 K0 ^# U3 G: W: F
#endif
6 D+ s* \- s' x% C; v3 C ret = platform_device_register(&da850_evm_tl_leds_device);
/ t$ c/ X F6 z* P1 W4 a# M if (ret)3 ]- ^2 G. C: m4 C5 a9 ~" a- ^' `
pr_warning("Could not register som GPIO expander LEDS");' }7 m; r- X) m& E0 r! ^# Y
else
! e' R3 H' j* j7 W! l$ @ printk(KERN_INFO "LED register sucessful!\n");
( g) h% ^1 z5 k! \5 z5 O" K+ Y) K
0 W0 f- j) t0 X, w* Y& u% x return ret;
4 _% ?- r' O0 a% Q! |+ G% f* `+ G}8 `4 C# t8 A2 V5 \' a7 Q+ q
4 z; m, F' m( m/ v5 ^7 ~ Kstatic void __exit led_platform_exit(void)7 @2 _4 h1 O+ `+ y
{# W* j$ \% D3 N' V. L$ K P
platform_device_unregister(&da850_evm_tl_leds_device);5 t9 s5 ~9 W0 `( m- [1 Z4 P
6 i, H7 H) e2 W7 ^$ o, S
printk(KERN_INFO "LED unregister!\n");
- m3 c+ b4 [7 N: W z}4 M! B5 y H+ [/ F7 X" @
9 G: r- w; @) r/ p) Kmodule_init(led_platform_init);* L( D# C3 N: m5 x$ Q! k& V
module_exit(led_platform_exit); k' @* I! g& o0 ]% O% W. z- |5 p
8 i$ t: |5 P; d; G0 k/ b5 vMODULE_DESCRIPTION("Led platform driver");
4 s# x3 j1 N# s7 }& YMODULE_AUTHOR("Tronlong");
: }+ o9 h i8 {. k" m6 |2 |6 z5 `/ QMODULE_LICENSE("GPL");
" t; {/ A; B: U; u: \; o# U! I
/ r; R: {! M/ R- @" y |
|