|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
, N$ `: y0 c4 J6 x9 q1 a#include <linux/init.h>
3 v0 Y( p0 m, f' f3 W#include <linux/module.h>- P, `- `2 m- Q9 W+ q
#include <linux/kernel.h>! n) {6 g! p3 [- F/ j: o
#include <linux/types.h>
x0 k+ d# O. Z+ R#include <linux/gpio.h>
: F; l& ]% e3 z* ^#include <linux/leds.h>+ G. e; }0 _, u+ H
#include <linux/platform_device.h>
8 U- L1 W3 T4 h* b |. }
" c, J( r0 N8 X; T8 n0 `# _#include <asm/mach-types.h>6 c% `$ ^$ I. c3 Q; h# o
#include <asm/mach/arch.h>! y% r C Y" d6 Q+ `% }- t6 [
#include <mach/da8xx.h>$ F! g: J/ C& L0 [9 T8 k+ M
#include <mach/mux.h>; H* D: {8 W2 k4 y1 n2 e" W' {
8 l) ?2 u% M; v7 a
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)) e& X" e" Q* J( |/ |) { R* _
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
3 I+ R+ ?9 J4 m) V* T#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)% G8 v2 A) q/ H' G, i
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2). |- R! g# m5 A! E% n5 t
3 q) D9 X0 R h- I/ l4 X/* assign the tl som board LED-GPIOs*/
}; }( O1 \9 x: Rstatic const short da850_evm_tl_user_led_pins[] = {: y1 e: \2 T1 S6 }* F: ?
/* These pins are definition at <mach/mux.h> file */
8 D$ }, \5 E9 k7 ^* q DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,& ^1 P3 t) l% K7 K2 U
-1
- ^8 X5 [" l. H- a1 ~& @8 [+ ~};( W, d8 w& i! Z, }. D5 O
- P- G& A$ ?2 E5 }
static struct gpio_led da850_evm_tl_leds[] = {* _3 d& |* C! [
{% ]$ M3 p( U5 [6 F% c' E
.active_low = 0,7 d2 o1 v/ X2 u- C8 M
.gpio = DA850_USER_LED0,
5 [/ a' w; Q8 ]( P5 A g .name = "user_led0",
# J' F" m0 t# k4 f .default_trigger = "default-on",
8 y9 Q' G% m# G },
6 G: q( X/ ~: e5 |- _2 G" c {
; U, U$ o, ^' L# U .active_low = 0,' R6 v6 ~4 e. U7 M8 O+ ]' T" D. O/ b
.gpio = DA850_USER_LED1,& I5 U% R* `4 L% |- ?( `! B
.name = "user_led1", R0 I S* z7 \2 u
.default_trigger = "default-on",! ]+ Y- ?" U! \; j7 M2 E
},
3 i4 ]) G7 q6 A7 {; v {
& J+ D1 z X% w8 D! p+ Y .active_low = 0,% R% [$ ~: ]- r! _- U+ l/ C' [' S
.gpio = DA850_USER_LED2,
3 `; _/ C3 B( j% I& m; K: B# z3 Z .name = "user_led2",) J6 ^/ f1 b/ T- `
.default_trigger = "default-on",2 L" m" t/ h% p) d5 W
},# }, E) D: \# O$ V- O
{
. q: k6 R& x+ K& c! d' A .active_low = 0,
3 {4 D$ n' N4 C .gpio = DA850_USER_LED3,
, l o) x/ y" L, W9 Q8 _5 p8 t$ U .name = "user_led3",6 D" C) g9 ]3 `$ ^9 {1 Q" S7 q1 i3 k
.default_trigger = "default-on",& W) ^& ~' `+ G
},8 k8 S5 n8 @2 u- q* y! P- M
};; f% L: b4 k8 r, o4 ~
3 t5 k5 I$ y2 e! |- O
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
0 l, E' |. ?) F( ?* s: r4 i .leds = da850_evm_tl_leds,
+ F" A: ~+ [- t/ R .num_leds = ARRAY_SIZE(da850_evm_tl_leds),% D2 }* a$ x2 Z s
};
' z# W4 y% N& y+ L. O% D% a4 r' I
v- O U5 Z# q" ^. Z/ n- S, bstatic void led_dev_release(struct device *dev)6 T, \1 K I% I
{
+ Y0 P. \1 q& _2 }};$ n! N; g" [1 {4 S. p2 ]7 s. o7 J
3 ?9 X6 x% j, E( S9 c. Pstatic struct platform_device da850_evm_tl_leds_device = {
5 P/ h, d( } }7 w .name = "leds-gpio",
( y: W4 n/ P0 h3 N9 V. R! U: r- m .id = 1,
0 |6 q- ?' [, F: j$ v .dev = {
3 |' f6 o. r) j E7 a0 [4 q .platform_data = &da850_evm_tl_leds_pdata,0 p/ ~' ^9 T& }0 p5 h; |3 A/ E
.release = led_dev_release,
h4 E+ ] [. W } M+ B Q b$ T$ I( W
};" B4 q6 ]; R$ G$ M3 B) N7 H: W6 w
- v* _: \' X; ostatic int __init led_platform_init(void)( c; D# b/ }9 l1 ?- ]% H- ?
{+ ~0 E! O6 C1 U4 ?
int ret;. B* o* h$ C1 y) H
#if 0
7 ]" }7 Z4 C8 W' Q/ B1 ^9 K& R ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
8 t) U) N! i; f! T if (ret)
/ k& f0 h' L4 Z1 O' ` pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
' L5 f: v" F& f8 g; T5 w) X( b "%d\n", ret);. V( a0 f8 O/ g! m( z( @
#endif
' v( K8 j0 y! O2 M5 ]6 G' o. s ret = platform_device_register(&da850_evm_tl_leds_device);
' z: E( E" R E if (ret)8 x6 k( g7 I0 @$ G, F$ _0 l6 O% ]
pr_warning("Could not register som GPIO expander LEDS");! N: U- g, _7 s6 {
else4 M. F0 Z4 k2 {$ h# f4 Z
printk(KERN_INFO "LED register sucessful!\n");' ^( \$ o2 c0 e
# m3 N2 H5 m% E/ o8 w! M return ret;
! I/ W6 T6 ]5 S1 z* b}1 z3 u9 v0 A4 b+ S9 E( ]/ Y
& S8 K* ?) \# [6 O6 W. o# ^
static void __exit led_platform_exit(void)6 A$ k* S$ Y u$ l
{
5 g% F4 n' o4 f$ u platform_device_unregister(&da850_evm_tl_leds_device);
" y6 r; W; P. \8 K- l9 a
9 E) G+ f5 e+ @$ r1 n7 B printk(KERN_INFO "LED unregister!\n");) g) O, n, V# X8 X' X
}9 {) L1 R$ t. @) h" U* ^
. Z' ?* s: K! \. M
module_init(led_platform_init);+ ]5 c6 ^: n% E8 j$ a
module_exit(led_platform_exit);6 M/ q' R6 E) C9 A8 R; ^
3 E. V8 t1 D. L! ~" {
MODULE_DESCRIPTION("Led platform driver");
! P! U/ L* q+ HMODULE_AUTHOR("Tronlong");
2 {$ I N& S' B4 JMODULE_LICENSE("GPL");0 p0 v* M6 B0 F9 X
( ?" D1 F" E$ H, R3 `/ N6 p
|
|