|
|
求大神给下面的程序做注解,请稍详细些,谢谢。3 w: E- K9 m" w& C
#include <linux/init.h>$ b) p- o# k ~6 {& f3 T
#include <linux/module.h>
1 U3 l2 U4 b9 o* Q#include <linux/kernel.h>
+ }5 D- M, V& H$ `#include <linux/types.h>) d- [" t# |* h; S" Y
#include <linux/gpio.h>
; {/ Y. I6 V( Y- J" z! q#include <linux/leds.h>
+ ^& e. B3 P" F. r, n#include <linux/platform_device.h>, b7 E* |8 r! d) [, z2 {9 K
4 c" H4 z* E A, R! _
#include <asm/mach-types.h>
( _: R m9 n4 b+ n7 y#include <asm/mach/arch.h>: C+ S2 X3 E% I$ V- n
#include <mach/da8xx.h>
1 N' U1 }1 N# ?#include <mach/mux.h>% [* ]8 F; j! r9 {, y
% [( y+ r) E9 W7 k3 k3 W' h q3 t# n#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)( ?# w+ n& Y* ]) Y" R$ l
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
9 q7 h1 U, m( t, T#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)2 X' E. R6 A" Z, X/ Z
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
8 P2 C( U6 h9 {& W8 L+ \8 a& r. M! c7 Q9 ^
/* assign the tl som board LED-GPIOs*/+ ? y/ ?$ i( c F
static const short da850_evm_tl_user_led_pins[] = {
: R6 ~7 ?. P4 k/ [ /* These pins are definition at <mach/mux.h> file */
5 n/ O9 b3 C7 P5 ?1 V0 | DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
! \- f) n) r }/ ?- H& o$ j -1; L2 X% D7 K& f+ g, r6 Z& U
};
# Y8 `3 d' E5 l D& w: @ C7 Z3 I# P5 c" C2 _9 `' d; r9 s
static struct gpio_led da850_evm_tl_leds[] = {
# K/ _4 N+ @0 p* O. |( O3 u: U {
+ x1 J6 G# h c/ C/ y" U) L .active_low = 0,4 f! R& q, _9 g
.gpio = DA850_USER_LED0,
* Q5 e) q6 x$ |; }; [, x a" k .name = "user_led0",
: C& a* j# @# t _ .default_trigger = "default-on",
( w5 P0 t8 }" t0 ~ },1 N) R- x+ [8 t0 x$ @
{
& [/ ]" O" F( u+ c' |! t% u# { .active_low = 0,
6 [5 x9 ?) S# F( H; B6 K. d .gpio = DA850_USER_LED1,
& q4 S5 d$ Q' u .name = "user_led1",
8 Y7 w, J" j: {, T' x( k4 w3 {, b& a( b .default_trigger = "default-on",
, k5 }( q/ g0 r0 O4 X5 S },
. l2 X: t: t4 p {
! b+ m; ?6 t) C/ X# Q: y, ^ .active_low = 0," r* [& a/ \8 \6 c; M3 M, h
.gpio = DA850_USER_LED2,
" W$ Y5 Y8 C- _6 _' ]% M/ d* t .name = "user_led2",9 Y, G2 b7 V7 r, P e
.default_trigger = "default-on",
, A4 B) I, l: L B i1 \- [- V3 v Z },
: I& O& n% S! M7 z4 p( N0 h {7 [( S7 D+ p% | G
.active_low = 0,
; x, f! w; a9 w+ L: E4 E$ j4 @ .gpio = DA850_USER_LED3,
5 V, V0 _$ O! U( x .name = "user_led3",5 W3 X2 ]- z2 Z" P: ^9 }" b
.default_trigger = "default-on",' S' K! r) H& \
},
2 {6 l" M; t+ n- @};
8 X& f; g _# b" a- h2 P3 L% z- {* H9 i* k
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {" r' ~3 G/ e$ {9 K$ f: {
.leds = da850_evm_tl_leds,
4 E7 J8 N8 @8 M$ W9 C' m .num_leds = ARRAY_SIZE(da850_evm_tl_leds),
, h/ u+ Q' @( k/ v};
! ?# D( X5 T$ w5 D- V5 a3 k' P
0 f* w1 {- g+ a% l* P4 ]4 |2 pstatic void led_dev_release(struct device *dev)
% F; j+ @$ @6 [4 }" |# B5 @{. C5 E! A, D! K8 m5 D% l) E
};$ \& y5 n, v0 `3 e$ ~
$ X6 A# W: H! S7 E. }3 m
static struct platform_device da850_evm_tl_leds_device = {
" k, h1 q2 V0 G6 x .name = "leds-gpio",
& L$ M; }9 m$ H- U9 W% M .id = 1,# c) U! ^/ t. F4 Z9 o6 e4 m2 F& f
.dev = {
& F& g% X1 T: {0 ? .platform_data = &da850_evm_tl_leds_pdata,
8 W- e. \& c/ r# U1 Q .release = led_dev_release,& a9 E% D: W' d H
}. A9 }( d7 k" B
};
9 U8 E% w. ]( u$ S1 l4 x* `7 c9 n- e7 ]8 H$ _
static int __init led_platform_init(void)
+ q8 O- G Z* {, ]{
8 v! y/ {. @- H S" \" z, v int ret;% f" R6 P9 A! U1 r" @
#if 0
( V/ J4 T: a$ n% ^. r6 F6 B- J ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);1 m# k" W0 _0 J# K1 \
if (ret)! v3 {/ c |' A
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
% p# _5 s9 e' o z( a3 I: \$ t, h "%d\n", ret);" ~5 C }4 V! R t
#endif
1 f9 ?1 M( N# L+ R# p ret = platform_device_register(&da850_evm_tl_leds_device);
' x$ T( P! k& Y2 _2 z2 z1 _) B if (ret)
2 R. m6 M5 T! D& s0 d) _! J# S pr_warning("Could not register som GPIO expander LEDS");$ h4 v, @2 [5 D, c& y
else
+ `# G& f% J$ h printk(KERN_INFO "LED register sucessful!\n");5 b/ u! m& o2 l$ h s" _
) V+ T& K) R, o$ [4 x return ret;" @3 d5 K2 P/ J; ~4 G
}
3 E9 b% A" ^ b% N+ q9 \
( V3 W5 ]& }0 c# ustatic void __exit led_platform_exit(void)
4 ~. O$ t. h0 w1 `9 t% J0 J) M{
@4 W$ \5 F: Q' {5 T; X platform_device_unregister(&da850_evm_tl_leds_device);
) ]# n' M: h! M# Q; P. Y
5 Q ~; x' n+ J% J, i& o4 k# `2 X printk(KERN_INFO "LED unregister!\n");
* o) I( v" x! G3 R- ?. E. K5 F6 G}+ j4 B- Y; H. \( E8 N- v* b
5 H9 {& ]% r' d7 \, zmodule_init(led_platform_init);
6 x5 f9 J6 y' X' | Jmodule_exit(led_platform_exit);
3 ~" F# F0 M6 t0 g( s; w
+ p: K# d5 A, P7 O+ LMODULE_DESCRIPTION("Led platform driver");
7 {' _3 N7 D- n7 @5 k; g- ]* OMODULE_AUTHOR("Tronlong");$ X) i& M1 P8 [) E$ J4 N# V% J
MODULE_LICENSE("GPL");
* k, w+ b( i2 ^8 b% m
6 k8 I3 ]7 R' V+ [9 A( n# R- G7 K |
|