|
|
求大神给下面的程序做注解,请稍详细些,谢谢。. N7 T4 i0 W R6 u
#include <linux/init.h>
8 [+ W5 }- Y" s+ M+ h0 g; i#include <linux/module.h>3 \) l8 ~1 s! A! p
#include <linux/kernel.h> ~2 j3 e6 l) a/ i/ d
#include <linux/types.h>% S- h8 z) T( u- E) r
#include <linux/gpio.h>, Z; i& }) \. ^8 a1 r: T5 \; p. I, R
#include <linux/leds.h>9 U1 s; h* X9 _9 B
#include <linux/platform_device.h>. C% q/ O1 k3 l M6 Z% N
/ t, q5 u# q5 K: T2 O: i6 P0 e#include <asm/mach-types.h>+ Y3 f" X1 b) y9 A
#include <asm/mach/arch.h>( _1 ]; ]/ _" a2 K" f7 b: H
#include <mach/da8xx.h>
0 |2 x4 l2 |$ z* E#include <mach/mux.h>
7 E' t) C; N( V2 w3 f
4 y/ |% M% u% [8 }8 L' _#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
8 g% n0 N1 Z6 P3 w) h5 w6 R, a#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)1 \% K) o: M8 [: m0 E5 ^7 b9 O
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)" V5 l- R. H. \
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
& z A2 s) P3 y8 s, _9 j# T7 `4 r. f* x3 K
/* assign the tl som board LED-GPIOs*/6 H0 @1 _5 g3 {$ ]2 j5 r: M
static const short da850_evm_tl_user_led_pins[] = {
+ V+ S9 J4 \1 ^ /* These pins are definition at <mach/mux.h> file */ [5 w. @! s3 v J) p; G9 @
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5," [- s: J/ p. k# k U
-1
: _* ]$ \$ E5 @3 l: X; C};* k( i3 o' M* R) O
" D' H! m& J. R: h
static struct gpio_led da850_evm_tl_leds[] = {
. G7 K# g9 L3 s6 {: z7 n; I {
3 Q( @; i) s8 B3 v& h3 G2 m .active_low = 0,; ?" V2 C- R/ T+ A, R1 R. j
.gpio = DA850_USER_LED0,5 e" u8 V4 D* N: L1 U# w, C5 [
.name = "user_led0",
7 v9 b( W, S } f& i .default_trigger = "default-on",% C \# x- u5 ^' E7 _) e
},
- D' M5 ?2 L4 `9 @% U {! H( y$ {0 P8 E- S
.active_low = 0,
) |4 p! d: S$ n7 {# K# x .gpio = DA850_USER_LED1,8 @7 P2 y' ]" `+ Y' K6 Q! \
.name = "user_led1",
( ?! b, T% ^7 g .default_trigger = "default-on",& H9 k7 ^5 W* x% g- q" K$ |
},
2 x; H Z$ q8 t4 Q& [ ^ {$ w! Q% W; [* |( ^& d
.active_low = 0,
6 D a* ~8 P: `4 ?$ b+ X: ` .gpio = DA850_USER_LED2,9 X9 N4 z4 H# Z# [9 Y7 H
.name = "user_led2",
8 ~# N1 w" J1 i/ Y* O .default_trigger = "default-on",( X$ f8 ? K: E
},
0 N; x" p% k; d {% B2 i t1 f6 s, w3 p6 s" S$ M
.active_low = 0,
) m, L/ {8 z8 m7 i0 { .gpio = DA850_USER_LED3,' O' |* Y8 y# H( l
.name = "user_led3",7 ]! m' T* S) T! B# F: I, P* K$ w
.default_trigger = "default-on",! F. W9 c& d, o/ `) k3 T/ D2 t/ H
},4 M% W6 E) u$ O* a& e
};
$ C' J4 H$ s( ^' ~* v- m# q( w! |* G4 Q8 t1 K$ I5 `/ e
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {# P: E+ U _: H6 P- t
.leds = da850_evm_tl_leds,
6 z |' ^' I3 [* } .num_leds = ARRAY_SIZE(da850_evm_tl_leds),5 r0 I1 ~! X5 p' P6 {
};! q! j# K( y! n( d0 D$ ^$ N
! X( r1 a% M/ k5 U( o% Astatic void led_dev_release(struct device *dev)
7 l$ \3 n" o: h0 E{5 e& P5 e/ i$ ]2 ^' _
};) k- a5 w9 K. E) ]; s6 P/ k3 ]* @
0 Q: f5 M x" X0 S/ sstatic struct platform_device da850_evm_tl_leds_device = {* q+ }( \3 o; @* t4 N% n$ C) d
.name = "leds-gpio",4 D" d3 R6 K6 ~! O4 a7 ~! J
.id = 1,
3 l7 u4 J! I1 U( Z1 o .dev = {8 W, a0 J& C0 _ E( `
.platform_data = &da850_evm_tl_leds_pdata,
2 M. S3 ?) U; |& M2 [* w9 E .release = led_dev_release,
5 H- |9 A5 k1 D R$ J& H' v }; r- q7 P, R' b+ j
};
3 B; J) X( S+ W. i. d* `% L8 T2 Q4 o/ u; r5 F4 h
static int __init led_platform_init(void)- O; D3 L5 L8 M2 W* r1 ]
{
/ }- x6 D! T5 {- F0 U+ s7 W int ret;; q0 S9 Q, O7 y @( P+ j3 T
#if 0. l a2 L" k; m# b$ J
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);% }) f/ ^* y5 I+ \: H
if (ret)
- R9 I, F3 O# q9 F5 C: |1 c$ H3 O1 } pr_warning("da850_evm_tl_leds_init : User LED mux failed :"% ]- j6 M" }- r- H5 { V f( ?! T
"%d\n", ret);
" X0 @6 s5 O! ]" I#endif, Z7 s: I8 [6 g& n% ?* u3 ~# W
ret = platform_device_register(&da850_evm_tl_leds_device);
( a3 I% C2 i; N if (ret)
- t, V/ ~* s, @ N% i; H5 ^ pr_warning("Could not register som GPIO expander LEDS");
, V \5 L9 e" {- @2 ^: j! u; p else
& G, `2 x w: V1 h; j5 e printk(KERN_INFO "LED register sucessful!\n");) l: e' ^' X5 J9 Z) m: o, @7 b
$ z5 U, u) S& p5 Q return ret;) P2 K6 D" d- k
}. j i' I+ Q7 e8 j' n
+ `. A( J& i( f' Z! j1 C" H
static void __exit led_platform_exit(void)
( V& [" g+ u" g; V{$ @! O' S( J+ W5 i. {% J) R
platform_device_unregister(&da850_evm_tl_leds_device);" Q3 ?9 h% ^3 j
- [3 V, {8 b2 Z2 b printk(KERN_INFO "LED unregister!\n");
- a; g/ i6 {) s}
3 x0 T* z7 Q7 o) ?3 k6 D8 n3 p
. w/ P" ?! ?$ P. q& U/ T3 \/ gmodule_init(led_platform_init);' [9 E4 ?) `) O% E. `
module_exit(led_platform_exit);
3 A* {" ?1 [" B; j- e
& M5 y2 K- Z& p/ _* g5 MMODULE_DESCRIPTION("Led platform driver");
% J* o+ S; Y3 T% UMODULE_AUTHOR("Tronlong"); @, t4 u, D6 G8 H
MODULE_LICENSE("GPL");! [) i E- r, w6 M, K6 H) I% l+ p7 G
! e0 b: p1 a* }9 j! K m' o" W |
|