|
|
求大神给下面的程序做注解,请稍详细些,谢谢。% A3 r5 ~1 h* L! h% M; D8 z( f
#include <linux/init.h>
( b0 ~; [& G. f5 A#include <linux/module.h> e6 Q$ @5 y0 h& J ^9 \
#include <linux/kernel.h>5 _) p$ \- N/ r( L! s4 `
#include <linux/types.h>
9 i$ [8 u( c: [: m#include <linux/gpio.h>
1 M' a2 o8 J6 x" z#include <linux/leds.h>
8 Q4 K7 ~6 C4 n' k#include <linux/platform_device.h># A+ r9 M5 o6 g3 b I1 L v% {0 S8 v
% S' J1 e5 _6 b" Z$ }
#include <asm/mach-types.h>
8 `5 }, Y# Q1 N#include <asm/mach/arch.h>
; W3 v- N0 u- D* @" O/ R#include <mach/da8xx.h>
* `9 x, r2 T6 V P3 X#include <mach/mux.h>
9 t2 F: u. P$ l3 @& J8 Q$ u* W8 L, O+ O4 p: G3 p' C
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
6 Z. k: z& H# h; x( `# @$ G5 G#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
1 p5 ^6 w$ I) \# w d#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
% I! n3 p, C* z- s7 V( W% Q#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)! C: Z' Y6 ]; e3 X; U! v/ T- D
+ H+ v: [ f, g+ y8 j: m
/* assign the tl som board LED-GPIOs*/
: g6 l6 r3 K/ E7 l4 Y* Hstatic const short da850_evm_tl_user_led_pins[] = {9 O4 Q# a) w [
/* These pins are definition at <mach/mux.h> file */- t8 F u. b. O7 ^/ G! j" N, C' e. `
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
9 X) A# P# G3 u& F -1
; V/ ]$ y' a6 i- ]5 p8 `};, k' O; a8 W" Z! z/ v
) T8 V# d0 [$ ^static struct gpio_led da850_evm_tl_leds[] = {
6 n; l" T; }0 k) u6 F {. @5 @, C4 G9 B5 ]) o
.active_low = 0,
1 ~+ r+ d2 O6 b r* d! C. A4 E1 t .gpio = DA850_USER_LED0,7 n3 E% c" q' Y6 _4 C
.name = "user_led0",. T9 G' o4 D4 u+ i# |7 m8 G( v9 }
.default_trigger = "default-on",
+ \$ X! z+ u6 I },
6 V9 p( H7 b. c. T {
, j% t K# O6 o$ h .active_low = 0,
& p) M8 R/ h ^6 D .gpio = DA850_USER_LED1,
' |. _" e! M M* o .name = "user_led1",6 ]2 N: G% Y& V4 M( C/ I7 L
.default_trigger = "default-on",
0 x* R6 J1 s6 w6 N3 H( y },& c* k3 X( m* a+ }+ F {4 H
{
X9 l+ E% f" v0 N& i$ A3 Q .active_low = 0,
7 g. P- s/ ]! E .gpio = DA850_USER_LED2,, C5 R( z+ W5 V4 V3 f& a# [- e
.name = "user_led2",
; B+ r/ J6 B. B$ X6 `' O: q .default_trigger = "default-on",
; C8 p6 i) H6 K( p$ { },
7 A# {0 C( D$ Y* G5 }5 ^/ ` {
0 [& ` v; k3 y, s& W5 \7 q' i .active_low = 0,
# ?; T6 L* Y+ S0 j .gpio = DA850_USER_LED3,# W* d8 S- A4 G; S. R/ s
.name = "user_led3",* j" n! x9 I# n+ A2 R* s1 f
.default_trigger = "default-on"," n1 G% H6 G0 q) X
}," o4 m. H+ S, s) X0 P6 M; y) r
};
; V3 S( {8 k& J
# E4 i+ q- T! J @* A! r' rstatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
, D5 m& {, m4 A ~8 U .leds = da850_evm_tl_leds,/ }$ H4 V# Z) b' `$ p9 B
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),
' B2 I+ D4 b9 ^& l$ n1 Y2 Y};
, V8 K; r$ o& Z2 W; q+ R( {+ `) C& A' X' ?6 W5 F# z& J* G& T/ t4 @
static void led_dev_release(struct device *dev)
5 D% _" P3 V4 {" i' t! J{
; U |" w/ r$ z( Y; \};4 Q! I2 W, X8 N4 j; `. }
5 F5 c( F3 j1 W% O! l
static struct platform_device da850_evm_tl_leds_device = {6 N" g# I& R3 Z' h, @( ~( c' Z2 b
.name = "leds-gpio",9 m) S; U3 R& _# V
.id = 1,0 S. l) G6 U6 Q3 H% U1 z# \6 c
.dev = {- b5 X1 z7 E8 {
.platform_data = &da850_evm_tl_leds_pdata,
1 B$ F& ]2 |' W% J* }* _ .release = led_dev_release,
- {3 V) b$ c& @ }+ t3 D) i8 x$ w& O- ?- ~
};
) M9 J$ [+ ^5 D' }2 P% J" q& U$ }5 \
static int __init led_platform_init(void)5 z! ^5 O j( j. u+ R& H
{
3 F3 C" e/ k% W, p+ D int ret;# b6 Z9 u! ^8 e- S1 t8 w
#if 0; V g$ Y% H2 P* o; L4 p- G
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
) @; U1 Q4 y3 ~/ t# C if (ret)
9 w. r1 } }9 s pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
b! h, u& ?# V2 x% G "%d\n", ret);
( v6 l! J: p, m# o#endif% ^* t9 b- L0 |1 l) |. [
ret = platform_device_register(&da850_evm_tl_leds_device);
; ~# f2 J4 v2 T# v- W7 B. } if (ret). h% e r' r- b6 _
pr_warning("Could not register som GPIO expander LEDS");# A5 B1 X g5 f( q9 ]2 Y
else
# f# s! A) C0 f3 A I4 H9 {: m printk(KERN_INFO "LED register sucessful!\n");" |8 _) e3 r) i8 p; @% s
L, ]% J# w' { l4 N& Q return ret;
2 T% X* b( q. M9 _+ }$ \) G}
0 P6 t' ` g5 \ n/ l5 e4 ]2 s3 E. U3 @% V) M( q c5 n0 Y
static void __exit led_platform_exit(void)
7 z% z& m- J' m2 L/ d- w{: d( X9 b& d; z1 y u
platform_device_unregister(&da850_evm_tl_leds_device);
1 [ N! a! I0 @3 s0 D6 A% c0 }9 G' d/ t( n% m- z7 u7 Z& x0 g
printk(KERN_INFO "LED unregister!\n"); T0 B7 P8 ]" C4 ]* k& o. a
}
2 l) W1 s9 {9 m' M& ]* F* A+ U- A5 }7 U9 E& N; \0 E
module_init(led_platform_init);" n* p' M0 ~" t" f) T: f$ @
module_exit(led_platform_exit);! `. B, i3 I) s
: j6 }/ U# k, |( E5 I
MODULE_DESCRIPTION("Led platform driver");) G" U) y1 V6 l8 h
MODULE_AUTHOR("Tronlong");: N9 l/ @0 h' O' G* k5 M2 J
MODULE_LICENSE("GPL");3 l0 L4 l5 V' v$ q5 A9 r c
1 V0 }8 @; O& j" d* J* T
|
|