|
|
求大神给下面的程序做注解,请稍详细些,谢谢。+ ~& ]* ]. N1 O. e4 ]
#include <linux/init.h>0 g3 h3 X; q+ a& L- \" v+ i
#include <linux/module.h>9 }6 b4 F3 x5 H; ~ v& E& v; h @
#include <linux/kernel.h>0 h" y; \. a4 P! Q4 a5 x
#include <linux/types.h>. q6 \+ G' I2 ]5 s* N* G+ T) w
#include <linux/gpio.h>( E/ E2 k, z5 D, }8 `$ J: |& @( B
#include <linux/leds.h>
0 j7 S, U9 u7 k8 \1 n6 }#include <linux/platform_device.h>
' o6 d3 B ]' Q5 _2 D
1 c& m) ^( p( e' B. l#include <asm/mach-types.h>
" _3 r$ C# k: D, N: Y#include <asm/mach/arch.h>
: i3 `" a. S" o+ E- y$ c#include <mach/da8xx.h>" D/ V2 D" O% l5 }$ w+ {
#include <mach/mux.h>1 x; w; }8 C3 k% @5 o. Z
6 C% p9 K$ s: q. n1 ^
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
( S; c% q3 s2 ]) F% J, A3 ^! R#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
! W; p6 m' ?. R; @) S. ?#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
! Y: W4 M5 o7 Q8 `- |' c) j#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)% X* K2 e/ ?9 j! R c) c2 x' w* V
8 a" C5 X" Q! a2 d% v! M l# j
/* assign the tl som board LED-GPIOs*/
) w& Y' o; }; l$ j, |! D% ~2 qstatic const short da850_evm_tl_user_led_pins[] = {( _7 i( G% h; ~0 r2 ^
/* These pins are definition at <mach/mux.h> file */& T: j2 B8 y" x6 s. \/ Y4 T
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,) {+ D0 _, S) c8 {+ d0 X$ |
-1% J" R& Q5 @8 L' }8 r$ Q9 {) s
}; |4 I9 z/ i2 L
: U7 q. y( P. `* kstatic struct gpio_led da850_evm_tl_leds[] = {
2 S7 O/ N9 w6 R! w0 m {1 D6 w* C; v, Q/ w7 C' e
.active_low = 0,1 V5 b: x0 C5 Z6 e h5 ~+ b1 Z5 {
.gpio = DA850_USER_LED0,
- p Y) o8 d- g+ w8 G- i0 q .name = "user_led0",
) J: P% M! Z, Q .default_trigger = "default-on",4 P3 X( J$ a; B& o
},) c- w( N1 R: e, ~2 |6 W! ]
{
: F& k: ~7 i% F4 }& O7 h .active_low = 0,- e, g; M& p/ {
.gpio = DA850_USER_LED1,
% F& r4 R; G1 r/ Z .name = "user_led1",
5 }! v' v5 {/ s- m- C& x) n4 |7 Z; J .default_trigger = "default-on",
7 m. d8 z: r- e* z/ T* \) Z },1 Q$ W; G; j) l9 `" W
{
3 C5 `) A( o5 v: t0 Q3 g9 m .active_low = 0,4 S: D( s; a' l) \6 q
.gpio = DA850_USER_LED2,
' @! x7 |6 u# Y0 b .name = "user_led2",
6 V5 {+ W* j# o$ M! Y .default_trigger = "default-on",
+ L3 d) @( i Q- Y% G( | },4 }6 S: q/ a5 s# m; `+ U
{
$ N& w( Z) \' {; S" I$ C2 u' v+ f) W .active_low = 0, ]8 {/ {; v+ i4 g9 p! k y$ g
.gpio = DA850_USER_LED3,' l4 C- }8 v7 c+ l. W3 p, D
.name = "user_led3",( [9 a+ a5 n, W( k( P8 O/ S, S
.default_trigger = "default-on",
2 Q3 L/ H5 H' L7 ^( o$ e },
5 v$ v; M& V; m5 P' f1 I* H};* C, g( n" F# J; ]- |
$ S+ H8 c# {4 e7 ]2 S
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
5 q: [ W$ ]+ l& r4 H6 c .leds = da850_evm_tl_leds,
1 z+ O- L. C* n+ l8 x .num_leds = ARRAY_SIZE(da850_evm_tl_leds),% ^6 |, K$ v( E$ e# R
};; d- `& b( }, R9 R7 Y4 V/ ? e
% x7 V( R" E) W! I0 K7 X" [" {
static void led_dev_release(struct device *dev)
E1 X& J$ f, d* G{! o r# z' c0 t. s2 z
};
; G* Y5 ~4 O- x0 G2 n/ c+ [
2 q9 Y/ i! X, g8 o6 sstatic struct platform_device da850_evm_tl_leds_device = {
" C# v( J0 n7 V; T; A0 P+ X .name = "leds-gpio",9 U/ O5 m2 q! h0 T3 Q
.id = 1,4 H+ [! Z F. j; W" N. l
.dev = {
: D( t+ u/ V; w: a, q1 r! Z1 z .platform_data = &da850_evm_tl_leds_pdata,- h' f8 k$ `3 ^5 m
.release = led_dev_release,( r6 `. k) ]2 n4 @' B
}
% P& U6 H* L+ |9 t};
& @& T) {% e' U1 ?
/ X5 C% P# W. [7 H, wstatic int __init led_platform_init(void)
5 y' K0 ?* K$ j4 R0 j8 k) Q) o{- _* a+ X5 q4 k3 p/ a
int ret;- e* w8 {, b/ Z
#if 0
! ^# A, F4 W! b6 l, o ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);# j7 d# X6 h, A, G+ [% s
if (ret)3 A) b1 O+ y" _
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
8 v* v- ]+ L/ j2 [0 v, \ "%d\n", ret);
# h6 p# m1 ]. f) l' Z2 \+ n#endif
$ z% e! T1 }7 b: T+ V5 F ret = platform_device_register(&da850_evm_tl_leds_device);; z: q0 ?) ^( d7 A8 j. J+ k& G# \
if (ret)1 p. h# d; D, A6 R) b
pr_warning("Could not register som GPIO expander LEDS");& d0 c/ c+ p% o
else6 F, k9 q: a% T9 j! H
printk(KERN_INFO "LED register sucessful!\n");
. f( n# t9 W. r% K$ h( Z- ?, ^7 n$ k1 j8 T# U, \
return ret;( j$ T) }2 y4 [$ W" T
}
0 |1 x+ \8 I t1 r3 G$ ^! C1 k& M0 B) e9 Z
static void __exit led_platform_exit(void)1 r1 Y( J$ ?$ b2 q/ n6 k0 x; a/ Z
{
; m* u9 v4 Q3 x+ w0 O7 L5 \ platform_device_unregister(&da850_evm_tl_leds_device);) W i# S3 w8 m" `6 N# U6 ^0 }
: u5 G9 B: S! k+ Z- E. B printk(KERN_INFO "LED unregister!\n");! V0 o, w' q4 R$ I+ R. n
}1 N1 g" Z7 C; I, W c
4 ] C( b% e X$ x# m( |# umodule_init(led_platform_init);: I( p: z& V' M" w( z5 M- Q, `' j
module_exit(led_platform_exit);
; {1 h6 _. ]/ n3 ?5 m5 N( \: o0 l2 u: ]8 R8 Q b$ _
MODULE_DESCRIPTION("Led platform driver");) E% K" R' L+ k0 u
MODULE_AUTHOR("Tronlong");
+ M1 x1 c5 S; ZMODULE_LICENSE("GPL");$ m$ i9 A/ p0 M. E
1 v+ K9 m, k, u
|
|