|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
! M5 O( o+ I# X. O& f: A#include <linux/init.h># F1 i- ]" p, g4 }! m
#include <linux/module.h>8 M5 [0 r P6 U/ O
#include <linux/kernel.h>1 _& Z4 k2 m8 V. \; _
#include <linux/types.h>
: ` p; A& i8 m6 t' s. N#include <linux/gpio.h>+ i$ ~) M& h5 d& \: N$ m
#include <linux/leds.h>% s# c& x8 Z ^. F' {! ?
#include <linux/platform_device.h>, U% X& m" j# C/ F1 N- K
" F! q3 P# B7 W( o) j#include <asm/mach-types.h>
: R' z/ V0 M: z5 a; [ @7 _( u5 u#include <asm/mach/arch.h>2 c& H# T, x3 Y/ z
#include <mach/da8xx.h>5 i/ f- G- e8 T4 S' e
#include <mach/mux.h>) ^& M" _5 F5 N2 z& @
! X8 G$ {) f3 I5 }#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)3 d: l8 G" D# f
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
0 ~* s: ]4 u4 K; n8 U, y& E8 \& t#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)/ C! F" T5 R) h S" d/ p8 [
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
2 i( v6 \. l# D7 w; N! H3 D* u0 P) X0 N+ ^! N* T3 z9 _' l
/* assign the tl som board LED-GPIOs*/
- U0 W# o# X! `/ |9 G) Nstatic const short da850_evm_tl_user_led_pins[] = {9 v1 n: a; O& E G1 K, F
/* These pins are definition at <mach/mux.h> file */! L; K2 U9 i2 d' w( y+ q( _+ E
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
6 T2 O, u+ f5 i- M( K7 } -1
. d' b1 a: z% b' M8 J};$ ?8 F. C* Q6 F- |
* y. }5 a# r' r) l# b! P+ }static struct gpio_led da850_evm_tl_leds[] = {
3 e* V, m# X7 W; m+ R {( H3 I8 K" L0 W5 p3 q+ E
.active_low = 0,9 ^3 k9 b9 P5 G$ p; C" G8 Q' c
.gpio = DA850_USER_LED0,
/ N" Y; J2 k1 U! Y7 v. H- B .name = "user_led0",0 t4 X% n5 Y2 {
.default_trigger = "default-on",
* S) k! H$ | x- Z; | },
3 o1 Z0 V2 I& k9 Q+ D9 {) e K6 V {# N, R) p+ N t( R
.active_low = 0,
6 N4 [# y& M8 _% z7 r .gpio = DA850_USER_LED1,
$ T4 r/ _5 v1 C+ U .name = "user_led1",
9 y7 Y3 A. F2 C7 s$ f: w$ J* e' M .default_trigger = "default-on",
7 r8 \# D7 w& v, R% S },
( C* ~5 p; f' c: A+ R/ m {% y% z. x {- P3 _# }# H
.active_low = 0,( Z# p8 H" [7 Q+ _& `$ D }* S
.gpio = DA850_USER_LED2,. R5 D! r/ I& I2 M- s; y
.name = "user_led2",
7 z) E& W1 Q* | k .default_trigger = "default-on",
5 z! `% \# S, ~5 M },# B, U: L2 X. B" V R
{; [) G& }1 n+ m U: J
.active_low = 0,$ | F5 P* @- V( b6 \. f
.gpio = DA850_USER_LED3,; g. i5 B& E$ [
.name = "user_led3",
* \% C& _) m* U8 E$ r" ^$ L7 b .default_trigger = "default-on",0 h5 k% R3 W9 Y& v
},
7 a5 m: o' L4 t: l0 Q$ @/ U};/ T* c; Y; y9 `+ ?
" h. Z- @4 } i; C U% Gstatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
' v8 M8 L. | Y8 G" A .leds = da850_evm_tl_leds,6 }( P' X# o' ] `4 m
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),6 }! Z3 l0 V% N4 [; e
};
8 a* C! f: ~9 X4 \( n6 @4 w: p1 a/ G! s
static void led_dev_release(struct device *dev)) J! ], O: }5 m: H
{
, j7 y0 k9 L7 G5 }0 x};! j9 I" T- z; {9 Z' X- c/ p2 s
" u6 \3 ~( r( m5 H5 }/ W, M/ i( qstatic struct platform_device da850_evm_tl_leds_device = {
3 j5 ~1 W& {/ p/ J1 j3 w' [2 j .name = "leds-gpio",8 q) L: R& u( @
.id = 1,+ l3 Q# ^* E, K( c9 X) n1 V
.dev = {- B$ N% d: C$ j6 W9 R9 Q9 J
.platform_data = &da850_evm_tl_leds_pdata,, j5 a. ^* m; X% ^# b4 j
.release = led_dev_release,: C. i& w7 R. m! L) ]5 \+ M
}; S: m1 J3 O- d. T9 k: b. G; |
};& v1 e" L* M6 Q% Y0 c1 ?% j
' _; N. r- u1 ]1 ?! e7 i
static int __init led_platform_init(void)
2 Q8 f6 x. ]2 E1 M3 I{
4 S( X1 e' C# o) Q* }( r int ret;6 q, r, V1 M f) K0 X
#if 0
8 I8 C) P) ]5 ~' n8 F9 r; b ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);' Q$ Y- `1 o0 W1 Z; ?
if (ret)
4 U! l- s% |+ k9 a" G pr_warning("da850_evm_tl_leds_init : User LED mux failed :"* k) k! |, u- K
"%d\n", ret);$ P% D4 C" W& w* Y( r
#endif
: c, D' X9 u' z# S' D$ i" `3 X ret = platform_device_register(&da850_evm_tl_leds_device);4 n2 d+ s7 P( O0 `6 f3 z* ^# s
if (ret)
! h0 F) M, B0 @ i; `6 v1 ~ pr_warning("Could not register som GPIO expander LEDS");6 ^% Z4 j( B) }: \! i- `
else: R$ O( ~1 O; ^3 o( ?! c+ t
printk(KERN_INFO "LED register sucessful!\n");0 J$ u$ }) h. K# Z7 F+ ^' \
' B' ^% } o" Y% ` return ret;
1 B0 U4 i& Z# p# T}
* P% |2 c9 F+ L2 c( X5 E' O: ?. X3 ~4 F
static void __exit led_platform_exit(void), \! X( j p9 l
{
& P7 M' g9 w8 s platform_device_unregister(&da850_evm_tl_leds_device);
% Q2 u& v! ~; k' B8 e: c! M- Z: }+ Z' E1 E+ v
printk(KERN_INFO "LED unregister!\n");$ ^1 E+ n% u1 J. w$ i7 J
}' O- N" c( X+ N. X9 v- a/ \9 z4 { v
+ H/ E$ j3 x& ?+ Z2 {. V
module_init(led_platform_init);
- J& l$ U2 {& g& K4 J6 gmodule_exit(led_platform_exit);
8 e, O% ~5 B& M+ k6 ~8 r8 x; r3 k/ I- k3 s) R3 o
MODULE_DESCRIPTION("Led platform driver");
6 k7 f0 t- i4 ?/ g6 K: P, HMODULE_AUTHOR("Tronlong");* t6 b% t. v; s4 A. I$ G: K* K
MODULE_LICENSE("GPL");
* \2 Y+ @3 r( T6 v/ X* F7 Q3 J6 W$ \5 C& |" e; T
|
|