|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
9 o5 c- R1 t, J/ N6 [#include <linux/init.h>
# t* a) c% r5 L#include <linux/module.h>
. ?0 P+ x0 T0 m#include <linux/kernel.h>) O7 ?& ^7 y1 \* T4 t9 Q
#include <linux/types.h>
& W: C. F/ V8 B8 r: x#include <linux/gpio.h>
7 W2 ?7 s. w; E, f' Z: k#include <linux/leds.h>/ `5 I* h! S& w& S6 h1 H$ K
#include <linux/platform_device.h>8 V5 ?; P( w' L, f+ R/ v
2 f, N6 i, B. u2 W4 I#include <asm/mach-types.h>
/ J1 I/ a) s. d# P" r0 z#include <asm/mach/arch.h>2 W* M6 v! h, z
#include <mach/da8xx.h>
: r3 U5 @" t6 b, x# n1 B#include <mach/mux.h>/ w+ F; O+ j) p/ O8 e
+ g" F( E# o$ g7 Q# C. L& S#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)7 L6 L; w# c3 h5 J
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
8 h" u* B2 z `# U$ F+ F#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
% b( w4 U- s# j o- S2 n#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)/ B& H# k1 N V3 N; F: m
- K" c+ n& W$ l" b6 a: o/* assign the tl som board LED-GPIOs*/% A$ l$ f9 T& f8 I# D% F- h
static const short da850_evm_tl_user_led_pins[] = {+ A9 L* B& n; D+ B2 }7 H
/* These pins are definition at <mach/mux.h> file */
2 k9 X# _7 V0 M( B5 J- A DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,$ L3 f0 Z7 F$ P2 m/ b7 h
-1
, Q, A2 P! ]8 q- N};1 [$ w" _8 _' ]* |
5 D) n5 V [4 M7 f: v% j
static struct gpio_led da850_evm_tl_leds[] = {
+ o s+ i2 \, @+ r/ x {
: @/ X1 p( L) ?' `1 M! ?5 o .active_low = 0,. b. B% z2 M% E& P, b" l9 K
.gpio = DA850_USER_LED0,
& `1 [3 Y$ Z- g5 |0 @) s5 M .name = "user_led0", w5 e* ^" \" C9 U. }& C* O4 D
.default_trigger = "default-on",! _4 n/ f9 z+ ~/ U0 y/ @7 j- Q
},
/ \# c, k% F9 @) K0 Z' ?$ k {- l' b* h+ ]4 L. h4 _. n5 W) Q
.active_low = 0,* s E5 n ?* x" C9 Z
.gpio = DA850_USER_LED1, v3 q& S7 Q4 X6 j3 R5 ]
.name = "user_led1"," G5 i! S3 [" z [8 I
.default_trigger = "default-on",$ w/ ~$ J) a4 |
},- H, C7 k0 d* J7 P2 Y
{
2 T+ w7 V5 W/ s3 v! ]7 c6 e .active_low = 0, Q+ t, q3 N1 l! ^1 E7 W, Y( f
.gpio = DA850_USER_LED2,
' C. V* s8 a' Y0 ^8 C .name = "user_led2",
( _6 h7 c4 h9 T5 A& ]7 d/ H* t0 i) h .default_trigger = "default-on",
- z4 V4 V' q' ?8 x4 V: N! N },2 [: |6 m4 Y/ `
{& h. |$ l7 Y4 p% J4 r$ E; D; x7 ?
.active_low = 0,
1 n/ Z( H/ r# R P2 Y# D .gpio = DA850_USER_LED3, I( B0 p d" r7 @' r
.name = "user_led3",; m" u: s/ n- j+ l W! q
.default_trigger = "default-on",# X, A: {1 K* e' m3 ^7 y
},
5 c0 _2 ^( S3 k3 [, H$ \};0 G: e+ s) O3 S! u- r- [/ v+ v! |. y4 n
) N* R' h4 _3 E2 m" d% Y
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {( `6 p' ]. X7 z0 G9 T; n
.leds = da850_evm_tl_leds,
! _; r" r" n( o* j .num_leds = ARRAY_SIZE(da850_evm_tl_leds),
# i5 x0 f* V0 T! N) N};
8 r S- E1 s: [0 }
7 X/ [# j4 e# }/ u2 ~, Ustatic void led_dev_release(struct device *dev)
/ \- ~: ]4 \3 z$ F" @& s; l{
! z3 L. I; ?5 A/ o: ]};
y! _* U0 M* W4 q7 q6 K5 f, v
& W' R' m# C( istatic struct platform_device da850_evm_tl_leds_device = {7 _. X7 c' w. K% ^) a( e; b9 h
.name = "leds-gpio",+ b' n& u0 Z" ]: l4 J! }& k/ H
.id = 1,
% S9 s8 Z- L; T3 U* { .dev = {
% W- P$ b9 u$ s( r1 F* R2 o .platform_data = &da850_evm_tl_leds_pdata,; A( b7 @9 ?# T4 w% ]. Y' \
.release = led_dev_release,, D9 F# o: }" A& G! V
}
+ s: `+ [( L+ W B0 V/ c};
& j9 ]: Q& I. B+ o* a2 s) {, s' Y/ Y" x4 V$ [6 s% b; `
static int __init led_platform_init(void)
$ M0 h. {: t+ N. ^: r! f7 B{: h, e2 B- u" G3 c& t
int ret;
1 c( Y) y) V) E, l#if 0
: I6 X9 n3 {5 z! l ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
, D7 X! w: ^( t if (ret)
5 e' m9 `' R4 ^ U8 S3 b pr_warning("da850_evm_tl_leds_init : User LED mux failed :"% h2 ` ~% P1 i' t
"%d\n", ret);
7 J$ ~+ g9 F9 n" T2 J) U/ D5 \: {2 R#endif& \, g* L5 Y7 h N: G/ _3 s+ S
ret = platform_device_register(&da850_evm_tl_leds_device);, ?# I9 B! i2 b7 U
if (ret)4 N6 G* E2 h; J
pr_warning("Could not register som GPIO expander LEDS");" K9 k1 c5 L+ }' @0 }
else
% Q7 r5 F6 n3 Y2 V3 A7 K- v& Z printk(KERN_INFO "LED register sucessful!\n");* O! V0 z# }$ h5 V1 e, k) o1 q
( K% B1 r# h: v; [" z
return ret;
$ S J6 r% w" x) d# T. j% p @" I}
3 g1 v2 [ a2 S" F8 Y7 |! t z4 T) i
static void __exit led_platform_exit(void)6 P- S+ g3 r, e) E/ _- t
{
% l2 r- j! i$ j8 p& K8 X, j0 a platform_device_unregister(&da850_evm_tl_leds_device);
! A2 k6 \2 @3 r! H3 e
" I( R; c$ x, t7 _) H printk(KERN_INFO "LED unregister!\n");
5 O" N' l* T5 a8 }4 }& x! B}
, z& o3 Q3 E( h- |+ n7 i0 z5 b3 O1 O7 A* F0 j, {$ o
module_init(led_platform_init);3 h$ A0 y: C/ y0 @5 M9 @, ]1 c2 T
module_exit(led_platform_exit);+ S! ?! m0 s! `" W2 F
% t# g. j% j( k1 }1 AMODULE_DESCRIPTION("Led platform driver");
# i, n8 Y3 r8 C) XMODULE_AUTHOR("Tronlong");
9 b4 Z; r: Q6 A% z% y- G& yMODULE_LICENSE("GPL");
# u/ @8 G0 T! I/ T+ I& \* y' e4 X6 X* V6 z4 f W; G
|
|