|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
( M5 h( G9 K( c+ {: D#include <linux/init.h>
: o" O7 w# {0 S2 q3 p: ]#include <linux/module.h>
- I' M% C$ i" f- h#include <linux/kernel.h>6 [* X6 n- d: j* g8 `) Z/ D: r* g l% F& G
#include <linux/types.h>, K" _2 k, [6 x! N, Z$ B; o7 Q; Q
#include <linux/gpio.h>
3 z9 e; Z/ v; J) u3 P a7 L#include <linux/leds.h>
4 p9 P& O$ ~4 }0 P2 j4 {#include <linux/platform_device.h>
/ n. b. n5 v4 M/ B f, k! V& `: N8 u" \$ W) ^; r/ |* V
#include <asm/mach-types.h>& m2 y0 L+ Z% w- c, s; H
#include <asm/mach/arch.h>) t0 G8 }0 G# }
#include <mach/da8xx.h>9 ^% v7 [/ c+ [- i/ j6 ^7 U
#include <mach/mux.h>" o0 Z( R% G/ V7 K
+ F# U6 y# K0 p. o$ m/ @3 ^& I$ ^5 z$ r#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)! d+ |3 e c. f4 V/ c' @* H$ H; q
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
" r" t& u$ J9 ?4 l+ w9 Q* n#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
; @/ T Q5 {, ?#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
$ Q, T8 q4 k6 `
/ [! A% k+ z/ J0 o( s7 g/ d/* assign the tl som board LED-GPIOs*/, }2 a3 l2 b/ ^7 m
static const short da850_evm_tl_user_led_pins[] = {
* |$ i* P) h5 k2 C7 s+ B /* These pins are definition at <mach/mux.h> file */
, o# x0 a1 H8 M& A: s) q DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,: o- R8 ?- L. z
-17 }( z/ G4 K' M4 { s
};7 L5 N; }: k% ]1 Q8 a6 {
5 ?9 T8 r0 C2 V( ~6 v( T; U" W1 gstatic struct gpio_led da850_evm_tl_leds[] = {0 _5 B9 U; e; R; G
{ E5 w, o" r/ Z. ]
.active_low = 0,1 x7 x/ z6 S. N
.gpio = DA850_USER_LED0,7 v6 ?( |# d' j% p
.name = "user_led0",
`) f, p* W( M' j; h$ p .default_trigger = "default-on",7 i; s* p7 U2 {, r r
}," L& d3 Z7 o D, [( _
{
8 c- A- l4 F6 T/ c3 ^/ o .active_low = 0,
! ^5 \& U& \) G& ]0 T .gpio = DA850_USER_LED1,$ l* X; o" d. h/ C5 V
.name = "user_led1",' L& d) G# B( g* t2 W
.default_trigger = "default-on",
3 _' M' ]8 U% r0 u# o# [ },+ C, P$ [8 r& _5 s
{
+ ?0 {% u8 o- \ .active_low = 0,' }/ A( Q9 p, F8 q1 \
.gpio = DA850_USER_LED2,# h4 ~. r u2 W$ r1 \
.name = "user_led2",
& [. x3 p1 B/ ~- d# F .default_trigger = "default-on",/ D. Q" s6 {) ]2 W# k
},
( g' C! @5 o- _6 i6 A' M {) D3 a- s3 |7 ]
.active_low = 0,
0 R, g. l4 S- x: ]; s7 L. L; c' P5 b .gpio = DA850_USER_LED3,
( s# R2 M" q6 Z1 V% E8 ` .name = "user_led3",
7 ~% x, I! V2 C J .default_trigger = "default-on",
+ C3 _9 {$ K# j7 w, N },
& ?* [/ v' y n$ h};' t0 W# n8 N! n w+ q T; B( ? I
9 X0 A) d! ]" [7 b8 ?. X0 N( pstatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {: u! P' F$ ?. |3 G
.leds = da850_evm_tl_leds,' Z5 y9 ?0 ^0 \3 E
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),
2 a1 g3 G5 }3 s$ s6 W9 z# N};
$ Z/ y- B& g# a9 B- \
5 `0 f- R' M" mstatic void led_dev_release(struct device *dev)1 o: {1 {' T* E' e* V5 u
{3 W- T! m/ V8 [6 k
};
8 q# h, T0 X% J
* ~* k& r" `/ y J7 `0 N' Hstatic struct platform_device da850_evm_tl_leds_device = {, N1 N! w+ s0 C: w: N3 p' o
.name = "leds-gpio",
2 f- ?3 W, z5 U) S5 o( x% y .id = 1,
4 _4 j$ m6 n( g .dev = {3 d: s1 o+ Q9 r D" r) o" }5 x" I* d
.platform_data = &da850_evm_tl_leds_pdata,6 U9 C3 z2 m+ C5 P. u* x
.release = led_dev_release,$ r% l: V; x9 K, H) m; ]
}: d Q6 `) ^7 a# l% C
};
6 m- `, L1 p/ I. H( ?# t4 k8 l) r# s0 D# X
static int __init led_platform_init(void)6 `2 ? d7 c J) u7 J
{, C3 I4 ?7 o; q+ U
int ret;
" i5 C2 G. L( k#if 0
8 g7 j( T0 \0 K" S9 V( M ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);% F; M: U1 V2 `. I: ?* n Q/ f
if (ret)
8 X4 P, \4 K1 _7 T' Q( H pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
: N- U1 z$ g6 S! B "%d\n", ret);9 [- S/ F* D8 j8 O7 P( t4 T
#endif6 l4 ?. r; @, Y& ?
ret = platform_device_register(&da850_evm_tl_leds_device);3 [# M2 q2 f* a7 O3 w+ y5 X" i
if (ret)
; p: }# @- W/ i* c W1 W8 d pr_warning("Could not register som GPIO expander LEDS");5 ~: |6 t& t/ ]( R
else
3 k/ X* _6 h8 Q9 x+ { printk(KERN_INFO "LED register sucessful!\n");
( J( t7 U2 c; n- J) S. @' F0 Z0 h% Q: ~* c2 Z* Z5 A" P
return ret;
0 S8 y$ v7 }2 a* a}
' `8 Y& a, V3 |# [& U i' L3 @( i5 K( l, x
static void __exit led_platform_exit(void)
* L6 B! l. A* i* E e5 A{6 u' T( W3 |( y
platform_device_unregister(&da850_evm_tl_leds_device);
9 U! T# u4 p2 s, F% l1 h5 k; x L5 f2 S+ n
printk(KERN_INFO "LED unregister!\n");
0 H# o; z! p- U) h# @7 J7 ~}
0 i3 V" a4 l" A& q. v; z5 ?$ { k8 S& x, M# P, D
module_init(led_platform_init);) a+ k) s. \: }6 F1 p
module_exit(led_platform_exit);% k2 ?6 H: y& s* ?" E" x/ z
" Q( N0 m4 x0 J" |& O1 `MODULE_DESCRIPTION("Led platform driver");
. P# N4 W: Q- S: s1 f) WMODULE_AUTHOR("Tronlong");
; X3 e8 |3 N% ~% X+ Z6 H2 {* hMODULE_LICENSE("GPL");, @8 J9 }' \. t( g% F$ d8 L
0 |/ E( V% d/ N; |$ ^: v, d8 S1 K3 P |
|