|
|
求大神给下面的程序做注解,请稍详细些,谢谢。/ g) f3 Z! j% z+ A
#include <linux/init.h>
3 T$ z8 M- v) t5 E% O, v: S; T#include <linux/module.h>) E& L+ m/ M& j/ ^
#include <linux/kernel.h>$ K/ Q2 |/ P% x, X
#include <linux/types.h>
t0 u4 ` i- J x1 z. y( p#include <linux/gpio.h>, S t6 q0 i" Q+ I3 z
#include <linux/leds.h>1 I5 F1 T0 D* [9 G
#include <linux/platform_device.h>1 g$ Z* W" c, h+ |. c
' G" ^' c, o6 X( N- `+ ~( b1 `; t#include <asm/mach-types.h>/ {# [ [0 r! U( t) ?' Q
#include <asm/mach/arch.h>
; N' ]6 @! }0 A. B" E#include <mach/da8xx.h>9 H& L/ v& v5 H
#include <mach/mux.h>, ^- ]5 J: q6 l# {0 s6 }$ h3 e& `
( d! Q+ c# u! r0 o
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)6 T, [4 O9 D% Y' U6 ]" ?) [
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
- m, d' a6 e" I" O/ O3 r; d6 V#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)* r* M7 J0 @9 T7 O0 E! n" x
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)/ m; W& ~, r1 T: z3 N
3 J( c8 u3 N$ M' N |/ w) Q2 b/* assign the tl som board LED-GPIOs*/# c, Q; ]0 \ Z
static const short da850_evm_tl_user_led_pins[] = {
! s0 O! ^7 _1 X9 G4 n /* These pins are definition at <mach/mux.h> file */
8 ~8 r( l1 D6 b DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,4 a( }3 m0 u6 @: c/ C! Q
-1
5 K$ q/ N; Q9 }$ c+ k};
4 w3 @( ^/ X0 Q
: g; \% M; @2 w1 e! ^static struct gpio_led da850_evm_tl_leds[] = {
# z3 o- @0 u- q3 r {& B: w- y2 D6 i5 p$ r( i/ g
.active_low = 0,# L$ O) D, u6 c
.gpio = DA850_USER_LED0,
" Y/ D0 C& T/ i7 |$ A" L .name = "user_led0",8 M" Y1 x- k/ x v
.default_trigger = "default-on",5 @. Q2 q+ ?5 j9 q0 T7 p
},4 Z, B2 K$ g3 n$ r( _" _: T" s+ N5 o
{
: A! ~8 R3 P6 j w5 P( E! z# j+ @ .active_low = 0,7 F( F- `. G9 y$ b: E; o+ s/ T6 R
.gpio = DA850_USER_LED1,8 C# r" n) U6 F2 \; p' O" P
.name = "user_led1",
. y. \) T" S M7 h' V .default_trigger = "default-on",( L8 l9 D6 d, |2 A, C
},# |+ r L4 \6 ^$ L3 M
{
6 ?+ |& ?% l! u/ f' E! T .active_low = 0,
2 a6 N5 u4 r$ U( p4 Y. q .gpio = DA850_USER_LED2,
+ y6 x: x7 M/ R; Y2 F0 l .name = "user_led2",2 Q: Q2 ]1 H$ \% ^: J
.default_trigger = "default-on",
2 D& X* h, W; I },
; R5 i2 a/ @5 Z {+ k1 q0 G4 z* s! y
.active_low = 0,
1 F1 V! z( e& b9 j7 ` .gpio = DA850_USER_LED3,. j+ Z+ x" J! d, h
.name = "user_led3",
/ V# p8 M8 m v .default_trigger = "default-on",* V5 a, m" M, x1 S: c1 Z
},+ r/ N7 v( J. Y
}; |; U& G, g l$ M3 I# ~
9 R' O2 E" C* m. h% T
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {7 @; _' V3 \% L: _+ T
.leds = da850_evm_tl_leds,, A5 d2 ]/ t* _+ x8 h4 W( l
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),
7 x' J: d" w* m};
' f0 O; C: }3 P$ X
1 [2 p2 b6 V' h! m9 n! t( S# Q7 K% Astatic void led_dev_release(struct device *dev): k5 K( m+ z9 E% x
{1 M; A& i% m8 A1 b( k: N, X9 J7 [
};6 r# v5 @- \$ p/ r7 ]: p
/ v5 n+ V7 I$ B* ~5 \) ^ @/ Q( Ystatic struct platform_device da850_evm_tl_leds_device = {
5 g/ @+ w2 U: ]2 _& Y7 ^. f .name = "leds-gpio",8 Y0 W- m5 B$ N' Y
.id = 1,% V6 o& }% {: M" x% C
.dev = {
4 r& _: N0 y4 z2 V .platform_data = &da850_evm_tl_leds_pdata,
, R7 N7 Y( }6 f* b. h m- ^ .release = led_dev_release,
* m" E: d- |0 |% j! w# f }- V$ k) \: H# g0 b
};2 a0 p3 J, {8 r$ a, B% L3 w
+ |( e; M2 }1 ^3 \static int __init led_platform_init(void)
" H) ^4 A: M; O! x6 X, ^{
: C0 E# F0 P* n! o5 I int ret;
1 G( f' _2 |5 R* M6 H#if 0' I3 |, ?$ S/ F5 q% Q- `
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);% ]1 C+ l2 d8 u2 V& [3 E3 l
if (ret)& T3 @& z( n7 R) x9 i% l& _
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
6 V$ t. r8 [2 M "%d\n", ret);
! o4 P% t5 i- _7 D4 T#endif4 q7 P3 z4 y! C0 j
ret = platform_device_register(&da850_evm_tl_leds_device);+ f1 L5 ]" d& a1 @" `2 j
if (ret)9 m! A) C# y) V4 q7 f' Z
pr_warning("Could not register som GPIO expander LEDS");, }5 R5 `/ l }- L" x
else* r- W; \: P- G
printk(KERN_INFO "LED register sucessful!\n");
; E B V( D" L2 [
* a7 w- x7 A1 Z8 t9 f return ret;4 P) R4 W* R7 W; ?: A& R! t
}
5 z# H/ w8 w8 @6 J9 U" }4 \) J, i1 q4 M6 H1 }- l, J
static void __exit led_platform_exit(void)
1 @5 O4 C* a# D& N/ }5 @{) U$ c. F2 ~8 e0 o% \$ l0 q: I
platform_device_unregister(&da850_evm_tl_leds_device);6 R; E/ \, p( T
+ {. r; [8 V8 e; F
printk(KERN_INFO "LED unregister!\n");' S, }2 @0 Y: ?2 R9 K
}
" I0 n* j, o- _6 j; o) Z( M# O% B! w, E: b6 ^8 M" P# A
module_init(led_platform_init);4 t" T/ A/ i+ h! C6 Q r! O+ r
module_exit(led_platform_exit);# F2 `! ^. D$ b3 v1 G' \0 }
1 b: k4 x U' p0 u B; ~MODULE_DESCRIPTION("Led platform driver");
6 y) v0 S) W& j& t+ }) ~, QMODULE_AUTHOR("Tronlong");# b/ \0 V& ^( F/ m
MODULE_LICENSE("GPL");8 b: ~ y) s4 M
+ b. `' G; \+ ?- p) Z9 D
|
|