|
|
求大神给下面的程序做注解,请稍详细些,谢谢。& B* u0 s) ]* g3 y
#include <linux/init.h>/ K1 x$ S4 j0 U8 L( S; Z5 ]6 D
#include <linux/module.h>8 e' ~% q2 C7 n" f. L* V6 ^" E
#include <linux/kernel.h>
y, G" M, o' L# M& U#include <linux/types.h>
; h9 Y1 G' z3 } ~* k G5 J#include <linux/gpio.h>9 Q- r; o J& o, h
#include <linux/leds.h>
, \; H# y$ E- E4 y v#include <linux/platform_device.h>
+ B0 n1 O' S' j; L8 F
9 h1 {# a G4 F#include <asm/mach-types.h>
3 C6 r4 E! m1 ?' R; y#include <asm/mach/arch.h>
/ |- l& ^4 c' t3 i8 x# v3 U; k4 y#include <mach/da8xx.h>& B0 \* T& y7 z
#include <mach/mux.h>
* x" }3 K1 T3 p5 r W N: T: T$ P* |# j
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
1 v* f G. q+ E#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
. ]! l( c5 ?- M* X" i+ C1 e#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
# G9 u- Q2 G a! d0 W#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
4 [# T6 P( O, ]4 k
+ ]: Y; I( N# H0 ^9 O3 g: h. i/* assign the tl som board LED-GPIOs*/
- I2 P+ B7 W- K, s$ q: lstatic const short da850_evm_tl_user_led_pins[] = {" W1 r: B: {. y3 n2 p& I
/* These pins are definition at <mach/mux.h> file */
: X. s: A, I8 S6 n2 d& @9 h, z3 ~ DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
r& B4 x) H1 B3 K \# u% g -1
c8 A/ [4 _4 a& r};
9 j4 j- y$ o0 O3 ?# t! ~7 }8 I3 Q& M9 ^* x0 ~9 I
static struct gpio_led da850_evm_tl_leds[] = {2 h8 q2 \4 |, i& v) ]8 \2 k
{! I" t6 g: d1 { A% n' b! K
.active_low = 0,
- E0 Y/ U/ t, M5 y, |0 A! H1 } .gpio = DA850_USER_LED0,/ H- c6 t5 [9 D$ `+ D$ s G* D5 m
.name = "user_led0",
) r. z8 f! }5 Q .default_trigger = "default-on",
& I$ F% A/ X3 P6 [" B8 |6 v3 A },
' K9 ?/ |6 B: Y! ?6 s3 ^ {
* }* e8 N# v5 ^8 ^2 O .active_low = 0,4 i: A" Q* c. R
.gpio = DA850_USER_LED1,
6 B6 l1 T$ }& Z" E7 d: J .name = "user_led1",
+ f% h3 a' e1 i. R- F2 L .default_trigger = "default-on",
: Q) d# [ s. f3 h6 q1 f },
" p1 j( Q4 @. N# ~3 R {
( y D( L7 j% B' K9 \2 u .active_low = 0,8 Z" V5 }) w' r n, K: E+ i3 l5 Y
.gpio = DA850_USER_LED2,; E3 N# L2 u) O- R3 c7 \6 f! _, d
.name = "user_led2",
8 w: S+ W: f! o5 j+ z' V .default_trigger = "default-on",
8 W0 n7 c2 G' x% @6 z/ H& x },
1 w( Q, v( t3 p$ i3 F$ H0 A {
7 o+ `( z4 z" p" E* \" Y$ s .active_low = 0,
( x' t2 }$ H- W# k- R .gpio = DA850_USER_LED3,1 m$ O. ~5 k/ `
.name = "user_led3"," P9 B! _& _; I% i, L: i. n
.default_trigger = "default-on",
1 s, s$ F' f: n },
6 P8 I+ _* V6 M/ f};
3 S/ g* }; y# o% D
0 l) L4 t9 \* q9 T0 T' ystatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {4 I1 x: z- z5 K: n B
.leds = da850_evm_tl_leds,- z4 C0 I& s/ ^6 W6 Y
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),4 V2 R' K; ?0 o, c. U3 K2 M2 V' i
};1 n3 ?' }( Q% K; b% c
3 ]8 |4 c- u! S" x& W+ Y8 T0 d
static void led_dev_release(struct device *dev)( Z8 d$ k( \. J) [1 Z
{6 U. d* J8 L6 H$ P
};
% ?5 ^4 e) F9 I3 ~8 y! g( h
; w$ b. {8 K8 `$ ~" b' gstatic struct platform_device da850_evm_tl_leds_device = {
8 F N+ D3 i2 A4 e: z$ A* P- Z6 C .name = "leds-gpio",2 X' s# r1 N. R
.id = 1,6 z( o6 f$ Z9 o# x% a( G
.dev = {
8 J1 H' v1 t2 y8 K( J .platform_data = &da850_evm_tl_leds_pdata,
5 |6 D7 ]+ J; x0 V' ^ z7 G: l .release = led_dev_release,' N% D2 _: R* Y# [
}
) X: j$ k& r$ t; x+ a( C- m5 e};+ A2 d ~4 S8 ]3 u- M( f
}" k2 P- t" z( l! g& x+ } S1 }0 z
static int __init led_platform_init(void)
" r9 j, V+ I( G. O{
6 Z/ G/ I- _* V: _% _ int ret;/ T9 g5 |' W! G% \" a. |: u
#if 0
8 p- b1 L e# R/ u x ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
- Y# b: O# x4 z6 \, n- S if (ret)/ S( s; B f, \& z
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"/ I- f# X' I5 q, F' F
"%d\n", ret);
' o" N1 M7 }4 v! ~#endif
" X2 |: `4 n' Y4 W7 O& F- b ret = platform_device_register(&da850_evm_tl_leds_device);
5 [; \. X3 B3 e if (ret)
1 S: ^2 U. g3 k6 ^# q( S9 w pr_warning("Could not register som GPIO expander LEDS");
% Z9 W) u" I+ s( A else
* W* _$ V' o$ f3 X* C+ Q! g+ I printk(KERN_INFO "LED register sucessful!\n");
; M Y( G) m0 C- T) X" w5 r3 b- j0 I: m! g( |5 A
return ret;# G" b5 N/ @; v; G4 q! o
}
/ `) d6 P* k& v/ V/ k; C5 M( n7 t& T
8 ^2 ]) ^) h5 h& }/ W: f0 Rstatic void __exit led_platform_exit(void): M! F* K" z j# x
{
! H }, p3 B' R# u4 L platform_device_unregister(&da850_evm_tl_leds_device);- n; a$ }- p6 F* @/ s9 c1 u
0 Z3 T! Q/ R# j9 P4 k3 Q" L
printk(KERN_INFO "LED unregister!\n");% t6 q% c7 j$ B8 I4 ~# Z: g9 |
}+ u* ~( `0 g0 E0 h1 Z( O
/ x5 B' M9 k) t6 `2 I
module_init(led_platform_init);. v1 \. x! m. |: p4 o; y
module_exit(led_platform_exit);- t# |% b# b& x" F' A& h: Y1 n- C
" J& z/ p4 k$ Q
MODULE_DESCRIPTION("Led platform driver");
: o5 j w; W( P! h3 ~8 h& o/ J- ^/ IMODULE_AUTHOR("Tronlong");# T2 I* B$ e/ y/ g4 h
MODULE_LICENSE("GPL");% o4 p8 J: z e) B' J' B! Y4 k* U
' P' N0 t* j |+ C: B1 a, ^: E0 X) C
|
|