|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
( b- Y/ z* ?, N#include <linux/init.h>, }& {# _8 d H
#include <linux/module.h>5 C8 p# I) `: R) o$ E4 h) J
#include <linux/kernel.h>( a/ ]$ u0 d5 o6 d# U! j; h3 p
#include <linux/types.h>
' D4 A/ n4 t% I$ V# q6 }: P#include <linux/gpio.h>
) h, {7 }: k! z- K#include <linux/leds.h>; f" v3 @# w) N% w8 C3 p
#include <linux/platform_device.h>, p9 Y* j) Q% X& f
0 t! K% `; O- s6 X. ]( `0 D
#include <asm/mach-types.h>
# O `; m$ G+ Q6 Y! z#include <asm/mach/arch.h>
6 A3 x X5 Y- @% x+ `- D; ^! w#include <mach/da8xx.h>
, c8 y$ [$ i* k#include <mach/mux.h>
! B2 I4 P" Z6 \/ U: ]9 Z) D8 t9 ~- a" P* B: e! v
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)# E3 A+ B0 \/ R a& M- Z
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
" t6 l" f9 N6 a' e+ k#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)0 [4 k* r# }* [# w: ^5 a! Z- M
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2). M+ O) f. g. q* ?
: W) m b7 U& h5 p% @7 U/* assign the tl som board LED-GPIOs*/0 Z' n+ q- Z, j3 c6 ?& |: B! V
static const short da850_evm_tl_user_led_pins[] = {1 @& ^7 `0 d( F1 v
/* These pins are definition at <mach/mux.h> file */
$ _9 q, J& V' u# u j) O DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5, |2 {, J" c" \& @2 ~
-1$ J1 C' \( i) c) h+ Q( P! u
};
6 Y0 A) O: {2 q- p- i7 h, `6 r/ [# ?% r$ X
static struct gpio_led da850_evm_tl_leds[] = {
# q+ Q; c, t7 U6 W5 v8 k J) P* O {# z! V# g% E0 k" f# M
.active_low = 0,
1 A. v$ K5 ]0 y0 N .gpio = DA850_USER_LED0,. R; |$ ]* c5 }1 r# ]9 Z& [0 P! Y
.name = "user_led0",
; M3 `9 L( V8 A' O6 l8 u* z .default_trigger = "default-on",
+ `- @' c7 G) I4 D( @ },
; X, H7 M U% n4 o: i {' m8 B+ _$ w9 |8 Q. x9 g
.active_low = 0,8 a5 _& I) ?, @) _2 u* c3 p4 k. [+ m: u
.gpio = DA850_USER_LED1,9 k) f: d6 V3 f$ a5 a& @- V
.name = "user_led1",
1 C: l- B$ e, D. n6 ]' ^( a( d3 f .default_trigger = "default-on",
& O7 j) s0 Z x },
7 j4 |% y9 J; n {
$ k: C, g2 r$ o/ p* q1 ~ Z! { .active_low = 0,
+ c2 G7 q# L% j' o! Y .gpio = DA850_USER_LED2,
" l+ s) x5 G; f2 L& p .name = "user_led2",
) b" |+ M% ]4 r7 a) o# ~ .default_trigger = "default-on",: a! q7 ] S6 [" l# D1 M) z
},
. h+ i6 ?! a( C% [ {+ o( U" F, Z- Z+ x2 f& e) k& N
.active_low = 0,2 }) ?8 m5 @, _& K+ F2 k
.gpio = DA850_USER_LED3,5 Y1 n, z& A$ c8 A
.name = "user_led3",; T' D9 g8 m3 L1 ] o5 r( I9 A/ \5 F
.default_trigger = "default-on",
- l& g* t' n2 ^( r+ p4 s" Z+ f8 H },% i; n: \; l( o7 ^5 f1 V9 w
};
+ J+ `* a, e2 ~+ p6 e' J3 {3 S0 B f) A
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {/ o% Z' Q1 ^6 Q# \ }, m- a& ~* i
.leds = da850_evm_tl_leds,
6 L* r; d6 @2 z .num_leds = ARRAY_SIZE(da850_evm_tl_leds),
0 V0 y7 y; P; w2 h};
5 r; Q/ {" _( L0 N
" A) T( {, u0 o, fstatic void led_dev_release(struct device *dev)& n5 C6 X) o8 B2 R: e7 q
{2 K8 L. q% H2 E5 j
};6 l2 C4 r" N' R& I g6 l( s0 L+ I
& c6 J9 d" Z/ C0 M
static struct platform_device da850_evm_tl_leds_device = {. y$ [- q/ ^- y$ U. M Z" P" X
.name = "leds-gpio",8 s4 X T/ H* n5 {2 P
.id = 1,5 r$ y" z2 I ?8 r/ f* C/ N
.dev = {
8 D' s, g4 c/ G( x7 L .platform_data = &da850_evm_tl_leds_pdata,
* s" y! T4 t7 A; f9 e' g ~; E .release = led_dev_release,
) B+ x5 R, h d3 k6 b }8 H7 J* f2 Q* U* L
};
$ T. [2 V. ?: E& @5 H/ d0 V2 |
2 c: ^' O. ?- r1 y: ~! z( v ~static int __init led_platform_init(void)
" G" H+ } E+ D( y( H{
4 ~# Y9 M4 n" V P! o int ret;
5 r8 b6 ?% r9 x: Q+ V3 f! U2 s#if 0; r/ _/ M* i' r& J1 [
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
4 t: O/ y$ b" \( g: D' O6 G! V if (ret)" Y/ O+ U% Y3 }* D" ]
pr_warning("da850_evm_tl_leds_init : User LED mux failed :": |8 U0 J1 K5 _' n; M L6 b
"%d\n", ret);
1 F4 ]1 x* Y3 P# V. }#endif* d m1 W! ]5 T3 ]: V
ret = platform_device_register(&da850_evm_tl_leds_device);+ S. w% k3 t5 A+ {0 u
if (ret)6 j+ ~- c' i9 @: a% c9 ^& a
pr_warning("Could not register som GPIO expander LEDS");) b1 V9 o6 k& g. }6 L8 s
else
, T) N/ g7 w& Z" w* o1 i printk(KERN_INFO "LED register sucessful!\n");
( M' f' t$ Z2 O# M3 y6 c- F$ @3 N4 X8 ?, c& N- u
return ret;
$ v9 V+ a1 |" F" G}
: L/ c# \* H; v7 ?* V* o6 }, W/ p# h9 H$ ~* E" c; \& X8 p
static void __exit led_platform_exit(void)
6 t6 w& E- U8 z! L2 O# D9 V{: C3 N* s' k4 O. q; J- n& v
platform_device_unregister(&da850_evm_tl_leds_device);
% j# S8 F# W M) i+ x) \
9 l/ {. V: V5 o! Q M. l, X% ^ printk(KERN_INFO "LED unregister!\n");/ _# Q9 _' ?. ^& v4 ^) W( A H
}6 O7 V# n) [3 V$ l9 D$ b5 l' p
6 v+ l6 ]( @+ `+ W
module_init(led_platform_init);6 X$ X( R# F K
module_exit(led_platform_exit);
4 V9 f: D7 N% C
, x: |0 x3 P ?, Q1 d/ L2 o X: fMODULE_DESCRIPTION("Led platform driver");$ U" x, a/ x% ^; K
MODULE_AUTHOR("Tronlong");
7 f4 W; ]0 Z* v0 q, j% t) zMODULE_LICENSE("GPL"); j6 G" N( T2 X6 {* q, g) j/ s
# Q I- b/ i$ M- }0 Y$ w- S# g |
|