|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
4 K# W" f1 }: H& ?# g) ^0 t#include <linux/init.h>8 y! ?' C4 X1 {5 B8 ]
#include <linux/module.h>
* F1 ]3 i0 F+ N- S#include <linux/kernel.h>
6 C7 P7 u2 p' @4 e. w2 @ V( J#include <linux/types.h>
! F4 m" B2 J1 ?. o#include <linux/gpio.h>1 J9 ^1 Z, b6 k/ x3 f7 ]
#include <linux/leds.h>
, l7 j- A4 m; K. s0 @6 z#include <linux/platform_device.h>9 { `4 V+ G+ o8 I7 g6 ?/ k# B1 `
! F) Z8 x2 b& X. N, t
#include <asm/mach-types.h>6 k+ o. |8 Z" e
#include <asm/mach/arch.h>
; z3 Y; N' _/ A3 F7 @ t#include <mach/da8xx.h>8 W8 z- a! v8 r2 k, N4 e g
#include <mach/mux.h>; r# f% w& Q6 S1 m; u0 ]0 y+ M2 `
# X' i }; O2 A u. S! K' G% ?/ s#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)+ H% Z: W9 Y* \, P' l
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5), |; q3 c2 b5 ]( n3 K- R$ }
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
1 V( _7 O0 j0 N! a#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
4 @; s3 `2 R5 B! u5 p0 T
( G( k$ R7 n1 h+ E' H/* assign the tl som board LED-GPIOs*/
2 ~% H! u0 y$ l# S Istatic const short da850_evm_tl_user_led_pins[] = {1 d8 U; r5 c* V( ]6 }
/* These pins are definition at <mach/mux.h> file */' i# O3 t( J! U0 I
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
7 ~6 ~) [# N, j8 }# |8 h -1
: o* X+ E7 V0 C l};
R5 }- d% A1 G9 J8 D, t& T$ F8 P4 m2 R/ ^
static struct gpio_led da850_evm_tl_leds[] = {
' {9 U s# O) v% O" d5 w+ T% L {
* q* S8 c: r% T. \, w+ R2 m/ s .active_low = 0,
/ S6 d5 E7 R" p- M1 c1 z .gpio = DA850_USER_LED0,
4 m8 S K; J0 J8 k5 G .name = "user_led0",: L/ U: l( z( Q$ x4 k
.default_trigger = "default-on"," T2 h* T2 r* P9 G7 {, ]) f
},
$ M- `) l1 f9 }* i {
( ?7 |( x9 f( d! l .active_low = 0,% j; b7 d/ |) ^) n& X
.gpio = DA850_USER_LED1,
, B J8 J) ]2 U .name = "user_led1",
% |. c }* b0 D ]8 P. x .default_trigger = "default-on",: Y c! l" ^5 p1 }% g
},
) y" E" y5 D1 Z- n( |/ W7 Z/ ? {
: n4 G0 S& o! F/ F3 f" ] .active_low = 0,+ o# H' A$ u( M6 h; J- h4 e
.gpio = DA850_USER_LED2,. j* s$ d8 @8 E) c `
.name = "user_led2",! M3 r6 d+ a2 t8 M' \& v
.default_trigger = "default-on",. T' A# O4 R* m
},. r& d$ E" ?$ q3 ~
{1 O1 f1 g) P! |& c7 O
.active_low = 0,) ^3 e8 m$ b5 p2 j' b/ Z
.gpio = DA850_USER_LED3,# Z- Z. y" B0 e" W% P$ D" g
.name = "user_led3", i E2 R% {+ m6 r9 c) a" K
.default_trigger = "default-on",
( C. G* J% J0 a5 x! p' S },8 h0 |! ]3 \( v( t3 Z" _
};
: k7 h+ P) A2 V8 N
' s+ S6 w* I) g( D+ E' N' sstatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {7 J6 G" y, |7 W0 ]
.leds = da850_evm_tl_leds,
# J, j3 J6 V0 W# v$ o* Y( { .num_leds = ARRAY_SIZE(da850_evm_tl_leds),
4 H1 _6 Y& m+ t};
9 j; m% O% i, M
; Y3 H% O2 ?0 u2 {$ u5 [static void led_dev_release(struct device *dev)4 |( G; n `% c( }& e
{; a u# Y; |/ L! f9 X6 [
};
4 ?4 `) Q6 _% H5 P. f& e3 |: V. L9 {- v/ `- _4 y- w* b
static struct platform_device da850_evm_tl_leds_device = {
$ O! S/ d4 q7 ? .name = "leds-gpio",* D7 z6 R1 d, w
.id = 1,
# c4 |& g) K, N+ j/ c& y. O .dev = {2 S3 l- e2 Q, \9 R+ l
.platform_data = &da850_evm_tl_leds_pdata,
& a- I) @+ O. K2 k; ^ .release = led_dev_release,3 e9 \9 Q; p7 A, i) P" o2 F
}+ v3 _& V& t+ J
};
* u) F% L% f H/ ^7 @3 A3 R& ]% H9 Q) E$ z+ f: p$ A2 M
static int __init led_platform_init(void) {" o/ K& j) L$ q. z0 \
{5 F: ^/ X- {0 V
int ret;
: ]2 G3 `3 r+ |" O1 @2 Z#if 0; t5 J& C5 I f
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
) d: Z. T3 y; ^% Y! P/ v if (ret)1 \* r1 u2 E3 ^- R
pr_warning("da850_evm_tl_leds_init : User LED mux failed :": Z/ L. L$ a3 i: G$ |4 |
"%d\n", ret);
% b2 M5 M; K9 m8 P4 ?, c- i* @#endif( ^& X- P- x+ O& e) N' b1 I( j8 h
ret = platform_device_register(&da850_evm_tl_leds_device);
6 U( F: Y! p4 n, w if (ret)
) _$ ?2 a- N6 j" h$ k1 t6 f pr_warning("Could not register som GPIO expander LEDS");
2 k+ m& A4 o, T6 o% z6 [ else
) A8 c( U' z" O2 j7 L7 u printk(KERN_INFO "LED register sucessful!\n");1 M( |) Z; F% q7 s: J7 l+ p7 G# ]
* z/ @. e) T) U: @' k* q! u return ret;$ y" ~% G- Q4 t5 H
}
* s' x& |0 L2 v& r, X- Y+ J% M# K- a q4 N) @
static void __exit led_platform_exit(void)1 S' i8 L G" m1 D2 c5 t
{
# v& [7 P$ x/ t6 |5 k! h* m, @ platform_device_unregister(&da850_evm_tl_leds_device);& F0 d, V8 }" k' e
3 D( y# c' y9 K. H Z0 ` printk(KERN_INFO "LED unregister!\n");
8 A& @5 t. q7 L}5 e: Y" v B; u" r
2 }% n2 G+ Z3 Q3 f0 }/ \module_init(led_platform_init);
) V* F. r0 v9 r# a. X) Fmodule_exit(led_platform_exit);
# G6 @6 r# y M& V6 Q. i+ u3 e4 t( h+ ~# X! k6 B
MODULE_DESCRIPTION("Led platform driver");
, W+ v# ~; ^* G2 LMODULE_AUTHOR("Tronlong");
0 `1 o" `0 G4 e6 l1 x b; \1 wMODULE_LICENSE("GPL");: M: v8 U- V5 u8 f
/ @# D' r4 I" ]. z2 J8 K: X: V5 ~
|
|