|
|
求大神给下面的程序做注解,请稍详细些,谢谢。( L0 G( b* R% @/ Z% B+ T4 q( @
#include <linux/init.h> t; o9 A0 L9 p2 M* y8 \
#include <linux/module.h>( k& {5 D& [, b J( W2 S( Y+ y
#include <linux/kernel.h>0 [* j, M* X k- v6 r6 O
#include <linux/types.h>% Q3 k9 G2 [ b6 Y! ?) I
#include <linux/gpio.h>
, t/ S0 S# W( v# W: Y( A9 ~#include <linux/leds.h>0 y1 Q& u- a4 `% q* }& ^; W
#include <linux/platform_device.h>; L% T* N( _ S3 P) v# d1 M1 `2 o
9 E2 B' g9 l% y& p7 ] m! ~5 ?#include <asm/mach-types.h>
6 v, a6 u" p9 r6 Z#include <asm/mach/arch.h>. T2 O" A+ d x6 V5 a+ M" d V0 W' ^
#include <mach/da8xx.h>0 G$ F6 X5 d5 y: [$ I# h* {
#include <mach/mux.h>4 m+ }1 W* c1 p0 Y4 M- B
3 r% N1 |2 v3 P; v! M8 Y#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
% K. ]5 Q9 u8 e1 T#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
$ V8 _* @ s! [4 }#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)6 K2 c- S& O9 j& n: j4 w$ w
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)1 k5 q) m3 m+ A8 @
8 f; y8 s, L/ |" D4 T/* assign the tl som board LED-GPIOs*/ ]# f1 L8 s8 O d9 I {7 i
static const short da850_evm_tl_user_led_pins[] = {
# U% ]2 b% z j$ o% F- \ /* These pins are definition at <mach/mux.h> file */: J9 C X9 c8 C/ l. G7 I
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,# a, d6 }% k$ K" T! |
-1/ ?: w, A+ j: Y" f0 y& I
};3 i* c' T4 ^" Z: N% Y8 d
/ O: e) ]& [0 C1 Z8 {/ q' ]3 estatic struct gpio_led da850_evm_tl_leds[] = {
+ x, x2 @/ ~0 I6 f: Z {" r- ]+ n1 f2 H: o6 K9 }' P, d6 e
.active_low = 0,- a& J( O9 R5 s# e& W6 ^- ?
.gpio = DA850_USER_LED0,! I/ a, V- x9 l7 q1 o
.name = "user_led0",+ F# a. A1 S+ \; A8 m9 h
.default_trigger = "default-on",) @3 j( f- m. y6 W* e$ {
}," L5 W5 g; @( M( ]5 B5 n
{6 Z1 ~8 H* ?5 X5 V. J3 ]4 f
.active_low = 0,
x h" \3 R8 w$ k1 ]/ ^ .gpio = DA850_USER_LED1,. \ ~: j; `. G1 F8 n: |, E
.name = "user_led1",6 x3 @/ b* C0 x6 o- }- W
.default_trigger = "default-on",
% P3 J5 n( V5 u; B4 G( n) F. V' w8 O },, ~9 Y" m) z ?1 v
{$ X8 h% o) R; ?# t, z
.active_low = 0,
' M' g1 S S: o. M$ T4 {3 q .gpio = DA850_USER_LED2,4 Z! ]$ i+ G& L5 R* z
.name = "user_led2",
/ w9 h) x6 ]. L2 d/ ] .default_trigger = "default-on",1 B& k/ Z! V8 B2 W
},, R% t4 i+ v6 b; K
{: L* \) C# |2 M5 B2 q
.active_low = 0,' G4 O1 I& q- I# C
.gpio = DA850_USER_LED3,
) c4 ]: F7 p) N .name = "user_led3",
. E. i0 l- D4 k6 ` .default_trigger = "default-on",& q4 s7 x% b5 q! X9 ]& s
},
, D, B' f; r9 T: A: O! L7 |; F};' y7 S. S$ d6 k" d( d: U
* X' N* r6 O6 j! A7 M/ R& M, J
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
* J( t; O: \) y/ o- `/ p6 k6 c .leds = da850_evm_tl_leds,
; `" v9 T" U) ]9 D. A; O0 @ B. v .num_leds = ARRAY_SIZE(da850_evm_tl_leds),
9 {7 U) i( p$ D7 {, S( B* C. {};
1 r) J. b! \* K" q. t3 Q9 [
! }2 Q3 Y( T9 b" Q* J! rstatic void led_dev_release(struct device *dev)$ ], ~1 O2 z' E/ I+ P6 w% M8 g/ K
{
9 y8 T* Q- u) {: P$ [2 M};
7 u7 u/ I3 [- R" n& V; U% @; V
' V" k; r y* M+ M9 lstatic struct platform_device da850_evm_tl_leds_device = {
6 ]. K! R1 W( J, Q" u' s .name = "leds-gpio",7 U6 w' e; l! g) r z( }- G' N
.id = 1,3 n/ B3 e& p v% C
.dev = {
) M0 t/ `8 s6 z( d .platform_data = &da850_evm_tl_leds_pdata,& b4 @- A! Z* o( Z
.release = led_dev_release, O& C X6 V0 ~, I- b( D* ?, E& P. ]
}
) e+ h1 R/ G$ b9 p};
2 Q) p0 G- ~4 N* V I7 Z4 e, a& p2 ^# g/ e) O* `
static int __init led_platform_init(void)
) V0 B% h0 y5 J" g( O' x! J1 Q{
3 m: q0 q5 ]! ~5 d) l int ret;
; ?3 s4 k( ~: h5 v6 r+ i#if 0' L8 W C) p( S% m) W) }6 Q% X
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
7 t& e ?1 U( s) I if (ret)" Q4 X% Z! n# b. P7 i
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
7 v! w# }+ b6 e7 |, O "%d\n", ret);; {2 J) |" p( A3 [& _
#endif( e9 j9 F9 q4 z' R( D
ret = platform_device_register(&da850_evm_tl_leds_device);) B0 x% t! ]- x* z0 W
if (ret)
$ L: _* G# f0 V pr_warning("Could not register som GPIO expander LEDS");
# t3 T; k; a% S3 P( Q" V else
" U: @6 B4 L" f+ q0 Q1 Z5 c F5 G7 ] printk(KERN_INFO "LED register sucessful!\n");
2 Y3 m4 M7 Q% b- ?! r) k
1 a3 _, q1 X$ W, c! l return ret;
0 A% e) Z' r7 Q9 y: ]5 t}
% k4 v7 u3 G3 ^1 s; I& w9 G) Q! y
# o( a6 s9 B8 K4 s- G+ F8 N# X& [( {static void __exit led_platform_exit(void)6 z( k1 o# @, w1 ^/ o
{1 _' w5 r9 O( e8 S, k3 K
platform_device_unregister(&da850_evm_tl_leds_device);* _8 i+ Q! W1 x; ?
) j" H6 @: |# M }: u; W6 }* e6 u printk(KERN_INFO "LED unregister!\n");& q2 S2 \6 [; u7 ]' {0 I0 t
}2 R, I; F1 S- F& a8 P0 P. W
% h# E) n( y( [+ z4 U$ omodule_init(led_platform_init);
% m! Y7 t( p; T; t7 ]! Kmodule_exit(led_platform_exit);0 _; g K: Q+ d/ v1 t
! Y. G2 s2 J. p4 OMODULE_DESCRIPTION("Led platform driver");
: H6 E! D" k1 dMODULE_AUTHOR("Tronlong");# s. N1 d f) i0 w7 b3 c f
MODULE_LICENSE("GPL");
" _/ n# y3 q7 }) Q8 G) q3 _/ ?' h6 G) t/ d3 `3 K
|
|