|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
7 v8 M6 n) g0 @' g7 [& P5 V( l) ^#include <linux/init.h>! I5 a: O- ^" F& i6 }+ t
#include <linux/module.h> o; w; ^! e; W
#include <linux/kernel.h>) k; h( s N8 O1 @6 U* G! K" z
#include <linux/types.h>! D; v0 W/ r% p& x2 {$ I/ r: S
#include <linux/gpio.h>0 ]1 f/ G# l- | v, u8 ~
#include <linux/leds.h>& M3 U- D6 I, a1 d! e5 K
#include <linux/platform_device.h>
1 b& c$ H2 D8 ~% [% y7 N8 w* ]" _+ a8 I! V
#include <asm/mach-types.h>
2 y* w3 s+ @, X2 c f( `#include <asm/mach/arch.h>
$ j5 C3 k L* ^' T& t8 k#include <mach/da8xx.h>
0 n2 U2 L9 ^ Y0 a4 }2 `. h( G#include <mach/mux.h>$ R$ [: |/ H# i; x
, z; `" o6 L& F' i# Y/ H0 G: V#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
" F# J$ d/ {# Q/ u9 x3 R#define DA850_USER_LED1 GPIO_TO_PIN(0, 5) G1 d( q B, s; ?
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)( J. v& m2 w) k; W
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
+ D" w0 w; l# Z. |4 W
+ c% L0 I- m6 c# L! C' q/* assign the tl som board LED-GPIOs*/& F; X) {9 @4 B# _# D
static const short da850_evm_tl_user_led_pins[] = {' B" a; U9 O$ H
/* These pins are definition at <mach/mux.h> file */- \! O( h4 n" X9 L0 c+ R
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
+ ]) g' p3 s2 H- ~ -1
& Z, s+ F8 G8 C};
( P+ l" P( H' m+ ^8 n3 z' N( C* X* T; T0 J- f) \: L
static struct gpio_led da850_evm_tl_leds[] = {
, ~9 V6 u% k7 v( [ {
' z& E. C. f7 t; [$ p$ d .active_low = 0,
# \% k- m$ @9 I4 X: x" V' Z& } .gpio = DA850_USER_LED0,8 D) q3 b* n/ R K Z' `
.name = "user_led0",- p$ O0 R% l+ u& C5 K. }
.default_trigger = "default-on",
& c1 n+ k7 J( s( m0 Z% v; h- C% K. E },
. {' ]* M5 e% d3 T+ { {: i5 B+ f$ E2 s5 X1 H
.active_low = 0,5 b1 y& R7 `5 c
.gpio = DA850_USER_LED1,6 F& U# ?+ {5 k+ T; a# g. q# n1 m
.name = "user_led1",
x9 W- [' m+ t2 x8 u! X .default_trigger = "default-on",
. S* o6 E$ \3 R5 |" V+ p },2 q0 _2 f* w9 Z7 ^
{
. q7 V! [& u2 q# E% T0 ^ .active_low = 0,/ s% f O/ ~1 z7 Z, |
.gpio = DA850_USER_LED2,
N% Y( Y5 z/ H .name = "user_led2",' ~4 L1 p( q K @
.default_trigger = "default-on",
1 z1 _0 V+ K) {: j+ n },# X- \* m; {4 x
{
* \" m* T* F, Y- i/ F4 U. s .active_low = 0,; S) u, q5 t$ D
.gpio = DA850_USER_LED3,
% {3 ~8 j) N0 R% B2 { .name = "user_led3",6 c# m9 h! M1 ?7 f
.default_trigger = "default-on",
/ [. u+ U5 U1 @8 r: K$ y },
5 M% z u; \& ?: N4 E# H' Z};
. p7 e( E0 j8 w. ]' p
! `; d- [6 S, |' `static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
. y/ f( N. V8 X3 r .leds = da850_evm_tl_leds,9 x% H3 h+ a/ w% y* T+ o
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),
5 h% t: q; I# p" R* p};5 K0 R! z: F6 Y+ h
\9 [# G% W" u6 _static void led_dev_release(struct device *dev)
, T: G. o9 Y" h{" m) M' E# M; t$ [
};
+ j; p" b8 Z8 e! H3 g& N
, [, [5 H- F |4 O( B/ C% \static struct platform_device da850_evm_tl_leds_device = {2 t: S+ X0 c2 m' D* C
.name = "leds-gpio",
$ [0 `" L7 {' k4 x& B' Q/ \5 s .id = 1,% Y: e6 \% e+ ]2 S. ]
.dev = {7 s" U" r# E8 D C; c7 \8 Y$ U
.platform_data = &da850_evm_tl_leds_pdata,9 c" N. K* @' E
.release = led_dev_release,- z3 m8 F( x" y
}
s# B4 z( T; x* }5 G- s5 _};
# D6 o- y S+ A+ p" o; O& D' K
$ m6 W" P& u$ R0 }$ g7 G& ustatic int __init led_platform_init(void)
( s' e) }) Z* I& P4 X: |{
, o: E! f8 s9 Y* m int ret;- U: U) a: S$ p( u
#if 00 S0 E% J9 z1 `- ^6 ?/ |
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);4 W( _# k& }+ l" _$ r+ Q
if (ret)
" U4 T* `# A$ ^0 ~- c# y- K% m pr_warning("da850_evm_tl_leds_init : User LED mux failed :"- P( X; h: [6 C" S+ I: ~
"%d\n", ret);8 p9 h% b0 `* O; D
#endif7 P- K( r, ^2 S1 p1 W0 Y+ q
ret = platform_device_register(&da850_evm_tl_leds_device);
, h: M6 N* @$ O$ j& G! y$ h if (ret)
( P; G8 ~0 q1 I! C# f' G pr_warning("Could not register som GPIO expander LEDS");8 a, l. M/ _. Y' E( ?6 s2 ]& n
else
4 b& `5 |/ [( x$ ^7 y1 N$ j printk(KERN_INFO "LED register sucessful!\n");2 Q& A2 v1 r8 ~- U1 J2 s. k b
* X/ O$ {* q% a5 L: D8 s
return ret;
0 ]7 ~) A$ u2 u- V) ]( y" \5 ?; I M}
5 |2 B4 J H5 z. e$ U5 Y2 N2 B! Q! e7 l$ j6 P
static void __exit led_platform_exit(void)
: D! _1 b. f9 F9 b( I# B# y; U{9 W6 |% L7 S7 d0 s$ w7 W
platform_device_unregister(&da850_evm_tl_leds_device);0 k7 r; @% j$ m0 Y: z
/ ?3 y9 A! c; M+ E& o5 F2 D5 R
printk(KERN_INFO "LED unregister!\n");
% B+ t% w/ d% z5 @3 ^}5 M r# _6 d" a* p. \
& Y ?2 f r/ E: M, o6 S: p
module_init(led_platform_init);' v) S: u9 o% A5 d9 n
module_exit(led_platform_exit);
/ F. \- A, v% [5 ]
7 b( j2 b) L9 i. I2 E* aMODULE_DESCRIPTION("Led platform driver");
, `6 n$ R* t; z jMODULE_AUTHOR("Tronlong");. @$ M k% w- h& d7 M# ?
MODULE_LICENSE("GPL");
9 Y3 v: j$ j) O% G {
- r; j% `* P, H' n+ x- _3 r |
|