|
|
求大神给下面的程序做注解,请稍详细些,谢谢。3 c1 P5 A3 H4 i( J; c
#include <linux/init.h>
/ b/ R- |* l4 X4 q#include <linux/module.h> X$ y. z9 k* b" {! Q4 i @4 z
#include <linux/kernel.h>
" } x4 `2 G) e9 P! h#include <linux/types.h>" N8 X0 |0 U; T: p
#include <linux/gpio.h>0 _/ t* b/ n7 E( P+ a* y4 P
#include <linux/leds.h>/ D4 \% N9 d% ]
#include <linux/platform_device.h>4 A1 g- P: \7 p8 P: N
b1 l- D( |' `
#include <asm/mach-types.h>
/ E, F1 J' B6 K5 c+ i. V( K( u7 s3 l#include <asm/mach/arch.h>" s$ i3 _& q* d+ e
#include <mach/da8xx.h>, }3 I/ K" {8 |1 e* e# e" B" [8 j; f
#include <mach/mux.h>: T5 ?7 B# b6 V. V# g$ V4 I7 u6 W
# q0 U1 ?: d' [! E1 r
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
. t1 x8 n* O7 ~1 V) G#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
) d& H6 R1 h/ w' L#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)) X. R( `( U' x' R7 i8 ^0 A
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
. ^" ~2 w( n1 K2 T
! ?0 Q5 s" L+ r& c- S u f/* assign the tl som board LED-GPIOs*/
7 s+ ]7 |; l; r( r2 |static const short da850_evm_tl_user_led_pins[] = {/ |) | w' l) w: h/ c; K
/* These pins are definition at <mach/mux.h> file */, e5 F& p+ m0 {0 Y
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
; [. D; H, C4 `; K+ B( L' _% A -1
# i# i J2 p4 C9 C+ \8 [+ O! x0 ^1 d};
' I6 ?# v1 ~6 ], \& `1 L" x- H% g! J# D
static struct gpio_led da850_evm_tl_leds[] = {% y m8 _8 u* M3 a! u6 Q
{+ }) C; `; U8 b% `
.active_low = 0,
% C S2 e& U% K) d8 o* U. [! y .gpio = DA850_USER_LED0,
- E* N; W* k4 C .name = "user_led0",% E+ i6 D) Q8 H8 K2 {3 r- @8 Y
.default_trigger = "default-on", `2 ^( v. ?/ t7 W$ y. M
},
) R3 t" J4 d# v+ y' B& C! [ {2 S, g9 t6 k: w( C
.active_low = 0,7 K- C0 k! g+ a
.gpio = DA850_USER_LED1,' ` `( w5 _" I, r6 V
.name = "user_led1",
, [+ k. z, o& x' R .default_trigger = "default-on",
3 \8 ?% F# V6 d5 P0 E },
. q' v1 a" d( Y {/ Q9 S* C- Y' v/ t6 o" L6 i
.active_low = 0,
/ g1 b* F I6 `" u8 y( l, a .gpio = DA850_USER_LED2,
2 T, F9 p* F% f) V7 S! W- V k .name = "user_led2",
7 z s$ a' f1 C9 _0 J .default_trigger = "default-on",. i9 A4 h$ t: ^( v/ e7 n6 ]1 p
},
3 T1 n4 _' l2 _; f3 | {7 @$ n: d" x! t# @
.active_low = 0,
1 {9 w, b) z7 W8 v* `' P ` .gpio = DA850_USER_LED3,) B. `$ r. V+ r9 |1 N+ Q. T
.name = "user_led3",
) `' |$ e6 j# B1 B5 f& j. Y0 K .default_trigger = "default-on",
+ m6 O) k7 `8 B },
* O" t0 ^0 q2 j# Z, C6 p& _};
3 o) \+ F: X! H9 n( o0 X
. F# s5 Z+ Z. W2 b- p) m1 ostatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
3 T, H3 q" j# F$ |7 u: ?2 v .leds = da850_evm_tl_leds,! d5 f! X$ ?8 }- s% M( g$ O( u. g
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),
/ G2 I' y7 I& T; w};8 f& }2 d/ x# v: v) R) i1 ]5 z
, g4 q3 S; l, U/ O+ \ Ystatic void led_dev_release(struct device *dev)
* t7 ?6 ^$ }% c; Z0 |1 R0 L{
* `3 U, u/ q; Z, z};
+ b# S# G: T4 ], B
2 L% H) |7 I. r+ Z/ dstatic struct platform_device da850_evm_tl_leds_device = {
' k. X) _; F$ M. _& M6 I0 k .name = "leds-gpio",1 z. X6 |# ^: y" l( n
.id = 1,
p" |: v) |* E; n* Z& N .dev = {* R5 T! g- w7 z( b; F
.platform_data = &da850_evm_tl_leds_pdata,
- M. s/ } h7 z% x .release = led_dev_release,
) ]6 e- O% ^" O. c! R. f6 e }
/ W2 f, z; e( \6 V};
+ e' h2 v4 M: {+ M; z* r' X; |, _
+ R/ b# H7 N! I& dstatic int __init led_platform_init(void)! R5 z' V/ ?4 f
{, O2 E; i/ l: h* M
int ret;, ?0 i( ?: I: d! k6 y
#if 0
" z" c2 B. k- z+ o7 ?. ?# X- Z ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
! t$ G0 M) }4 }- y. M; ]( J2 a* [ if (ret)
& f% D9 ?4 r; H5 w% }0 g pr_warning("da850_evm_tl_leds_init : User LED mux failed :"( X/ b' g( q6 C g
"%d\n", ret);( F: X6 f; m) L! E4 F
#endif0 |+ h+ g i; h2 y! z' P5 [
ret = platform_device_register(&da850_evm_tl_leds_device);1 B3 Q& M; k$ F) G' T r
if (ret)7 T% i( D; H' j0 U
pr_warning("Could not register som GPIO expander LEDS");
9 ^. p/ s' C! G! S5 m8 m else* @+ g* W) |$ o6 E6 t# A- Z
printk(KERN_INFO "LED register sucessful!\n");
; B% y! q# `" \
+ r" E- u# ^8 u" C. E3 Y( V2 ` return ret;
6 E. S1 V7 W# J2 A# C$ U}
4 H9 `5 z& D$ z. {" @' i- V: E, l# r i
static void __exit led_platform_exit(void)& W7 V3 R; H- i# d7 a6 [. s: x+ X
{
6 R4 }) e/ |2 ^, a& t platform_device_unregister(&da850_evm_tl_leds_device);$ V! b& A. P2 h3 x& {0 n( A8 i" h" V1 r" n
# I% q$ [- |* ?2 a) e) g6 d printk(KERN_INFO "LED unregister!\n");- @3 Z' {; H% G- \* U2 _1 b
}
* j4 l% B a0 C7 |. `# v
6 u! x* }7 y+ C/ e3 }. C2 [module_init(led_platform_init);
% _3 f! `, b) m/ A. z, Lmodule_exit(led_platform_exit);! S& @0 L0 _7 w) y3 V
/ `8 Z7 y$ |, r" VMODULE_DESCRIPTION("Led platform driver");
+ ^& [( Z+ k; a# wMODULE_AUTHOR("Tronlong");
+ T8 C0 c9 |# \, o2 b/ l* S4 D# [. vMODULE_LICENSE("GPL");' r9 S; y! R' K/ E+ \( E7 e
( I7 Z0 v9 D% o8 H' c( d! q; T
|
|