|
|
求大神给下面的程序做注解,请稍详细些,谢谢。6 [7 y R0 e/ G4 d7 h
#include <linux/init.h>7 ~8 ~+ _6 c4 |
#include <linux/module.h>
* J$ H; a* {7 E/ S' X" ?#include <linux/kernel.h>
6 O0 Z. B. D% r$ v; i" v#include <linux/types.h># N2 J6 k4 z( b
#include <linux/gpio.h>9 p7 f" r) v& x3 K
#include <linux/leds.h>
8 u. C$ U5 B3 w u# I#include <linux/platform_device.h>
6 e/ F' w0 l: x+ R% M3 A
6 W8 {8 l0 [9 ^0 o, F K7 h#include <asm/mach-types.h>9 i: j. O% g7 B9 _& E( l
#include <asm/mach/arch.h>
; H- \( f9 f4 J#include <mach/da8xx.h>. x* h: y4 ^0 c+ g
#include <mach/mux.h>
5 s/ O+ H% s! c m
8 T y7 G; ?/ U/ v#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
6 p1 `5 x/ R( {4 {5 D. P) Y6 ~( ^#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
5 b$ Q) L% ^9 v2 _#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
7 t: j# X/ ?0 o4 m#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)' e1 O5 c9 P7 R$ n' K
: o, A0 S- X( `+ n/* assign the tl som board LED-GPIOs*/
5 R; p6 | h) V+ F" _! f9 _$ Zstatic const short da850_evm_tl_user_led_pins[] = {
7 `( e" M9 h1 \! H0 ?3 k3 A% g /* These pins are definition at <mach/mux.h> file */
3 P5 M0 a' n( v3 D0 f' X) K DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
- }6 z! s z! m8 x( a -1
- \1 f3 M* ^, m% Z. q0 \};
/ V* {, y5 ]$ f( B+ e5 Y* \* O* [% N* c
static struct gpio_led da850_evm_tl_leds[] = {
0 h4 Y" g$ R. n. M d5 m {+ G% R: y v$ D' A4 G
.active_low = 0,- @1 S) D' R# j
.gpio = DA850_USER_LED0,
9 B6 Z; b7 Z6 @7 r .name = "user_led0",
. R+ w0 R L$ |$ T/ z1 k5 u .default_trigger = "default-on",3 T r+ b1 X; ]" P9 ^. Q# k
},
: k0 e3 Z; n) e/ T1 q4 C {
Y, x9 k% E$ n+ M/ | k .active_low = 0,; Y# c! Z, M$ q @7 I& k$ n' e* b
.gpio = DA850_USER_LED1,
) |* W: g" W% a% Y1 B .name = "user_led1",
$ ]- g6 I' Y+ b' S& v9 r .default_trigger = "default-on",, }( `$ ], q6 o6 ^. s# [
},# g* O$ ]6 q- B( \' Y
{
0 H; A5 D; e8 u0 f5 S9 n .active_low = 0,
& G+ N1 V# y& O( u5 { .gpio = DA850_USER_LED2,
8 {7 y* r' _) F# H! K .name = "user_led2",& d" G" n6 r( H! `8 W, z
.default_trigger = "default-on",2 M5 }% n) i1 V# Q
},
/ `( }7 X8 |$ N9 ^ {" U |, v8 I+ Y
.active_low = 0," V$ N7 m" {' L4 J4 c+ v
.gpio = DA850_USER_LED3,6 \" E; q$ M8 L! c; _/ `
.name = "user_led3",
8 ~* ^! U+ p* F4 m. g& f .default_trigger = "default-on",
- i, \' {3 w5 \5 D3 M1 H },
1 r& ~; ?4 s9 q! [; _};
* b" I2 i( T- e8 s# Y2 {- J9 U: w* N1 ^
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {" |( P6 p; e# y; `6 K/ Y
.leds = da850_evm_tl_leds,
' c$ ^9 i( Y' j7 ]% J, @) n# c .num_leds = ARRAY_SIZE(da850_evm_tl_leds),
+ n4 o- m* h" f* {9 K* J};
l! N7 z. ] u& i. f' e$ p* x) G9 I4 W
static void led_dev_release(struct device *dev)
; S: M" I" e9 |0 G0 j. C! k{) R/ L& Q& A k( M
};
: y6 z" t1 @2 J% a( }: \! ]# c5 [3 y: E3 D% _% \$ m
static struct platform_device da850_evm_tl_leds_device = {" H( ~* u; }; r: U
.name = "leds-gpio",1 Z0 Q) F8 O* n
.id = 1,# a! G: _0 [ z( a+ \% R% `
.dev = {* P/ z6 i+ s2 C" T6 c- g! S! Q- k
.platform_data = &da850_evm_tl_leds_pdata,
& J! U# C, Q0 n& P! l2 R .release = led_dev_release,
. R2 ]1 [) Y; D# l: m# r }
$ X6 u. @; Q$ G5 _3 Q* |};7 b! {3 W4 M+ B3 c) H' c- o7 K
/ b4 J b& K/ r
static int __init led_platform_init(void)
" O. q( K( f8 X7 {, i{: C1 d2 k3 Y) Q. T9 }6 a5 b1 z
int ret;6 o# |$ |9 ~4 s( X) B
#if 0
! T% Y: ~: i& T' P7 Z& C4 N T4 L1 ?" y d ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
7 W/ K, t3 ^, [5 g/ M0 f( }) X if (ret)8 @# f" y) n, j9 h3 T( N
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
- j* e! p2 L( P9 n- P# P "%d\n", ret);
/ _% F) n' @- S* o3 Z% P#endif! n" h0 F# o2 u/ |
ret = platform_device_register(&da850_evm_tl_leds_device);
/ k1 `- C, Y1 G! A: E* a( R, e: E8 }! U `. o if (ret)
r/ N2 R" z! l) c pr_warning("Could not register som GPIO expander LEDS");
4 Y: B( [0 t/ X" b' ?& z" h else
7 @+ y# j. S5 L1 q7 _( k" l printk(KERN_INFO "LED register sucessful!\n");( }4 B8 r" K4 ]# [
) A! E% G$ ?4 X3 K( w return ret;
3 t! `# V+ W g4 ?* e0 L! b}
8 n5 O) J: }1 p) O
$ n+ N+ ]) u4 ustatic void __exit led_platform_exit(void)! Z' d( q/ N0 f5 r' T9 ?) z* |
{8 b8 p* ]! a6 s T" x
platform_device_unregister(&da850_evm_tl_leds_device);# r, g) E) @( N, w! B7 A
! K0 X! \9 j* p3 a; q: m$ T" s4 p
printk(KERN_INFO "LED unregister!\n");
5 v ]. T V! X5 f}% ]: I% O1 j% f
! D$ F T4 U6 F! u, @
module_init(led_platform_init);
3 A, H8 t* f$ T8 P5 M. Emodule_exit(led_platform_exit);
2 F6 R5 B( @0 V) s, a
7 X- }( A2 A' xMODULE_DESCRIPTION("Led platform driver");( x, a/ t3 }/ a4 E
MODULE_AUTHOR("Tronlong");5 A6 U" ~1 R& P- S; F0 o) F
MODULE_LICENSE("GPL");
' s; @% U! D3 g, ~. H: v
2 a+ V/ \+ y& f& F, H/ C1 }# p |
|