|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
5 q& z) L7 ] t5 l# z r7 G v% d#include <linux/init.h>
) N5 f1 S8 y4 c. y#include <linux/module.h>
% K) k1 n8 T) x1 @" k#include <linux/kernel.h>4 Z1 U$ o" V8 k( s/ ~% T# z2 i& m. k
#include <linux/types.h>, P) c# m3 c2 m% e( \6 v! G: o
#include <linux/gpio.h>
: U, h6 C0 o5 y6 K/ f& k! L u) R#include <linux/leds.h>( K, `7 z% a( P2 l7 l
#include <linux/platform_device.h>" P( Z9 D( O; f1 m
( _' S' S+ y4 H G
#include <asm/mach-types.h># I/ B4 s& \# u8 I
#include <asm/mach/arch.h>7 f; Y0 t' \) ^7 n# |
#include <mach/da8xx.h>1 ?0 d* {% A1 x& R& v: r( j) O1 V
#include <mach/mux.h>: M U+ f( X/ v+ _1 p
. m9 e& l! m, V, S/ g! p
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0), r/ z- }6 }8 V% ? `0 O
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)# }% k x) k4 S7 z' r0 v
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
) M5 k& h! S# r3 @$ S#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)! K9 i+ A# x$ H% J0 M5 b% S) R7 K, i
6 _( l) x' u1 G+ E) y$ E% _0 c+ N/* assign the tl som board LED-GPIOs*/
2 g J- [9 ]2 v) S: ^; gstatic const short da850_evm_tl_user_led_pins[] = {: N$ j+ M+ ~" K: d J
/* These pins are definition at <mach/mux.h> file */
: i, p5 \ n4 \4 L DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
, D6 M) u" U; n7 B' P X4 r+ ` -1
% Q: ]+ l% _4 n};9 f4 F b0 C4 H$ `
$ ] R1 ^7 B$ U! A6 t6 L! Ystatic struct gpio_led da850_evm_tl_leds[] = {+ X& z. E r) {9 R* z
{$ Z& J6 x# }, F* j; I* B
.active_low = 0,9 r" @9 K0 S ]
.gpio = DA850_USER_LED0,
& P0 t( o. \# C G d4 K( M .name = "user_led0",+ n$ f* j. E) o8 H
.default_trigger = "default-on",
$ c, V. X6 h" k h+ }" l; m: v },6 Z7 j) b0 F" j0 O! O" W" l
{
9 T: U' Z% c& K* ]) l .active_low = 0,% P0 ~* }( H- V; U
.gpio = DA850_USER_LED1,0 p; V7 f- H( l' s
.name = "user_led1",
# ^8 U3 M6 U8 M1 Z( H4 E- X .default_trigger = "default-on",$ ~! y& i0 [# k$ B
},
( Z( S6 h* f" y# ?3 A3 n x8 \) x7 [ {! f! V. a9 |) E8 b$ x
.active_low = 0,5 c& D2 f- E! |+ n* P5 V7 [+ O, K
.gpio = DA850_USER_LED2,( O% n! L( l1 ` @1 E1 G0 b
.name = "user_led2",* i, O2 t0 i; e' q' |: b# N
.default_trigger = "default-on",
% k4 k% q/ \2 W },
) e# N4 i1 m" `9 _) f$ ^ {' p) _& _# e1 p( }/ J
.active_low = 0,6 D0 ?3 S1 s- C( ~/ F |
.gpio = DA850_USER_LED3,
$ {% W1 ~* {% r8 x+ V4 s0 } l .name = "user_led3",
7 g; N( H$ b2 r# _( S. } .default_trigger = "default-on",3 t! k$ ?; N9 b* G# J/ f
},; G& b/ A- z m9 N0 K1 E. C
};- ~1 B2 I' b2 \: u0 i2 _
7 D* ]. Q4 U1 N7 w+ P! C; q
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
* ]5 N* |0 O4 f- `. R9 y; l: S' Z5 l .leds = da850_evm_tl_leds,+ p6 ~# J' ]# m8 G4 F, C; f
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),; O' m! Z _% i; ?
};
" T8 S0 [2 ^' D4 J/ t* X4 L3 ?: c/ g" q
$ E- i# b/ \& g0 ]) E0 `- M- J( v( _static void led_dev_release(struct device *dev)% Z5 E- P j2 ]1 r/ u0 a; m
{
+ V9 |2 N. ^7 ?% o2 d$ n& V+ m};/ I& K4 V& U# Z2 T7 _3 G
& L1 n4 l0 Y3 \static struct platform_device da850_evm_tl_leds_device = {) ~/ A" J2 \& C. N- h
.name = "leds-gpio",
3 ~6 |4 f( L+ U9 ? .id = 1,# p) j1 }* F. E, o4 S0 J& j8 l
.dev = {+ [: H1 |* f% U \) V, v# ^2 G! d
.platform_data = &da850_evm_tl_leds_pdata,
1 J/ H6 `6 {8 x7 S .release = led_dev_release,
5 B, S+ D( L6 i }
' D. S; R I4 [; R1 Q$ X" w};
4 u! K- [8 ?) L0 m. J5 I* l
7 ^* b' `6 a# ~$ ~) }/ Vstatic int __init led_platform_init(void)5 O, y) c1 L0 m: t! Y- d5 `
{+ ?, o- {! L' {7 T' Q+ x8 }
int ret;; W( u7 z; a2 K: q. l2 _
#if 02 ?( O; M9 ?+ p4 p$ D+ _. W
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);( {( ]8 d8 b; ] x6 Q2 f/ X6 V
if (ret)6 s3 M# q2 _. [4 ~) W
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"' K4 J" Q4 R, {8 N+ D, Z$ N9 s7 Q
"%d\n", ret);9 ]( J- J, v6 Y% U& z) Q
#endif
/ {2 _: J# V( } ret = platform_device_register(&da850_evm_tl_leds_device);
' A2 S# {# w# L; P7 r, _! U7 u0 y+ Y if (ret)
( ?6 y) p/ X; e& q- h pr_warning("Could not register som GPIO expander LEDS");6 `, m, ^; |$ f/ Q2 k# d
else- U2 e3 P. _ r {3 n
printk(KERN_INFO "LED register sucessful!\n");: q3 Z, m* P* n$ f+ P: W, D
* c4 {, p* i' Y
return ret; N. m' I: e* J9 T
}' [3 j1 A4 ]- U3 S5 Y# j
3 ^/ h7 q; U! M( l5 k* I6 |static void __exit led_platform_exit(void)
7 Q) M5 [' h+ {7 v3 o7 D# v{3 w4 C9 e8 W9 K, u+ w5 n, V
platform_device_unregister(&da850_evm_tl_leds_device);
9 u, B+ @9 G8 s1 l4 {; s, S- ^* F$ }8 g4 ?! W8 d# e: j/ Z' |. F/ z2 l# B
printk(KERN_INFO "LED unregister!\n");
& R. f: q1 K3 ` Z" o3 g/ P4 t}% z3 Q* n3 q# T+ a) W! C+ Z) }
8 I3 f9 r9 H) q
module_init(led_platform_init);
& C8 ]# u. n# P$ Rmodule_exit(led_platform_exit);& N+ I7 i/ H, v5 G
, }5 J3 }/ E) {( a) e# ~MODULE_DESCRIPTION("Led platform driver");7 t+ n3 f/ \/ O3 Z$ [8 d' O
MODULE_AUTHOR("Tronlong");
4 C8 ?6 ^+ ~/ qMODULE_LICENSE("GPL");
: }9 Y" O! u8 h$ B( D" [
@: N; I. K; { |
|