|
|
求大神给下面的程序做注解,请稍详细些,谢谢。! {: u, Y; x8 k6 p" _) r
#include <linux/init.h>
7 C( K$ F, b2 k7 b4 N! z7 h#include <linux/module.h>
$ k% y5 C0 C" n#include <linux/kernel.h>
7 {# E3 F: F* [% v) O' h: v+ E#include <linux/types.h>" t+ V1 N. d' _& ^
#include <linux/gpio.h>
/ M4 u# b5 q0 [1 Z9 k% Q#include <linux/leds.h>+ g! n5 w, l5 k/ D
#include <linux/platform_device.h>
6 T7 D- ~) y% `" T3 B7 x+ j5 {/ V8 `7 b3 v+ w5 x' m
#include <asm/mach-types.h>
* K' a8 i7 f# |* r( Z4 f0 F#include <asm/mach/arch.h>
" D9 [/ @3 W8 e9 z/ D6 r$ }( ~0 ?#include <mach/da8xx.h>
1 g& ^# w: x6 i* \, \$ { B#include <mach/mux.h>
9 E8 q7 e$ n8 p, b4 ]3 F7 K! Y4 a+ R9 ]3 z3 y7 T
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)! L( J! z( G/ z0 g
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
" M- X. u6 m$ ]: ~1 z c9 j% M ]#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
5 q0 T; A! [* v1 x& G& {$ v3 Y#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
& _+ h# T4 U: |! b; e5 }7 p2 z
2 [1 N1 v- s3 J0 j, z% S/* assign the tl som board LED-GPIOs*// Z4 r4 D, K" ^
static const short da850_evm_tl_user_led_pins[] = {* O6 T4 c* R* M \5 G
/* These pins are definition at <mach/mux.h> file */
: n: o) B& l0 |# z ~# Y. p/ Y DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,$ ~. _! s: @" D0 v
-1
. d/ u7 m7 Q1 s! b( m};
1 V8 _0 q' f/ ?1 f0 N* j9 o( v2 i+ ^% w/ m F9 c* y; Z* {7 {. w. |
static struct gpio_led da850_evm_tl_leds[] = {
! Q% x9 y5 P/ j: U+ s* w. \ {
: h: g' f5 N+ `0 p2 H9 X: r .active_low = 0,/ ]; `, |; a" M9 o4 @# Z0 ?
.gpio = DA850_USER_LED0,
3 ]6 ]" k8 n; f5 l1 V/ \ .name = "user_led0",
, F8 D/ n' ?, W$ K' j. u) g .default_trigger = "default-on",) G+ k5 Y( Z% S* w- `
},1 }$ N" \% D% T- l0 d/ t
{
+ Z, \7 B5 h# J" J! ^ \ .active_low = 0,
# u0 i7 [# ?' \9 F/ S6 m( y .gpio = DA850_USER_LED1,: y8 t5 o" I7 e$ ?: u/ e
.name = "user_led1",# p9 m/ m* J/ g# ?) `- j& A
.default_trigger = "default-on",
5 ?$ `/ u: I% f2 F0 G },6 A( M! Y' N+ e6 h: l1 Q# t: s9 y1 G
{
. ~' L2 A8 r' Z) m .active_low = 0,
3 F1 X/ k8 h2 w9 } .gpio = DA850_USER_LED2,
6 M9 S. ]- v! M2 T# g5 b .name = "user_led2",
0 I* r7 p7 F- O9 t1 y .default_trigger = "default-on",
9 Z. c" }5 @' _7 ?' l },9 N+ E" _5 J* t |) K4 N+ f
{
}5 h! \/ }. s1 E& B1 e .active_low = 0,
% ~7 f9 t0 t! s, K! _ .gpio = DA850_USER_LED3,- ?$ X% O5 ]* ~% {1 F$ x
.name = "user_led3",
, [8 N2 Q. s, s2 [6 ~: [7 S6 B .default_trigger = "default-on",8 o; D$ s8 e$ R9 a2 |1 G7 q5 N' \
},
# Y6 D% C, j3 V};8 ^# u5 c# ~4 h+ ?/ G
( a) ?' L3 }( e( D; gstatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
& Y& D- d; ]! N: t. ]0 b .leds = da850_evm_tl_leds,
2 L# u4 V. R3 v M .num_leds = ARRAY_SIZE(da850_evm_tl_leds),
& z* n: ^$ J0 V2 Q, e. e. W. A};
6 n; q5 A' g* _+ H8 r; H
+ u( ~4 {% o% x I7 y9 xstatic void led_dev_release(struct device *dev)) z1 a1 ~2 }. x7 p" m/ K
{
2 M% h6 x0 k# C4 p7 j) c7 m};6 d4 |+ U* C# H9 v" N' X$ @
4 y( T# D4 v& }* W+ z
static struct platform_device da850_evm_tl_leds_device = {
! y, O" z* y& k! s' O7 A9 R R .name = "leds-gpio",
+ W4 R4 y+ D% l! [ .id = 1,( R: H w1 ?. Z- r; v2 ~; W# v \
.dev = {
4 d6 ~1 ?) O+ Y2 v, s. F .platform_data = &da850_evm_tl_leds_pdata,2 ~0 U; ]0 s4 ^6 p" P" o
.release = led_dev_release,
& l+ u3 m H- f& d: H' i- h5 k }5 s5 H& F- w& C$ L! y3 n r
};
7 F/ k* Q; O1 C. ]3 r5 ]
- q( S7 C+ U/ y! K2 Cstatic int __init led_platform_init(void)
9 ~) Y7 t) Z/ a. d( n* t5 W{
; L( b( p' i. Q int ret;# q0 ^ r( M: G. x, p. [
#if 0( J3 I' f1 {7 y4 o! q
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);8 G2 h2 J: S4 s0 s
if (ret)+ u' o+ r4 W% ^* E3 T3 m3 j$ H4 C
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
2 X+ H) s, P6 O* ~, v8 i+ m "%d\n", ret);
1 ~0 T+ G4 \. Y#endif
! ?# V; b% c" E% i& U, V; @ ret = platform_device_register(&da850_evm_tl_leds_device);
" T4 ^. p% v7 b, N& E" _, p* H0 H if (ret)
6 I1 [& X" X9 n1 r5 A7 U' O) d' A5 \) E pr_warning("Could not register som GPIO expander LEDS");
' k( h$ ~7 F, ?& {1 P# { else% z8 H2 T, k0 u% Y
printk(KERN_INFO "LED register sucessful!\n");. t, j7 M$ C8 w. o
& D) S' a$ V0 a8 S0 L7 ?" w3 e return ret;
2 f" q& G& F% ]( y}
' W: Y- @$ D" @$ R5 e4 ^: L4 x% N
9 B" o8 P/ m; f9 e& o% f0 Q' e( c' f& ]static void __exit led_platform_exit(void)
3 m/ Z7 l- i6 u, ^{
5 t w' }. G9 z. G$ ] platform_device_unregister(&da850_evm_tl_leds_device);" j! u& H7 ^9 r1 R/ Y
( d2 v7 J$ L1 |# T8 o
printk(KERN_INFO "LED unregister!\n");
& a6 q7 p: C+ z" _) ~) ?# _! c}+ W! a" Y4 k+ \1 N) L/ s
0 d$ `# k& @7 x* R6 l; [
module_init(led_platform_init);2 G1 x1 c7 P: D5 t3 E7 D
module_exit(led_platform_exit);- U; w$ x4 t8 }* K9 b
( h% d0 F8 w6 b o. K/ yMODULE_DESCRIPTION("Led platform driver");
$ f$ P* y8 |/ aMODULE_AUTHOR("Tronlong");1 a, Z9 ^. l3 m) ?+ J; A o: c, }
MODULE_LICENSE("GPL");
6 S, \# T! T' Y$ m8 v+ \8 ?4 Q6 b/ h- {# z
|
|