|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
" S0 f% X' z& h#include <linux/init.h>
6 h% ]& E9 I& M+ `1 m" N! i( d#include <linux/module.h>% u4 U& I% K( R8 C6 h
#include <linux/kernel.h>' c# A" @0 Z9 d
#include <linux/types.h>
) w8 c% T8 F% P$ Y! O3 f#include <linux/gpio.h>3 K4 R) l3 |1 i+ q
#include <linux/leds.h>
b6 G2 z* G& \$ G* {#include <linux/platform_device.h>
0 B5 P& l1 }/ r' R+ G* |1 O# E7 |6 ?8 {( Y' G3 K6 G
#include <asm/mach-types.h>
4 `* q4 j9 _: [: b' F+ S& ]- O#include <asm/mach/arch.h>9 ~ f" u; A( ?' H, w
#include <mach/da8xx.h>- [0 y+ s) G* r5 `
#include <mach/mux.h>+ ^0 s% x6 u0 f' N! K
" {" J1 L9 g: z7 @% a# X& Z#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)" k: I/ w" v$ L* B0 A2 B
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5). h. A" {8 L( Q. E
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
' f! J, ?% R7 o3 d8 P b' I#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
$ I$ R, M# b$ j% n$ C$ C, u0 m4 J, L
) ~/ Z: u1 o" A3 n+ N/* assign the tl som board LED-GPIOs*/$ [! X; Y" \0 G' H7 Z
static const short da850_evm_tl_user_led_pins[] = {
" B! r J3 v5 F# Y ~7 m /* These pins are definition at <mach/mux.h> file */
4 P( r$ j5 Y/ U DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,& `3 v& q8 V+ F$ H9 }7 w. J
-1. E5 q! V, o g: m1 o, }9 Y# G/ R
};! b' d4 y6 T; r4 C; S/ e
7 s9 x j% r- Q- G" `/ ?8 I+ w* qstatic struct gpio_led da850_evm_tl_leds[] = {* C. d8 {2 x7 f( i- J' `# e
{
0 f) l+ d$ f6 K8 Z) Y$ ` .active_low = 0,
; B) _: Z0 t C6 N; _# h+ E .gpio = DA850_USER_LED0,
a6 H( @+ `5 V. _6 [( m# G& { .name = "user_led0",$ P- T+ c8 b. o) N( }
.default_trigger = "default-on",
4 b3 u- z7 Z" Q* ^( H1 H },& P! M8 [6 H3 ]( @4 r$ X
{) F6 A) X: @4 i: I- k3 S
.active_low = 0,
6 }- {8 z/ {* D .gpio = DA850_USER_LED1,
( P0 T& p/ x8 }$ p .name = "user_led1",
& N- L Z- c* ]0 {6 l! w .default_trigger = "default-on",% D2 I( e/ j! k) F( z7 G* f
},* {, k: F H; ^6 k
{8 }! m2 v6 V( \" r2 J- `. g# W) T+ f
.active_low = 0,5 w" |( B$ }- P7 j0 a9 W$ }
.gpio = DA850_USER_LED2,, F* B8 ?/ w ?
.name = "user_led2",
0 A% v7 S, e# N# I j .default_trigger = "default-on",' F: O n# C# W( R+ R0 I6 N
},3 {4 R# r& m- f ^6 `% f \
{
: o% d7 e9 q6 O' j .active_low = 0,
. h: k+ n9 X3 R" y .gpio = DA850_USER_LED3,
6 t5 H, w) h6 r% o .name = "user_led3",2 h; l4 q1 z- e: B K* o' h
.default_trigger = "default-on", K3 c* Z& A5 V: C: ]
},: z' W% E% ^, \# z+ \
}; n% ]: \6 d/ s* H- }
B+ B7 b& ]) \; c8 ^static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
* v. |8 t0 g. F! X9 F, Z .leds = da850_evm_tl_leds,
2 p; K0 F g* a2 G* A. Q0 [% X .num_leds = ARRAY_SIZE(da850_evm_tl_leds),/ Z# z u Q- n8 u% X: f
};
, A, P% o& k/ B1 }. [' c% j5 _' X! ^7 H
static void led_dev_release(struct device *dev)
( s: S% q2 ~' d/ k' J{
. s9 b; A% w! H, M* w1 Q' ^) ?};6 p! u8 W! m& p$ r
# g9 {. X2 }: v) O7 y! H8 L$ ?! istatic struct platform_device da850_evm_tl_leds_device = {$ X5 C4 a) r* a1 l! m
.name = "leds-gpio",
4 ]% u% H$ p; y .id = 1,1 E9 s. ]( O' e" |( ]
.dev = {
1 z1 g( z3 _5 |0 Q1 B .platform_data = &da850_evm_tl_leds_pdata,
0 D. [9 F8 o5 M/ m8 w/ |: ~' z .release = led_dev_release,
+ W0 ?) x j ]! ~0 V, t4 H }( h+ B7 ^9 ^; d* x
};) m6 z" D, p% F5 a% L% Q' P
9 l8 p: s3 F: Y8 a( q& ~; s1 W3 istatic int __init led_platform_init(void). W* J5 W; P. ]/ k5 h) r$ j
{/ G e+ T8 p3 T- m6 U r
int ret;! h2 w% I' I8 O k' j- z
#if 0" V) A7 v5 C9 U" B& s8 Q
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
, P# F& W% S; T if (ret)6 t5 A4 G Y' r( x* \$ W2 y
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
- u# u" I5 R) b, _' A' B+ ^ "%d\n", ret);
3 u$ x* e! [% B4 U @, |2 y* H& s#endif
- N; c- `9 J4 ?+ G( O2 T b5 { ret = platform_device_register(&da850_evm_tl_leds_device);6 v V- [& x, b8 _5 ?" q
if (ret)
& O$ h# {( i) D% v pr_warning("Could not register som GPIO expander LEDS");
; U+ M0 O% W5 D) c else
0 Z9 |9 O- h+ a ^4 U0 E printk(KERN_INFO "LED register sucessful!\n");( p" ~. h5 c4 w. x1 L. j
$ Y# r9 i0 i- U- r
return ret;
) ^# g( S( b( G}% @. h% ~) x) r2 p
# g4 x" y$ K, e. T6 o8 y/ Z9 c
static void __exit led_platform_exit(void)/ r/ |& a3 L& V9 J# K# {
{5 v4 j0 p' W; M! e, X/ A% \
platform_device_unregister(&da850_evm_tl_leds_device);$ a4 S' j( e- Z
, b5 z& V( g$ r7 V, c; f" z printk(KERN_INFO "LED unregister!\n");
9 J3 e% Z" @3 T y! e) O4 ?}
! ~% X, d7 I( ~9 P' J! w0 b( u
# O& z5 c; w4 V5 E( Z2 W; H- vmodule_init(led_platform_init);
, T! S2 R% O% r/ dmodule_exit(led_platform_exit);
7 k& x# l# x9 i* M; d4 S7 y! L" `+ C
MODULE_DESCRIPTION("Led platform driver");* e$ ^4 u+ M9 e2 j% m1 U
MODULE_AUTHOR("Tronlong");
7 l2 d. f; E) Q! L6 l3 M9 {MODULE_LICENSE("GPL");
, q" [) L) G2 v( Q8 `0 H9 Z
8 B2 J& O/ r- i! o |
|