|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
# q; E$ e' O- U8 u V/ A4 i#include <linux/init.h>
+ V8 w/ S: e# m9 f& h6 j#include <linux/module.h>
6 v( Y7 f* I, |) m9 Z( J# D [: S#include <linux/kernel.h>
0 z9 ^4 A9 o: Y. v" o' j. g#include <linux/types.h>! w/ v! ~1 A0 B" \1 Z' Z+ u
#include <linux/gpio.h>
- j. c" l" ^ u# ]; P#include <linux/leds.h>; u- N; e# ?# `. T
#include <linux/platform_device.h>! | s7 ~6 B! d' R6 G- C) P0 f0 R
& R- `" y3 L: a0 T
#include <asm/mach-types.h>" k" I3 O+ ~8 E
#include <asm/mach/arch.h>% A0 P) T! Y4 Z5 w
#include <mach/da8xx.h>
1 j$ Q$ ]: ?# \* x#include <mach/mux.h>, f0 [' j1 J: ], ^& @
" Y% i. L5 B1 F/ U) f5 E#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)) z* J( B! I8 i+ g
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)! S& j& G$ z; U" I7 b$ S
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
# b L8 C1 m! _9 |+ K! d& x#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
. N7 p0 E0 j6 `! c
3 a: L x& Q: w/ D1 s' g! O( i/* assign the tl som board LED-GPIOs*/
( I& a2 W) u' F. ]3 Z% Fstatic const short da850_evm_tl_user_led_pins[] = {$ ~* {3 Z8 A. {& P2 ~0 [. \7 o
/* These pins are definition at <mach/mux.h> file */
( d! ]/ B. a$ U& w DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,3 Q& b" r: x9 z* `. q: m3 V
-1
2 N! e% z/ \% D' d! `* y! x6 o; {};2 ? K3 s2 t y2 X
0 R8 M7 m- I% R S! m6 gstatic struct gpio_led da850_evm_tl_leds[] = {: S% F/ K1 @; W# U6 Z( e# q
{
# j$ R. L8 I; k% k2 W1 Z/ M; j .active_low = 0,$ j3 r; B5 s1 f) E# L8 u
.gpio = DA850_USER_LED0,5 L% k& U8 z' x5 A
.name = "user_led0",. W g% m R9 ?3 v2 m, w. G
.default_trigger = "default-on",
s( l# U0 }" O0 K },
9 b, H2 Z0 a, Z6 F0 I {. Q4 i% _5 v4 P Y, `
.active_low = 0,
# s8 e4 h! T2 ~3 g2 I4 C .gpio = DA850_USER_LED1,1 \, x; ^# S% o! X
.name = "user_led1"," r9 s' ]# ^" G i; B) P- u E
.default_trigger = "default-on",
( c8 C! ?& a1 _1 i },8 u, `1 p4 O9 z/ U' { R. r# t7 e1 ]
{7 S* p; m4 ^3 J0 ]2 y7 L0 F. O
.active_low = 0,% R1 a: O, s; k9 O- k8 W. x
.gpio = DA850_USER_LED2,
% ^8 Z K6 t) Q6 A8 _ .name = "user_led2",$ r) w5 L3 `* O6 d, Z) n3 t
.default_trigger = "default-on",) d2 y& R: s* T0 V
}, ?$ Y) v0 J8 N# m
{
1 `. c' C% H: Q1 K. U8 g( `6 G .active_low = 0,8 \$ y; ]; j" C" _) m8 n( O
.gpio = DA850_USER_LED3,9 _" h% z- v! E# U& ^
.name = "user_led3",
/ i3 ~" z: q9 T1 c7 a .default_trigger = "default-on",! M2 ?3 p' R9 {
},! p1 _; v: m6 e) g2 h3 ?
};5 _$ R8 g% l. \4 D5 K! Z8 q
3 W% m% a; z7 g# a- F4 vstatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
9 f# j6 B M. k+ T* F( E1 ^ .leds = da850_evm_tl_leds,! q* O! r& V% h' Z2 `( A% i% c
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),7 A( w B+ q0 o
};* g& I: c3 e& D" ~1 i
# j2 f, x4 S; c5 i2 [ T' K5 Astatic void led_dev_release(struct device *dev)3 ~5 M# l0 P0 u: T) I6 L9 j5 o. \
{# o$ l, l" v9 g4 P+ u0 i
};
% e9 |8 H t' z' x* ?$ w8 ?+ b- N) H4 L- d! p
static struct platform_device da850_evm_tl_leds_device = {
6 J- [; F1 [2 d1 W" u7 a .name = "leds-gpio",
6 [: C, N( O) M% c8 m, ~/ R .id = 1," R. x, \! m" g2 s8 |! h
.dev = {/ F% O. ]. |& m/ P
.platform_data = &da850_evm_tl_leds_pdata,' H' a0 B* w! u$ Q' z! B
.release = led_dev_release,
# W9 l" L) Y! V$ v: ? }+ r m- I6 _( n* Q
};8 M, X" m. l; z+ n& s
- V! g- ^& V2 f. qstatic int __init led_platform_init(void)* r% z. d) h% u3 ]& Y+ z# R5 P
{
2 P7 f9 n; h8 H+ y! o4 C0 W int ret;: K" @$ H+ U* F/ s% b$ R. L# w5 v
#if 0
! J) q+ }7 k |5 A. C0 l0 c/ J# B( h ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);6 \0 k4 u+ ?. g+ m7 {6 u
if (ret)
5 v g/ K8 E, I pr_warning("da850_evm_tl_leds_init : User LED mux failed :"( B+ I/ R2 B2 o
"%d\n", ret);% W) w8 w% ~3 z2 W2 R) h7 K( q; U8 o
#endif
: O+ ]$ ?3 f% D: { ret = platform_device_register(&da850_evm_tl_leds_device);* h; _0 f6 Z% p2 G; b
if (ret)4 a. |1 E* C& Z& v
pr_warning("Could not register som GPIO expander LEDS"); G p" y! y; C/ e3 F' ?$ U9 G
else! T9 J' X& E* H& H3 B
printk(KERN_INFO "LED register sucessful!\n");
* x c, h7 E. u4 d: l8 @1 {8 n
, x) `$ ^! m0 T. k8 J& K% K* K return ret;- X' R4 z O; T% q, Z
}' C3 ]( i% l% }! J0 a
7 |2 U" x4 `) m$ }1 a
static void __exit led_platform_exit(void)3 d9 q+ R- s: W* O
{, _4 J2 w Y7 b7 W/ z/ a; v
platform_device_unregister(&da850_evm_tl_leds_device);( i6 n% I. J3 L2 ?# T. e% |1 ~! u9 Z
% i. q* W" Z0 ^/ `& |! _6 E" [
printk(KERN_INFO "LED unregister!\n");
6 N2 V$ z, f) M# y# w0 w# V% K& I}4 R/ Q2 h* v1 u( s; v6 B# S
6 h* m6 u6 N! O
module_init(led_platform_init);* g$ E8 K, h7 U% T2 ?
module_exit(led_platform_exit);% g5 Z* F4 h- L* Z
% T( N. F; x: S4 k8 K
MODULE_DESCRIPTION("Led platform driver");
8 p- q1 n; B6 @# \2 RMODULE_AUTHOR("Tronlong");( U4 u4 h( F' x$ s
MODULE_LICENSE("GPL");
: k1 m9 Y4 X& e- Q8 d" ~: v D
0 { G6 B: y+ F* p v1 R! S& M/ ? |
|