|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
9 w7 g/ G" \$ G# i5 k4 p9 \#include <linux/init.h>: R/ R) @; v& C- {; ~5 Z9 C
#include <linux/module.h>
( x1 Y$ ]( [4 j" R) r#include <linux/kernel.h>
+ P/ I: i1 b* w- }& n; \" s5 B#include <linux/types.h># Z. \% g# ^6 N- u) J( V1 n' t
#include <linux/gpio.h>1 x) g- O% K0 `( ~9 k" u1 C
#include <linux/leds.h>, r2 |% |1 p" O
#include <linux/platform_device.h>
8 b% _8 t! D5 U5 G4 G
; G$ o8 @5 D3 B$ ]# j9 n#include <asm/mach-types.h>
3 z" Q; V2 \: q& v% v#include <asm/mach/arch.h>
) g) K8 i! K/ R }/ E# O#include <mach/da8xx.h>
5 |% e8 D7 n+ o8 ?& R& @3 Y#include <mach/mux.h>9 T* T: Y3 `4 z- ~9 R* ~
. D" l5 M# G2 f# n# p8 t#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)$ r8 D: s1 j8 d$ A) b5 Q
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)) S+ f9 P- A' y9 y* W# m
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)! ^# c6 T: Z; v
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
: j+ R7 B9 M9 y( ~; M9 g
+ J9 Q5 G3 ?1 e8 ~3 B/* assign the tl som board LED-GPIOs*/
; @; j- c' b# a' M( \$ @. C9 |" Istatic const short da850_evm_tl_user_led_pins[] = {4 O4 L9 p, F2 B) h. }
/* These pins are definition at <mach/mux.h> file */1 [( E- \ v {' n4 Z% o
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
" ]8 G! M- Q% R/ W2 V -1
8 X% f( k5 r1 [: j- A8 ?' ?9 F: L) z};
- C) u' W1 N% L9 v9 Y# F' z
: g7 \6 y0 x# i( d& qstatic struct gpio_led da850_evm_tl_leds[] = {3 a$ |0 x7 a; l8 |: ?1 B
{
# a& k2 e8 P# {. ` .active_low = 0,; C V* `: F8 N! ^
.gpio = DA850_USER_LED0,* _+ [+ q0 r# }* J+ q
.name = "user_led0",
: F, ~/ x* D4 [- k3 |* ^2 q .default_trigger = "default-on",
' D% c' X x6 q1 I6 v0 y8 j },
7 A* u- ?) U v; U6 _8 B2 A( C+ t {
1 f0 \4 m! A, [" p! a' e+ _/ _! o .active_low = 0,% @7 o! C6 b, E* T' B, d5 l9 s
.gpio = DA850_USER_LED1,, i( E7 ~( \: u6 v: M
.name = "user_led1",
8 {! J# S4 T9 E, N# D ], y .default_trigger = "default-on",/ N# Z y' s. {5 |
},
6 q8 k% a+ N# _& u$ Z7 ]+ w; { {( m) J+ q: P! k: f0 ~+ L
.active_low = 0,+ t# w/ \' c) Q2 i4 y$ k" F
.gpio = DA850_USER_LED2," z3 U; g% j; S9 e9 `
.name = "user_led2",
& ]# w/ A! z/ r! I .default_trigger = "default-on",
& o5 Q$ }, W @ },, I; e2 u( Z% R- T8 M7 r5 a3 H
{7 U% d/ V: k+ [, G" b
.active_low = 0,
- x0 e9 i3 W5 x: ]& U .gpio = DA850_USER_LED3,( L! l; h/ s# R8 ^9 @2 d9 k1 h
.name = "user_led3",5 k# l6 S3 U+ r# ^& y# X
.default_trigger = "default-on",1 ~9 r/ |9 b1 I% M& j
}, k* t4 b5 ] \! x% `
};
* s ~( G) R* f2 y+ E+ ]9 x7 r/ b! p3 J0 L
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {' J' a6 K- Y* J, ]% U. Y
.leds = da850_evm_tl_leds,
0 f2 ^- V# u' L/ K( ] .num_leds = ARRAY_SIZE(da850_evm_tl_leds),
, @, G- v6 `. v( x# Z$ j};6 d9 x$ b4 X- x3 n n3 c. M
8 a4 v: {! Y: ?9 C* d7 n4 p3 R
static void led_dev_release(struct device *dev)# n+ \, f# v) u' Y8 Y
{8 {- M9 b( C; c& V* G
};, }0 I5 |: D( `5 T, N
8 O8 B' [# r! h4 ^, n* M N; C
static struct platform_device da850_evm_tl_leds_device = {
( _% o& V) y5 a3 B; _$ b) ^3 j3 j .name = "leds-gpio",
% J6 ^/ G1 z; m) K2 w) ~" S& h/ o8 U .id = 1,5 Y6 a! H2 f0 A$ u2 F
.dev = {
1 x1 J% z0 U2 O& I6 @+ P( A2 @ .platform_data = &da850_evm_tl_leds_pdata,
! m- n" G; p9 v5 } .release = led_dev_release,# n! @( j& V' W4 G
}9 ], x, W2 P; E% w, @0 P3 ] D+ W
};- t* N4 D7 ?5 Y
, p5 N& k5 c& l! r8 b( `
static int __init led_platform_init(void)" f/ {: c1 C3 y) m& H) w$ V0 V
{
2 U. M: e8 I3 B' v+ H- W0 H int ret;! R! \' D) c8 z( K3 t4 `4 l2 i
#if 0
7 s0 p: y) v, t& _8 u8 Q ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);7 M/ q% i; N% d" d
if (ret)
}8 E4 t+ d8 e# R% \' G- i, k pr_warning("da850_evm_tl_leds_init : User LED mux failed :"4 _4 C6 o c2 N/ _9 @% M8 p2 t
"%d\n", ret);; K% T3 U" c# J& h
#endif! F$ b' Q7 W8 `
ret = platform_device_register(&da850_evm_tl_leds_device);7 i) D% |: i9 A6 B8 ]6 {2 t
if (ret)
" ~! _" Z& _( r) _) h! f pr_warning("Could not register som GPIO expander LEDS");/ |$ O0 x, B. r9 b7 p
else
- Q$ b, z1 z8 i printk(KERN_INFO "LED register sucessful!\n");; o8 f$ C* r3 w
, a, x) v/ b" w, X
return ret;( p+ c; X/ X) q) L5 P
}
6 h$ t/ g' ^! Q/ f% C5 x4 n+ k) P+ }' Z
static void __exit led_platform_exit(void)& o2 l" {6 W( D) _$ Y$ r5 `+ D
{& {+ L* Y6 `7 Q4 H7 s- S. f0 i
platform_device_unregister(&da850_evm_tl_leds_device);0 T* h! X; F9 b$ N b. V7 Q, B
" g/ @3 S# L" @6 h# E
printk(KERN_INFO "LED unregister!\n");6 K3 f3 t( K/ E+ h% j5 E5 x
}' C: d( e; }# B# [2 ]) M% D
" c5 a0 H1 b% ?7 Y2 Tmodule_init(led_platform_init);6 L) [$ P' w* J8 l* b, o" F
module_exit(led_platform_exit);
+ s5 w, s, \ V! Q- W
6 E& g: g4 P; O6 sMODULE_DESCRIPTION("Led platform driver");
; [- C Z6 F3 N+ n2 iMODULE_AUTHOR("Tronlong");
/ I, |7 h# C) c' mMODULE_LICENSE("GPL");& L7 U) H$ ?) q0 R* E. P
# O( r w0 `8 r
|
|