|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
" G m( D/ ~3 i* n3 u) B z#include <linux/init.h> R9 s6 v1 e& p+ k1 ?! d$ \
#include <linux/module.h>
& \% G2 D! ^4 K" |% D#include <linux/kernel.h>/ N: M5 E; t5 o( h
#include <linux/types.h>
, b1 v/ y% E9 x$ \1 @7 V#include <linux/gpio.h>
) \4 @5 F7 \" j#include <linux/leds.h>) l4 R+ b% B, ~4 l% m. O& g
#include <linux/platform_device.h>
2 ?( W8 K9 S- y) |$ T/ p: C- V' `) p
#include <asm/mach-types.h>. H0 t5 |5 L: U0 C
#include <asm/mach/arch.h>
V9 y" {4 e3 L9 N; F* c7 o#include <mach/da8xx.h>
s. H X4 j" `- z* C$ K#include <mach/mux.h>% d" S2 a; o4 b$ I
* b' N; ~4 Y A
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
+ |2 e: O) w/ ~7 M5 |8 M#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
1 K: D6 O/ a% b8 ^#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)" ]6 Y, R/ c* J
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
; Q8 M) W% X5 s4 m- N
8 {, g# |1 S. p3 u! ~/* assign the tl som board LED-GPIOs*/
" ?: `' o2 R' o3 ]& K* sstatic const short da850_evm_tl_user_led_pins[] = {
" Y, q" U7 P7 K# F0 l- q /* These pins are definition at <mach/mux.h> file */+ _+ m: a4 }3 i Y# Z9 p
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,& W% e& `. E9 k( G! r9 O
-1
. G: ?5 J/ f& R9 G8 H4 m};
5 m* q) O% U$ x$ F; W
3 o( z9 W- N+ x! X! ostatic struct gpio_led da850_evm_tl_leds[] = {3 J+ |. a1 ?! `& d: ]4 v& r
{
9 q: O% {: P* X .active_low = 0,
/ n8 Q9 ]7 v9 d4 D ^ .gpio = DA850_USER_LED0,
* Z! n" ^3 H6 F. S% [ .name = "user_led0",, G3 _3 ~( u6 X' R
.default_trigger = "default-on",6 ~; T. `* J9 v5 J" z
},. B0 d; [( @ g2 s
{/ v V( S0 i3 H! m/ f/ F- A" L$ p
.active_low = 0,
) T/ X/ T3 a$ w0 Y& T; P .gpio = DA850_USER_LED1,
$ q1 {( _! B( e7 K5 w2 b: y .name = "user_led1",
0 ?7 u8 b; ^2 J: @9 z .default_trigger = "default-on",9 Q3 Z3 a" a( U# j9 [; R6 V( S
},
% A8 K! z0 E8 k# R) j1 B. q- N$ H& { {
% f) c4 E# r$ {0 @3 { U .active_low = 0,
4 M2 z" \3 W' D& m .gpio = DA850_USER_LED2,
- I. f# N" q& c b2 k0 }+ y9 W; i .name = "user_led2",0 h$ h* R/ @( F8 C! h% s
.default_trigger = "default-on",% y3 U5 z; A6 i5 d+ B
},
6 B0 r2 t6 }% { Z3 F. D {+ t. U1 j& d. p. m2 L1 J
.active_low = 0,
5 D# m8 d, |8 F .gpio = DA850_USER_LED3,- c6 f+ U+ }% Q' A; E- l# B2 I
.name = "user_led3",
W/ x6 M6 [" J: i! @ Y .default_trigger = "default-on",
% ^' y+ e8 ~+ C: E8 } V9 P7 E },& F. v; i, v$ @, D8 D! w/ C
};4 M9 E6 g8 v: K
0 W& X; X. H" \8 c6 E+ G6 Wstatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {& G( ]" [- t4 V' s% f# o
.leds = da850_evm_tl_leds,
& V* d9 V! l7 ~- i$ { .num_leds = ARRAY_SIZE(da850_evm_tl_leds),
/ z- G# Y: p- ^; }$ V% L};
6 Z: {+ x! ], C! `: M" G' C1 b* J+ M
static void led_dev_release(struct device *dev)
; i9 U6 z( |% M% b; p: D{
/ k, \/ ^9 Y V& X; `1 |0 B; M};" L2 d9 p/ o6 S: {; M) t* r/ @
/ M7 u4 ~0 {) E' h" istatic struct platform_device da850_evm_tl_leds_device = {% J) F" E+ H, N
.name = "leds-gpio",# R! w% R* L, J4 P4 R
.id = 1,
# ], X7 W7 E0 Q7 }5 q/ Z- L .dev = {
: h2 U4 d' T8 M# [8 Z .platform_data = &da850_evm_tl_leds_pdata,
+ c1 _2 p) H) H: m+ u5 t( b .release = led_dev_release,
: x# e4 T. U& ]9 M2 F' P7 S* r }
9 n0 {1 y: t, \4 J};
1 w2 e& j M+ y& O, t
' A' G h& }# istatic int __init led_platform_init(void)4 R2 U& `( c0 ~
{
, U1 T* V1 Y2 @9 | int ret;8 t0 H1 O# s, q
#if 0
5 Z9 a$ I. Z6 ~9 H3 Y# p @# f7 U ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);" r! S7 p2 s5 l) ^6 R. `
if (ret)
?* x% I0 W7 s; K. n) s( x pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
H2 ~& S- v" K) I' { "%d\n", ret);
2 ~ b) B% |' s I# T6 {#endif
- @0 L$ T8 r. A' f ret = platform_device_register(&da850_evm_tl_leds_device);8 _4 r T: Q/ R0 S0 v ~
if (ret)8 I4 K Y, s$ n! W B% V
pr_warning("Could not register som GPIO expander LEDS");( [9 y5 r" D0 r1 r6 ?
else
, h% N/ s t4 @! } n2 M. N printk(KERN_INFO "LED register sucessful!\n");/ Y* q3 ^- o! h4 Q( L7 x
$ c5 V7 G7 A( Q6 r. j5 {( y) U0 ?
return ret;
; [7 z3 D6 Q. ~: B" j- H1 A}" O% ^ P( U& ]) m3 i
. m4 a% k+ E, l a( s7 T% T" u Lstatic void __exit led_platform_exit(void)
, I* Z, d1 z8 _( r{
8 m4 U7 r2 u1 D, R0 f platform_device_unregister(&da850_evm_tl_leds_device);
/ x+ I, C* ?6 Q, r8 O
0 {: X) G" r+ }2 R printk(KERN_INFO "LED unregister!\n");
! l' k5 q0 d9 }8 V2 F: S}! X' W( F% z& V ^* D: F
& s5 L/ P1 K$ N" e8 }6 O( h. o
module_init(led_platform_init);
* p/ o! B& _; |$ {, xmodule_exit(led_platform_exit);+ x9 e8 f& _" C& f5 G
+ v7 i- ?0 E6 X, d1 VMODULE_DESCRIPTION("Led platform driver");) r& k q( |8 Q4 D
MODULE_AUTHOR("Tronlong");7 H5 L% V/ G% m! j: i3 E7 G
MODULE_LICENSE("GPL");
4 r: |& x$ }1 ^; X- c! T+ R6 I/ [/ f7 Y# x. x+ a+ R; u
|
|