|
|
求大神给下面的程序做注解,请稍详细些,谢谢。: `; W* Z) |! Q7 b T$ u+ y8 M
#include <linux/init.h>* X' v! ?8 ~8 U+ M
#include <linux/module.h>" R" a' y* r6 d$ P$ r8 \
#include <linux/kernel.h>, H2 K3 z) Y, b
#include <linux/types.h>/ d d7 ^) p: ^4 `" H8 k
#include <linux/gpio.h>
8 S B# Q5 L# E, A#include <linux/leds.h>. o& u& Z2 b6 q0 \- q
#include <linux/platform_device.h>7 j: \% P/ b* y( [2 N
4 O/ ^' w/ r3 ?4 C* y E
#include <asm/mach-types.h>
, l7 m, U! W; A0 o8 T3 ]9 I#include <asm/mach/arch.h>
) O8 t7 A7 v. u- S! P! h7 G#include <mach/da8xx.h>
8 j, `8 G2 F; t7 a5 I" L: H) z#include <mach/mux.h>
: ~. F. E/ R7 d" Z, v7 L6 N# ?) P$ _/ e; N( n0 {
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
% I9 N" I# w2 Z2 a2 X3 a+ t#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)+ F* T: d2 g% O! O4 d, [8 g
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)3 u3 Q1 I/ T9 j2 J H. N7 d
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)6 h; n' X/ N- A1 ^
1 o, R3 m0 N5 l; M
/* assign the tl som board LED-GPIOs*/# f- N5 w2 W3 `/ M/ O2 H
static const short da850_evm_tl_user_led_pins[] = {8 \, S' `: w. _8 f. K7 F6 l
/* These pins are definition at <mach/mux.h> file */
- D3 P& a) ~: T4 K; M ? DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
' I% M. U8 _/ a1 t% T! r -1
8 o, ]2 q. }" U( Z& _};
& u; G) e5 R5 e! e3 ^' g( N: I/ l# \$ L9 D9 w/ \
static struct gpio_led da850_evm_tl_leds[] = {8 v* y# i7 M1 _6 Y$ \
{1 Q- i2 }, ~% }' x$ H3 w
.active_low = 0,
* o7 V$ r q% T' c0 H F; s .gpio = DA850_USER_LED0,
8 \) s3 y# n O .name = "user_led0",
: i! l6 I0 ^, j& W9 d .default_trigger = "default-on",
1 m8 T3 ~! q7 ]0 H+ v6 O# V3 r },. k' x- n+ h8 P+ U5 J# h# a" v7 R0 S
{# v. m. K' H' v& x! j) ]( G
.active_low = 0,
; U1 I* A$ o1 {6 \+ z .gpio = DA850_USER_LED1,
1 f' a' W3 B$ u+ ]* U .name = "user_led1",) n. C F4 Y! n, _) C# o( R
.default_trigger = "default-on",
* [$ R$ o* R: n },
' J: Y7 X% `& z& O2 } {
9 c9 t9 G! A$ L, g& @ .active_low = 0,1 I1 g8 y/ ~% |, E* g" g% ~3 n. a
.gpio = DA850_USER_LED2,
- G& u! V j, U. F$ J .name = "user_led2",
6 R' t( x- M& I/ \ ]- C .default_trigger = "default-on",# j v) ~7 c! }! B) W" c
},+ }* j0 ^4 @5 J7 {3 ^
{
\: R8 M: w& n0 a) e1 t .active_low = 0,
+ m" i5 b* W5 u, x6 q .gpio = DA850_USER_LED3,
0 X, f0 H4 V# Q .name = "user_led3",
" h, u$ _0 H, I; J1 X4 X6 _ .default_trigger = "default-on"," l* t. V/ J/ C9 N2 Z
},
+ w* b7 z( D4 R( h6 ~! C$ v" ^7 r3 A/ a};
% Q' e2 T1 ]6 x* [- t1 h5 n2 e. a5 H2 s$ }2 S }8 N
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
\5 Z/ Q2 M) S$ h6 c6 A" \5 { .leds = da850_evm_tl_leds,
3 u" Q+ _7 f' g7 I' ]0 s( z .num_leds = ARRAY_SIZE(da850_evm_tl_leds),7 ]! C9 d- j1 F) W) z
};
$ A1 e6 T# ^ p3 w) x+ N; C: r: B U
4 ?3 W- P( ]% L1 gstatic void led_dev_release(struct device *dev)
2 n( r9 l) t( K5 Z T% p6 ], R{
! f' B9 ^% e' x7 y3 \' u$ W};
, m! }7 {7 H: n
: H. k# P s4 e } Q8 |static struct platform_device da850_evm_tl_leds_device = {4 \3 o* g% G+ H2 @3 P; L
.name = "leds-gpio",, J! p' c$ N7 ` S1 k2 z. \
.id = 1,
! S, |. t4 O9 j0 T .dev = {
" f3 O9 {. ^0 I# v' z .platform_data = &da850_evm_tl_leds_pdata,
% F" Z# K+ f! X( ^8 B) i+ I .release = led_dev_release,
4 M" `' d" j- h; @7 } }: Y8 X' J# `3 d) u
};3 e% F# H9 k' @2 c& ~8 X- U, U: K$ w% r
5 H" k0 U" b7 O
static int __init led_platform_init(void)$ P! C% {' H3 T6 \- [; s, z* |
{
* I: z6 ?6 |) j' a$ [' y2 |8 i int ret;, `6 F& v! @: T! D4 G! Z( }
#if 0
+ }4 v8 q& P& Q2 E b- T% { ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
- z( h; j9 e) r( m, v1 u if (ret)0 Q# ]7 X; z9 M
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
$ ~( [. Y4 G7 c+ h: w# Z) c% ~ "%d\n", ret);) w: K/ z6 |" p0 X; R, m& d
#endif/ p) P. `1 V2 Y$ } A. Y) O; G6 r
ret = platform_device_register(&da850_evm_tl_leds_device);/ n) s2 x! B* I' N+ i
if (ret)
4 K7 H' D$ B4 ` pr_warning("Could not register som GPIO expander LEDS");
0 v; Y4 n# k3 ~6 I' R' q else9 h) N$ j+ y9 X1 \7 J
printk(KERN_INFO "LED register sucessful!\n");
1 j* \' w6 _' n: ^/ P( t0 d: T
& C; ^6 _( y1 c return ret;7 a( M% u( ]+ V" H
}0 E. l5 J6 W& e O' k1 C7 i7 u) t
7 v5 i6 F( K/ U+ d0 E- B+ }static void __exit led_platform_exit(void)- U7 w+ D# b: p$ p) O
{: X8 i7 n! v3 d# T
platform_device_unregister(&da850_evm_tl_leds_device);0 `5 A8 U9 A. A6 H1 u9 R* e6 }: n
0 c8 y3 p3 T) u f- c0 v p
printk(KERN_INFO "LED unregister!\n");
8 h8 |) Q2 s% N}
% O8 i9 _3 R- u4 p9 `5 W H" x6 i* C _% s l# p9 I; `
module_init(led_platform_init);; ?' L* c9 a# w. ?, k# J& M, w7 i
module_exit(led_platform_exit);' Y7 m) V% s8 J4 B/ Y" d U3 x: o
. T- g- |2 C3 n% t6 V
MODULE_DESCRIPTION("Led platform driver");
) G8 |' k T7 t9 ]7 Z5 {MODULE_AUTHOR("Tronlong");* D* X' T K4 E0 ?
MODULE_LICENSE("GPL");. _+ }2 E% b5 ?* ~
+ D& v2 L% j+ A- t9 J
|
|