|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
- R7 A' |, j f0 C, y6 g#include <linux/init.h>$ Y2 l4 g; i4 e
#include <linux/module.h>" W( ?" Z* Q7 `
#include <linux/kernel.h>
5 _4 i) ]4 R: q#include <linux/types.h>
) Y1 o; F( i5 T- H# L. e#include <linux/gpio.h>
: {* P9 _" G0 R l) ?% `& y#include <linux/leds.h>2 ~% c* r5 }1 k: v9 r
#include <linux/platform_device.h>
( i5 g) E2 X/ ^+ B- @! t& v- T t- e, i/ ^/ s* r; ?% p" Z
#include <asm/mach-types.h>0 z& l" U1 }% |* u5 ~) a) g7 {
#include <asm/mach/arch.h> f) R+ f" x! I$ \/ F7 ]/ c
#include <mach/da8xx.h>
! o, Q) A9 {8 |1 |#include <mach/mux.h>4 t3 u& c8 Z4 p" x, h. Z
' H) z/ u) _; E3 s8 r$ c0 H: U
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)9 u1 h. z; j1 H# N- h
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)% Q2 B- E8 U9 p5 t# i
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)1 P% T& ^. {& b% \8 M0 ]
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
7 Q) b8 T0 r5 O/ Z5 L0 j
- _: g8 i5 I" ^0 n/ h% T0 a/* assign the tl som board LED-GPIOs*/
( j' E. E5 v, }1 \# a8 Zstatic const short da850_evm_tl_user_led_pins[] = {
9 E/ N9 M$ ?6 a /* These pins are definition at <mach/mux.h> file */& G2 p, Z3 L5 A) _+ J4 d7 z( Q
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,1 h) P* ?2 a, g; C$ s
-1
" W( _3 w1 C2 E3 ^+ m$ S}; \1 {$ d: a' y7 W1 Z `. F" Y
; P7 c0 f+ O/ m
static struct gpio_led da850_evm_tl_leds[] = {' v8 b- C m6 i4 f/ l2 a' F
{
# T# E7 f( s$ T, e .active_low = 0,
4 r+ \; `9 g/ |4 O j# ` .gpio = DA850_USER_LED0,6 e2 y/ l" @! l- k1 l
.name = "user_led0",! r2 K1 ]1 |* \
.default_trigger = "default-on",
/ G( R5 p F. k/ ?( K& N# t }, m, M( a. z* W4 H9 B9 h
{4 q- w+ L' }. H8 i) a: R# k
.active_low = 0,
% A. Q: A9 F: }. g# X .gpio = DA850_USER_LED1,- m8 W7 H# A ~) w$ K$ X
.name = "user_led1",- y" `* o5 L# G5 p0 D6 Z2 N1 G
.default_trigger = "default-on"," U4 ^+ Y+ o9 {2 h" n" Z. u) f( W7 l& h
},
' \0 n; T0 c ^/ n/ j {
1 k) r* V! m. E0 U h* f .active_low = 0,' ?. w- x, z+ b# e, u3 Q
.gpio = DA850_USER_LED2,! R9 a( [0 e h6 p. ] _' M
.name = "user_led2",4 R1 p2 M- v6 o, J& D9 m
.default_trigger = "default-on",* s- `- [: i( T+ y
},
: U; ]& f* [, U6 ?! v! s3 o5 r) U' ]* i1 Q {
. ?1 U9 r+ w% A .active_low = 0,
9 }& z8 G* K+ K4 c .gpio = DA850_USER_LED3,
8 }. W. }) I! B, s' c) a% D8 R .name = "user_led3",' h4 }; _- S7 ]# S0 A' ?- V9 e5 l3 c
.default_trigger = "default-on",
6 @% [9 r5 U0 I' {" y9 U },
7 o, R, r& H( }};6 `. E% i, B% c8 a8 n
. R7 [6 y& ?% n# P- Istatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {7 t/ G( \& ]% ?4 G/ y" p( a
.leds = da850_evm_tl_leds, {5 J% y1 O1 \
.num_leds = ARRAY_SIZE(da850_evm_tl_leds)," j# N1 W0 ^" f4 _" {0 ^
}; c9 F n$ ~/ `/ F( f
* _; d! S, N/ [* L& b
static void led_dev_release(struct device *dev)) m/ @# _- G" z6 H! k4 A
{) C( ]" O9 W9 K( \$ n. v6 }$ u
};+ X0 h2 L: J5 x; j
4 l! ^+ H7 N' t" lstatic struct platform_device da850_evm_tl_leds_device = {5 @8 N3 i1 H' _
.name = "leds-gpio",& i. V1 i% p( r, O
.id = 1,# O) n5 @( ~4 n- \+ x7 A
.dev = {' ~/ D! y# u, q- Q
.platform_data = &da850_evm_tl_leds_pdata,
1 M2 O$ |# B n, f7 J% I; G$ F .release = led_dev_release,
, ]+ J }+ W- i" A4 r+ |! w }/ T. R: W" X' {! N! `$ b5 R
};
. B# G8 t9 G- L4 {, t P1 r
6 c" C% C. W/ ]) cstatic int __init led_platform_init(void)
: b, ~6 M- i$ ?$ K% }# W{9 \6 t( l1 V* _9 I9 K% A9 _
int ret;/ `$ Z h g3 [' x6 i+ E7 D% v, I
#if 0
' b" p6 Z5 K$ w) i o ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
* d' i( O7 H( X if (ret)# T6 J6 V4 G9 Y, F
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
2 ^! u6 a: V7 R y "%d\n", ret);; ]( x& @9 M! S* l! Y* ]3 v
#endif
4 ?/ N8 P' ?1 `+ e, y4 [ ret = platform_device_register(&da850_evm_tl_leds_device);
: t$ x, V. [. K/ \" Q if (ret)
0 C- R$ N& o3 \4 g" I2 T _ pr_warning("Could not register som GPIO expander LEDS");
C- f: f( p" U# F- s else& S3 P" L! D6 P
printk(KERN_INFO "LED register sucessful!\n");
3 m* @$ L" \. C7 r( R
; M8 M# G$ j0 S @ return ret;' i e9 U( z# j! D# z- o5 ?
}5 k* F" l. e. \. v( p7 b
' v, o3 D- h7 j7 ^9 H4 O/ P$ W$ H
static void __exit led_platform_exit(void); A+ V4 N- w. ~
{
& P3 ] u( K. ~3 w& {2 G' L1 { platform_device_unregister(&da850_evm_tl_leds_device);
( b) j6 l: ?7 P5 J6 n0 t: Y. W0 v! C( }' |, x6 |4 d
printk(KERN_INFO "LED unregister!\n");
# ~$ Y2 O8 F5 r2 B& ?}
3 q' G- j! _1 U. C
m6 P s7 [( B$ D! amodule_init(led_platform_init);8 T$ d) W0 H3 L6 M |
module_exit(led_platform_exit);$ T \0 E: c& M5 L0 y8 ]
( V! Q' y! \& e: b# OMODULE_DESCRIPTION("Led platform driver");2 g$ {4 e7 _, e% s' S
MODULE_AUTHOR("Tronlong");* I! I$ K4 r, Q, X
MODULE_LICENSE("GPL");1 A. @3 N6 `; v7 w$ c% ~
- C0 D9 _6 ?8 {# q5 Q# m0 s |
|