|
|
求大神给下面的程序做注解,请稍详细些,谢谢。; g2 Q' i$ x/ |+ T% b7 {. |7 `! v
#include <linux/init.h>8 K0 L# r2 [. n
#include <linux/module.h>
+ W* A6 o" R, O. X#include <linux/kernel.h>
$ z7 j/ j8 C) x; ~# F1 b#include <linux/types.h>
6 X5 S- S7 o1 h& I4 ^1 S$ a3 A5 x$ `#include <linux/gpio.h>
6 E# r, H, g* Q& ^( t#include <linux/leds.h>
# I+ R6 L( W; k% T& |3 B+ K#include <linux/platform_device.h>
. i% e$ T& ^. `! B) w' \: k. j# O& ]) Y
$ G) D/ i% o% m/ _#include <asm/mach-types.h>+ ?4 A! i7 z+ x4 P. N7 P
#include <asm/mach/arch.h>
# K, @, U7 w2 C1 w: o2 N/ S% d) M#include <mach/da8xx.h> X# U* L! ^2 b0 }
#include <mach/mux.h>
- @ G# w' F( Y( ~, H0 t4 e3 d9 l. `1 U* F, w
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)6 Z7 V3 `, L+ p+ ?& X# R; ^
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
/ r$ X, z6 D: z6 v; b#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
S& ]% q* \; I% v& G#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
2 ^. i S/ y# B( }
% j; c" M" s4 Q U8 |7 e/* assign the tl som board LED-GPIOs*/
( F* c6 J( g: }. Qstatic const short da850_evm_tl_user_led_pins[] = {0 ]( _' C% [& W2 s
/* These pins are definition at <mach/mux.h> file */
; z+ x& k3 q- | r% A# P DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,/ p1 y& n+ m. H7 s5 T
-1( B: ^7 R1 w1 F4 r. u
};! {8 P$ K; b- a5 P' g
( P$ a+ S8 ^5 l( M: \$ Estatic struct gpio_led da850_evm_tl_leds[] = {
7 S6 F4 o6 z8 Y3 h- S8 A { l" H) g7 P1 {* B! r! A( z0 Y( D. r
.active_low = 0,
: v7 p) f! m1 I .gpio = DA850_USER_LED0,
, j g0 }$ O Y2 J .name = "user_led0",6 a- t% W2 x; [0 B0 B8 [# P; O2 u
.default_trigger = "default-on",5 @$ e$ A+ s7 S7 k. c* q
},8 D! E9 c/ {7 w, H- g8 y
{& s V( N- F9 e
.active_low = 0,
7 A' S2 r8 H1 b0 u .gpio = DA850_USER_LED1,5 B/ [( e+ g: [+ h" @8 q/ A
.name = "user_led1",
7 M6 w7 k/ k1 a0 v .default_trigger = "default-on",) v) {! ]5 ?- T* R! z
},1 ]5 y7 p: D( ~* I2 L( G
{
% d) K6 {$ c% n1 v0 Q; c. k+ A .active_low = 0,
3 _& N* c- ?4 g2 O" _+ E) T .gpio = DA850_USER_LED2,
( X/ V! w, x% n4 P+ d" W .name = "user_led2",: |( o, R; L7 q* f; A6 A# _
.default_trigger = "default-on",
% _$ ~4 l$ g; Z1 j1 I% O3 S },
3 M( G% z) j% }( m k8 V, _1 u8 L {( ?. r; H5 m5 X
.active_low = 0,6 k& h7 F$ ~' Q" X
.gpio = DA850_USER_LED3,0 T4 C; T L9 U( f4 U0 S. i
.name = "user_led3",- ^5 {, h; {7 ~! A' K3 X' c7 [
.default_trigger = "default-on",0 T& u8 `5 K' z+ I0 Y4 v$ D
},6 d/ l1 }- g& v/ ]6 b
};
5 I+ v, Z2 e! z2 `4 A' e
& x4 i; o0 h- c& F8 ]static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {# M& l: Z# F+ |) l t
.leds = da850_evm_tl_leds,
0 |& `0 f2 T2 E1 u .num_leds = ARRAY_SIZE(da850_evm_tl_leds),
" D+ X L+ W/ f& H};
b( ?9 i2 \% }: p: z- B7 o! n' Z+ f' i# q: r" b& }
static void led_dev_release(struct device *dev)
* R6 k0 c& I+ ]$ y{; B, _% B3 v! F0 j2 @6 V. B' i
};1 q V9 w- F( O: c' e# X
3 \# {' S7 @5 _) lstatic struct platform_device da850_evm_tl_leds_device = {
% @7 w- Z' v9 a c .name = "leds-gpio",
3 I5 ?! u# z R8 r; O .id = 1,
; B& _! v/ N4 K" q3 Y .dev = {, \* l+ Z _" q: W" ~8 `( _
.platform_data = &da850_evm_tl_leds_pdata,
4 R' |# o3 ^9 d! w: l& G .release = led_dev_release,) e+ f6 ?; J! z& P' |
}
, @! Q* N" }& V8 n};0 E+ j* v0 t& P& O
9 x5 M* b: U v8 C9 R. k! A) N/ ~static int __init led_platform_init(void)
" h* [& N; R2 |+ L+ V! f{: Y4 b8 ^% o( Q+ f. J
int ret;5 C2 B# ]( g+ [. h# Q' n% W
#if 0, F* F8 H: M% |) Q- L
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
- S3 V3 `- u2 B1 p M if (ret)1 l9 A+ s- }% ]! U3 A
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
# f) }& l- R) { "%d\n", ret);6 T) e+ ?2 P% S# `) E
#endif
. _7 g+ M4 f7 x) a ret = platform_device_register(&da850_evm_tl_leds_device);
% c* ^( _; G# j! g0 k5 T! b8 t if (ret)
% D; u: L( [' \! i& q8 q pr_warning("Could not register som GPIO expander LEDS");" F0 U2 W7 o) t6 R' U& m
else N6 X2 u2 x1 {' a! l' x' r
printk(KERN_INFO "LED register sucessful!\n");
& `" ]! o* m% h2 J; F9 F9 B, z, l! g& |& ~& V s9 i
return ret;1 T5 L. ?( Z; C) B" ?% Q
}
# S: N) Y8 F5 o" b) Q1 R* @" f" [# c/ K( a3 `5 Z4 r, p/ m, E2 `
static void __exit led_platform_exit(void)
% i0 [9 X+ \( B$ ?2 ]{
# Q( w1 Q4 v, e. J& y0 q- m8 |* G platform_device_unregister(&da850_evm_tl_leds_device);
+ r/ F# M! w9 O$ {! g b
# n( b8 \- f0 }2 |0 V- t printk(KERN_INFO "LED unregister!\n");+ I% T, J' @2 v
}( ^. f# k0 M7 V4 x/ F
( a% q$ i. u. ^
module_init(led_platform_init);
( O9 P) I' C/ Omodule_exit(led_platform_exit);
2 v1 O& h3 _/ A' @: @( ]& G
0 l, `& E2 }! o$ N# ]$ S9 d- A! pMODULE_DESCRIPTION("Led platform driver");
3 ~" E/ v5 L7 wMODULE_AUTHOR("Tronlong");1 L6 n0 ~" t5 k
MODULE_LICENSE("GPL");3 n( \1 i m2 B9 Z, I @
" ?3 ]; e9 _" l% s& L/ Q2 _: j3 T |
|