|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
1 t3 B0 h4 i# J7 t& U#include <linux/init.h># i* }- X0 C/ S( |5 b' G+ c
#include <linux/module.h>) U2 T# m" s" P5 u4 t! X
#include <linux/kernel.h>
+ u$ u2 ~2 E, i |7 o: z1 z#include <linux/types.h>
3 U% ^8 |) a. z; t#include <linux/gpio.h>/ r( t3 ~; v; H* q# X
#include <linux/leds.h>" B7 Y) }" l0 z; B% a
#include <linux/platform_device.h>/ k: g0 o% Y/ S1 A1 R! O( [- _
5 ~& z0 G9 P/ U" ]1 L9 [2 O#include <asm/mach-types.h>
6 h5 p% S1 Q' H0 Y# \/ Z; x+ ~#include <asm/mach/arch.h>
H% s8 g3 g+ u/ N4 @) x4 j9 F#include <mach/da8xx.h>
1 c9 y2 X6 X* B+ E' G#include <mach/mux.h># |( m) @' J _8 M1 T" p ~
/ D' u! {; M; N0 c& y#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
8 f( Q4 w/ r- O: n1 M3 q) I+ t' U#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)+ l# h& E2 T4 F
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
: ]* u+ f, C$ {$ W- h#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)& f" |- I, j$ g$ K5 {9 s
7 t4 o6 M4 `" B3 D
/* assign the tl som board LED-GPIOs*// @2 I) N' Q6 S! O8 T6 }/ Z
static const short da850_evm_tl_user_led_pins[] = {
" l% P/ i4 g+ D8 T# \ /* These pins are definition at <mach/mux.h> file */
2 D: i" l6 k- }0 T DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,* Y: B5 D: u; Z) u5 k9 B4 j' i
-1
3 r- f+ L7 w8 {7 W C: M};, ]0 ]! x) ~0 d6 u ^; ]9 J3 Q
& b2 E+ L1 s/ M P* q2 L
static struct gpio_led da850_evm_tl_leds[] = {' v. Q' C3 N( B% h
{
8 \3 Z& U, v- j! r .active_low = 0,
* g8 ]- X) Y0 T' |. e U' b' ] .gpio = DA850_USER_LED0,7 e) V% O4 J; Y3 k6 {% @
.name = "user_led0",: v. a1 { A' L7 L$ P" u" B) ?
.default_trigger = "default-on",( }# F7 a- w, L$ ~' ]' Y# t. A: Y% j
},4 _: s& V; o# [
{5 E3 N9 C# i6 g3 C
.active_low = 0,
* g5 B8 n% j: f0 t" m9 t6 F L$ H4 | .gpio = DA850_USER_LED1,
% S b- R4 v0 w) Y- c; n$ `8 R+ t/ J .name = "user_led1",8 p7 A! w3 P9 G! n2 A% i& D; ^
.default_trigger = "default-on",
* b" i+ L' S8 z& z& a6 F. G },
% j5 f7 ~9 Z9 }) R& z {
( j' L: \5 S6 J9 f .active_low = 0,
% v% k1 Y) c+ M/ A' e+ w" U .gpio = DA850_USER_LED2,
" `. F" v, c0 {1 s+ u2 e .name = "user_led2",
% J s1 r! ~9 V2 b/ @8 A .default_trigger = "default-on",/ J4 V1 n: B0 K2 b
},/ I" N5 k9 C& @" k' q
{
, w1 ~; V: C' x .active_low = 0,
& ~" n; C0 S% M4 d6 n" a .gpio = DA850_USER_LED3,+ k* i) H, R5 ?% W% K. I
.name = "user_led3",
; [5 |' ?$ Q2 Q9 s- { .default_trigger = "default-on",; P5 T. `# k5 m6 e
},
5 \5 \$ z) g* Z( `$ T9 N! y};
0 z! a c( p6 K. [9 j4 G) I% S; r7 n4 q& e8 o% y6 f
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {" ~/ p) _8 v B5 P. [
.leds = da850_evm_tl_leds,
3 y. v4 `% u; M" @0 y, l. W2 P4 E .num_leds = ARRAY_SIZE(da850_evm_tl_leds),. [7 x& P. ?' m
};( V& p" u; Y$ C( Z2 {+ h# E: L
0 W( E2 d$ `7 E' @" rstatic void led_dev_release(struct device *dev)
. h. b5 _% K/ K; _' u1 j2 W{
+ A$ }- i1 s" h) Q* a; Q8 h};! ^) T) j5 |6 N2 e ?: O& S
7 B9 H2 r( q; p4 g! r1 ]1 |: z4 Fstatic struct platform_device da850_evm_tl_leds_device = {
5 G" n6 {( {$ |4 k! S8 D .name = "leds-gpio",; ?' {* Q; b; U7 y7 ^. Q
.id = 1,4 F) p; H( |0 P8 V6 y
.dev = {
! {3 i6 Q, N' S) U3 ~7 Q- A .platform_data = &da850_evm_tl_leds_pdata,( d6 {" h+ T+ |1 |' ^
.release = led_dev_release,
3 Y1 \( c& R8 ~3 a* e }
- r4 P0 l* C7 i( Q# k5 p/ [+ Z( O3 }) F};
. a3 m" [7 A, G- A! V
1 |' h# ~& u8 m5 o, ^static int __init led_platform_init(void)% d* m7 t9 ^1 r) Y1 j8 v/ n
{4 I: L, l* z. O+ F5 a* N% {
int ret;: e% H9 q) J! f* c' C: j
#if 0' S3 m; p# C- n) V9 L& N* G
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);& x& n) s" q2 y. ~, R
if (ret)' X2 W' k4 v" h9 y
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
; @; p5 ?, c* n- e0 g0 k "%d\n", ret);+ S3 ^" _) F* m
#endif
8 b% ]! M1 Q: r. n( m ret = platform_device_register(&da850_evm_tl_leds_device);* V8 D( g) }6 D4 ?0 d
if (ret)
7 a) J2 p6 |0 l4 A j4 q; j pr_warning("Could not register som GPIO expander LEDS");
! `3 j$ M* C" `5 D7 l else& [. I) u3 ?, K
printk(KERN_INFO "LED register sucessful!\n");
/ U3 O4 u7 }0 m y+ j- @) B
0 B# X0 t1 p T3 Q! @1 X return ret;0 x3 I' E" N8 @; z4 y
}
4 y7 j' E% d5 p# n: W3 ?& Z8 y* U
5 p* o* l2 L* c( `4 }static void __exit led_platform_exit(void)# F5 w- J4 Q5 U1 F8 r% d0 O
{3 S3 U/ N5 L; S
platform_device_unregister(&da850_evm_tl_leds_device);
* j+ E0 K$ R. v2 X$ E9 b" ?2 w+ l! B3 _4 M& o% {/ x% L
printk(KERN_INFO "LED unregister!\n");
1 E! J/ W$ R/ O( B2 m}
, b0 S2 l8 s1 F& F) f) g; r
0 Q6 y* a4 I$ d% f# Bmodule_init(led_platform_init); @. S! x& D) ]5 Q4 C# l7 Q
module_exit(led_platform_exit);
}' }- T, P2 d
8 [5 u5 C5 x' @3 L" SMODULE_DESCRIPTION("Led platform driver");+ `$ j! ~6 o; H, D% h
MODULE_AUTHOR("Tronlong");
- Q$ C. a1 E# n, U) H6 \' TMODULE_LICENSE("GPL");% O8 w; @5 ]! S, f
2 i( u. Y6 B" u( T3 p! Q4 a# s& X |
|