|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
5 `$ @% e1 k$ J" M( G# v: c0 l; F#include <linux/init.h>5 h3 S& j3 z/ A8 O7 n
#include <linux/module.h>8 h- R9 }' x) i3 `2 U
#include <linux/kernel.h>
: q' T0 r& L$ {: t d$ ?/ x#include <linux/types.h>
( B$ Z& `0 ?) P, ]2 l! r#include <linux/gpio.h>% Q. V4 G. b& S' S( I3 d, L% J. t e
#include <linux/leds.h>6 c4 F& s3 P- s4 q) p8 W
#include <linux/platform_device.h>
) S) r. x" L" o% |$ T' I" h5 k. {% ~$ H. S5 v8 {" j
#include <asm/mach-types.h>
% a3 N9 X% [' v/ A! n#include <asm/mach/arch.h>7 y1 z7 Q; o4 g3 `8 A
#include <mach/da8xx.h>
' \/ H. X9 y1 x) H7 H2 ]& e+ I#include <mach/mux.h>
$ {: I5 G9 C) ]3 ^$ g* ]- b
' p$ X% m- {# N9 m, x#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
9 W7 x4 p) m) Z- ]( _* K#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)5 @9 I6 r/ { L3 H9 {
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)2 U: p+ z8 x0 B! U- k! h" v2 x# N
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2): V! g* E# g) L' N4 k
4 T7 F/ n( u" X' s3 Y, R/* assign the tl som board LED-GPIOs*/
. e: M0 Z/ ^5 g* N( h+ W1 Tstatic const short da850_evm_tl_user_led_pins[] = {
' x, Y4 u+ W& A) ?$ H /* These pins are definition at <mach/mux.h> file */. @, a$ }, x2 e* t
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,( y6 L3 M& q/ N/ F8 Q; G6 B( X
-1
% d& Z+ E2 l; }3 w5 z" `/ d};4 l2 A# c+ ~, m H) p0 ^/ ?
% Q) D. e) F0 Q( f4 C/ Lstatic struct gpio_led da850_evm_tl_leds[] = {+ _2 q: q4 S0 Y) g, E8 B
{( s# y7 _/ v' c( l5 Y7 h3 g2 W
.active_low = 0,
0 ?, g' t K) y' I .gpio = DA850_USER_LED0,
' R& [6 _; w; O .name = "user_led0",+ P0 [7 R7 B4 T0 ?
.default_trigger = "default-on",
6 ^9 ^6 ~; B! h }, w/ U5 ]' _/ D1 k2 d
{
' i8 M% K R# r .active_low = 0,
: B' s) A! \5 X, B+ R .gpio = DA850_USER_LED1,
5 g0 H) f8 Y' g2 q: h .name = "user_led1",7 K9 k3 A& {0 `- A
.default_trigger = "default-on",- o- s* c/ c$ m5 v. x, \9 L
},
( C, p# P/ m; w6 B {
3 j- W+ s! U' D( D .active_low = 0,
7 j, j. {/ X' v C7 y/ F .gpio = DA850_USER_LED2,- n( Y; V5 p: F
.name = "user_led2",4 \/ D5 H' d, t, q
.default_trigger = "default-on",7 ]% F D3 H% {. `& X7 n# e
},4 r8 F" o9 a3 K9 l; z
{' v u- K. U0 ]) u2 U
.active_low = 0,
4 o1 l* z0 V' x' N: O. c .gpio = DA850_USER_LED3,+ H1 e4 O$ z! J) `$ o! G
.name = "user_led3",
7 \$ c1 J _. W .default_trigger = "default-on",
. e# C* C5 E( @ },) S, C+ p4 E8 n9 V
};: Z3 i1 N9 J6 X {( b* D/ r" _
6 |, V0 Q2 k6 g, n) |4 o. `# a" f- v
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
* Q8 p, O: e, x .leds = da850_evm_tl_leds,
: a) C: R- R1 D6 H) r .num_leds = ARRAY_SIZE(da850_evm_tl_leds),
+ F! Q1 Z {* _/ F};4 A$ r1 k8 L4 Q
. \& H) B9 f* b% N* b/ `
static void led_dev_release(struct device *dev)7 ~1 U( T7 O ?' W
{
5 J0 V* N/ r& i- Y3 S};- f% `- ?0 s5 _, W- ^( t# @) U
( v" u' F5 x: z. G% h; d
static struct platform_device da850_evm_tl_leds_device = {2 P( A, E2 h5 H1 Z
.name = "leds-gpio",
8 \! e4 L8 P5 `5 f v2 e5 E .id = 1,
, ?0 `& S6 n+ k* H! t e: M .dev = {# S+ I% W0 n( C% U6 ^/ L3 k# }: v
.platform_data = &da850_evm_tl_leds_pdata,: [" G8 K R* g* K% U+ y
.release = led_dev_release,
* Y ^5 m* b/ I9 }9 Z% ~ }: C: Q# t5 u8 Z2 w
};8 g; }' ^" r Y2 |: [
' ^4 R* S1 f# x9 _7 [; l3 @% \
static int __init led_platform_init(void)
- B. s% O x7 [: t. J. Z{0 x: Y( J& `8 j0 ]( V9 i
int ret;
( J7 _1 H8 ^5 R- v+ P) Z* t#if 0! J) s0 Y& E4 e* _: b" i: @
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);) Z+ b. [# n, w- A4 D. b
if (ret)
% h" |2 ?0 A C) `" S2 g# V' ~ pr_warning("da850_evm_tl_leds_init : User LED mux failed :"0 @/ S) V8 ]7 a2 u
"%d\n", ret);! L o0 i( Z+ q2 q4 q; s$ [
#endif+ i) |0 G S! Z5 }& U/ `1 t8 i" u
ret = platform_device_register(&da850_evm_tl_leds_device);
I) ^' f: U/ R1 e* M if (ret)
, T- t( ?6 r% ^! ]3 q' E0 W$ @0 I pr_warning("Could not register som GPIO expander LEDS");! r) }" A0 j& _4 U/ T0 g# R
else
1 K3 V+ y+ n0 `5 z5 I- f1 {3 x printk(KERN_INFO "LED register sucessful!\n");4 `/ A. b4 y% i v; I8 n
) o. _: G3 ?1 i% ^4 _, Z return ret;% }; M, V" q5 }0 e* n8 g
}
+ |0 j6 V& H8 ?1 Q' f8 n( w
* h; B& e4 c' Y# i4 W8 k* Vstatic void __exit led_platform_exit(void). i3 }4 y) m8 Q! o
{
0 Q3 Z, B F! f8 T platform_device_unregister(&da850_evm_tl_leds_device);# f1 q- y: p0 O
' N3 C4 R2 M* {( k/ Z2 t) U2 H
printk(KERN_INFO "LED unregister!\n");( s2 O6 e/ C' o5 o# k8 ^
}
, B& D8 G3 Z8 D# z, s! U
9 [$ u3 T- m. Mmodule_init(led_platform_init);" j' v: p/ {( y& p. W. }+ M2 B+ W
module_exit(led_platform_exit);
0 X* v/ k" j/ b1 o1 C$ c
! c2 \7 J7 D! ^ o1 W9 B, E% T* [3 s( gMODULE_DESCRIPTION("Led platform driver");
1 k! I4 Q6 ]; G3 b2 r% R7 K: X6 EMODULE_AUTHOR("Tronlong");
1 h7 G$ g" b3 F" o) K1 Y, ~5 ~MODULE_LICENSE("GPL");. y7 C& h7 Y9 F; E
7 j) i, W( H% s0 ]" K |
|