|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
1 o$ U3 M0 [. r9 [6 ~#include <linux/init.h>
b" _3 I# E+ z+ ^5 v3 a. K; z p/ v#include <linux/module.h>0 P9 \) _1 ~8 Q% M+ a
#include <linux/kernel.h>* w! g6 D0 K2 F* Y# K
#include <linux/types.h>
+ E5 t+ A" S! E, V# M' ^3 A#include <linux/gpio.h>( ~( {0 A& q& i1 B# [+ h) I+ H
#include <linux/leds.h>
I' d! \2 I6 q#include <linux/platform_device.h>
/ a* s/ {3 V! V* f5 q. l4 Q3 O, I' ~0 f) Y
#include <asm/mach-types.h> B- {, D; e1 D3 M( s- q4 E
#include <asm/mach/arch.h>+ ^! g. ~0 j. A: }; s) _# k. o
#include <mach/da8xx.h>+ H7 C8 L7 l5 m A9 u" K
#include <mach/mux.h>) s, z" ]! S: [" E
9 f$ S3 M. w; Q7 T9 B
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)& U5 D# X- K' T! K2 B5 y
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)2 R: g4 c7 y7 Z: S4 n+ {+ v
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)% d& {2 L0 l4 y
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)/ B; t' D9 d _5 q3 k( A4 r8 F7 O0 s9 a
9 R- o6 X0 H& s' {; P/* assign the tl som board LED-GPIOs*/
1 D" O: r G$ ]" d! [static const short da850_evm_tl_user_led_pins[] = {
: H/ ~9 M- l/ M' O3 D /* These pins are definition at <mach/mux.h> file */
# x& s+ j, f, _1 O' C DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
* z- P: h$ b+ o9 |2 j/ ]* t -1
3 I+ Q) ~3 {1 C4 l/ \& J3 @! X};
& R- z' `" j6 q1 k# X! e* U$ ~1 y$ m6 a% F! Y( r
static struct gpio_led da850_evm_tl_leds[] = {+ b# X. a% i. p4 _7 m4 e, L2 |
{+ `1 V9 U( G2 P0 n5 Q8 p: G! [8 g: ~- V& _
.active_low = 0,
! Q) x. I* t' E .gpio = DA850_USER_LED0,. n$ T' K9 k# D o ~- n5 c! q
.name = "user_led0",
# w. e; M+ O$ @0 R: z& W .default_trigger = "default-on",/ k# h+ d# P. G
},) Q0 Y( y: T) f" s& H2 M) g S- z
{
# }; `; ]4 v+ `0 s2 k J& i. G .active_low = 0,+ S9 ~4 Z) c: o' I, B
.gpio = DA850_USER_LED1,4 M9 S2 ?. v$ Q! T
.name = "user_led1",3 Q1 i" a& M1 v/ o
.default_trigger = "default-on",( k4 I6 @3 D. |2 n( e; Z, a: p/ b
},
3 f! z6 k( X# w$ P4 l {9 j( u3 ^ L: }2 {& {" S! e- c
.active_low = 0, ?( z; j) a1 o" D1 r7 ^
.gpio = DA850_USER_LED2,
2 O8 ~3 \6 u- C4 l .name = "user_led2",
8 N% C5 D+ l" N; d V .default_trigger = "default-on",
' [' p5 U2 ~( _ V },3 U) O% I+ o5 s( e9 s; d1 c. R
{7 |9 ]$ A! i* ]9 ~
.active_low = 0,: h) t) v+ z- b7 a
.gpio = DA850_USER_LED3,
7 V0 H, b% H1 L' S8 j .name = "user_led3",4 ]( c& O% P* w z
.default_trigger = "default-on",: G0 N( s# }0 R" x
},
$ ~5 S! k; v# I* y6 N};# z( T) C$ n) W5 A6 R9 {
5 |" E- N7 } E4 a
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
! `; V+ C- i$ ^" q .leds = da850_evm_tl_leds,
1 k. Y+ n7 D% K2 ]* E. n) M: _- Z% j .num_leds = ARRAY_SIZE(da850_evm_tl_leds),3 n- i9 P9 M; I- b+ D
};
8 S( d6 j/ a2 U. W- D; h$ t% \! i" R0 N3 U
static void led_dev_release(struct device *dev)
2 i1 P' i B7 @{% ^; ~2 |, |0 ?* ?9 B. l, Y
};: P1 g( r; k( j d) x( l
8 {8 X4 v, @. r* hstatic struct platform_device da850_evm_tl_leds_device = {
2 u+ I0 ~4 ^* z& Z1 }; q .name = "leds-gpio",
, D( Z$ D& X" i! O% a; `# X .id = 1,
; `- t S1 V2 C [ .dev = {
3 o7 Q, K8 V$ L% K0 N .platform_data = &da850_evm_tl_leds_pdata," I ?% U8 ?* M$ k, A, W; T. b
.release = led_dev_release,
1 C( m5 ~+ \+ P& a7 z( P9 a) i }1 V7 n, {5 x @# U* H& N
};
( t2 G# n* n5 h* J
; g: A; O P- t; U! _' |static int __init led_platform_init(void)" l2 }* Y! k% f+ W
{8 f( E4 E/ R4 d+ o8 A% {! `5 g
int ret;: { [8 s O; W* h7 H) s+ z
#if 0$ _( V3 y a2 Y' |( A5 ?6 p6 y8 P
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);; s8 w+ C. G! `( E( ~$ T
if (ret)
2 l) G* V8 [/ \ pr_warning("da850_evm_tl_leds_init : User LED mux failed :"8 O6 h% L; P2 R6 |. i- d! T2 j
"%d\n", ret);7 A+ B# h7 Q9 h, W
#endif
+ l. }- Z( G7 A4 d7 }+ u9 T ret = platform_device_register(&da850_evm_tl_leds_device);
7 d9 F) [3 V& D7 s- T4 i; W if (ret)# U' L& R6 P2 E! b+ z9 B
pr_warning("Could not register som GPIO expander LEDS");$ u1 M0 p* s4 a/ H3 q* z9 }
else
% P6 u8 m+ d7 H3 E4 j) F! i printk(KERN_INFO "LED register sucessful!\n");
6 Y0 I; j: H( ^. ]) @+ E
0 e! q: _7 L- M. ?$ J7 `) }% W return ret;3 ~7 G" K& Q+ A4 G* l
}
+ `" X8 R* d( n4 r) t: u- L C0 N2 {8 l2 h$ R/ `% _! w
static void __exit led_platform_exit(void)2 O( i; E) x$ q
{! p5 W; d. y. S: F
platform_device_unregister(&da850_evm_tl_leds_device);$ L* h- l! z( v. V! e( E& `8 G
3 D- z* `( M c+ O, M% l
printk(KERN_INFO "LED unregister!\n"); I- q8 F$ J/ H+ Q1 n+ A2 @
}
) M! {) V- C8 {8 l- j0 V
5 B5 G/ D, i- Omodule_init(led_platform_init);
1 f3 P1 \8 @- e# r8 }4 Lmodule_exit(led_platform_exit);
; ~8 G5 D R: z, |. T
& ^4 O1 l v, O9 N* tMODULE_DESCRIPTION("Led platform driver");% m Z( {9 O0 {, A
MODULE_AUTHOR("Tronlong");* O# L/ I) q3 U2 G+ V3 \
MODULE_LICENSE("GPL");2 D& A3 h9 q7 e" M2 d
6 F4 W: `$ V+ d9 O! k9 K
|
|