|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
+ x- i2 S, W6 y/ a#include <linux/init.h> \+ I7 }( N" f. I6 v5 C5 y f7 s
#include <linux/module.h>& a! B6 V: S! \ _! i/ i( t
#include <linux/kernel.h>
. {, [+ }- p& e6 W! Z; U#include <linux/types.h>
" \3 Y' E* C {; W5 b4 z5 R#include <linux/gpio.h>
, G. I: B, [- q: V5 L% c* R#include <linux/leds.h>
, Q" U' p E' H3 v#include <linux/platform_device.h>
* o. }8 X0 I5 X$ O# E8 Y6 o* |3 Z6 W8 i2 v/ n6 `8 h3 K J
#include <asm/mach-types.h>" ]- V- H( H9 T- a
#include <asm/mach/arch.h>
+ R" [1 r% u" T#include <mach/da8xx.h>
) X2 y* ]% j( m6 W#include <mach/mux.h>
. [4 d8 j% \% |2 H& b# Y, @2 l. v- a3 J7 p
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)0 \8 o1 B5 D8 r) J3 Y' W) w
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)8 }% T$ [9 L% P. `( l/ ?0 R' ]
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)) t. M5 `) E7 I! I7 Y4 i4 Q% J1 x+ d
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
3 C9 l& h% S9 U' k" u6 l9 ^$ J! }; v7 x5 h
/* assign the tl som board LED-GPIOs*/1 N0 V/ k9 e. I* z
static const short da850_evm_tl_user_led_pins[] = {
" G5 H. U) O9 L' l6 i /* These pins are definition at <mach/mux.h> file */
' y/ `: I% l8 L! S" j5 N8 S6 h DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,/ H/ Z0 e. `, _! b z
-1& u' A0 U8 r4 x! M
};
8 ? |" g' K2 M o0 n, k9 g8 H1 `1 E+ G; Q f+ T
static struct gpio_led da850_evm_tl_leds[] = {
: I6 a/ r* K, ~; G3 t: W! M9 | {
2 [. A! d* L6 `$ q/ R .active_low = 0,
8 T8 N8 j0 d( R* [ .gpio = DA850_USER_LED0," O% n" O6 v. J0 \# y/ L! M
.name = "user_led0",
6 g. n# \) r; {) ]9 ^3 Y% q .default_trigger = "default-on",
V( H$ C% f4 ~2 R },1 c. o, [ _+ i+ T* q% d( R
{( L- r5 ~& K0 o
.active_low = 0,
7 t3 C" |& f) X$ u% d: f .gpio = DA850_USER_LED1,1 A- E) X3 k N: w' ]4 J
.name = "user_led1",' P9 N7 w8 a- M9 D
.default_trigger = "default-on",
' t- _& q& C$ U+ K! d4 r ]" ` },
5 }6 D% t" Y) P {0 N* S# @( @( [5 k$ r
.active_low = 0,
$ m+ z- `; `8 W .gpio = DA850_USER_LED2,
8 v. O+ [6 x- \- h/ _ .name = "user_led2",$ [! r% @. S1 ~$ p* b6 L8 `5 b! Q
.default_trigger = "default-on", G; N" i. h3 e; E* h- j
},
- `! @" @: h/ g1 w* q1 R {
( @4 l) G: N8 C+ }( @$ X .active_low = 0,
. R2 K! n' H Q) | .gpio = DA850_USER_LED3,% R7 F# ?) Q) r! E
.name = "user_led3",! b( |# J" y. _
.default_trigger = "default-on",1 L5 B% c0 C8 q9 q. p, u- @
},
: A, d; h) {% y) e( a$ I' o! P( x};* U! u7 ~$ N8 a7 r" u' s
% P7 Q, F, O6 j, b9 G9 N5 hstatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
3 R6 {' g* v* H5 w) j$ O .leds = da850_evm_tl_leds,
7 Q7 P- M# b) Q .num_leds = ARRAY_SIZE(da850_evm_tl_leds),
1 n7 X" ]( Q* |};4 R1 p% B7 g5 X2 E: {0 S* z) x8 }
6 i# g B, m5 j6 c6 a/ v6 X
static void led_dev_release(struct device *dev)# F: ?4 e0 D0 w& I& V( p
{
& q: K$ Q4 [- w: z! d1 j};
/ x7 I2 O, R7 C$ _) q+ n" \6 {- N5 I6 K+ l
static struct platform_device da850_evm_tl_leds_device = {
8 S" u! ]( X' g: z% } .name = "leds-gpio",1 n: m7 A$ N& q7 w# n
.id = 1,
" O! o( T1 y" ~, L" Y. p( {) ?. L, I .dev = {+ _, O' r" e3 z) I9 }$ |8 D* P+ b
.platform_data = &da850_evm_tl_leds_pdata,, i* ]" v6 k4 r& F E! H/ l4 b; c
.release = led_dev_release,
+ B7 `/ P* h2 V }1 e; M4 I( C5 F3 G3 w6 ^
};+ {3 l( G4 u$ r4 _1 L, b. Q
3 o: _. ?4 i+ B0 Q) P6 Ustatic int __init led_platform_init(void)
- p3 p8 U9 s6 Y* C: D/ u* |2 E{
; B' `( X1 P5 [0 b int ret;
4 I9 e. @, g3 _- U$ ]5 D% c& m#if 0
j) [3 D4 s _0 w ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);9 h2 |0 n% m* [8 M6 {3 w
if (ret)
: H4 ^" O& \. G1 v# h pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
1 \- D' h2 z3 ?: t "%d\n", ret);
; v$ V7 \) j' l#endif
: V" p3 j2 R( |& M ret = platform_device_register(&da850_evm_tl_leds_device);, {, Z/ k3 c- L- y6 |6 |
if (ret)
2 y; O/ b0 X4 u4 u0 S pr_warning("Could not register som GPIO expander LEDS");
& B9 \. L! H4 Y9 f5 [8 J/ p else
# f k5 E) v1 z7 `8 }0 m" u/ s printk(KERN_INFO "LED register sucessful!\n");
( u+ g, W6 z! r& A1 \# \+ \$ X: k# {4 f( Q. ~. I
return ret;
* D3 y s7 P$ @* U+ M}
6 }, y0 H2 g; h* I) F: b2 c# ^% K% g4 E; h' m& P
static void __exit led_platform_exit(void)! N2 h/ U* j1 Q5 P
{
0 o$ [/ m& Q* q platform_device_unregister(&da850_evm_tl_leds_device);
9 P$ B; W9 n' `+ F w! C: I, _; |1 k# A, g% B2 j( K0 J3 }8 e$ |/ ?, I
printk(KERN_INFO "LED unregister!\n");/ I& f2 x4 `" \. N, X
}
4 e: s% E# ]1 d1 g0 L/ N& p* r1 G
4 ^0 ^9 y# e% E( i8 a; a1 n1 Umodule_init(led_platform_init);
) X* ]( W) l1 b$ _% {module_exit(led_platform_exit);
9 e" {: e- S# H3 {$ R1 ^( X" M4 |7 \3 z5 _. C- O
MODULE_DESCRIPTION("Led platform driver");7 Y) m4 U. }& B
MODULE_AUTHOR("Tronlong");5 D; G' R! g1 ~) T
MODULE_LICENSE("GPL");3 r$ }0 M: W7 X$ d" J; h
: G$ B2 Q h8 ^5 ]* G: j1 o1 [
|
|