|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
- p1 I$ D6 @1 o W/ L: L' R& j#include <linux/init.h>
8 |9 o# V& o2 y) U7 p3 k7 b" |#include <linux/module.h>. e6 ]) |8 V+ a& d0 Y! h, w! Y
#include <linux/kernel.h>( A7 r6 ^- C: V
#include <linux/types.h>
. D$ l/ l( G+ l. n#include <linux/gpio.h>
7 ^8 l& P+ \6 I) V2 T#include <linux/leds.h>/ X0 _( R4 ^! X& M& K
#include <linux/platform_device.h>
" B: d8 ?& H, o6 b) g3 J5 b; l0 G; f G8 N3 m* Z
#include <asm/mach-types.h>
& Y/ Q5 H3 y0 i- |#include <asm/mach/arch.h>" q. i( [; o4 ^8 g3 `
#include <mach/da8xx.h>
) C. N0 B2 K z3 z3 S#include <mach/mux.h>$ c$ C+ U- w) ?0 t/ Q% H
3 K% a. Z, Y8 _#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)# U' R- @! V+ B( U$ y# n5 T* c- C
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)3 B3 J8 |& T! e8 u, d0 x- r6 y
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
8 s, H* I" Q) [#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
: z( h8 V# {$ F6 I& f6 w3 ?
7 {2 \5 L6 ~# k3 J f/* assign the tl som board LED-GPIOs*/
7 R) z) H7 ] b% c1 r0 ?static const short da850_evm_tl_user_led_pins[] = {
, X4 {3 {( ?4 p% j; e /* These pins are definition at <mach/mux.h> file */
. o' s; y6 A2 {5 ~9 }3 P, O DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,4 W) g' f$ B* c" m) l
-1
6 w* I% K4 f. n- V: l};
. |+ O4 F$ r0 Z2 i. s& A+ b
- Q" |: o; ~6 _4 Hstatic struct gpio_led da850_evm_tl_leds[] = {% T9 y1 @1 Y5 Z
{
3 Z, `' M. i7 g .active_low = 0,
: A, d7 H8 Y# k' X+ A/ m+ z: B .gpio = DA850_USER_LED0,
, ~3 P( Y+ B; [2 e .name = "user_led0",' M4 ~+ {6 \6 X* R
.default_trigger = "default-on",1 `' Y$ F& n& C5 r
},5 u- m7 z/ q$ c7 R# ~) B: y
{
8 A" l `2 o/ U0 f5 J3 G$ z .active_low = 0,
( W5 l% b* W4 Z .gpio = DA850_USER_LED1,
& p! }. H0 n; B( t8 E .name = "user_led1",5 E2 u+ Y) }' P1 f; H/ x" c
.default_trigger = "default-on",3 _* p8 _3 G+ }# e9 K
},
. C$ C" [* H8 s1 v, [" N$ e) k {
9 \% ]" \& G# z! T/ o, @7 } J .active_low = 0,3 N0 X6 D& X0 w7 O$ d
.gpio = DA850_USER_LED2,7 P! W o1 e) A* ?- l' d- F
.name = "user_led2",$ ~) L4 k1 g$ H# s/ e1 r( y
.default_trigger = "default-on",- x( z# U: e) N9 u" v
},* G4 Q7 ^- i* o8 g% S8 D( p
{" z& b9 P% R7 J3 w1 N9 {5 c* w
.active_low = 0,
m- i7 U& F, J! [% n6 H .gpio = DA850_USER_LED3,- f2 U9 W- t+ O( y7 K
.name = "user_led3",
" _1 M( t4 J& x' U* [& ^+ Y .default_trigger = "default-on",
+ n" C% v/ ]8 o- v },
/ B8 M9 v/ ^3 U( E};
9 M' P0 h" C3 L/ ]9 t) m
3 q4 _9 C+ X! Vstatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {6 t) _7 H9 ]1 v! y0 b4 `; g
.leds = da850_evm_tl_leds,- \' S7 K% P8 \( _( w
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),+ z+ V A" `, `* b
};) j5 L6 N: `2 V) ~) F' ^/ r8 _% N
4 a. ~; a8 {8 x( ~
static void led_dev_release(struct device *dev)
3 Y! O/ ^6 v2 s& o3 k{
U) _- X: P8 \; A& d};) u# A# @+ o8 @& [( }' y, s
9 Q' X4 y' a$ k* B* Wstatic struct platform_device da850_evm_tl_leds_device = {
' g% _- g" g8 n9 F' E! Y Y& d .name = "leds-gpio",; n7 `/ I$ m# Q+ E' f1 j" i$ G
.id = 1,
2 T: E" d% o4 j .dev = {
2 t$ `! v+ E9 u8 }8 V .platform_data = &da850_evm_tl_leds_pdata,; I' E W9 R, l) G2 E7 m
.release = led_dev_release,2 i) Z3 e* z5 f' R4 d8 z
}! F7 w+ L, _! E% W- a9 m4 @" g
};
; _6 B, l/ e6 o* J4 l
, x9 d6 y" i+ E. ~/ Q7 ~2 v# Kstatic int __init led_platform_init(void)0 I# W, H, ~3 m6 x2 x
{
* L0 V. t2 U& `5 U4 c2 M5 @ int ret;, d A) X( L6 T% Q2 M# M# w
#if 0' t- N) B$ D6 C- Z
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);% x* c8 e( _, c. o4 n
if (ret)5 T! w# Q Y+ @+ a7 m+ W% S0 v8 ~
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
+ A. N2 C S& ~7 Y6 s "%d\n", ret);
8 G/ _1 a, d! z7 T" q#endif
8 b7 A$ p( y( V- g' Z3 P ret = platform_device_register(&da850_evm_tl_leds_device);
7 v0 F+ _: l$ i- C8 v- r if (ret)
# j. U4 R$ V6 {) N) \! N: z pr_warning("Could not register som GPIO expander LEDS");
& z5 w( a- s1 I else
5 J, f3 G+ q3 q, r printk(KERN_INFO "LED register sucessful!\n");
4 P( V9 G! z1 u( q. m% V, O7 a
' c3 k @# t9 R- f4 Y4 ? return ret;; }, N6 U: w* a& v2 |
}1 w0 O) w+ X0 F9 b9 D
4 V5 u- }5 ]5 Z& P, d6 @( D" j9 Rstatic void __exit led_platform_exit(void)
- u/ Q) n) V) ^# \7 A+ n6 P{0 n3 J5 p: [! r0 ]4 c5 p8 W
platform_device_unregister(&da850_evm_tl_leds_device);
5 q1 o, ?) q* p @
& C1 B' V0 N2 S! k: s! b" J printk(KERN_INFO "LED unregister!\n");" c! G+ I: e% ? P P: I' Z
}& u |- u! c1 H+ ]
9 S& z" d+ F. vmodule_init(led_platform_init);
& |# Y/ q4 K4 @module_exit(led_platform_exit);
: F6 v% {8 i1 e/ w! M: X# \4 N
) H' r4 B! x/ B* I9 D. ]MODULE_DESCRIPTION("Led platform driver");, |1 s9 G: r& x8 F
MODULE_AUTHOR("Tronlong");
" H: r( M* {2 J0 H5 o6 sMODULE_LICENSE("GPL");, c) ]. D, ~7 `- \" s, v
+ ?3 w h2 p7 z1 b |
|