|
|
求大神给下面的程序做注解,请稍详细些,谢谢。' I6 w, H- I# U1 H
#include <linux/init.h>
% d6 v; O" U8 u#include <linux/module.h>
" r R8 R2 p& O4 ?, @, p, Z: p#include <linux/kernel.h>
3 Y* R( X# A! `- {#include <linux/types.h>
1 |0 j+ `0 [* A& K( ^* P9 V#include <linux/gpio.h>
7 R# V: B+ n* ^1 I" S1 \#include <linux/leds.h>
9 k; z J: }/ {' B: K#include <linux/platform_device.h>; H# _6 v! V9 Z& ], L
f! M2 p; Y4 b6 B; |#include <asm/mach-types.h>
, `$ d* `+ L/ ~1 U# Y: e$ f" ?#include <asm/mach/arch.h>
5 f" x/ k* M/ P( z- C9 O#include <mach/da8xx.h>8 j. A4 H) l# ]; v, l
#include <mach/mux.h>
0 }5 D3 l7 _7 ^- O- f$ |' ~8 B4 I8 }! F
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)6 f" ~/ n$ V7 y: P, J; M4 X, C/ X( }
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
% o% S0 U, Y/ p1 m7 {! Q#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)4 ?5 e$ h* O) V2 n8 D# X
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
V' P9 y9 o: _2 J. f2 j6 ?- h% P8 n* ~% U
/* assign the tl som board LED-GPIOs*/ u( M3 q( Q+ P% U
static const short da850_evm_tl_user_led_pins[] = {
5 N; z! I) c1 K+ h. p& k /* These pins are definition at <mach/mux.h> file */
6 d: h5 s3 X; v9 a9 ~& O; g DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,3 o* K. G- D0 O" t
-1
+ p. n+ p( o8 x9 ]/ M0 l# p};0 y4 N# r' ?" W
5 b7 v* H6 }) s! v# R0 u
static struct gpio_led da850_evm_tl_leds[] = {
2 z2 ]; I9 j( B" D- t {
# k4 U) b% b6 j .active_low = 0,
5 I# f7 X/ k2 B; [" Q: k4 R& n. m9 t .gpio = DA850_USER_LED0,! O( @/ S( g- m( B! U
.name = "user_led0",
& g2 K- R, r" b J .default_trigger = "default-on",, ~; w+ i/ W! g. \
},
9 e. X: k! }4 H% Z! [ {5 D# n7 B8 l( L4 K+ {/ t6 @# z$ N
.active_low = 0,
% ?+ J* P1 b9 `8 |+ o" f' p* E .gpio = DA850_USER_LED1,/ L3 F9 h/ V; M; b
.name = "user_led1",6 ~3 h' A1 Z- D; U. v. y
.default_trigger = "default-on",
. U2 ? Z; } U U },2 W! c9 {& `) @6 z3 K+ z
{+ A, x/ D7 H& [: B
.active_low = 0,, ~' _, h" @. p$ O& i
.gpio = DA850_USER_LED2,
7 h' P% w9 |. d0 d .name = "user_led2",
5 F* {/ ?9 ~9 Q9 D .default_trigger = "default-on",
" h" Y: O) S. Z: r },
% L( a% c/ [5 a2 J2 h) Z7 \ {
6 w* o) i) \% U .active_low = 0,
: d: K1 J& O6 L9 S .gpio = DA850_USER_LED3,
3 l" Z! j/ x; q( S' Q, w- g .name = "user_led3",# X0 Q# T2 \- v8 z; p' Y3 d! G
.default_trigger = "default-on",; w1 q8 Q& c9 H* T; ]6 |% b5 r
},
8 P4 u u2 k3 H+ C( y- M};
3 g, p7 {: ^' y& O
% O, w0 ?0 @( }, R: ~ h7 F+ | ]static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {9 y& H+ ~! X2 A4 r$ O8 i, O5 w
.leds = da850_evm_tl_leds,' A; e1 }5 D1 V: o0 v% W% D8 B
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),
" l0 n# ^( p4 T6 J0 O};
# L: g4 u6 I3 Q. a
3 a+ R- k4 E2 y" M% W: J ^* Qstatic void led_dev_release(struct device *dev)
$ ]3 L' u% h, S2 ~0 L! z{$ ]1 X6 e* z5 c( {% b# C! A2 B
};& g0 a. L! |+ z: R
+ y0 w7 s7 c7 Z
static struct platform_device da850_evm_tl_leds_device = {
2 s9 Z1 M( u2 J* `0 V8 V6 w .name = "leds-gpio",
@3 M7 @; G1 _ .id = 1,
: T w- e( z4 [- ?# p$ c* X' i- a .dev = {
7 k; q. y& p" T4 O" c .platform_data = &da850_evm_tl_leds_pdata,
: Z$ F0 l# ]7 ~$ T6 n( Q7 u/ P .release = led_dev_release,
, Q! a& n6 V! ]% z, g: S }/ W% g5 O8 d# `
};1 [* w3 o2 _, W- `& t* a
8 x% Y5 f; N9 {( K! U& ~/ `7 Pstatic int __init led_platform_init(void)
& w- ~; {# d/ z; G) b* W/ n9 E( u: e{
# ` k, ]! k2 q: p! \# E int ret;
/ j3 i6 }4 y- R% k4 [#if 05 i! ]* z) Q3 Q6 E1 ^
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);8 p7 C& A: T7 q7 n; N9 r, n
if (ret)9 B/ a: a4 o& }4 |# m
pr_warning("da850_evm_tl_leds_init : User LED mux failed :". V/ @. q# C3 ?0 G" [% s
"%d\n", ret);
. t% a6 M- {7 I! a+ }# j#endif
' |2 P1 R! n2 R( B ret = platform_device_register(&da850_evm_tl_leds_device);
0 w. A* x3 i f& p if (ret), a" a1 `: [7 z- o1 G7 M1 Z
pr_warning("Could not register som GPIO expander LEDS");' W V- _1 N* Q7 D
else
" X. l) u% d! D7 z3 `8 C7 r3 q) d. z printk(KERN_INFO "LED register sucessful!\n");
0 C' K: K4 j& t j
_3 q5 A) o1 M; V6 E! M return ret;
5 E, s4 a' a3 r/ L4 \}0 S; ^8 w3 m( b2 z: y$ q$ V! ` @
' f: V% A& e! |0 j t8 l% \
static void __exit led_platform_exit(void)
0 a) C# P! m* t9 I$ F4 t$ ^{
5 u0 ^+ z; a1 E" o: e" j platform_device_unregister(&da850_evm_tl_leds_device); Y. `0 F6 _6 A+ ]
7 u7 k) [- f. S0 ?$ h! O" z
printk(KERN_INFO "LED unregister!\n");
7 @1 U; y* L/ A" X0 k}
: c0 ^" U7 h" V8 `2 z" T$ S# s0 e3 _9 U* ]" b2 Z5 _7 t9 k& _( s2 D
module_init(led_platform_init);: L: Z F. p) D9 ]. r8 h) \
module_exit(led_platform_exit);3 i: D4 k! a# j' w3 l# L7 h
7 ]* J# L4 W z5 T+ r0 S _7 |! t+ N
MODULE_DESCRIPTION("Led platform driver");
9 y+ c* O# Y( QMODULE_AUTHOR("Tronlong");
6 {- x6 z& m8 u* Z- N( e9 hMODULE_LICENSE("GPL");
* U d: T/ W+ V* y3 ]- Q
. K$ Y3 x! ]2 l |
|