|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
" Y) U8 u. F2 u( O1 G8 W* b#include <linux/init.h>
+ U4 {+ e, ], S W6 s" u" K4 I3 G#include <linux/module.h>" S- c) Q1 ]2 t/ y" Z. i
#include <linux/kernel.h>% p P9 ~0 T3 G3 |4 l
#include <linux/types.h>
: u/ k& W# w2 J+ x* N$ z#include <linux/gpio.h>
% k) D$ ^6 A- {) O) L+ |# q# H#include <linux/leds.h>
. ^# r( ~- Y- h#include <linux/platform_device.h>
/ x' A) p7 p/ h+ N) T4 q, E0 S) R) U
#include <asm/mach-types.h>9 v3 M0 k& R) u v1 F
#include <asm/mach/arch.h>
" u! e4 q/ j5 P- H0 A#include <mach/da8xx.h>5 i2 @6 W0 G1 B% H2 R& F
#include <mach/mux.h>
) h& z" N+ x6 _. m' v
4 G1 Y# Z" J: A#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
V4 j, Q1 d, o Z- \2 E#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)# I& P0 r$ g- H% M, B/ B
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
/ k. k1 c2 ]" y$ W8 P#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)9 ~6 \& Z5 o5 u |
, i. t m; R% p" t& U: h$ }6 l8 T
/* assign the tl som board LED-GPIOs*/, S2 ~5 p" g0 ~: a6 |/ _
static const short da850_evm_tl_user_led_pins[] = {
' r. v* Z" W! U( a+ L /* These pins are definition at <mach/mux.h> file */+ v; K+ O! R0 x* t
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
* u1 V: F) u; F3 }) |$ ~ -1
2 z" t3 L" N+ v4 q0 A}; t; u$ N5 R. {
8 w( Y3 Y9 f% V! X: pstatic struct gpio_led da850_evm_tl_leds[] = {. N& M! y$ S+ {' ]- G
{# f m, S7 r3 ]2 l. ]. ~+ J( `
.active_low = 0,3 [8 T: k0 o6 O. |
.gpio = DA850_USER_LED0,/ z% Q6 T1 E7 D' l$ K" j
.name = "user_led0"," u, V& y9 {0 f: _
.default_trigger = "default-on",7 m* k1 N9 D% c5 X2 T& Z
},
) L q7 p% ~3 F" t+ H5 u- X {
% Z) v% ~7 F( X, u! C! e) O( q3 s .active_low = 0,
, F; {9 |0 S' t8 } .gpio = DA850_USER_LED1,( K6 K2 r, z( a; j
.name = "user_led1",( |* H8 q9 X: r5 E8 T0 f
.default_trigger = "default-on",
4 B0 o7 _9 `/ I7 }# ?; n' t9 G4 f T8 B },
8 j& F- V0 h% J9 k3 [# Y9 Z% s7 Z {
5 w' q* D: U4 ] .active_low = 0,
4 e% D7 V* v6 \* e6 ]4 B5 v4 A .gpio = DA850_USER_LED2,
: G* p& C, E) X/ |# e- Y1 Y .name = "user_led2", ]9 g! O7 Z/ Q9 {. G
.default_trigger = "default-on",0 P' i) V' s$ H. c
},' W( H+ H5 ?+ A' S
{9 x: k* G% w. }8 V9 g3 K2 U
.active_low = 0,
, M0 X8 Z; S- h5 ^1 G' s! J .gpio = DA850_USER_LED3,
+ G. k9 [/ v8 b5 E .name = "user_led3",( h; y/ E" c N7 A- M4 J
.default_trigger = "default-on",
. A2 _7 v4 B3 {& M D- E8 P+ s5 Q },1 U5 X' h0 @8 x- _1 {
};
. l" W7 j% \( V% Q8 D" E# @+ H6 b5 c; s# @: n- p9 h. Q0 `! M0 _
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {" v+ K$ ^5 ^2 l E+ c; b8 b
.leds = da850_evm_tl_leds,. F) a9 n: o6 i7 t* f
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),8 f( S9 O' n7 P3 a( l6 Q
};9 ~" Z7 C# k. V& P; u
b% L# o& B! @1 b" S5 b3 kstatic void led_dev_release(struct device *dev)) [8 P8 N5 F: S: s6 H1 b
{
4 K! _) l3 R8 H% C5 |};: |/ k! f2 O4 J: I5 K7 u0 T: I
) O- `" R0 ~6 E% B& u: rstatic struct platform_device da850_evm_tl_leds_device = {1 G0 a. h8 f! c! j- q2 f0 B, ~+ O% ~
.name = "leds-gpio",, _ l4 R+ _6 q
.id = 1,
# J5 j5 \$ e8 x .dev = {
( X& t( P K" n' o .platform_data = &da850_evm_tl_leds_pdata, ?/ A* }' H1 i! f. x
.release = led_dev_release,7 r: a% a0 O2 o
}+ }8 Y( F% W7 f* p8 Y7 [
};
) X% c0 h1 F1 O0 f0 d1 `6 ? o; ]; p! c `! ~
static int __init led_platform_init(void)
2 }, r' ~9 F, f8 J, Z) `{
) g) v1 O- F4 t: @" } int ret;0 d q+ K" v- G' u" M! q) M
#if 0+ U. f6 m* Z2 g) I( J! ~' ?7 \
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);1 `6 [7 i$ n: V! {. n3 C [
if (ret)7 l' o: L% Y7 o7 b9 f
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"5 W2 e( ^8 l5 o% T) o9 E7 r! x
"%d\n", ret);4 e0 D6 r7 d. F2 ^0 l. \
#endif8 ^' w# R! G3 [4 r
ret = platform_device_register(&da850_evm_tl_leds_device);
( z" ?) K! D1 c% o# J# } if (ret)
: K. R' M2 Q2 G* d pr_warning("Could not register som GPIO expander LEDS");
1 A+ F% u) C5 l else
* g6 [! t7 {8 H) k printk(KERN_INFO "LED register sucessful!\n");1 @1 F' f6 N, P0 o1 G/ A
0 W: m1 s+ r. M( S! h return ret;
' B1 f# O8 Q7 L2 q e}
9 |0 }2 j& _8 w! j8 g2 o8 X7 w4 O& ~! e7 [6 d3 ^& l
static void __exit led_platform_exit(void)0 x* l C7 P0 j: l* U- w Y m
{: d( ]. w c" d8 U: S
platform_device_unregister(&da850_evm_tl_leds_device);
- n- o3 H- k- u, u8 j
% h0 `, t* G1 P T/ n) h$ |- B printk(KERN_INFO "LED unregister!\n");
1 n0 i& D- k+ l5 o' k I6 R' A! x}7 |+ g0 F |; e/ V
r6 {* _3 T" W$ d; j
module_init(led_platform_init);
( G4 q, k, n" t; H& @! k4 ymodule_exit(led_platform_exit);& j7 w5 Q" y# r, r( G' z
* }# \, _* X$ g0 N* u
MODULE_DESCRIPTION("Led platform driver");7 c) r- W/ W+ l1 z* I
MODULE_AUTHOR("Tronlong");
3 f7 c% V( i1 jMODULE_LICENSE("GPL");
% g# } l; A+ V, E
! A$ u9 I! Q3 K: t6 r5 f |
|