|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
5 Q, U' S9 h- H8 b#include <linux/init.h>0 @# O8 |$ B6 `# y" p
#include <linux/module.h># F7 {& T; X1 q3 ^ c6 a# Q" {2 O( y
#include <linux/kernel.h>
: ]* b0 X) t$ d; s6 S" m, |#include <linux/types.h>
7 d7 N7 j+ z7 e#include <linux/gpio.h> I3 ?8 c) f, N+ I- l0 s5 g
#include <linux/leds.h>4 j1 i0 j! j6 j3 |7 g1 Z
#include <linux/platform_device.h>: B* u, n$ e* o2 w4 Z& ~- Y# F
7 Z( ]4 S" p% d2 z% p
#include <asm/mach-types.h>
6 j9 L. t3 G. P: M# X#include <asm/mach/arch.h>3 z! M2 G* x: Z: d* N( R
#include <mach/da8xx.h>+ P' g4 Y! }) c. h h. R# y
#include <mach/mux.h>
1 x; {) M4 h5 K3 ~) s9 `6 X3 _' Z: D P- G9 v- U" a+ j! A1 z' v# K/ g
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
) a. ?8 a2 `% a# @" b#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)9 A; k0 f N6 `; u8 f, C) O
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)4 t& g0 I" L7 X+ Z4 m
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
1 _" `" t! R! ~. t4 E4 j4 x8 @2 W) E
/* assign the tl som board LED-GPIOs*/0 ?/ H- t( i; v" `0 j
static const short da850_evm_tl_user_led_pins[] = {) s0 S& E: \- J& f
/* These pins are definition at <mach/mux.h> file */) A4 p+ I, H$ I0 o- A" g
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,7 w3 ^' N$ o, ]& `: N
-1
- Z9 v" \, b$ e3 b};
2 z$ ^" l1 i' \+ A3 \
7 H7 I" c6 u! c$ {static struct gpio_led da850_evm_tl_leds[] = {
, |4 _8 q: G9 W6 V l8 N {
6 u1 y' s2 t9 s: S: c. L .active_low = 0,4 [, c! Q. G- _- K7 J, O3 s1 N
.gpio = DA850_USER_LED0,
/ @2 a, Y. x$ v5 f .name = "user_led0",6 R4 y+ T1 k$ Z( { r* i
.default_trigger = "default-on",
; ]9 r5 l0 X7 B4 B7 c7 @* A3 R w },. F- {6 B, ^; n+ H7 G, ?7 B. p
{
* d! d: z, b. ` C5 ^ .active_low = 0,# Q# e5 x( D1 }# _
.gpio = DA850_USER_LED1,8 w6 h4 l7 d5 h' p5 @
.name = "user_led1",* |' r0 Z! V3 ]" O$ u" `
.default_trigger = "default-on",1 _& I& I$ n) G3 ?. n$ O
},
1 ~7 s1 l5 V; H {' Y( L; U3 c* l& O) Y
.active_low = 0,
& T" h, _/ J! ]) S8 D+ ? .gpio = DA850_USER_LED2,; T2 }9 k) |( N! C+ [7 L' z0 o# I
.name = "user_led2",. ?. B q/ p' L0 M4 h O
.default_trigger = "default-on",
) u4 o+ M5 s5 x: I x, A },
9 [$ z% w) L2 L' W! I n {5 T! }! h) G8 {. q: ]3 R# Y
.active_low = 0,, q, D3 V; `3 i/ p
.gpio = DA850_USER_LED3,
# c X% b9 T7 x% Y4 }0 m .name = "user_led3",8 u' B5 Q& { P" h" b1 o
.default_trigger = "default-on",
" z- g; F1 U* `& N# [& g1 F9 z& P- O% Z },
( B0 e1 P# D* t! U" I2 {+ `6 s! l};
) N. {, n& }9 D6 }- J# F
/ K1 J* P1 x6 r- Q6 Ystatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
0 g3 }4 s8 w7 b" c7 F g, N4 e .leds = da850_evm_tl_leds,
; f: V5 G- b! Q. b% F I .num_leds = ARRAY_SIZE(da850_evm_tl_leds),! Y' N3 D% [. ^( z: n E' X
};
8 H2 z3 f$ q0 z
" z. u" N/ G& m( estatic void led_dev_release(struct device *dev)
# d/ M7 c8 A, _6 _! E+ @+ f; G{
9 ]2 X: u! @7 U, h& v' x% v$ ]};' w0 M" h) P7 }6 |" d/ w
) l# _+ \0 g- Kstatic struct platform_device da850_evm_tl_leds_device = {% {# J7 @3 M+ M! [( E- _- V4 t
.name = "leds-gpio",
5 T/ f1 ~) A7 e; }4 E( S7 C .id = 1,5 w8 p3 h6 E, f5 n5 K V
.dev = {
0 X6 g2 h; G L6 P' Z: { .platform_data = &da850_evm_tl_leds_pdata,
/ E6 o9 M6 B6 A, I! p .release = led_dev_release,
5 \! o, A1 U8 t& N( z } M1 J+ i. Z& S, \5 Y3 ^
};
. {% N! X0 _$ s% L1 Y+ ]: E8 B$ S# e8 ^
static int __init led_platform_init(void)
/ }6 e; k/ a( A8 W; w{
" S& f- b9 K; x6 o int ret;4 v5 \% N' ~7 B* b$ F
#if 0
1 R1 S [5 O, K ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
; x2 t3 A( B9 I# |* N if (ret)6 Z# B+ |$ ]) ^* W0 q% p
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
9 V4 E) L D. A7 [) T% C "%d\n", ret);
3 r, e S8 h. D' f#endif4 C! a |$ B, q! v! g. C0 v8 c
ret = platform_device_register(&da850_evm_tl_leds_device);: m, Z+ Z% k4 A/ b- b- b" K
if (ret)
+ a8 _0 Z, M$ H% E pr_warning("Could not register som GPIO expander LEDS");3 d" U8 ~( y! x. H% C( ^, L4 H
else5 I0 |$ i/ L! @ I3 T4 @! z- {# p
printk(KERN_INFO "LED register sucessful!\n");# O% m- o6 J- f$ h. @
' m% z& n2 P9 L+ N9 D
return ret;
, ^: W9 J5 t7 m2 {1 J}
1 P9 m# w6 W4 X% W. h1 b$ m0 N& ?, Z
static void __exit led_platform_exit(void)2 P% u# r0 c+ c' ~5 U
{
8 k$ a- d: A% U* O3 F( S platform_device_unregister(&da850_evm_tl_leds_device);
) O! J1 P. V. Z
3 M. x7 T: J7 Q& @( Y. q printk(KERN_INFO "LED unregister!\n");
) F6 X9 T$ q/ J& W}
5 H/ d6 G$ p+ m6 [5 P4 w
2 f, u/ N; H1 p% e* ~! Tmodule_init(led_platform_init);
- w! m7 l8 B$ @module_exit(led_platform_exit);
& ^* ?5 L* H& H- P% c" j. \2 I5 @- v3 _
3 ?9 F/ a1 [4 b9 J eMODULE_DESCRIPTION("Led platform driver");. U5 c" e- n- \' u7 h! ^8 ]
MODULE_AUTHOR("Tronlong");
* N3 [$ E7 k dMODULE_LICENSE("GPL");
2 W" ^2 ^2 Z$ o) A1 ^8 c; O1 x- `* r4 ~% H
|
|