|
|
求大神给下面的程序做注解,请稍详细些,谢谢。. L$ b0 G( c0 M( ]: O
#include <linux/init.h>
% ]& q6 ? ^8 o3 p! K" g( j#include <linux/module.h>6 l& l5 Z! ?; B/ z3 ~
#include <linux/kernel.h>' a, d6 S( u1 n7 a9 \
#include <linux/types.h>
, A' S6 r8 G3 [3 L$ Q8 H#include <linux/gpio.h>5 c) {0 F2 u# Z0 z( ` @
#include <linux/leds.h>
- A- ?$ v3 ]' d- |& K' W- B2 s/ e7 |#include <linux/platform_device.h>
) ?; T/ ]# Y+ u+ C T& m
) B( O4 }4 J- l3 W' J, g#include <asm/mach-types.h>
+ [/ \/ ? ?) `( J#include <asm/mach/arch.h>: P/ a$ f) |# n' }& a' n6 ^: |/ i+ {! |
#include <mach/da8xx.h>
( F: E& k/ c/ z N4 V#include <mach/mux.h>
# u V! M2 w- U4 m! D( b8 v1 H e, y. B6 e9 I) q
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0); m6 z4 E' d* b. z4 a# _0 f
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5), |. h' n+ o- P1 `
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
% t* g: }( W( o4 q#define DA850_USER_LED3 GPIO_TO_PIN(0, 2) p$ c1 Y; j9 ~% v9 C1 V: U
, L) F9 j$ B, |, V( w7 f
/* assign the tl som board LED-GPIOs*/
8 L& d ?7 g# N9 tstatic const short da850_evm_tl_user_led_pins[] = {" K' a1 a: Q* x/ J
/* These pins are definition at <mach/mux.h> file */' q$ {' s1 `! ?% Z9 @4 |- z; m
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,9 I8 |" B6 V5 J: ^$ S- v" \6 ^
-12 n6 p( V% E, }+ P/ o4 W
};
' O7 y/ a8 ]' z7 K: t. l+ {4 h9 C w5 z
static struct gpio_led da850_evm_tl_leds[] = {) @0 e3 r) u' q+ z/ i
{
) ~2 g$ J" t7 v# j .active_low = 0,
" i8 V& i6 q1 }1 A- A& q, m8 i- N .gpio = DA850_USER_LED0,. m# R# Q/ d5 g' o
.name = "user_led0",
+ M `0 |. [6 j3 j: h .default_trigger = "default-on",
) `2 u/ u$ C- r- y3 e },
+ H) x4 H4 w+ C f {
& O- V- L( L: [) d4 O P- w .active_low = 0,, U9 {- T9 w% Q3 y( ~. O
.gpio = DA850_USER_LED1,* W3 g0 S$ J0 O0 @
.name = "user_led1",; a, H- ?1 h7 Q$ a; Y4 d1 N
.default_trigger = "default-on",
2 A) n7 z" G2 K. j; A }, M0 \! d, C; k; M @( e" a
{' x* O9 Y+ o, y8 u- y1 ?
.active_low = 0,
u1 |% t# c p% u; } .gpio = DA850_USER_LED2,
. k' Z9 Q9 s4 E0 m. { .name = "user_led2",
3 E) D3 e. G$ f6 \ .default_trigger = "default-on",4 F4 E5 K1 p, {# i( T6 w
},# ^: ?* u1 t3 U, r4 @
{
' u4 f6 M, u8 }/ w8 H .active_low = 0,
$ A$ @) q" }2 | .gpio = DA850_USER_LED3,
5 B1 l6 u# ^2 ~ ` .name = "user_led3",
$ H. F3 _+ a+ ~- D# C* s/ h .default_trigger = "default-on",' ]) Y0 q, A6 {! [
},
3 J: c$ C" M; d};
9 U' u% m+ d2 F' n' k; a7 ]4 I7 E! D, K2 _9 R2 ~
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
* N, p' | O+ b* ?( O: K .leds = da850_evm_tl_leds,
/ j1 p: H- o" d4 u) [+ W% P+ b% ` .num_leds = ARRAY_SIZE(da850_evm_tl_leds),' |; [6 B/ r$ C: ?0 N/ Y; }/ d9 {
};
+ ^; G( n& V: \% n) U* Y3 P7 ?' I. J1 E
static void led_dev_release(struct device *dev)
( e8 @$ H% |/ g) ]; O{9 A+ H2 |7 p2 w4 w0 M4 ?
};8 u6 {" ~' G5 x% q
$ u' z3 g# w' F( R* I3 J) Tstatic struct platform_device da850_evm_tl_leds_device = {( a( Q! g+ k e/ q2 a
.name = "leds-gpio",: r D: s/ G( h& U" ?
.id = 1,
) ^' ?0 z+ d, j; e8 t .dev = {
- E) c ]# C5 d: u6 y .platform_data = &da850_evm_tl_leds_pdata,, x$ |7 Z; h; Z6 r- U6 e9 v
.release = led_dev_release,3 D- D9 B4 V" g- ?
}
1 p3 D) H' ^, `9 I};- S( B: D; C" [0 L6 C( X8 a- H5 t, G
& I) w7 C9 k% A& o; i# x1 j
static int __init led_platform_init(void)
# \& a: E% ` B! d' P1 e{
/ r( v! e2 f9 J, w' z int ret;
* Y% d# ]- [2 {% ]3 l' j#if 00 A Z0 x6 Q5 [, J
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);' J* q; _2 O' }
if (ret)& y8 s) Y9 W* G* X" ~
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
, @- X- ^8 Z! g/ T6 W "%d\n", ret);
& X. {* V6 [: u. y# E#endif
3 F1 `( ^ L/ s2 K1 i# q% M- h ret = platform_device_register(&da850_evm_tl_leds_device);
' F: u5 `+ q3 p. V; g- F if (ret)
, `7 B% N3 O% [* R7 m$ U pr_warning("Could not register som GPIO expander LEDS");
% A1 n5 y# j t( B else
% f0 |, u. ?' `6 Q# C! R printk(KERN_INFO "LED register sucessful!\n");2 O. @6 B) q A+ M
+ o, G5 ]7 c& E: @% `0 }! i
return ret;0 x9 J+ f% F- Y' b( n
}- b1 H4 G' z4 C# K/ F2 u, N; C
8 ^3 t8 o( v P6 z/ g: k+ f% Ostatic void __exit led_platform_exit(void)
; H7 d' V5 \3 O" H0 {9 Q) v$ B{; ~. y# w( p# U! v
platform_device_unregister(&da850_evm_tl_leds_device);
& ^8 W7 k- i$ u2 ?5 G, {' b
" ]8 D1 m5 {0 Q% [" ^7 P1 H printk(KERN_INFO "LED unregister!\n");
3 I2 V' Z& t# Q& M( \4 m0 x& U}
. g1 i% R+ `) N8 L& R( e# s2 }& \" k
module_init(led_platform_init);4 c$ h; s* R& N, _( D" J% R
module_exit(led_platform_exit);3 f+ }# @* d. z% G9 m' w; }
' B& b: v9 h4 a$ j, U$ bMODULE_DESCRIPTION("Led platform driver");' O. C7 }! F" w. C8 u& D/ z
MODULE_AUTHOR("Tronlong");
& f6 U! N7 b! }7 GMODULE_LICENSE("GPL");
& X/ n+ r; F/ [& _6 s/ y. d, H" S1 G/ U2 [- E
|
|