|
|
求大神给下面的程序做注解,请稍详细些,谢谢。) z/ I& p3 N3 X/ d& {
#include <linux/init.h>
% B \% F |) D1 R0 X#include <linux/module.h>$ p7 i. l- S3 C3 W
#include <linux/kernel.h>
0 S" X( r' _+ N. _+ j) W9 \#include <linux/types.h>
2 _$ O# F- s# X7 s3 V* E#include <linux/gpio.h>/ y6 e& x3 {) ?& h
#include <linux/leds.h>
5 A. V x( \6 j, r#include <linux/platform_device.h>1 z& s3 F! n7 T* s9 [- q
- ~7 N4 e- B- C' x
#include <asm/mach-types.h>
9 D3 |2 {" U U( V w4 ^#include <asm/mach/arch.h>
3 q. V p$ q0 R& J! i& p) T4 {#include <mach/da8xx.h>! G: K9 _1 S X) |0 i* F$ C7 P
#include <mach/mux.h>1 T/ w1 X* z2 E8 j! q6 l% g
* |* @4 x' }6 M. q1 I+ y
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
$ H- W6 v' V# ^# t' s#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)2 d9 j J( a! I& p, w) V
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
6 _( N3 } b0 p: N! i+ V& w#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)" a' `/ Y6 j. i, V* I
8 W7 k; x. o; i/* assign the tl som board LED-GPIOs*/
, a1 [0 t2 M- t7 V; ^9 F0 dstatic const short da850_evm_tl_user_led_pins[] = {
0 }% S2 @3 ?. f3 q8 B$ W /* These pins are definition at <mach/mux.h> file */
* y/ U9 j t0 @" R# G DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
9 H0 a% e( a+ H3 a9 y8 g -1& @8 u7 `1 o( X1 g) Z
};
9 ]( {5 I* V) P8 B: X% g) I4 C0 r9 m! r# ?9 U! c6 @2 D
static struct gpio_led da850_evm_tl_leds[] = {
0 Q2 g! \' Z8 t* j& y' O {
% j9 N. m7 ?. A! m7 D' r# C .active_low = 0,2 J; S' h$ E& }! v) R( q
.gpio = DA850_USER_LED0,) @2 m, G7 N$ X1 }8 i/ d" X& v% |
.name = "user_led0",5 Q. Q- S8 ^) k! }/ \& U
.default_trigger = "default-on",( P8 n# z- F7 k3 p0 f! y6 K/ F8 g/ @
},6 X3 g7 y g/ H ?4 `
{
8 w9 B# B. m3 b .active_low = 0,
2 b J5 X+ w# Y .gpio = DA850_USER_LED1,& L8 O. i' c% b- ]5 U& C
.name = "user_led1",- d: m" o9 M/ P5 ^' L! a" Z
.default_trigger = "default-on",
; u1 T4 `! E0 C. r; q. V },( [2 j: Z8 S6 n( ^( d
{' j6 h0 X0 ]/ y6 ]
.active_low = 0,
& A3 Y4 m6 X" a( ?# X( z7 [ .gpio = DA850_USER_LED2,) k& f7 Z; ?2 h3 s+ Z! {
.name = "user_led2",
8 \& [7 ?- e$ s' c) a/ Q! ^& {3 U .default_trigger = "default-on",! S6 Z$ ~0 `, U a9 M1 m
},7 ^* E# V, I* R
{
( t; [/ f* a" G; p* k .active_low = 0,+ K- F7 L% ?9 ?
.gpio = DA850_USER_LED3,4 |0 r) Q3 n0 h1 S; y6 `
.name = "user_led3",( K6 j4 e V. I7 z1 B( s
.default_trigger = "default-on",; x; S+ V5 E* I3 Y2 H2 `- o& O
},
2 @, X+ A6 B* Q, i4 p};
- r L8 i, W/ r4 O9 l/ ~
) q4 b- K2 p; _+ \( Wstatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
7 f; i m' y7 f .leds = da850_evm_tl_leds,1 X) r5 S5 d8 t$ S0 t* Q
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),5 d4 D& U+ K/ x
};
6 O7 _, j( E( R3 I: h6 x$ V& ~8 E2 ?
1 w6 B- N/ [& g$ ?1 l1 d( a2 ?static void led_dev_release(struct device *dev)
! j @( W& M; B. C{+ `0 u' R1 g' H% {
};8 D, A# n* ~& @! k$ r
7 b' W8 @+ v7 h/ H: vstatic struct platform_device da850_evm_tl_leds_device = {6 B) Q. w. D/ u+ C; Z8 V, a2 s+ E, f
.name = "leds-gpio",
: H+ j. E( X8 V, o .id = 1,' ?4 s# i$ E; a* y: U) B
.dev = {' I+ G0 s6 }6 o6 e8 Z
.platform_data = &da850_evm_tl_leds_pdata,; a$ i+ M8 x8 r u1 L
.release = led_dev_release,+ v- v8 Z' P7 }2 G
}
" r9 m; C( j1 J4 B; h" {};
% _. D) @3 w1 w# |) q, ~% n: p5 D6 F2 Y/ J
static int __init led_platform_init(void). Y$ O" V: X3 Z" ]9 ^$ v' o
{1 r! L3 \1 ]" X" O; E' Y) h
int ret;
9 M- G- ?6 W# i9 q4 v#if 0
5 J( s* t' K5 ^1 l& {/ }" l: i ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
; P. _" w3 Q# \4 b5 k5 T if (ret)
, I9 C+ |2 Y/ x pr_warning("da850_evm_tl_leds_init : User LED mux failed :"% y% \# z% r' O- |' @, l
"%d\n", ret);: d3 A7 `( Y; _/ B7 r* c7 y8 g
#endif+ Q3 ^3 T7 O5 Z7 \ g% `
ret = platform_device_register(&da850_evm_tl_leds_device);' i1 Z0 S& E3 }& W0 ?( p
if (ret)" Q3 t1 v" p4 }
pr_warning("Could not register som GPIO expander LEDS");
5 p- i7 a. ^8 A% a, M$ Y0 Y else
! c1 O% b2 f" \- v5 E* J- N1 Y printk(KERN_INFO "LED register sucessful!\n");
+ |2 P! ?* q+ Y% k4 [0 {4 {5 \. m
return ret;
% N9 V( \& T1 ]} y1 v, [/ t4 G1 Z1 A
1 ?, g: p1 j% V# c& ?static void __exit led_platform_exit(void); B+ v( C0 R) `0 c
{
- o! c1 j. z, }0 ] platform_device_unregister(&da850_evm_tl_leds_device);. ^4 f3 q* V) k; |
0 @& O' b+ c# h- x4 r7 U; j# u! E* } printk(KERN_INFO "LED unregister!\n");
0 q% @/ Q% w* G+ s& M* x}
0 r2 J `# {% [/ c5 Q% T+ i; B! j0 p7 _. l% {7 ]0 K) T9 U
module_init(led_platform_init);
: N- P- h$ G+ ^. d" \0 s0 q; L6 Kmodule_exit(led_platform_exit); R9 g/ V' P! y+ `
" M; \& I, j" B1 g B! M
MODULE_DESCRIPTION("Led platform driver");
- i4 I! H/ F- T8 g; z! J. bMODULE_AUTHOR("Tronlong");1 q1 M/ Z. `# S7 s- C$ ]" s5 `2 x0 x
MODULE_LICENSE("GPL");
}* U- h/ B1 G
: q( m4 l+ P) N |
|