|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
" b( g# D* V. e! k#include <linux/init.h>
$ z l4 v- W3 {8 u& `. ~#include <linux/module.h>$ P, [# Y$ o" T; b: q. S8 {
#include <linux/kernel.h>
. s" b+ K9 o% n4 P* I7 {" x _/ V#include <linux/types.h>' b. \7 n3 d. t2 A. ^4 J/ c
#include <linux/gpio.h>6 t f$ O7 K u3 _
#include <linux/leds.h>2 G4 ~2 p( o8 H; ` P* ~+ Y
#include <linux/platform_device.h># \' b6 Y) J4 ]' d: W* ]
/ x* d& M- c; a \; W- K#include <asm/mach-types.h>- K2 k1 y5 z8 }" s& Z8 g
#include <asm/mach/arch.h>0 j3 i3 \4 k1 Z/ D' C
#include <mach/da8xx.h>
# q$ G% |" y! {1 ^#include <mach/mux.h>
1 c9 N6 o& D* n5 ?6 Y. o
' |; |4 C7 V# e7 F#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
1 J8 r0 `5 G" M, [: B#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
# A* n' E. z3 E0 R#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
& J9 e9 Q; K8 D" m) b#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
- e$ D w8 k/ _% `' c) ^4 I. y/ N1 s* a A v: _
/* assign the tl som board LED-GPIOs*/
" ]& p6 i) h2 Ostatic const short da850_evm_tl_user_led_pins[] = {0 w9 n% r2 b: d
/* These pins are definition at <mach/mux.h> file */0 r, c/ ]3 Q6 |, a- t4 }
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
, O" L( |" @' e$ c" p4 L0 U3 r -1
1 n) X. T) @- a5 Q9 o7 W};
, |: [! m/ J! v7 e# A! K! W( c. o+ i% f
static struct gpio_led da850_evm_tl_leds[] = {
: W( G1 P# F# }" U1 n0 v9 X# g! l {
0 v% {7 V3 w% x& r .active_low = 0,+ E1 A" ]3 i' f2 i' Y
.gpio = DA850_USER_LED0,. L/ M5 \0 d3 [3 k
.name = "user_led0",
& H4 Y. v4 i9 n; s, z2 b .default_trigger = "default-on",
& i9 I7 m/ M2 G, s1 F) S& E },) v2 Q% Q4 d5 U; D# m. d
{) @7 p w, h) ?( f- L; B4 S
.active_low = 0,
7 |3 W0 e1 M! M5 [: H .gpio = DA850_USER_LED1,
; u+ f- p1 u; S; t+ k3 ] .name = "user_led1",
* D: n$ _# q) ^# `7 t) `% `* p' W .default_trigger = "default-on",: r# U. r) K" B! d( b6 B
},* ~8 n2 o2 I" x
{
. H8 C5 g. `6 } .active_low = 0,1 I2 l. R; v/ l+ T
.gpio = DA850_USER_LED2,- B" ?# q9 }! k! N# E! F% W
.name = "user_led2",# b* v: L/ Q- J) h/ k* y
.default_trigger = "default-on",- E& z5 u1 c3 B# x5 n& r7 Z
},
" M* q$ A4 t! X2 W {/ L2 ~0 ` z+ }1 Z1 p
.active_low = 0,
' D/ N9 i% G1 _ ?! F .gpio = DA850_USER_LED3,5 b% `6 r9 l# o
.name = "user_led3",
; \7 w9 \, w, G; j7 Y .default_trigger = "default-on",
; A, \$ M, F, _9 }! Q; s5 \ },
* ]9 f$ G# ^' |: W) q) Y};% m9 Z* E1 ?# U
2 |. D8 Z- C4 d
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {+ X0 e! k9 ~; x
.leds = da850_evm_tl_leds,
( e2 `, |2 d5 ~4 I _; x8 ` .num_leds = ARRAY_SIZE(da850_evm_tl_leds),
/ h- c! e# Z# G* V};" S5 K8 a/ J2 U) ^. Z6 W
5 U, S5 }/ {/ Q: [3 F0 J: W M- j
static void led_dev_release(struct device *dev)
# P2 e5 `+ n8 ^# \, m+ y+ W1 L{
0 T# q# ^8 x/ p9 t6 E3 p) T};3 \, `7 k/ F/ N4 J9 @
& E) c* q5 }( t
static struct platform_device da850_evm_tl_leds_device = {
7 p2 H- R9 {$ m1 s" |; V/ ~8 J. ? .name = "leds-gpio",
' l) ^% l. i" r5 D$ T0 A& B. V" A .id = 1,
0 o7 O( m+ z( Q .dev = {
2 R$ h+ B. v3 \8 P0 w .platform_data = &da850_evm_tl_leds_pdata,
6 o8 N& y& L( n* }+ }5 w .release = led_dev_release,! R* x# H [3 @1 L: i: Z4 l9 |$ g
}0 s+ x( I( _$ o1 F4 {
};
$ J( S) B$ r$ G8 W$ v! {, j& s5 O% M3 ]$ r! R# w, Y# V
static int __init led_platform_init(void) H* J0 F- l/ o1 \0 }$ ~
{3 F u' G0 V( H* S) F, `2 R
int ret;
1 U8 M. s) N% C0 v#if 0, b5 O4 ^' _2 e9 R
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);4 D7 T. [' z% L; A" p, Z: j
if (ret)
* B5 C q+ ]9 r5 h* o* F pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
i7 T' t, R& c/ H4 y "%d\n", ret);
1 {: V0 _. g2 K6 [) }+ J#endif, F6 P. O. B8 F( Z3 j
ret = platform_device_register(&da850_evm_tl_leds_device);+ }0 z% L ] O, ^3 F4 a
if (ret)
2 x& K$ V( i5 _$ p5 U pr_warning("Could not register som GPIO expander LEDS");
4 A* V* E4 K# z; w- _ else
3 `0 U8 z' x# ~) U: `/ h2 B- K printk(KERN_INFO "LED register sucessful!\n");
8 @6 c. a; k; @( J0 }' t, T! ~, q8 B
return ret;8 q% `5 W( k! Y4 u9 Y( M, H
}0 Z# Y7 k7 q1 k- U. a5 q
2 m6 T: @6 e) o3 b5 q9 V8 Z
static void __exit led_platform_exit(void), t0 Q4 T! f% L7 a
{! }! _6 b, o- \' \( c
platform_device_unregister(&da850_evm_tl_leds_device);
( Y0 S. B8 x# n4 E6 r# Y
8 A5 I; ~; B5 m2 u+ d2 F3 ]4 G printk(KERN_INFO "LED unregister!\n");
( |$ Q$ X0 Y( X' w( S/ M}; b0 _1 a5 M. s" o _
( i V, |/ O9 O% {
module_init(led_platform_init);! r: f% j; _4 G: Z/ C# t, U
module_exit(led_platform_exit);
7 M) v O$ v# A' u4 M6 Q. q& Z. H2 x: U0 v* q
MODULE_DESCRIPTION("Led platform driver");; b9 S0 x1 M5 Y i9 N) {
MODULE_AUTHOR("Tronlong"); v" u# M' q, O8 `3 J& G! L
MODULE_LICENSE("GPL");) P @( |8 a& |
1 I( H+ A2 ]' \5 |* ]- z |
|