|
|
求大神给下面的程序做注解,请稍详细些,谢谢。, x* l6 k h e* B
#include <linux/init.h>
+ s' ]: e% @+ C0 }+ B#include <linux/module.h>
4 o2 h6 O6 }, m8 V O#include <linux/kernel.h>: l& v/ ]- X8 d6 u; W- p
#include <linux/types.h>
4 B4 [9 C9 B$ r#include <linux/gpio.h>6 L0 ~5 j1 g2 W x7 }0 O3 e
#include <linux/leds.h>+ C# x6 z0 X9 `) L# X+ O
#include <linux/platform_device.h>
0 p3 `" g3 @1 w' r- r% ~* G! |5 I5 L+ }* X7 _7 t
#include <asm/mach-types.h>+ |* o7 @8 F; L
#include <asm/mach/arch.h>
+ w2 n: ~# Z. R8 D0 k* i. S#include <mach/da8xx.h>
1 u2 o+ ]$ T! B: ^#include <mach/mux.h>
- p0 ]' p0 ~1 F& X' x+ M: i" M6 \7 M8 B8 |
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)) A1 P' X @4 N( ~' T
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)) `% E6 y" T! O3 y
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
" n" E3 O! c& o! a% a3 l( ]' s#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
2 A' Y$ H% R2 t9 n2 i' E5 y1 g9 o2 p2 C1 c6 {; q0 q* v
/* assign the tl som board LED-GPIOs*/- w' I1 v& O; W9 @. h
static const short da850_evm_tl_user_led_pins[] = {/ l7 ^6 h) F& m& j9 I
/* These pins are definition at <mach/mux.h> file */+ k: C( q5 g! b. O9 {
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
( ^, y* s9 `8 U5 M4 E; ~) V) [ -1* D& Z1 f. }& p3 W
};
3 K7 r1 B( b1 R0 g- Q6 {9 J( I1 u: J4 @6 |/ e. @8 X
static struct gpio_led da850_evm_tl_leds[] = {9 J( [( d* [( O9 ~6 G. O: @
{- O7 U$ H) ]9 _& ~
.active_low = 0,, ~9 F, G3 C" M& s" j- R. @" b
.gpio = DA850_USER_LED0,9 D+ X6 L# N0 K$ s1 U: M: i
.name = "user_led0",
) _* P- t0 Y' R8 E. E) p+ G .default_trigger = "default-on",2 e& j5 Y- n5 Q2 }. o
},% m" o m+ ^# ~$ a6 U8 q; a
{
( v* X0 ?: Y8 @0 r5 `- O# s .active_low = 0,; ?9 H. ]. D6 f
.gpio = DA850_USER_LED1,
, U7 L( v$ o* K- O' |, C .name = "user_led1",
6 o9 T" ]6 K) g9 ] .default_trigger = "default-on",- k0 H- P8 o% T ` I5 Q
},( H0 e" b% C0 g; J# f
{
& P; \, d3 e d. S$ U .active_low = 0,+ [6 n( R. n6 q3 T9 t
.gpio = DA850_USER_LED2,4 f- I: c; Q& ]4 O" x/ V4 V) ]- k' X
.name = "user_led2",
( M! Z9 Y( M) n& B' }0 ^5 B% l .default_trigger = "default-on",9 u! C2 l+ j# f/ O( W
},5 v1 }! L+ h A* M! C; g
{
C2 h* v! m* ] O! d .active_low = 0,
+ Q {9 X' o. w( U5 i- W .gpio = DA850_USER_LED3,
0 l/ T. ]0 g0 j6 i .name = "user_led3",
+ N; K( f) Y9 g4 v .default_trigger = "default-on",
! N/ p! K( V* l5 o0 Z9 {3 \ },- d2 X+ F! @/ f/ k9 f; n. [ O& {
};
' o0 Y2 A, n$ ^& f
- q5 B, \, g5 {3 O; `! Estatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {0 ^6 h: l" [5 R& R/ ~% `
.leds = da850_evm_tl_leds,
1 Q; o+ T; p9 V) K1 W .num_leds = ARRAY_SIZE(da850_evm_tl_leds),3 o( ]0 k% m! [* @$ v( L8 R! I
};
7 |% _! N; k% l* P
% i9 P2 M' W1 b+ e% p3 astatic void led_dev_release(struct device *dev)
, h" ^2 O7 S9 \4 ]* e{
& |' i% g+ w; Y};
* y3 G; ~4 f7 A* K$ B% v
! K' Q% Q; L: m \+ @static struct platform_device da850_evm_tl_leds_device = {, k* g; f5 _( N( s a
.name = "leds-gpio",
C: k, e* B" B* W .id = 1,. k) q2 E2 s0 K- b% Q
.dev = {2 i9 a' k. S( Y" P, D4 J
.platform_data = &da850_evm_tl_leds_pdata,% K6 t& W! z( H( e9 s) s4 ~$ n- E
.release = led_dev_release,) t) i+ Q* ^- J8 L6 l7 }
} k& b5 y# ]9 W( ]# ?
};+ N( K8 M1 @' A2 |+ N- _
- w, ]0 }0 i& H: d! f9 z, q( D6 i& dstatic int __init led_platform_init(void)
- K% j* k" \( n* j* n3 g) m1 s{
! m0 c( j5 \: ?- f+ ?* I2 r: n0 `( h int ret;4 S& e% n L8 N1 N0 T
#if 0
: w, g2 \/ _% W ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);- x4 g' q* Q4 w+ v" g' u" J8 ?
if (ret)
9 |- g$ F3 W) V' C/ y5 `% T pr_warning("da850_evm_tl_leds_init : User LED mux failed :"0 [ c) t3 b1 S- W
"%d\n", ret);- D- d- C7 r3 h F- s8 J+ X
#endif( T- z1 N. V, H9 Y& v
ret = platform_device_register(&da850_evm_tl_leds_device);
4 j8 k O/ p: H8 u# | if (ret)
' p6 ^, n/ P& b. \" c pr_warning("Could not register som GPIO expander LEDS");& ?& ]+ F: V- X) l2 F: m4 Q) l5 Z
else
# ?$ O6 Z \, B/ I* X: v printk(KERN_INFO "LED register sucessful!\n");
. S3 F0 n O1 T- S t1 [$ G$ t: M8 Z" L ^
return ret;* _9 `6 D( N* i& I) B+ a
}* `5 _0 `$ i) [ X
1 l2 I' g$ _- K$ t' ]static void __exit led_platform_exit(void)+ y! J. ]/ o+ t, a
{
# M2 I- G9 I7 t platform_device_unregister(&da850_evm_tl_leds_device);
& y; K& O- P- u6 q
! d( Q4 L7 P+ p6 e9 n, h+ C printk(KERN_INFO "LED unregister!\n");
5 S5 |$ W& {6 m}
. U B% u+ g9 v! O# Y+ A! }5 A0 w# Z5 M+ T8 ?1 T9 o
module_init(led_platform_init);& l7 R7 Z$ }5 L) ]: P, ^$ f% K( g
module_exit(led_platform_exit);
D7 ^8 K8 A$ G1 t& j: Q
% V5 H; u% s0 B% LMODULE_DESCRIPTION("Led platform driver");* R& l: C" G* s. ?5 ]& c! N
MODULE_AUTHOR("Tronlong");
& t* q1 C% i; F a$ b. z6 ZMODULE_LICENSE("GPL");
4 W: p& }& U/ Z- l. V
, i4 l7 Y8 `( _ p2 j |
|