|
|
求大神给下面的程序做注解,请稍详细些,谢谢。. S/ [3 o) r# l U
#include <linux/init.h>" m7 e& v0 F: i7 p3 C! F
#include <linux/module.h>
* D5 n1 b1 J# f5 n: W) Q* I#include <linux/kernel.h>
: b* Q8 X5 M8 c+ J0 }5 Z r#include <linux/types.h>
7 s+ @( y& n4 p1 O+ i#include <linux/gpio.h>& h( L+ L$ u) I/ S8 x& \/ P
#include <linux/leds.h>; s/ A8 g) e# D
#include <linux/platform_device.h>
9 f5 @ c1 S. T) s2 Q0 K; i3 p/ X
6 K$ p' s1 Z0 W3 J#include <asm/mach-types.h>
: r" ]( K- C* z. J2 q* d* b7 Y7 Y#include <asm/mach/arch.h>3 U8 D( {* ~( @
#include <mach/da8xx.h>8 S0 S2 u4 t8 r
#include <mach/mux.h>; a! c9 G/ O- B$ O
% p! ~) B9 Q; ?! H; V8 j. f
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)) d. A1 b' t: l5 q
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)4 g( s: ~8 K# }# }2 S; v+ q
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
. q) u- }5 i R% q8 ]+ P6 x3 |#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)1 u0 c7 P0 `% O' M) n' X
" [' P5 U3 H3 F. t: H. \6 e8 F/* assign the tl som board LED-GPIOs*/
$ ^: [2 V# y6 r2 h4 p* K1 j8 pstatic const short da850_evm_tl_user_led_pins[] = {
8 Q6 i ` k" }8 ^4 n /* These pins are definition at <mach/mux.h> file */
5 {9 H Z _6 y9 I DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
+ B: f+ t7 J6 w- J$ }7 U' L0 x3 c+ N0 ^ -1
! {6 j, {+ @* V};
. K# B8 R2 M8 Z0 P# Y6 n; {1 n1 G3 \
, \$ a( z8 ~- \" \static struct gpio_led da850_evm_tl_leds[] = {
F7 d$ V2 X- w( Z6 Y9 v {
5 R) M& h! d' Z4 L; b' X4 f .active_low = 0,
" I$ h& |8 o! a6 d8 J9 Q5 Q0 z .gpio = DA850_USER_LED0,8 P. o- s) V0 p( v& Y4 ~
.name = "user_led0",
: l* e- Z \3 N7 C! C+ S5 o .default_trigger = "default-on",
+ g9 Z8 }& X$ j1 O' ~2 h% f$ g8 e0 o },( M8 @ c& x1 _
{
4 J' w# W# }* _$ r& D .active_low = 0,8 m' p1 e+ P" S& ?5 N0 Y; p- \4 y& x" @
.gpio = DA850_USER_LED1,
5 `2 l) i1 x1 R- U( v* ^; l& S .name = "user_led1",
" I: P, i, t* B" o: s) } .default_trigger = "default-on",
. r0 s ~$ d! \: ~ },4 o# `# K0 m# r$ M8 Y. J: j6 h
{
9 i- Y+ g0 Y! U/ R% E8 U4 I .active_low = 0,
! k+ q F# f# D5 h+ g! |' @% Q .gpio = DA850_USER_LED2,
p/ p6 @8 E5 X0 B' y: { .name = "user_led2",
1 a8 v6 M6 a3 }, }, ?. D) z5 _ .default_trigger = "default-on",( t( a" U( r. ]/ S
},2 @" [# G! ^ o# g4 W5 L
{
$ [" t8 s: @/ B6 f: u .active_low = 0,
* N3 _6 b5 ^2 B! _ .gpio = DA850_USER_LED3,+ ~; s9 S" q( |. z, H# @* I: J6 n
.name = "user_led3",& I" e" E- Y& \, j3 {9 G
.default_trigger = "default-on"," c/ F# L+ g/ E% b7 Y2 \% M
},$ T8 N2 l1 y/ k% |
};9 D8 k8 `" e2 j
8 ~- v1 }1 F5 w
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
* G% Y1 ]3 B7 \& B$ g! G. }+ ? \ .leds = da850_evm_tl_leds,
$ \! S- x! t H y. H" i$ H/ ]- x- v$ r& C .num_leds = ARRAY_SIZE(da850_evm_tl_leds),5 t5 e8 m6 L8 n* L+ `. B% `- S
};. t4 T: r3 M7 c6 J" t
- p$ k1 V0 L8 m6 T. B9 [# dstatic void led_dev_release(struct device *dev)
7 i$ I! Y$ W8 ?' ~- ~{( ^2 c2 R9 z6 ?, Y7 H' \: c( s
};
( T- y- O8 \* Y: m! S! X/ i4 P! u4 C: ?9 D! O# f4 R% b/ J
static struct platform_device da850_evm_tl_leds_device = {- D, h- j8 r4 {7 v3 j7 r y Q' ~
.name = "leds-gpio",
J) q8 Y7 m6 h; v M .id = 1,
! v/ u' ^+ M1 h% m. U! ?/ C. i .dev = {" I- x& d8 l" J# p2 V/ ]! Q
.platform_data = &da850_evm_tl_leds_pdata,
! e6 H( K" @$ c: c S6 q4 m .release = led_dev_release,
' H* k" k7 W4 z+ `; g2 k }
- |6 P7 |9 O) ~- F};- Y8 o) \: q( C5 q8 ?# V% {) `
5 m& V W* ^7 A) S, P
static int __init led_platform_init(void)
9 S. ^. [$ p8 D }7 V+ F{
5 o& F j# r: ]. J6 b, `& { int ret;
! K7 b7 p: D$ r, e% G#if 0
% [* c3 Z% W/ y ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
$ \' T. f8 v& ~) F" i. {' n H if (ret)
( [; I9 ?/ G. `, E U& {9 {& {, N pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
# t6 o8 }2 H1 R' C l! \ "%d\n", ret);+ o Q; m. T' f& Y) H4 P( U
#endif
" h4 Z ^) Q* s1 B ret = platform_device_register(&da850_evm_tl_leds_device);9 F& B# C/ Z6 q5 t1 u( h" P
if (ret)
- }7 o" x1 p9 {/ I2 w h9 Z/ v, W. y pr_warning("Could not register som GPIO expander LEDS");& }; C1 u7 t) }4 v
else
$ ~% R% m, G9 v printk(KERN_INFO "LED register sucessful!\n");' Y9 u& T' p5 S8 k/ C0 E
% U+ Z$ F' f& c! e1 q return ret;( \/ k: T; V6 t* w7 d. M
}
* M8 F. ^8 ^1 p7 h% K* ?5 i3 N! R2 ~
8 g; ^5 S: `+ F2 @5 fstatic void __exit led_platform_exit(void)1 u9 \: B2 E* k1 K; k* _" n
{- m$ p; _" D" @' P0 P& ~: F
platform_device_unregister(&da850_evm_tl_leds_device);
+ L3 b$ _- L( {+ |7 X; i% w" A7 d7 ~' J5 |- L" t. n) T
printk(KERN_INFO "LED unregister!\n");0 ^7 S, w8 m4 D
}7 I# |; X9 U3 w9 d& k
+ w* b( d7 Z3 o
module_init(led_platform_init);
4 V/ f* D# N: q1 x9 d7 ~module_exit(led_platform_exit);
3 }) C4 P3 @; J4 a' u3 t5 x$ X
8 | P8 u5 F! B7 b2 _MODULE_DESCRIPTION("Led platform driver");
/ }0 N$ E9 @6 uMODULE_AUTHOR("Tronlong");
$ }* \; c. l3 e+ Z1 SMODULE_LICENSE("GPL");
3 G% h% `7 s. T3 h/ E7 [- o$ m: J; e7 R$ h* z6 e+ P0 i) Z/ G
|
|