|
|
求大神给下面的程序做注解,请稍详细些,谢谢。5 S% A5 X' d+ Z, b d+ b
#include <linux/init.h>
" v2 K" @( X. o: g#include <linux/module.h>) n3 X7 C) t/ \) d, J: }
#include <linux/kernel.h>
& u& o% X" [1 [( V5 o0 o#include <linux/types.h>' \! w9 L# E, Q) m7 v
#include <linux/gpio.h>* X9 U9 |% m; P
#include <linux/leds.h>
/ Z/ @' \% e0 }9 _ C#include <linux/platform_device.h>
% j, l; D$ @6 L; R! R' }8 G! S/ Z7 R' ]- q2 [ b
#include <asm/mach-types.h>! T1 c2 @# }) n5 R, o
#include <asm/mach/arch.h>0 t, V/ Y2 z# r" p% @. r
#include <mach/da8xx.h>
& ?+ }, ]- L! x' k" O#include <mach/mux.h>( x# V. g+ r& p0 }& L
) P# m3 Z$ o0 R/ @8 @#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
0 B$ A* g+ w% A6 A#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
4 ^) |+ \8 M& [" z% U& _#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
7 m& P$ | o0 n* _#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
, J3 N' x+ ` E( B( ^) Q. [* Z: ^! j, @* ?5 J
/* assign the tl som board LED-GPIOs*/. F1 Q& [ w z* w8 E
static const short da850_evm_tl_user_led_pins[] = {
9 J, t9 M# E0 O" j9 s5 T /* These pins are definition at <mach/mux.h> file */
$ K# K: p! n+ {) ~& i. o DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
8 Y* C: K; N' u! `# \ -1 X" G }3 b5 G/ X+ ?$ g
};
- `. y5 q- m+ v a
2 {- u5 k+ P2 i# Y+ Z7 C% tstatic struct gpio_led da850_evm_tl_leds[] = {
$ V0 h7 C. ?$ {- j6 Y2 a# ~ {! V/ B+ Q2 C9 @/ d% F) Y3 }* {
.active_low = 0,% ^6 U1 \+ j( [5 C$ U% b3 o
.gpio = DA850_USER_LED0,* |9 v4 {: e7 u2 L/ {6 ~: A3 n
.name = "user_led0",
2 d7 ^% a: ~+ d& F9 Q( n- i .default_trigger = "default-on",
" M8 a. @) K; z9 T& r. e% S },/ M* H" h& v: l1 V7 k! i
{1 g4 X3 s+ G* l2 Y( q
.active_low = 0,3 P: U. q8 h/ n
.gpio = DA850_USER_LED1," U7 O8 T! g8 ~* k0 A5 j
.name = "user_led1",
) I6 o: e+ E6 }& ~7 t9 k .default_trigger = "default-on",9 R9 E( p* {9 K- L! B2 b
},
2 R, _" B; j- W8 z5 Q+ a {
0 Q! t1 t3 j8 I4 E# B .active_low = 0,! x9 t7 \& W4 l. N! }5 {1 q3 [
.gpio = DA850_USER_LED2,
5 [& z7 H# E% ` .name = "user_led2",- I7 c d) z4 t' q8 v* s
.default_trigger = "default-on",
5 g0 l+ T7 T& J8 N. X- A; [5 N0 a },
; G' \5 B5 Z" z3 F7 D {
1 y0 w% I; c9 y; \; K2 H3 K1 i .active_low = 0,& L! k5 ]% r8 R
.gpio = DA850_USER_LED3,: V3 W' K" Y9 k+ V
.name = "user_led3",6 a* x# g5 P& J' o9 d! A& t$ A* E
.default_trigger = "default-on",
/ {; t. f5 B6 N: [ },3 ~5 O& y! x% p
};
0 d- \( [, x8 x: G* \2 U( {
% n3 y# p- U' T X0 Ystatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {' ?3 A0 d: p! l1 z: u
.leds = da850_evm_tl_leds,
) p8 _. P$ U8 ]- ]/ W .num_leds = ARRAY_SIZE(da850_evm_tl_leds),5 |/ s- ~* t% Z$ X+ r! T2 k
};
) i2 q9 g9 c Y( ?& u
5 S6 Y8 J8 H: g- v# W- ?static void led_dev_release(struct device *dev)" W8 T5 m5 Y/ y4 w& D4 ?
{ W5 }' j* h6 v4 e9 s0 T
}; m( V& ]1 S+ F+ H4 h
- Z- y8 C8 N2 }% {8 @5 q
static struct platform_device da850_evm_tl_leds_device = {5 e2 U$ i; t% z
.name = "leds-gpio",; [. y7 O1 l8 G/ L! L a2 w
.id = 1,! k' _; i# Q2 Q) l2 ]
.dev = {% u2 A: j+ Z; C( |# @# A4 y
.platform_data = &da850_evm_tl_leds_pdata,( N( g" ^9 g# f O; J4 T! w- B
.release = led_dev_release,
; z9 w0 \5 y% {7 `9 Q2 }3 F. W. } }
3 J9 B \% o! m# y3 x. g};
1 M, c* U4 w7 O, X4 e9 @/ o
( y6 q2 j6 L2 u% M" sstatic int __init led_platform_init(void)
5 ]$ D4 |6 S" `( B+ W4 ?{
3 x- ]' |* O6 F# Q3 w9 Q6 ~ int ret;
; m( w' Y) [( r" t& U- ^0 A; i* W; C#if 0
" W/ u' ]( z* S5 _6 p( o ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);1 |( u& f! p! p! |
if (ret)- j- ], L8 w/ ]& ?9 p& d& C4 P
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"5 I7 ?- }: p) i/ S A
"%d\n", ret);
0 Y2 s- v, k/ @1 J, }#endif& l& ]* ^, |5 K* B/ K# Y1 n
ret = platform_device_register(&da850_evm_tl_leds_device);5 I! i1 L( h# k# Q% Y4 a& B Y
if (ret)# `+ N, c4 H1 ~ q. y; {) u
pr_warning("Could not register som GPIO expander LEDS");
1 H$ `* D& p0 i' o3 P! X0 W else/ I" U& D* d! {4 q0 s
printk(KERN_INFO "LED register sucessful!\n");
$ @# U7 [3 t& c, q, N6 M) }& g" Q3 R5 ^+ a
return ret;& |; s$ j4 K1 W7 F& Y6 I
}- o: t. C7 l+ x a8 Y9 w' N% M0 \
2 Q2 w; R* v2 z2 s/ ~
static void __exit led_platform_exit(void)
7 }2 _4 h& \; B$ ~2 V{
( U' ~$ B( y) Q+ P; V platform_device_unregister(&da850_evm_tl_leds_device);
% V6 [: g: m' ]8 ~$ O. J% ?, X+ V1 b+ U4 C2 a7 A
printk(KERN_INFO "LED unregister!\n");
3 E, ^8 d5 K( D4 h1 P}- i% M* ?+ ^, X& ^
* C1 c7 t, B* c. |
module_init(led_platform_init);. `4 E c# x: \ X/ h
module_exit(led_platform_exit);" o8 y6 x9 ]$ K8 h& s' W
0 [2 N) B' w, s- e" A9 Q/ q, KMODULE_DESCRIPTION("Led platform driver");$ |3 D: @4 k' C5 Y' ~8 F* Y
MODULE_AUTHOR("Tronlong");
: Q# V" }# t$ D+ \2 x+ NMODULE_LICENSE("GPL");
7 W( |* c9 _0 A/ a" H% @
+ C7 @. H( A( E7 u K) }% r9 L |
|