|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
x2 T3 s5 H, O) s9 j- K#include <linux/init.h> Q: U5 w) D+ S- N |& v& N7 ]- b
#include <linux/module.h>
! ~/ [6 p! T+ ] y, j5 |$ b" y9 U5 ?, B#include <linux/kernel.h>* K. j& P* C7 K5 g, N
#include <linux/types.h>
: i0 j, h+ ~! d4 r: c5 O#include <linux/gpio.h>6 f/ t1 x9 i( D" z0 P* \3 n
#include <linux/leds.h>8 L0 Y/ g9 `, P# K$ s
#include <linux/platform_device.h>% k3 G- i/ \3 m5 g+ f& z
5 y2 i$ d% Y6 Z4 K# |- P- L#include <asm/mach-types.h>
* I. D9 Z+ V& M* r#include <asm/mach/arch.h>) K3 }- i0 A: h: T L
#include <mach/da8xx.h>
% z a% k7 O. U; F8 f) @# K#include <mach/mux.h>
( }! i) R# @! g. o$ ` y, o
1 ], p; e# \7 M( y8 O#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
2 E4 n0 k- d7 R9 } z#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
5 U( K$ m2 l3 I* }" A: v. J#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
1 s. q+ D9 ?1 l( x#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)8 U0 ]4 S7 E5 w$ ? ^# g, Y5 ^
, E/ \$ {$ Z# L/* assign the tl som board LED-GPIOs*/
9 m8 U* V. g9 B8 y+ z& wstatic const short da850_evm_tl_user_led_pins[] = {! z% } `' L3 B: {' C
/* These pins are definition at <mach/mux.h> file */
* `) C8 G/ ^! M/ [, `. R DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
* p, I# b6 J* G+ n6 Z -1* E2 [5 [9 e. Q1 d: i
};
, k. r( C @2 D
7 d- A8 F5 g: [, ~( {3 Sstatic struct gpio_led da850_evm_tl_leds[] = {
3 E9 G* Q1 G- E- f- B3 T/ Z {* e x# X2 ` ^5 w( }
.active_low = 0,6 v9 M; ]* A) Q' s9 u3 e
.gpio = DA850_USER_LED0,, `3 ~1 T. i0 F, I
.name = "user_led0",
1 m4 J2 \' \( o4 P .default_trigger = "default-on",& D+ u7 I/ [' X G- t# V
},; ?$ ~: v$ ]# Y$ ~/ w1 ?4 f
{
% j. Z0 ]' N) K; e3 J5 w- D .active_low = 0,+ `- q- p% T A0 K. i5 F* k
.gpio = DA850_USER_LED1,0 y6 ~2 D( o- Z7 J" B
.name = "user_led1",
o& r' d. O- E7 G' F .default_trigger = "default-on",1 G6 }" w% w& `# c* }/ k/ A5 L: o$ @
},2 c9 j, k$ d; o3 c
{
5 u; G6 n6 @' @+ Q1 k* Z! J .active_low = 0,
8 P `& J- @5 \1 X/ T | .gpio = DA850_USER_LED2, E" ?+ O6 r5 Q- \" G
.name = "user_led2",
2 r& o! _# O1 @5 o V! j .default_trigger = "default-on",
/ ^, w2 R+ [( H },
7 J$ \# G4 S5 ^ {) g8 U% z/ L% F2 A9 A% G9 B
.active_low = 0,
# o2 c# b$ W% g G' k4 E .gpio = DA850_USER_LED3," }- W: N5 N0 [& A
.name = "user_led3",
% P+ i* |2 D! q .default_trigger = "default-on",
2 G8 E; F' n. Y$ ?( } },
5 I9 c! q. j0 R- b% u5 i; D) P4 A};- h" j. G8 K5 X+ i' G& \* M w4 b& U
2 B( W$ r2 {+ S9 B+ j: u5 b
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
" h: F; `. _" ?! i) n5 M/ S4 C .leds = da850_evm_tl_leds, x# h9 h3 ?* _7 z" U
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),% [: X0 ^6 j+ y4 v
};
n- ^, z; t7 n+ v- A- Q; b6 m% B3 i! O2 F8 O1 d7 ] H
static void led_dev_release(struct device *dev)+ ?5 K& m7 r$ T1 y/ ?2 ]: R0 b
{) Y/ @7 ]. W# j, ]8 }5 H
};1 b' R S5 M P) D. y6 r/ W
" M1 ^. H6 |. X1 e7 O8 X
static struct platform_device da850_evm_tl_leds_device = {
6 B& [) L9 A2 x; r .name = "leds-gpio",
2 J1 w; k( d% ^4 {& ~+ g7 s .id = 1,
8 f& b7 P8 ~8 M" H* [ .dev = {
g% q% d0 I( m3 j; { .platform_data = &da850_evm_tl_leds_pdata,7 ~3 R( K( g* k$ T+ A
.release = led_dev_release,9 _/ M' U* L: ~+ c' e
}
' F8 }3 q h* h: D) [};% v+ @. t3 J ~5 h1 H. A4 @- ^
4 u( J5 [" a J* E5 h5 h# a4 b; b
static int __init led_platform_init(void)9 P5 O( S0 B: s- a8 q# B1 b
{
# l% L6 e3 e* k; r: ?9 Y7 \* x6 @6 T int ret;) f& Y$ { p* C, h3 i" _
#if 0
, y2 B- l- }1 ~7 G; z$ M ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);8 t. r6 _8 a5 b- m4 R8 Q4 d, Q" @
if (ret)% W" A ?, A: ^0 G" Q
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
1 j6 X' m3 I5 e7 q9 v# z "%d\n", ret);* m5 l5 I2 I7 D, t* `0 |5 h
#endif
0 |7 ]/ x. o: K) O$ V% D. h ret = platform_device_register(&da850_evm_tl_leds_device);+ m6 F* |0 Y; q1 [8 m' W! C6 g
if (ret)
3 C3 l. C* P4 | pr_warning("Could not register som GPIO expander LEDS");1 c. X+ d) ]1 c/ j. B
else
6 O- }* o2 A* h6 d printk(KERN_INFO "LED register sucessful!\n");* u0 q, z* K- ^* O2 i0 {
, P* p6 M6 S% U, v return ret;7 Q8 W) R9 ~3 G9 m& {) _1 S1 }3 f
}9 U& A1 S4 r% [$ [
: D" y& r* f; z3 g& Zstatic void __exit led_platform_exit(void)( h9 w, _# X m; {9 \+ a
{
# I6 {+ A; V$ n. U8 i platform_device_unregister(&da850_evm_tl_leds_device);
; d" c, V+ U/ E3 {' u0 s, u2 U, g# m7 u ]: D3 j; l6 Z
printk(KERN_INFO "LED unregister!\n");
# w$ m1 r: h) {9 a( T) [}* Z* v- z( j0 h
2 ^; N9 x: |+ H/ A& O. p! n9 j
module_init(led_platform_init);# j" \( Z- O4 c2 u: A) A0 H+ r
module_exit(led_platform_exit);
$ G! j& v9 i( e G9 x+ [: ]- u' B/ A( p4 H! {
MODULE_DESCRIPTION("Led platform driver");
9 X! @) n/ Q* H+ ~; D2 K: |MODULE_AUTHOR("Tronlong");
- N* T$ C4 X, W/ u8 DMODULE_LICENSE("GPL");; `8 u! a" D6 \. h/ j$ m& N/ M6 e
+ o3 A+ [" R5 \! C2 m
|
|