|
|
求大神给下面的程序做注解,请稍详细些,谢谢。. Z. |4 N, |% o" j
#include <linux/init.h>
6 }) A) c4 I$ q+ R#include <linux/module.h>
8 v* H+ F- ?) e7 p K( |0 @) H#include <linux/kernel.h>
! {9 d; h& T/ P4 v#include <linux/types.h>: e r; ?, |& X
#include <linux/gpio.h>
! b. ^+ b; D6 }. T6 E3 A) z$ v#include <linux/leds.h>
- N$ _% a$ Z' e4 F2 ?) C#include <linux/platform_device.h>0 e8 O4 B, q7 [9 D8 L
0 t- I3 C8 i( y8 a% {6 @8 {% C
#include <asm/mach-types.h>6 y; j* C" {( J7 ]
#include <asm/mach/arch.h>
9 @9 B9 J3 A( b# e3 n4 D; U" e+ R#include <mach/da8xx.h>
- P) q: q5 V* s' y; x$ Z#include <mach/mux.h>
$ X( C; M1 W8 J: R
9 r N8 x* \( L4 K2 u9 |#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
& G- E4 I, \6 }#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
, A* D( a. W$ b8 U, K#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
: k2 \, \" h% V4 f% }4 @; L2 k0 ]#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
% N' q( \7 n9 r! v6 ?# G# U0 z+ B* ]4 M8 E7 B2 I) y* a
/* assign the tl som board LED-GPIOs*/$ b( e+ C" G& h0 {
static const short da850_evm_tl_user_led_pins[] = {) j( S: W& r% Q" J; l
/* These pins are definition at <mach/mux.h> file */$ B. r* N. P' S' q' l5 H$ D2 [
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
0 G. P Z& W+ w: q9 I -1
$ Y3 s; s( U1 D7 A+ M};) F Y% k" G% v$ k; [2 u6 V
d2 H {" J% z. X% T4 P- ]static struct gpio_led da850_evm_tl_leds[] = {8 P$ |$ P1 U8 J3 w' j
{( w: |6 ]6 E1 \- i& `% |' V' O9 a5 d, j
.active_low = 0,
5 {6 w! W3 N: G/ Y. y .gpio = DA850_USER_LED0,* M+ Z/ {% D! g! [& b7 o
.name = "user_led0",
9 E2 u/ n, L1 y+ T$ q9 ~ .default_trigger = "default-on",
/ g% S& E, ~0 a$ s R },
. [- ~( B9 j( {8 o {
/ n D/ k( e! t; T8 e3 `" s; C .active_low = 0, L$ q8 N1 K& d- ]
.gpio = DA850_USER_LED1,
! Q2 U" D1 b- B1 ]1 Z1 h4 I .name = "user_led1",
$ [* j! Z z+ Q) v3 R) m .default_trigger = "default-on",7 c6 t( A& b) R" J
},
: M' |: Z) U; Q1 x* |- O1 N3 z- j {
8 H& s7 M! _& ?: E4 o- g) O, ` .active_low = 0,* ~; v$ u R5 D& P: }( h# i
.gpio = DA850_USER_LED2, A7 x8 Q+ W0 v; T4 N( [
.name = "user_led2",. N: v3 f3 J* g
.default_trigger = "default-on",
; J3 D" U) E/ _& Y: s: U% }) u" { },
( Z" X3 O3 b4 Q5 s {; }' r9 u, `, H; H
.active_low = 0,
K1 ]8 \( X% z q9 d .gpio = DA850_USER_LED3,* `- w9 h5 N( S0 q) I, ]! L U
.name = "user_led3",
) g d$ o: E2 j( P .default_trigger = "default-on",
0 }# U& V* }5 C2 w },
/ ?2 E: N; w# H" s5 }, v};
0 C/ S& V+ y F- ]
6 k) w3 \- s7 {7 @# b6 q3 v+ T, Xstatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {( D6 `" O0 u5 I) ~, l$ H( T% @' l1 O
.leds = da850_evm_tl_leds,
& m2 a/ _: d/ D: W .num_leds = ARRAY_SIZE(da850_evm_tl_leds),
9 N/ b3 T2 a2 R4 N. F$ G" w};
1 g. \" _$ H# L$ @; ~8 G" q; x$ u ^/ V; L! I5 k6 f' |
static void led_dev_release(struct device *dev)
) O' W/ ~0 r* ~+ [! P* z* G{
3 i' s8 E6 B. G% Y2 b6 S};) K7 d# o7 B0 b9 N
9 H/ @- q' F, O3 hstatic struct platform_device da850_evm_tl_leds_device = {# x% R+ l l. W) L: F( n
.name = "leds-gpio",% H, P1 o* b! l1 f) Z% C
.id = 1,
* ]& O g2 p9 { .dev = {
- i9 s9 N7 _! g1 @0 \ B' |. @ .platform_data = &da850_evm_tl_leds_pdata,
( D6 p( t& J0 P3 _ .release = led_dev_release,, U: D: ?5 r# k- S6 Y% y
}8 E9 F# }1 v# H/ T/ G
};( j! b' a" [& t) Q/ G5 Z
. q5 L ?. B3 V9 n* |static int __init led_platform_init(void)
3 u& }/ u( b X7 @9 [5 e4 ~{& r. A* O2 S% L0 |; T
int ret;- b# M* a# ?2 B1 k" ^
#if 0
* w W7 w& h6 Y' g9 m* X ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);4 ~: G' B2 {. S8 s
if (ret)' d+ H0 k: n+ L, o# b
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"' H* c" e4 l& V3 m8 B' W$ Q$ I
"%d\n", ret);( K; j; C" ~0 K3 k
#endif8 W; o) l2 H5 r1 c$ ?1 Y
ret = platform_device_register(&da850_evm_tl_leds_device);. {6 K1 p$ L- x$ Q3 @7 l
if (ret)* A5 |+ ]" C! d
pr_warning("Could not register som GPIO expander LEDS");
6 w9 w7 M `$ d+ `* W% O. d) L else
# W% P2 x& s L" F( K! B printk(KERN_INFO "LED register sucessful!\n");" L3 S- ~% Q2 m
, w, D \) G# y, B$ m6 U, H4 q return ret;
: o O, R" |+ j4 M$ M}
9 v( G2 t: V. v
5 t, S% [+ k. i8 Jstatic void __exit led_platform_exit(void)' B3 T( ^. ^( o3 K8 t% n) o' _
{* X; ]+ G4 I6 h
platform_device_unregister(&da850_evm_tl_leds_device);9 d4 H" s6 S( L: S/ Z
@7 [7 }9 ^6 i/ X& H& F
printk(KERN_INFO "LED unregister!\n");8 N% j/ ]" ~( i& R
}
8 Z7 T+ j9 N3 _* Z* G) M4 {3 p* r
4 U! G# ~8 G$ ]$ lmodule_init(led_platform_init);+ ?2 n# x8 Y- u6 a* s, |) }1 @
module_exit(led_platform_exit);
! F6 ?- |0 q5 S& F; i
' N% D8 L! }8 T, hMODULE_DESCRIPTION("Led platform driver");
, X( x. }' {9 C" }) c+ O3 |. sMODULE_AUTHOR("Tronlong");% R% ]; b" C# `8 x/ @) k
MODULE_LICENSE("GPL");
, L) H* S9 x* m/ o+ I& F+ ?& ]3 d7 P# d( M- v2 ~4 Z% t# G0 @
|
|