|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
1 B( C1 g N5 {3 g4 V3 ~#include <linux/init.h>
2 Z4 d/ {* S' W. }* u- b#include <linux/module.h>: q0 v( j( l/ B8 Y
#include <linux/kernel.h>
2 {( ^+ G+ p* g! O$ ]' S9 A) W#include <linux/types.h>
; [8 i3 q6 k: I) H! Z7 c/ j#include <linux/gpio.h>
! ?' A/ e. ^9 f$ |' I9 X#include <linux/leds.h>) L0 x" z3 k. s3 k* z6 Q4 {
#include <linux/platform_device.h>! P5 ^$ z9 o9 t- n, n% J$ _
5 Y |1 \8 ]* e0 M/ O" z6 y0 h5 @
#include <asm/mach-types.h>% {( b6 G4 j+ \. K0 G0 [: \" w
#include <asm/mach/arch.h>
2 y( A/ I& J$ [3 \3 Q% k; c#include <mach/da8xx.h>
+ x% B& ]( l: }& N$ W. D4 @( \#include <mach/mux.h>0 Y# p. A5 ?6 K' e. r+ {0 e# K1 S
7 }8 ~- ?1 l( v
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
( x9 _- }- z. I& `" ?#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
; @1 p4 o- d2 Z#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
0 m, `+ z- t+ d2 G#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
* x& O+ J6 b0 g$ `* Y
' e* n, z" O' W; w/* assign the tl som board LED-GPIOs*/
5 V. d) D) w3 m/ hstatic const short da850_evm_tl_user_led_pins[] = {
3 @" n; j) g+ ?, ~# p$ C3 I /* These pins are definition at <mach/mux.h> file */
6 K0 O+ C% R6 \ f& P DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,7 h8 |, S5 B5 K, O8 L3 v1 W z1 c
-1$ J& I+ w/ ~7 z5 m
};
5 _+ i# s8 f6 f5 _" v: {0 X1 a6 C6 r% }
static struct gpio_led da850_evm_tl_leds[] = {
: G( J3 T6 X4 n7 j' [+ y5 W {1 I' c$ W: r: t/ x$ i
.active_low = 0,6 x7 H! @6 {! t* W
.gpio = DA850_USER_LED0,
1 U5 w# C' X% O$ g0 s( { .name = "user_led0",
# A: |( R; c$ d9 b2 P: e4 k* _0 e .default_trigger = "default-on", ~+ q0 W$ E5 k# e
},! z! i4 }4 X4 {4 H- O/ ?# h! x2 w- @. j
{
7 {/ a; r7 d) @/ p* j4 C .active_low = 0,
3 N9 U3 A3 l. M) d4 {# |4 x$ H .gpio = DA850_USER_LED1,7 z" B+ J2 P) v" [
.name = "user_led1", o3 w# a9 G' l. P" H9 v
.default_trigger = "default-on",
7 J% ~; M* h" R0 ~4 X) H/ @+ @/ I }," E% q3 |) {) O
{
9 q A) l" ^2 y9 E7 T .active_low = 0,
( Y7 u( _, {3 h0 Y1 | .gpio = DA850_USER_LED2,
: J& k7 O+ j8 G( c2 {. A9 b .name = "user_led2",
* g. r, q3 A/ C* Q& o .default_trigger = "default-on",
0 u/ T$ q& _8 h# p }," V* c3 y* q2 l( V' F6 j: o
{
3 F# b* p# O9 p9 Y8 r3 \' O .active_low = 0,7 U7 P, @2 g, y" `/ h& [1 V/ ~! l3 `
.gpio = DA850_USER_LED3,: v- [# y& T. [1 O5 q7 W
.name = "user_led3",
. K8 v& }0 n# j& L .default_trigger = "default-on",2 g) N$ y! o+ V% p+ b1 ]
},
2 r3 U' N; o! P- Y};
+ M4 L5 d! y( w9 } Y+ g3 a9 ?5 X0 h! X! W) T+ h2 k, D
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
, D- c8 G5 v2 a; U! ?8 Q .leds = da850_evm_tl_leds,
O. m3 w4 w4 Z0 x8 w6 i .num_leds = ARRAY_SIZE(da850_evm_tl_leds),
. M, V" J2 f8 A. D* T2 K8 {1 } |};
+ ^8 T( ^! U' b5 \2 z
" A. c* T5 ` m% a) Ostatic void led_dev_release(struct device *dev)
9 H7 P r0 J* j* r1 U: I{3 d1 i8 F* D& M& n- ]; b2 u% r
};
2 P. v- ]9 t+ Z4 M# y4 E' v
/ v1 g: q4 F- s) b0 d: Cstatic struct platform_device da850_evm_tl_leds_device = {# t- }, e4 D' A P: @; O) C
.name = "leds-gpio"," j; u' x- v$ h
.id = 1,$ m0 }& S$ u' W5 v" m8 f9 m
.dev = {
8 L! r' Z% v8 Y+ k2 ~# ~' f$ { .platform_data = &da850_evm_tl_leds_pdata,
9 V% q/ k y' B- R4 {& T .release = led_dev_release,- |4 ?9 C. d" P% X3 p2 g
}
: N, K" D! [' _/ G5 S6 m; d W};
1 |) T. Q! ]5 F- C; |1 x+ X* @* m1 {. v" H1 N6 E8 P9 P: }6 w6 S+ j
static int __init led_platform_init(void)
N# I$ T) I( I4 p* {& G' Z; Z2 q{
* L6 ~, ?5 \6 k% g/ o. e int ret;7 V) ]) \# t! j: ^7 ] b
#if 0
& h9 N/ n. c* q' t- O ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
$ r* ^) q. y3 X- D2 m# l if (ret)7 f5 T! V, r" `0 p' B
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
! y9 |/ I7 S6 C7 d5 K+ O8 o$ B+ T5 p( r "%d\n", ret);
. {" Q; z/ R4 Z' f#endif
% n, n: Y8 J+ q+ t/ r ret = platform_device_register(&da850_evm_tl_leds_device);
- [+ L$ h. G% C/ X if (ret)
) u% d* R3 v/ P: G) N pr_warning("Could not register som GPIO expander LEDS");
u, A5 d; j, h4 E) O else) K3 F* L9 U2 W; Z! Q* S
printk(KERN_INFO "LED register sucessful!\n");
1 n% w! S7 m% Y
3 @( ~$ ?$ s) }( S: S, i2 s/ y return ret;
, e- L& c* z7 H) J}- `, T8 j) p3 M5 h$ Y. A3 }
+ B# |0 C: Y/ d( {
static void __exit led_platform_exit(void)' H) W) J+ Q; K
{; K( R) H+ `6 } V, ^
platform_device_unregister(&da850_evm_tl_leds_device);
1 [% b& c& ~5 T. h1 Z; F, z$ v2 w `% J: C/ n" M
printk(KERN_INFO "LED unregister!\n");
) i, K+ L( i: [" l2 T' u}8 B z1 i. R* B) S4 S$ A& H3 L' l
' }( ^& N3 h7 C9 l- t; c$ |; r' M
module_init(led_platform_init);6 L: B' L* v; W: p* N* v/ |
module_exit(led_platform_exit);
, b& n9 f3 ?* Z2 `! s- A2 a0 s' i, r2 @9 [' \, d* p F5 ~6 G0 ?
MODULE_DESCRIPTION("Led platform driver");
0 u1 S* p+ s* i9 P1 M% |9 q e, rMODULE_AUTHOR("Tronlong");
" A$ I+ J4 g7 j$ d" A L+ P: `MODULE_LICENSE("GPL");
- J8 o% j( v4 J* g k, y, |) k. K
6 ^9 d x( I. o6 L4 } |
|