|
|
求大神给下面的程序做注解,请稍详细些,谢谢。 V$ s" m* ]5 g5 l0 g
#include <linux/init.h># @0 g. m0 h) {4 O
#include <linux/module.h>
; R+ e g3 B3 d/ n0 P3 W/ \6 t, F#include <linux/kernel.h>7 r' O/ ]+ i3 f4 F5 H4 M
#include <linux/types.h>
' G) ?3 d M& m' A' i#include <linux/gpio.h>9 ]) \# M+ R% S7 Z c6 G* S8 Z! W+ E& E6 _
#include <linux/leds.h>
; J ~( Z! P6 p) Q* Z#include <linux/platform_device.h>; @8 b% Y* [) b. F! C) G$ f
6 w7 r/ `$ u/ e" k& S
#include <asm/mach-types.h>: I* |# A) c6 G1 q
#include <asm/mach/arch.h>9 s) |- r) g( a0 ?
#include <mach/da8xx.h>7 t2 \# c" k; D- b
#include <mach/mux.h>
, X. v$ a3 Z: `
. {' {( t8 G2 ~#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
; L" q! ]2 ?3 q3 m# [1 d#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
. N! l' V% E7 V- E& ~2 y3 _( `! r#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)) x5 ]# W% T ?3 V5 i
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
* T, Y; z1 W0 x6 @8 v; h- W [& \! N) l$ l
/* assign the tl som board LED-GPIOs*/
8 y) _% v2 o, dstatic const short da850_evm_tl_user_led_pins[] = {
! V/ K" T! P' S2 e+ f9 S3 F4 i! A /* These pins are definition at <mach/mux.h> file */" g {6 Z& [0 [8 j# i; o, C9 z6 b3 t3 a
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
V: C7 m q2 e: x -1
. J& @ ~2 Q& Y8 O \, ]};/ o) V" q: D( v3 \/ ~: j+ j/ [
, {. ]' I0 r1 Y4 q& w8 W; C+ Gstatic struct gpio_led da850_evm_tl_leds[] = {+ K% q% ~8 d$ I0 f: q
{
) ?( O/ F3 l2 D, l6 h! }. R" K. t+ Q .active_low = 0,. D7 X* f+ T d: \
.gpio = DA850_USER_LED0,; N7 Y v9 U2 o% x
.name = "user_led0",
8 X; e0 S% }; r$ [/ {1 {& U' ? .default_trigger = "default-on",% A% `1 x, S _/ ^) t4 @! C% T
}," F# f' t* d3 z! y1 J' ~
{
, q' k6 t( \5 U& i .active_low = 0,
$ l9 F! g! P, r( o" ]+ F .gpio = DA850_USER_LED1,
( {5 U. r6 _" f .name = "user_led1",7 Q2 ]6 l1 ?$ K- I2 \
.default_trigger = "default-on",0 x2 D2 R" \# M
},) D9 V5 b! L' b" V$ e6 d8 N
{+ K* \% t. q' u- |
.active_low = 0,, p4 D( j* x- f' w: `$ P4 y
.gpio = DA850_USER_LED2,
/ l% f$ z1 t& n3 ` .name = "user_led2",
7 y8 T$ [( I; k9 n .default_trigger = "default-on",7 I* Z6 D# @2 c
},* v) u& e" b: x; D, e1 l. }- U
{
t2 Z9 T9 N# f# z- ?& Z .active_low = 0,
0 F6 c/ e' ]/ h( l) I; ~7 o .gpio = DA850_USER_LED3,5 f: F5 G7 o7 M: |
.name = "user_led3",
' @4 _) X+ ~3 _$ ~9 c" a .default_trigger = "default-on",
1 S- q) Y/ r z* Y- t2 W. B. ?; a },, x4 N& ^0 H, J6 ^
};
. d+ L. }+ o9 ^
' _5 W& U1 y. @" w% l! U. s' v: s6 @3 nstatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {3 n! \/ C- ~. f n( ?; |
.leds = da850_evm_tl_leds,. H- \8 T8 n i* Q' u7 m
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),3 ]2 r2 {* Q6 H6 K' Z Y) O' U
};
# I, y" _6 R9 X5 I- A& F
1 i! ?5 a- O! e4 b0 mstatic void led_dev_release(struct device *dev)% f6 m+ X0 ~# p/ v0 ?
{
V+ ?, {9 d- L0 b};
: I$ }+ M) S6 _2 ?. Q7 C1 R G6 U* K9 n& k- ]
static struct platform_device da850_evm_tl_leds_device = {# g) W4 Y; d$ Q9 ?, z% V
.name = "leds-gpio",
# h/ x, \+ C6 L: i" }6 i& b/ m) m .id = 1,3 }, _3 n4 U+ W$ [( ?
.dev = {8 d' U5 V3 x0 H. N. r! B
.platform_data = &da850_evm_tl_leds_pdata,, }/ u7 U$ ]( [7 Q7 i
.release = led_dev_release,
Y1 e9 { J' v! w9 U6 J+ m }( A& ^$ D& a/ ^0 o- h
};# ?" G4 r+ ?" W% O3 q. t
2 a1 e" W+ S K: r, B, W0 m1 m
static int __init led_platform_init(void). \/ M+ i0 N( u0 N8 ^
{
/ I+ O/ h* ^5 N3 R/ @ int ret;
% d$ Z- x7 V7 ]# S; q. V#if 0- T, ?" Z6 c. x; K, ]
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
2 Z9 D7 }, s: j! Z if (ret)5 }# W- M9 w; F; M
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"1 V2 F, E3 \" q1 ?) D. L8 t
"%d\n", ret);
" `1 w! ^* r T: L3 J2 Q#endif6 p- ^* G6 e( i9 y$ E/ Y
ret = platform_device_register(&da850_evm_tl_leds_device);# f' R8 E% _/ c$ L4 _
if (ret)9 j9 k; l3 B/ u( k5 ?3 h
pr_warning("Could not register som GPIO expander LEDS");3 m2 V% S5 z ~
else
4 S2 @0 Z% `; [+ d0 s printk(KERN_INFO "LED register sucessful!\n");& e& [' C, m h: c# r
9 b7 ?+ x6 e6 @' r( g, K
return ret;/ `% n# Z& d0 p' i8 A1 H( o" E
}* M7 E% Y$ z2 p/ q" }
2 v. F5 D2 C# C( t" Q4 A' q( k1 X9 Astatic void __exit led_platform_exit(void)
1 X* ~; ?4 q, x: T{
8 {% i& \! Y2 S- z# O0 Q platform_device_unregister(&da850_evm_tl_leds_device);
$ D! w! g, t: |" J
! r# w$ Q$ G4 |/ S- O+ F) }+ k9 } printk(KERN_INFO "LED unregister!\n");
2 _/ L1 P6 g* g4 [1 H}6 J7 F" k$ i. H# j7 p* g4 H
" Z7 }8 G' }9 ^9 w' Pmodule_init(led_platform_init);/ [: ?) s5 k' j, A3 Q* m" M' Z" ]
module_exit(led_platform_exit);
2 Z6 u" H: R9 S% |9 S' T
. I/ Z* H) x$ K, ]; W: O% sMODULE_DESCRIPTION("Led platform driver");
% E* N+ i) o0 K( q, Q" yMODULE_AUTHOR("Tronlong");* Z; E, q, J( g( Y, D
MODULE_LICENSE("GPL");
: P7 D, A* [$ H" F5 H3 E" x5 g" e8 y; p" _, T8 O
|
|