|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
0 w6 O( v( E! ^, m' {; h- \ p# u0 Q#include <linux/init.h>$ W1 i5 v; T' X. B/ H6 W' P% _
#include <linux/module.h>+ `) C/ m* o' t8 L; @# W% u
#include <linux/kernel.h> z, k2 I. K( O& l# c( P/ s
#include <linux/types.h> R% o3 u4 _% a
#include <linux/gpio.h>
. |* G& @* |& a/ c% x7 b#include <linux/leds.h>7 d& s+ M$ M( F1 M
#include <linux/platform_device.h>- T0 L3 s8 w0 t; Z1 q+ y
. t. A. m' c0 s. a#include <asm/mach-types.h>5 U3 W! a8 d. `8 P( a# L5 o% J
#include <asm/mach/arch.h>
O$ x: {' ]+ g( n b2 c9 k#include <mach/da8xx.h>
% M' C! E6 J; b4 e8 G#include <mach/mux.h>! f* o" V" y) f
4 r$ m7 f5 @+ C/ G- l0 d#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
" _ O- _. y' p3 E. x7 F! `#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)1 }. t5 \- @) Z+ Z9 K
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
, k! s5 R" `5 I, v! y7 E#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)0 H5 d% b9 L; k& _/ k
7 u& o" L4 f- s& w/* assign the tl som board LED-GPIOs*/$ ^. H: W! U) E5 I! |# v& B% ]
static const short da850_evm_tl_user_led_pins[] = {9 f6 i' M2 d$ c$ J* m0 ^
/* These pins are definition at <mach/mux.h> file */
8 `' C) p6 E8 o! ~4 G7 M, O0 q DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
' G+ r/ N) I4 G* z -1
$ |& b" N2 i( y M# p5 @};
" l1 O3 @/ h0 G+ i
4 _# E8 d' x U# L+ Hstatic struct gpio_led da850_evm_tl_leds[] = {5 _- p& c0 N+ t
{
& l) ~/ w/ _5 {- Q2 G8 ]3 Z .active_low = 0,; |; p2 t& B Z* y( K: j8 n8 t" M
.gpio = DA850_USER_LED0,
1 K5 L, h( z6 M .name = "user_led0",
5 r. A( L, e5 V) Z# R; n# k+ k, R .default_trigger = "default-on",. {; Q' H, ?; l; S C! U8 o
},/ z O O! r4 v/ ~) z" l1 t) r4 V
{
7 t, I. `& @2 z W g .active_low = 0,% ?8 y' W! n- p5 I1 Q2 v
.gpio = DA850_USER_LED1,( @) t4 V) Q+ \7 T, Z# [
.name = "user_led1",
. P$ Y# M0 B) q3 i6 ^ .default_trigger = "default-on",
: L* \2 w& m6 i, z, J2 L' u3 ? },
) F% J% |* W, l" p1 N* s! } {- h3 Z/ U$ Y2 ~$ a8 l$ }
.active_low = 0,
2 T2 a1 D: l4 b- E6 @, }- Q0 U .gpio = DA850_USER_LED2,
* k4 _3 D! m7 S, G' C' b .name = "user_led2",: ]* S1 u) V# \7 Q
.default_trigger = "default-on",
! A1 T) v+ `# P- [9 n! Z( m# f E5 v& T },$ y% d/ }- G: F x
{* x+ f b) y' r: m0 z9 }) b
.active_low = 0,
" G2 a; o$ X& |( N& m, Y .gpio = DA850_USER_LED3,
3 d/ B" L: d3 ^ H' G" Q# ] .name = "user_led3",: ]7 ?8 J9 T0 Z2 F; n- `4 ^/ D
.default_trigger = "default-on",
1 N5 E' s+ ~- ] },
- W1 @) C2 w0 Q5 D};* ?0 Y+ r7 t+ }$ E; P; |
- j; ?# ~- X' c' z8 \3 `" nstatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {/ N0 R* r5 Y4 [8 a8 s. ~, c+ Y% m
.leds = da850_evm_tl_leds,
0 W4 B; p& V; N8 i .num_leds = ARRAY_SIZE(da850_evm_tl_leds),- Q8 ?, S/ Q, X: p
};" [- j! s! m# N8 q6 y+ C
) W% ~ P. z$ M- O. g/ |' O
static void led_dev_release(struct device *dev)) T' J D1 v' U! X: S& @
{1 f* Z. c7 l; v5 v# n* L
};
6 z1 e; B& q8 M5 n& A5 R8 X. `9 ]6 J$ f7 b& T
static struct platform_device da850_evm_tl_leds_device = {4 I9 {* h/ j& K3 i, \4 K9 J+ m
.name = "leds-gpio"," W% B" n) p. p2 m& P# E
.id = 1,
$ A/ Z# n0 I" p6 O& n8 O .dev = {
. [8 n& s: d2 g- K .platform_data = &da850_evm_tl_leds_pdata,3 F h8 y, I: V2 c9 }
.release = led_dev_release,
m' ]9 C3 U" d( v. i }
! T% w+ F9 c* S# r7 Y2 J5 V3 G};/ ?/ s7 {2 V' I8 g* F
) {4 H; } @' d5 astatic int __init led_platform_init(void)2 Y( d) d& E9 g& v& y
{* B8 c$ f. p- ^; o( h4 a5 W/ H& j
int ret;
( K9 {) y0 x* ^7 | I#if 0; N* h( Z% {3 w4 Q3 u
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins); a1 o8 H0 y" W* Z. O4 i
if (ret)- a F$ X# s- N# n
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
. `2 r8 r; P3 e4 T$ @/ z "%d\n", ret);) @2 U/ b5 g. e
#endif
0 F. M% _+ v5 _7 r& b; J ret = platform_device_register(&da850_evm_tl_leds_device);
P4 g' ]- k# g if (ret)
9 f- c+ W- C3 n! X pr_warning("Could not register som GPIO expander LEDS");5 {2 }$ W! W* K
else! ^3 V; `: C8 v# P: b; @
printk(KERN_INFO "LED register sucessful!\n");
* I ~' @! |' O( m" j. a
. t. v1 ]& p; g6 k return ret;8 I7 s$ k; q I: b* E
}3 F% Y/ {0 z- s/ q) C/ [# D
V' F+ P. Q" f% d9 u* }% \. N5 Astatic void __exit led_platform_exit(void)7 p, [% e- E& n6 Y' k+ H4 x( C
{
# I: h1 l' U- D9 f: q5 Y1 d platform_device_unregister(&da850_evm_tl_leds_device);
; |5 O8 G- _ P1 a; n3 E% \
& @+ m8 [$ L! N printk(KERN_INFO "LED unregister!\n");
6 A" Q- o% }2 C. q}8 W5 p' R9 w; V2 C0 H* ?5 E1 g+ K
- M/ h# {6 g; Y- R$ c) s# ]" Wmodule_init(led_platform_init);
! \: I1 l: @& a! Omodule_exit(led_platform_exit);
+ ]5 M/ L$ ]8 i2 V/ D0 V. a+ p! ^; j3 z& Z
MODULE_DESCRIPTION("Led platform driver");6 |; O4 j* A! P
MODULE_AUTHOR("Tronlong");. U6 m6 U, R) R2 l4 Q8 H! |
MODULE_LICENSE("GPL");
! S% I: ?7 ~- T" q! C+ {) R3 i% U$ H, |' l) Y2 ^$ n
|
|