|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
2 R2 {. Y+ g- w8 z- B6 j$ o#include <linux/init.h>
! J4 I! O# B& S, w& P& g#include <linux/module.h>
' [6 g3 @) ~ G* \; o. G' Q#include <linux/kernel.h>( p' @0 E7 [/ W- s
#include <linux/types.h>! Y- Q5 H7 w+ t
#include <linux/gpio.h>. ^. h# T! ?0 R$ t4 \ ^
#include <linux/leds.h>
; {$ c) y6 H: z4 A' o6 m. \0 P#include <linux/platform_device.h>
5 S: w5 z/ y% G/ E% B/ {
) t$ _7 T' {+ E9 g! G, c#include <asm/mach-types.h>
# @# y4 i8 `1 W" r$ D7 N5 x#include <asm/mach/arch.h>$ A% p0 k3 v9 Y9 E* N; |
#include <mach/da8xx.h>' L" b5 w% ^, q9 ?# W& B. ?
#include <mach/mux.h>- U! A. ]! f5 U: i
" L* c! z: h( b; @#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)5 m6 p+ y* A) g! R
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
7 W2 `4 Q* h' \- ~) R#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
& P4 ?, K# d, R8 W2 v2 ]9 P. y& [#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
! z& b7 F& m7 h
2 Q! X# |) f: ?/* assign the tl som board LED-GPIOs*/$ j+ {& W. ?6 H6 K0 Y5 h" k
static const short da850_evm_tl_user_led_pins[] = {% U$ s& l T; F( |
/* These pins are definition at <mach/mux.h> file */
4 c L! s% D; q x: p' ^3 ?# x DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,( F3 ?, T2 P/ c# Z/ j1 K( |4 \
-1
* y7 L0 J M O0 r2 d& `# @2 W% @. L};
% Y7 b$ ~" l9 g- Z2 \
, x1 ^$ E$ Y7 G5 t( n5 sstatic struct gpio_led da850_evm_tl_leds[] = {! D( E& X; p4 X$ l
{% X1 i8 A n& C5 y7 B# X- i! ?+ `' B
.active_low = 0,
) b! D" z: S3 q6 M/ c .gpio = DA850_USER_LED0,8 u' W% Y: B J! `7 ]1 d" }. D
.name = "user_led0",
" l$ b7 L& k4 U5 ` .default_trigger = "default-on",4 U2 L) I6 A F1 L3 {
},
9 X' O' K5 \; o$ f6 V$ |+ }# `; h( v0 b {, t9 W8 G$ E- l, u
.active_low = 0,
2 J% D1 s0 k" H, x) I% e .gpio = DA850_USER_LED1,# T# C3 N, ]% K/ @9 Y7 ~
.name = "user_led1",
1 P6 ?3 {. q* u" q) A$ n. e .default_trigger = "default-on",
! m2 A. P& I' x, q; s1 F- e4 L },
* v. z; h# N% u8 w {
0 B9 _: B/ R# v; U4 E% } .active_low = 0,
* q' j- g& _1 _' ~" i% M: j .gpio = DA850_USER_LED2,
0 e6 F! ^$ U8 z7 K( `& ?% G .name = "user_led2",9 N9 i8 ~: \/ ~& W
.default_trigger = "default-on",. E# n8 l- `+ j! D
},
6 k3 z& b! X0 I, Y {! I% j- [" q- j! W, g8 }
.active_low = 0,' b+ M$ [* s. v" j
.gpio = DA850_USER_LED3,
* z! [# x4 Q; F" i E .name = "user_led3",- F( f' P% q3 @
.default_trigger = "default-on",
, U: s& ]+ y6 N. a' |, I; P },
! [) d3 R* k7 [4 v/ V5 l};
6 q, [9 e9 W( X3 i2 r1 A+ H: w1 |0 H) G/ g
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {0 m0 [1 v# T9 k/ Y% k
.leds = da850_evm_tl_leds,6 I+ O1 j) D% T' {" _$ O6 G' g
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),$ B. O t8 Q: D- s8 a% F$ @
};# U; K9 \3 Z" B5 ]9 {: G! }
1 e E8 ], h! P1 B5 @& C, i
static void led_dev_release(struct device *dev)
" ]- Y" D. D! K9 D; U6 e" ]{3 h; g4 R8 z+ ?+ D6 Q$ Q% L1 n
};
, d6 n8 H( `9 h6 R, X' R: q. H; I; Y' ~1 \4 C2 F+ ~6 G; S* C- S
static struct platform_device da850_evm_tl_leds_device = {: A* P' ^& I8 t0 L1 D$ s& e' W
.name = "leds-gpio",1 E1 Q0 r# Z* }" h, }; F9 c& B
.id = 1,9 `0 D. Y7 R6 S- N
.dev = {
! v9 j8 H7 P: e0 M2 p3 ^ .platform_data = &da850_evm_tl_leds_pdata,. o$ I& f" B9 g$ [7 f+ r
.release = led_dev_release,
9 V K) b& U: C# E: r+ T& u }
' C# g1 `% u' u# M! x};0 @: b; X4 |; |( @# M' q
' t$ t! U) L. ^% w
static int __init led_platform_init(void)8 G6 d/ J" n! I0 B
{
- G* u* o0 L; k6 i8 p int ret;8 a3 B W5 W1 g- I9 \/ K9 Z: e
#if 0
# b% {4 O/ L& ^ ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
: h( D" Y, B% N7 |( F if (ret)3 E- W; ]6 ~" A6 G" I# }
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
5 z" D# i3 d6 X: R1 r4 A& Z "%d\n", ret);
" h7 l8 ]) x# e. ?: H5 u b#endif
& {* m* R8 `$ f* V* k3 u; R& { ret = platform_device_register(&da850_evm_tl_leds_device);9 \' q7 I( C8 X8 v
if (ret)
* M; p+ v( F; B0 P; A0 n. q pr_warning("Could not register som GPIO expander LEDS");
% T; K! [! i& c8 [) w0 i else
5 Q, K6 ]' \ O6 M# m2 Z3 u* a printk(KERN_INFO "LED register sucessful!\n");
6 U5 J7 s$ q3 `
9 T$ Z3 I+ E( g2 P/ Q return ret;8 z5 j: u1 D( j9 m `" ?
}/ G! N' Q4 W% _% p# N1 b( a
5 v1 N3 ~4 c" J+ G* U) Z! T# j
static void __exit led_platform_exit(void)
9 m) B7 K' ]1 f) S X1 n{
' T: E) P% [/ { platform_device_unregister(&da850_evm_tl_leds_device);
0 H n: l& o# {1 |# J/ E* P- F- @) E% \% F& n6 k
printk(KERN_INFO "LED unregister!\n");
$ h- M, W: X) h4 R2 X( K}6 t) y; Z4 o1 r7 b2 h) d; B+ a
b5 O5 }# X8 J1 R' h* h* |+ ~6 w7 M
module_init(led_platform_init);" Q7 M' Y# J3 |" s- l- g* _
module_exit(led_platform_exit);% t y, [+ J$ N& U: }. Z3 W" Z
! G. L# U( X9 I8 x* N7 H0 a* `6 {
MODULE_DESCRIPTION("Led platform driver");6 A" u7 O- X& M
MODULE_AUTHOR("Tronlong");
: {6 F% D6 s7 @# \MODULE_LICENSE("GPL");
4 \$ E$ C- A' I% ^) i% v/ s6 h) S2 R3 H f7 V% P R. x3 F) J# \4 n$ o
|
|