|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
2 j: M! g" z% n#include <linux/init.h>
7 _. V3 l2 P, t. l, _7 _4 U#include <linux/module.h>
+ I4 l7 M+ Q1 ]#include <linux/kernel.h>6 i9 Z8 ?: O# H# N4 y6 Z& w$ j* d
#include <linux/types.h>% E9 }3 \' z5 p$ Q, X/ I# m) m: {
#include <linux/gpio.h>8 z2 o- z9 L% V* {2 o7 C
#include <linux/leds.h>. Q; j0 @ a0 z- K0 I, F* J
#include <linux/platform_device.h>/ t: e( Z5 H2 D, u. Q. X
+ E4 b/ G: ^1 E& p4 y( T. n#include <asm/mach-types.h>5 _9 J! X' J9 y7 n( g
#include <asm/mach/arch.h>
8 c. T; y7 a- U+ |7 F4 F* Y1 S# d#include <mach/da8xx.h>
, _7 j, Z: e, F#include <mach/mux.h>" X5 r j! i% t4 ~
) ` O$ u5 y' p/ e) @
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
3 W% |: C% T: O1 V7 f9 S) B4 ]#define DA850_USER_LED1 GPIO_TO_PIN(0, 5), @) O8 i- ^0 T8 Q! A. E) J
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
. a' ^" v8 U3 B0 ?#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
" d5 p# G$ \1 K i+ N+ T7 c, ]! i* z: I
/* assign the tl som board LED-GPIOs*/
( w" U6 f% Q; }; T7 D/ {9 \( _static const short da850_evm_tl_user_led_pins[] = {/ H# W. Q2 b0 ~& A4 f) T: C Q
/* These pins are definition at <mach/mux.h> file */ k- R) N& C% r4 e8 n- ~7 ?
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
0 [% X% V. |. z -15 p; b& k) O, _" C1 Y8 R& |
};/ s R9 D( p' D" s+ g0 [8 {- b
" j3 q2 s5 e5 ~' Y, T N: {; rstatic struct gpio_led da850_evm_tl_leds[] = {
! o+ ~( X4 l% Z {
% ]* h0 T1 t# b$ T( d .active_low = 0,
{' U# G3 V0 h6 X .gpio = DA850_USER_LED0,8 Y2 l1 k: `9 H3 l) u; G/ @$ q* U
.name = "user_led0",
1 d% A- v5 z( G+ R .default_trigger = "default-on",0 P4 I7 T" R: H$ `! x& ]9 K
},
6 n9 t: T8 N0 w z% E/ s {7 u! f* Q* j) R% W" {# E
.active_low = 0,0 e; ?! K _3 c7 U
.gpio = DA850_USER_LED1,
7 o+ m1 z! P, O, e* H4 B' v, ^ .name = "user_led1",
/ E7 `: W& v) j, v# D .default_trigger = "default-on",2 @0 V: X9 F7 W. \) Y* I7 N
},
; L: @* h* N8 o% C/ W! G9 c$ d {
8 w; k7 Z) F. m7 R4 N, Q8 F .active_low = 0,# S2 @& q( y, M
.gpio = DA850_USER_LED2,7 c! C7 y0 T7 z7 r1 N& B
.name = "user_led2",
6 d7 r- @ E( j' ]8 Y .default_trigger = "default-on",
9 Q6 U" @) q' ] },) w' i* y- S' L7 z
{
+ b( |- C5 e1 Q j5 G) t% M' ` .active_low = 0,( }3 p0 F, g' e! Y7 }5 [* a1 q
.gpio = DA850_USER_LED3,0 B+ j4 H1 R( Z. T; J# q
.name = "user_led3",$ t0 u/ G: c$ r2 T
.default_trigger = "default-on",5 I2 M5 C- a% l9 C
},! N; m! m* ?% J) t
};
9 o* e1 s2 \/ V' H! F
: p! b' a, _' lstatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
8 U1 b' j* i) {: _" } .leds = da850_evm_tl_leds,0 P3 Z* }: h8 q4 D
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),) E$ Z, a6 [/ S; Q* a
}; G9 x/ ^ Q Y) a3 n; r( o# d0 j
- R, `- g/ x1 O2 z. H( P
static void led_dev_release(struct device *dev)/ G3 ^9 O! ?' M, T* g& z& a, F" F
{
( i, r# |' T6 G) O* g' U};! ~' g+ s2 i) \* H P. `4 N
$ }* H8 ? |, J4 n
static struct platform_device da850_evm_tl_leds_device = {
3 }$ M; b" }) D0 A( t .name = "leds-gpio",
. w0 n! `. j0 t& e( t: C .id = 1,
! \) q. o8 A, B! e0 }: e, a+ c; o: | .dev = {
6 t" G! l8 J5 X .platform_data = &da850_evm_tl_leds_pdata,
! a) j! a6 k: o% m- } .release = led_dev_release,
) A W3 ?8 Z8 w, x/ ` }
0 Z, R) Z# N3 L2 V0 O};: d* T' N6 s/ ]) Y; h$ u. N" N
- Y1 u: }/ g4 E. Qstatic int __init led_platform_init(void)
6 p/ r3 p2 s- W3 R{/ j& m1 q* j' r5 o% D
int ret;5 K* o7 _7 a0 o4 D8 V) _
#if 0, e- a: A2 W7 _2 J
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
9 R+ L9 g# B0 P9 H+ F if (ret)
u$ j- E( }8 X0 {, m0 ` pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
. U/ L! r5 T; P; Q; n2 [ "%d\n", ret);
& A6 I& p, o v+ C: K5 o#endif9 n- }) L/ x9 M+ B0 g; b
ret = platform_device_register(&da850_evm_tl_leds_device);/ I1 t1 F3 @/ V9 O5 y0 c1 F9 L+ U
if (ret)
1 Q: _# k# a/ X ~/ J/ o pr_warning("Could not register som GPIO expander LEDS");, e# E& g! \- M7 C7 M" w+ s+ ]: P
else
& H, ` n) }7 l printk(KERN_INFO "LED register sucessful!\n");. ^: Q$ R- O* s' p3 e) V9 K
( M1 g3 R' ^" q: K9 a7 A' X- H1 _ return ret;
9 U& G( E6 o! f/ z/ P' O2 \}
' S7 G" T( P2 q4 i# D* c B6 e, r! `# i
static void __exit led_platform_exit(void)% S9 G' X" U; F" q2 H% ~/ {
{8 f5 P5 }4 n/ @6 I
platform_device_unregister(&da850_evm_tl_leds_device);
4 ~. Q* w i6 E) U, \% t$ G9 t
: i+ o0 j* H; c6 c) y printk(KERN_INFO "LED unregister!\n");& g- f [: P+ Q
}5 O5 G8 d B2 s: n" z
6 K+ D5 a7 w; v) Q0 W; P6 ymodule_init(led_platform_init);
* G0 V. V$ p3 x- u5 a' a0 i0 Lmodule_exit(led_platform_exit);' B4 p, X5 m, g
4 R" K9 Z$ w# D Y9 E7 E+ H" ?
MODULE_DESCRIPTION("Led platform driver");. S$ q; N2 T% [& t
MODULE_AUTHOR("Tronlong");* ^: ?* d0 } E+ N
MODULE_LICENSE("GPL");
4 }! A- x5 l4 p7 O0 o! ]2 l
5 _3 G0 {+ j& }3 X |
|