|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
0 U5 u& u4 k/ s' m. y& p4 s" \4 N#include <linux/init.h>9 S) x% w7 l2 r' A3 ] R R
#include <linux/module.h>
. p& K; j7 }* _3 T#include <linux/kernel.h>
7 [2 ~3 `' Q S% L1 j& o: L#include <linux/types.h>9 n$ C! x, [3 I! l
#include <linux/gpio.h>
6 I, P m$ l5 c#include <linux/leds.h>
' y: i, T b6 P6 y4 F. y#include <linux/platform_device.h>
$ m; S$ U: H" u
% f+ i; y$ e* |% p2 u& {#include <asm/mach-types.h>
( i+ M( m0 l6 T: T. `: I3 S#include <asm/mach/arch.h>* ?1 S" i! N d$ c- L
#include <mach/da8xx.h>' [0 i( B/ Z7 F- i8 N
#include <mach/mux.h>/ R+ j3 _0 Y& |! j7 B' _
9 O: Z) u$ D K+ o8 c
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)1 {, c7 @% h% y6 e* L9 v
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5). C; T) w* V7 _6 U3 z$ _
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
, t3 \8 W* H m( g#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
0 v" U% U/ t0 M" z6 k" I6 \( @. c9 o9 }5 q0 ]7 f
/* assign the tl som board LED-GPIOs*/
# \* m2 j/ H- Y, f) G6 w; q3 k: Nstatic const short da850_evm_tl_user_led_pins[] = {
- z' G1 y1 J e: w6 K7 P' f /* These pins are definition at <mach/mux.h> file *// W: n: X* s- o! R$ p3 {
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
4 k _) Z9 m5 J) D4 C% D -1
- u. d2 v( V6 Z" z( ~}; ]* s O3 A. v1 `
: X! w8 W6 y- q: V
static struct gpio_led da850_evm_tl_leds[] = {: [! i# M, u6 t; K" C o
{( ^& D* B$ D7 U! S
.active_low = 0,
: @; z2 h1 d/ c/ u* c; _ .gpio = DA850_USER_LED0,
# ~$ {% ~" |; z' L4 F .name = "user_led0",- @4 W; G/ z, U, h t+ ~' W
.default_trigger = "default-on",& L2 Y* j3 k+ O, k; l9 d1 B& `
},
$ }. U; _: d! i/ L {
( n( R( ^5 B6 ] .active_low = 0,; F# ^, M& w7 B/ d
.gpio = DA850_USER_LED1,
* D: ^+ h/ c _& w2 p2 @, Z0 M .name = "user_led1",. N+ y" g' f4 o/ |& t
.default_trigger = "default-on",
7 u$ O0 e+ M4 N2 Y },/ d6 Y: \/ P! w, C
{9 c6 J& N4 l; S/ C/ z
.active_low = 0,
! d- \* Y( F. O% B5 B! N" e6 x .gpio = DA850_USER_LED2,2 H' C2 b* E" H; L# A1 `2 f
.name = "user_led2", j+ b0 S2 ~5 _
.default_trigger = "default-on",
: k; L5 l |; c7 ?2 a5 Q6 Z5 O- ~ },
& ^4 u: ]$ o2 U3 I" N$ I7 F {% w: G0 }, t) N
.active_low = 0,. c0 R; A( J/ p1 ]3 v. A
.gpio = DA850_USER_LED3,- g9 V2 T, n$ _7 j
.name = "user_led3",3 G4 y3 U& D& _5 }9 E, D
.default_trigger = "default-on",5 B2 h8 L6 C1 k" r* o/ h
},
/ y4 C5 z9 B8 ?7 z};
6 B9 T* w# C3 u$ R* U2 [
) c. B6 T! G, R8 X: S. G" s6 tstatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
: @2 O) |4 G3 ] .leds = da850_evm_tl_leds,
+ |# h1 \6 d& r .num_leds = ARRAY_SIZE(da850_evm_tl_leds),
9 S" l7 n0 B% y: b/ I};
+ b i e: l$ {* _9 L; f4 A5 _, U0 e* ]/ p: \. R, I+ ~8 ~
static void led_dev_release(struct device *dev)
$ T0 p* }, u1 Z6 d2 ~1 p3 K{! |8 y+ {: j0 n3 s
};
: i. X/ ~8 h5 B9 u H* e2 w2 N* o
6 ]; V, _5 n" y/ }& X+ |0 Qstatic struct platform_device da850_evm_tl_leds_device = {
0 o Q; w6 T( o, _5 j4 k z; A* ` .name = "leds-gpio",* q: ^7 T' i1 d' |9 i/ j% @2 j) o
.id = 1,
; R; m* z3 g$ e/ ] .dev = {: D1 ?: z) O! D8 I, ^
.platform_data = &da850_evm_tl_leds_pdata,8 G: \( M7 H- k! S' k! E
.release = led_dev_release,
# y& U- S6 B& A- b- R; } }
, A' b# b( l* O% h* G1 y' e0 b};5 x, M0 z/ u; g; d. b' u% Q
, I+ Q- V' n% c
static int __init led_platform_init(void)
3 p: X. j4 \5 h7 \1 P/ r; A{+ a3 A+ K+ C& M
int ret;1 g- z* A3 q/ n4 C9 Z+ @* k
#if 0% W; g7 ]+ _% V- O: s
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);) ~7 }' z5 H X: I& ~
if (ret)
5 _1 p! B v) Y1 Y( I: Z8 g pr_warning("da850_evm_tl_leds_init : User LED mux failed :"/ O! i$ _. q: c" M9 j2 m0 W
"%d\n", ret);6 }1 f6 z. b1 N3 K4 L' c
#endif$ h8 J: j5 c2 _ `3 u
ret = platform_device_register(&da850_evm_tl_leds_device);
5 [( `! X/ ]6 {9 G5 m if (ret)$ c7 ]" o7 S+ s; K( K% [
pr_warning("Could not register som GPIO expander LEDS");
* T1 [$ T% P* R) u4 D% H7 y% ~ else
' {, l+ ?" H! s1 \ r' w printk(KERN_INFO "LED register sucessful!\n");
8 i" l' Y3 l1 W! e: N9 W6 ]5 B* W; W
return ret;
. A+ I! ?5 C" M! i; [1 ]% z( Y% S}
/ j- U' v' F8 J! }$ v3 V1 o6 }$ f0 x2 P; I
static void __exit led_platform_exit(void); d- j- s' S( f
{
+ n" n) a4 n7 _3 I% x% s! P& b platform_device_unregister(&da850_evm_tl_leds_device);: I, w% y4 H% v# u, N2 d; y8 `
3 Q! O8 j! y8 v G% C& P) b
printk(KERN_INFO "LED unregister!\n");6 Y Q, i9 m$ h% B: k }7 n
}4 h. Y" q, l$ G* }
8 e& q0 E$ p4 W# ?- F+ [% qmodule_init(led_platform_init);
6 {3 r5 f' p; t6 Pmodule_exit(led_platform_exit);! f2 }8 m* A* Z r, D3 y* i( h p# Y
# M% K5 { @0 }+ n# q% C$ [* ^# n6 i
MODULE_DESCRIPTION("Led platform driver");/ {% O) J! A' g5 s" G5 @) _
MODULE_AUTHOR("Tronlong");
5 j& z: m% _( `+ kMODULE_LICENSE("GPL");$ p. f, j/ ?9 U3 G i, b0 o
% q7 G: J2 ^% F7 i% ~
|
|