|
|
求大神给下面的程序做注解,请稍详细些,谢谢。( |7 y; g9 I7 m; T' |0 w5 s4 h; Y
#include <linux/init.h>
7 i3 G" l) p& K8 N/ w8 J, f* h) ?#include <linux/module.h>
/ V* V0 }* @' F8 L! ?3 d$ M#include <linux/kernel.h>' k' F1 F: G: H8 g
#include <linux/types.h>
: y" R( z2 J; E6 M. H h#include <linux/gpio.h>
& o, B6 m" w/ t" }#include <linux/leds.h>
9 e+ e; G) M6 r+ b! a# n#include <linux/platform_device.h>
+ D* X' A9 Z0 L+ S. ^4 c7 f4 p" O4 e' S+ a5 `5 u" o
#include <asm/mach-types.h>
/ p0 e& k. u% L, J5 N8 ` k2 ^2 U9 e' k& ^#include <asm/mach/arch.h>: X) Z; ^8 m& x; Y9 S- F8 E
#include <mach/da8xx.h> `9 ^+ ]9 f, B# r$ p C
#include <mach/mux.h>: a$ P Y- q9 L0 w3 `
, o+ J/ Y# M1 D9 R#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)& v" j) p7 Z$ p" M$ S) a
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
* y2 X% c* z) [# h5 c#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)' C$ r# ]2 u3 u
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
! s7 a# X3 t: H2 Y! Q- o) [, R8 z0 K$ O
/* assign the tl som board LED-GPIOs*/
. h5 f- l, e- G$ d T) r2 | t+ ?7 Tstatic const short da850_evm_tl_user_led_pins[] = {
& @7 }# _- f/ P/ V /* These pins are definition at <mach/mux.h> file */5 s' |' H8 ^, j; p( ~
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
! F; R$ T3 A) \* i) n; V: [# p& u -1
$ q, r/ i9 z1 N6 |};% }" W* O) J9 |
* b5 W& L5 H+ X8 M" wstatic struct gpio_led da850_evm_tl_leds[] = {
2 m' x; x5 Q9 A9 A' X3 ^ ^8 H {
% h" f6 C" ^ Q: M* r .active_low = 0,
0 `0 X; w% S3 |+ M2 ?# v$ \; C .gpio = DA850_USER_LED0,4 ~" }% w2 v7 y6 ]' F0 S( N
.name = "user_led0",) v/ c. f2 H6 I
.default_trigger = "default-on",
- L- j8 z; X8 `6 Z2 V& a },
; E+ K- @- }7 q {' S/ B5 M' F5 f% ?
.active_low = 0, s- Q( [# x' N6 }* F* |" h/ o
.gpio = DA850_USER_LED1,
- u$ N0 R) Q# P% q! n. i .name = "user_led1",
- f/ d* O1 X- O2 ^. ^& M: m .default_trigger = "default-on",
/ w: U4 I" c5 B. X8 `4 k7 r },5 Z5 F; y) N3 b5 Z& {
{
" l8 y% b* q) v+ ^. ]" g .active_low = 0,9 {5 I1 o/ E' M: m
.gpio = DA850_USER_LED2," z' H& Q" D! C
.name = "user_led2",' m: f& k5 K. q% J
.default_trigger = "default-on",
4 F3 Y6 Z, R7 S4 J! P- B% u1 @: G },
' a/ ?. P* w- K {/ e$ j' t" N! {* Z% v7 c- m$ A
.active_low = 0,6 P5 s# d, s5 N4 a$ K
.gpio = DA850_USER_LED3,
) ~' c) E0 W* D% U$ M& J! [3 Q& u& j .name = "user_led3",
8 x; U- ~: M, c& H1 P% q .default_trigger = "default-on",, o8 S1 t" d" v0 T* R7 w
},( P9 P e( H% z2 O! r: F% Z! c4 \
};
) o7 Y, V% C9 h6 s+ l. }" S0 b5 b, E) L+ H6 O
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
" {/ q/ A$ s8 a( j4 n$ Z3 U .leds = da850_evm_tl_leds,
& F/ `; T8 d8 d8 T" Z0 \ .num_leds = ARRAY_SIZE(da850_evm_tl_leds),5 _# I/ `/ Q" G# B, |$ }6 K4 q& H& G! n
};2 _* k) [; x) B4 a; K
- F6 i4 p+ t! ?4 p \static void led_dev_release(struct device *dev)
9 w: ?" g) Q3 k" N# y" e- P5 Z{" I! c& Y5 A2 i0 Q
};
: c8 [: S& X6 d( Q: F+ a: g
8 g R5 G7 c0 x9 bstatic struct platform_device da850_evm_tl_leds_device = {0 X4 J5 N# q% \$ Y* a
.name = "leds-gpio", j2 p, V8 ?+ ?
.id = 1,) s8 h4 E: b6 X* I, L8 j
.dev = {
; m' [/ n$ m/ ~8 ~& W3 Z. k .platform_data = &da850_evm_tl_leds_pdata,+ U# F( S+ @1 {
.release = led_dev_release,1 n" t+ D( M8 d- }- Z5 G
}
7 I2 d: [4 c) ~" Y6 D& p};
! u3 H) u' O! H: {7 |- H$ p0 B( E
3 g) n+ ]/ e" X9 H( T% @4 [$ K( Sstatic int __init led_platform_init(void)
1 L& T8 Q$ W9 R* v{" X# ^: I- D; A, r% o% ?$ Y' y
int ret;; Y& }8 F- T @: `( d3 s6 l+ h
#if 0$ V2 h9 D2 e/ s
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);! q+ P& }, ]' W& H
if (ret)
# K2 s3 w% ^ G7 B$ O) g pr_warning("da850_evm_tl_leds_init : User LED mux failed :"% x' b3 r5 t* e; w+ ^5 ]0 Y( k
"%d\n", ret);) M) B$ K5 U4 Q; \5 u% p6 v0 b
#endif
0 d ^' r' O, v$ R* I) ?9 n# J ret = platform_device_register(&da850_evm_tl_leds_device);
" F( X- }! x% z" m' A. p- X4 I if (ret)* v2 U8 N9 T- _' P
pr_warning("Could not register som GPIO expander LEDS");! Z% v+ g$ h$ h8 v
else- B6 }# P; j/ O0 @. ?! N" A
printk(KERN_INFO "LED register sucessful!\n");
* Z: G$ O0 o6 N* i6 G3 M+ j
) R u* y% B# h6 E- F$ g return ret;
2 b5 x J Y- ?. C}! b8 H, \$ l( u1 A; m
& q+ Y+ K+ V6 E& I' D% h2 ?
static void __exit led_platform_exit(void)
5 \1 \9 U. Q+ \- R6 I8 B j2 j% @{
' Q. ^9 f( u! X" B# E platform_device_unregister(&da850_evm_tl_leds_device);9 G9 B; t* I! e# \8 n9 {2 ]
6 U4 G. f5 q" B3 o6 J
printk(KERN_INFO "LED unregister!\n");
" B/ L% m M' e" C' `( Z} b4 {6 ^5 e+ G4 X* I
8 v6 }9 q/ @1 c! h5 Zmodule_init(led_platform_init);5 q2 R, \, x* V+ Y; f2 u
module_exit(led_platform_exit);* |& t, O. |- m" _7 r
: @8 D2 N( c! `; d; S
MODULE_DESCRIPTION("Led platform driver");
6 j* Z5 c5 H% n/ _ mMODULE_AUTHOR("Tronlong");9 N9 H3 D! H6 Q* m" ]$ ?% |/ {* e
MODULE_LICENSE("GPL");& n1 ^. M3 G/ o# X/ p6 J/ b
/ b8 T2 r% X0 Q8 h- r+ K
|
|