|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
- f* ]7 F# q( F$ ^#include <linux/init.h>
5 x- L, O! u* _; m#include <linux/module.h>1 k5 {# g- E. A7 y+ k& L' ~
#include <linux/kernel.h>
4 T) Q- |: L: C+ A$ |0 o" K#include <linux/types.h>
9 S. S9 i0 r6 A$ h, h2 @#include <linux/gpio.h>
! X; S- U* ^% e/ a! D# f#include <linux/leds.h>9 O: \; l6 }% H- g0 M
#include <linux/platform_device.h>
/ [0 h/ V1 d3 o Y
^* _$ D3 x! k. K" G# d- E8 I- D#include <asm/mach-types.h>
9 C* l# \5 \1 Z: M4 h#include <asm/mach/arch.h>
" I: _8 k. [% X#include <mach/da8xx.h>
% z6 v, x( x, P l#include <mach/mux.h>$ Z0 T) f, }& d! S8 ?" Z
! U4 I. t- M: G: s% [& t7 _#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
, }5 w! C0 T# a' s#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
]. R* H! f+ `, f# P! M$ d#define DA850_USER_LED2 GPIO_TO_PIN(0, 1); c8 Q& x% \( e! F
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)0 F7 W1 q6 L/ @# f6 N3 o
6 [- q4 S' d, i/ F, m: \8 p7 U
/* assign the tl som board LED-GPIOs*// J: Q) F. g$ Y. _! f# F" A3 t$ B
static const short da850_evm_tl_user_led_pins[] = {2 T5 E ?+ m+ ~0 B
/* These pins are definition at <mach/mux.h> file */) {0 l& }5 u5 x2 J" K) l9 }$ \
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,+ }# u% g$ F) {$ ?0 v1 k: }( R; {- y8 ]
-1
$ B+ o# j: N6 s6 Q( U, _ A- P};8 ^ a) [; E% u1 q5 [
3 a0 D- p3 ~' `3 Cstatic struct gpio_led da850_evm_tl_leds[] = {$ ~5 E( o3 _% y8 L8 m m
{- m) U' f# U/ _- p" \
.active_low = 0,$ K H$ e# `! s5 D/ |8 |. }. V
.gpio = DA850_USER_LED0," k) }: v5 u V, `: U' Y
.name = "user_led0",' M2 k. j) ?. u; p0 @! r# b, w
.default_trigger = "default-on",: M7 j6 i# e* ]" x) ` X
},
* k( _; F3 z1 P* A0 e {. d2 g" i: h. N/ q0 B1 \
.active_low = 0,
( {7 }. h. ~: q, q6 f .gpio = DA850_USER_LED1,4 _. |4 ]0 c4 @, G% X
.name = "user_led1",
) [$ S& t4 t# k; M+ r- o .default_trigger = "default-on",$ v' Z {6 M. H3 e' {* M
},
2 z4 U) P, W% n/ x* D( N! H3 t {
M3 S. H; d; V2 X0 C .active_low = 0,
% m, R5 N ~9 ^+ [/ i- k9 D0 _" C7 Y .gpio = DA850_USER_LED2,# N2 q" B: C# z3 a2 w: y* x* Z
.name = "user_led2",
' z5 X1 j" `+ Z6 O) \ .default_trigger = "default-on",8 W; k7 Q% |# T8 z
},8 h; k2 ?, h& F$ |
{
4 a0 M4 l; o- h .active_low = 0,
6 k8 g+ M$ u3 z) @2 t .gpio = DA850_USER_LED3,
8 w4 u, c! @% E .name = "user_led3",
3 ]5 f' z$ o2 }- L .default_trigger = "default-on",
9 G$ X$ b# r1 I$ P5 D },
% E" I% k& i6 t0 @) R};* p+ V4 u5 v6 I% ]
1 e6 h# D! P4 m+ Istatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
: h' b+ i, k2 B* A7 K! Y* ^ .leds = da850_evm_tl_leds,
3 \9 m1 d$ L+ W: w& A% _ .num_leds = ARRAY_SIZE(da850_evm_tl_leds),9 c; w) `# i* ^4 r; I
};
& ]' g4 e( L+ I6 N5 x d) x: {" v3 B% T* E+ z6 \) ?% _, f# ^
static void led_dev_release(struct device *dev), P5 t* C3 T! d, j
{( \5 t; P0 o0 N2 u
};
& W) @( }- X5 W- J' G0 z& S: F9 o. \# P) |! M
static struct platform_device da850_evm_tl_leds_device = {' {6 B6 a. [% K: G+ o# N/ Q
.name = "leds-gpio",7 `! v' k4 E! r% d) M
.id = 1,
+ I1 J9 x2 O* D$ s; d9 _ .dev = {8 e q4 l8 I9 x8 ?- c* j- X% f
.platform_data = &da850_evm_tl_leds_pdata,, K* S R% s! Q# j& P
.release = led_dev_release,
4 Z+ J! t$ o8 O: R- _) Z- h/ O }
& b" O: O7 z- x# L4 P};
& P# h! B! B- E. |; h% w; N$ |9 z9 W6 U; X8 ?% m$ v
static int __init led_platform_init(void)/ l2 g( C) q( H$ N _/ c
{/ T2 W$ C! b. k, q0 f, t4 I& c
int ret;7 q' x3 ~7 L- a8 j, C9 y) B
#if 0
8 ^! [7 `5 J8 ^1 f: W. F ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
3 p4 l& @3 l0 P if (ret); W4 g& h; G3 Q% {3 r5 j1 ?
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"# n3 q+ y3 l9 q8 p O; S& Q
"%d\n", ret);& n) E1 k" o; c; N
#endif1 g8 }" }/ `0 I: `# T& B
ret = platform_device_register(&da850_evm_tl_leds_device);! C, `4 C' ?5 Q M% g3 m( a
if (ret)! j3 c1 \ ] `0 k; t4 f# i3 {/ r# n
pr_warning("Could not register som GPIO expander LEDS");
/ f* N5 I0 b+ k5 H( P1 v else
( h2 |2 ^9 d @8 Z6 ?5 g printk(KERN_INFO "LED register sucessful!\n");
" c. ~# n* w* e8 l! k, f: m. e2 v- z1 v0 M a, A r, t% \' G
return ret;0 _! c% W. l& {: A7 X; C" T
}; p7 Z7 P& E7 M' b$ \# Y" s
1 ]! f# U. W: j1 u4 I ]
static void __exit led_platform_exit(void). ]+ V5 Y5 F2 S/ _
{
% O2 g. Z8 ^1 _: \ platform_device_unregister(&da850_evm_tl_leds_device);
9 }- q8 A+ Q2 ]/ s$ ~' Y! ^1 R2 ]( U# E8 y+ v) a2 E' [$ Q5 m
printk(KERN_INFO "LED unregister!\n"); S( ~6 m7 D, z2 l( C' w# Q
}$ ~% ^9 \) j8 d- N- F
7 J9 p9 m5 {2 P0 F9 F" a* {3 t+ ymodule_init(led_platform_init);, f6 S- A+ w) g( \4 l# a
module_exit(led_platform_exit);
6 Q) ~1 c. Z( e3 |$ J4 C$ A% V) `
. q! g6 ]! p- q% ]MODULE_DESCRIPTION("Led platform driver");. ?; y% ^8 s! F' `
MODULE_AUTHOR("Tronlong");1 p: Z5 G3 m: f& i+ M8 q8 }. m5 ?
MODULE_LICENSE("GPL");5 O9 F- g' d" C1 D* q, m
O0 r$ l2 p& [
|
|