|
|
求大神给下面的程序做注解,请稍详细些,谢谢。6 c* a4 j! F( y% x
#include <linux/init.h>1 r; e7 N4 h$ U& e2 c2 ?
#include <linux/module.h>
2 {* ?0 ~6 ?4 j4 m#include <linux/kernel.h># K6 @0 P! o' P( R+ `2 g
#include <linux/types.h> [7 W7 a, |# q% w
#include <linux/gpio.h>
" H5 T$ g+ s# C- T; O( r( d. t#include <linux/leds.h>
- h; I5 h9 B& X% T3 R5 {#include <linux/platform_device.h>
( _" T- `, S3 c+ a [
7 D) p8 O' P3 W" @$ w#include <asm/mach-types.h>
* L" p" v ^ _1 a8 X( n- o6 M#include <asm/mach/arch.h>
: \6 F8 n0 S8 B" m#include <mach/da8xx.h>% V* T# C: m' m( L& ^1 ?4 B4 u r) R
#include <mach/mux.h>1 e9 X1 ^; \# ]/ y% F8 W" `
. P$ D# \7 y, R
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0), C4 T q) ] c0 }2 W
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)1 z' z6 P& M# B0 b
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
5 b, g" u( V- D" p#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
; V- I, }* F% A7 L B: I" y- _" k' @
/* assign the tl som board LED-GPIOs*/" w; p+ R: P+ \
static const short da850_evm_tl_user_led_pins[] = {
7 k `/ K/ I* J5 |/ u- p /* These pins are definition at <mach/mux.h> file */6 ?. K8 O) n* C9 h7 w8 l
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,* X* A. x: B% }4 a8 ~5 }* s8 ] Z6 P2 n
-1
) F' Z5 c- `: w" d- h& I9 y};
! J6 f: y- m0 `, ~+ @6 f/ j5 B) V' ~# g7 F. \6 K( f
static struct gpio_led da850_evm_tl_leds[] = {
8 t- a+ Y# t/ G& b {2 N, d2 n1 w5 |
.active_low = 0,
+ w+ P; r( D/ g* Z3 i4 O+ }+ F .gpio = DA850_USER_LED0,
/ H% f5 E! C0 u) \ .name = "user_led0",
d1 d, F6 P3 g8 ?; h' ]# |% O .default_trigger = "default-on",
: b- j: G5 w" b) y; S" Q },
8 N8 B1 v4 w7 S8 g4 b/ p {" j7 M* Q Y0 R2 E
.active_low = 0,
) [2 }9 t5 @- R& z/ J, Q* } .gpio = DA850_USER_LED1,* }' k5 P. o; q
.name = "user_led1",
- z2 O' Z, b \- @! l9 o .default_trigger = "default-on",
& l. G# h l, n, g },
3 b6 m- r, `' G+ R" ^ {9 P, l4 x8 `) I" L6 k+ N( e- E6 d
.active_low = 0,
4 _; G" E* e* n8 K .gpio = DA850_USER_LED2,
, @7 K8 o6 G4 A .name = "user_led2",
1 l0 H4 F* [% R+ X0 B* X .default_trigger = "default-on",
6 g* E" l! n" u' O },
( r4 n" r8 s9 d% Y) B7 N {
. D3 R V$ e* p7 Z, b/ N .active_low = 0,
! b% h9 p9 N. q) C .gpio = DA850_USER_LED3,
/ c9 `7 V3 c9 W, s- ^6 Q+ P .name = "user_led3",
! `9 x/ U" G/ t7 Y8 Z/ r .default_trigger = "default-on",4 ~9 w6 q/ {7 F# J
},8 [% }, ]: s) b, o- F
};, b, l* j, o, m8 t
& r) E Z4 l# t: h0 _ f" Y6 f/ Hstatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {* X; R9 ?: B& N3 r9 z# {! e
.leds = da850_evm_tl_leds,
, C+ L7 R6 N4 T& U- C .num_leds = ARRAY_SIZE(da850_evm_tl_leds),5 _' _8 i$ j R& B N/ G
};$ }# S9 r3 v: O1 ~, z, f6 o9 ]: G
: {8 m1 ~3 t5 G; B+ tstatic void led_dev_release(struct device *dev)
* @" o: t$ K+ h% x" C( W4 Z2 R{7 ] j2 s; f. o) R0 Y% `! F& S( r
};
3 C1 u& H* }2 `3 H/ ~( L9 G; I* C: n9 Q0 o4 ?
static struct platform_device da850_evm_tl_leds_device = {, p, `6 g# j1 Q3 A* e
.name = "leds-gpio",1 r( ~0 Y- q* I: B
.id = 1,) C2 j0 U/ L6 ^/ ~' L; {
.dev = {
8 i- `( l" D/ P4 U* P. e/ r .platform_data = &da850_evm_tl_leds_pdata,7 [5 x. J* y- c Y, Z
.release = led_dev_release,' @5 B5 ]' P& E/ y
}9 t( \2 W3 B) n$ L$ b5 L) J
};/ ]7 |! H3 i4 S3 m- ^4 s! e4 m
6 x, {+ Q( u5 p: d* g9 C2 J" Qstatic int __init led_platform_init(void)' @2 @5 q- s/ d' m' @0 N: L
{( ]' o1 e1 g( y* \% ~+ Q; d1 E$ f( L
int ret;
: B; a0 o# n8 `#if 0
' k- @4 g8 U0 g7 _ ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
2 H: l3 s! Z2 J1 z if (ret)6 [ b0 N; t+ a1 ?
pr_warning("da850_evm_tl_leds_init : User LED mux failed :": m) F5 v! q' b% t5 V* J
"%d\n", ret);; X7 }) @9 e( P5 _+ `8 L" @+ }( S+ m& j
#endif; G/ `( K! \$ l8 q
ret = platform_device_register(&da850_evm_tl_leds_device);9 t$ W6 l* t0 j) L# k% r" s
if (ret)
, `1 L. F, ~+ C; k. ]4 r) H pr_warning("Could not register som GPIO expander LEDS");
; q! V! r, T6 E# C5 v, Q/ \ else
$ Q% f+ G* C* |+ d printk(KERN_INFO "LED register sucessful!\n");# e; l8 Z0 M& m4 i
7 ~0 v$ i. }* Z" M8 x return ret;0 F- Y/ C- {2 ^- j$ X: U# ~8 u
}
+ Q* m# i& W' Q0 B0 h3 ~; e* ^ h8 ]) |+ |$ h
static void __exit led_platform_exit(void)0 {) v. V- ]2 b- e1 ]7 q
{
' \0 M2 g7 [- ~# l( U6 h# k1 T platform_device_unregister(&da850_evm_tl_leds_device);
2 K% Y! |2 v* V# i' g v$ a# E: `3 V; I4 ~) l$ Y# F+ g8 h
printk(KERN_INFO "LED unregister!\n");
& o- j8 H( A" L: H O' U& C}
, j1 {: s: _9 Q' H$ t/ m3 R# d# a$ F3 e
module_init(led_platform_init);
1 \' L4 o, a1 f* emodule_exit(led_platform_exit);- y7 z8 b& z4 d9 l: O- X
6 W1 F c$ `& \2 c) X" J
MODULE_DESCRIPTION("Led platform driver");( T9 t& _3 C- p0 |2 p
MODULE_AUTHOR("Tronlong");
j+ W0 j. _2 g) B0 W$ ~MODULE_LICENSE("GPL");
: j# b( x" n, U. P
2 ~% l; Z& K4 D5 ?, Z1 P: y |
|