|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
9 `: u* h @! D& k0 @#include <linux/init.h>4 l2 W* ?, u1 u: U
#include <linux/module.h>- K. b5 W: a# g) r2 j1 e
#include <linux/kernel.h>6 y0 V( E8 f1 i/ G' m; @
#include <linux/types.h>" w% w% i: \; e6 i2 \
#include <linux/gpio.h>
! b1 O) P. A3 V8 _#include <linux/leds.h>
: d1 e8 U" F9 v#include <linux/platform_device.h>
- g2 g* A* ^+ u* F
9 w; L Q \# u% `#include <asm/mach-types.h>
% X8 v/ _- H3 E {" L0 W#include <asm/mach/arch.h>/ z; R1 Z7 S5 X9 w
#include <mach/da8xx.h>
* R& {4 r1 C: G# e9 s#include <mach/mux.h>! ?9 c2 q5 ]5 P# N! T# Z7 b
: W( w% M0 o1 B6 e#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)2 w7 ]+ X& a- v' A( F6 M6 o2 f
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
' z2 R7 b6 ~$ q N; E#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
6 i) S! P6 a7 Z+ j/ k0 k#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
6 z8 d x1 q+ G" c) n9 e
# J; j U+ [, x) W u. K/* assign the tl som board LED-GPIOs*// y: B; Q( v( A7 a" J( T/ h5 L
static const short da850_evm_tl_user_led_pins[] = {
5 l2 d) e! b5 v8 V" _, u' N5 k /* These pins are definition at <mach/mux.h> file */
# u3 i8 R8 f: z' j' g; F5 @/ f DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
9 m Y* k% G3 U. Q- p- t -1
# x6 g- b) d: d5 @};# v6 u1 Z8 Y6 H A/ J% |3 u
7 q; o0 s. Y: i+ o" W' z7 R% k0 }static struct gpio_led da850_evm_tl_leds[] = {9 q9 e- f- Y* d% F5 r
{
% T! Y' x8 ]/ @1 u+ ]( | .active_low = 0,
g' k7 V2 a/ A. d! R8 Z .gpio = DA850_USER_LED0,6 J m* t# R5 X0 b+ [8 x
.name = "user_led0",' a1 r% b c; c3 L% d3 I }
.default_trigger = "default-on",% X2 P4 m% B1 {0 ?
},. t' O; P% S9 X6 P5 g1 k) R
{
2 a/ I* R( f: S1 e" B" u+ ` .active_low = 0,# i4 v! f) b3 D2 Q2 X( Z+ b
.gpio = DA850_USER_LED1,
; m/ U, S, Y6 v; ]. F0 B! u, r- M .name = "user_led1",5 {% g* J2 g- n+ m; j
.default_trigger = "default-on",/ L: `& {7 v! V" Z+ l+ b
},! H- I! u: F) S$ B% e8 S
{, M' x, x# B8 n: l* s, J3 z
.active_low = 0,4 t) L7 ^' l) v0 N
.gpio = DA850_USER_LED2,
, U4 h" z2 _/ J1 h .name = "user_led2",$ h) e# O7 T+ R+ U" `& j3 I
.default_trigger = "default-on",, W$ V8 ]; O+ z# X& \
},
$ l. p, |1 E' b% \) P7 y7 R {3 `/ V- g! P, g b( \2 b
.active_low = 0,, {4 B X2 Q/ a# X) m
.gpio = DA850_USER_LED3,0 x' C2 q G$ g$ C
.name = "user_led3",2 G( p) y7 j) ^# i g
.default_trigger = "default-on",6 C( V+ G' J7 \, q
},
6 C" D* j( G. }# h};
" G. M' N7 p9 T8 l. ?+ \8 F! @8 `6 H- M' }9 `1 q3 Y8 G! a& A
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
( i, I0 I4 ]- x2 x2 B l; q .leds = da850_evm_tl_leds,
* p+ a9 B8 p+ R* e4 P! X2 t2 j .num_leds = ARRAY_SIZE(da850_evm_tl_leds)," C6 X3 H$ K6 ~0 z! U0 G2 U5 K" x: d
};' T9 H8 H- m$ E
: `+ k9 _3 [; s" O" K4 p, M/ h Lstatic void led_dev_release(struct device *dev)
5 Q- ]" C$ W8 K8 _{
' |3 n3 ^& [) N0 Y% }};
; T# p2 e3 e% D9 R' U; K( E& P. G6 {& C
static struct platform_device da850_evm_tl_leds_device = {7 D: X( D) E- A0 Z. s$ {1 H
.name = "leds-gpio",. z) {. L& M& E) P
.id = 1,8 {* F: {- g. W; u. `4 {+ Q
.dev = {, `" j4 f& X& P \ r
.platform_data = &da850_evm_tl_leds_pdata,
+ t0 g$ y* B9 [# ~; d$ i .release = led_dev_release,- N8 B9 j# J. v- s K1 x
}
. l7 _" J4 r' T( ~" e};, X: X- q: \3 Z% X* u- A
3 N0 `! W* I7 [% fstatic int __init led_platform_init(void)8 X" v N: s( M
{
8 M% z. d1 U J int ret;& A1 g+ P3 F" t
#if 0( ^! L- }# {4 K+ g
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
3 S4 ^- P! R$ T% Q0 s, \ if (ret)* g/ m" i% V0 m3 n
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"7 D. e2 ]3 u' S; d% F
"%d\n", ret);. X a3 d4 Z0 Y g: Q1 y
#endif' D# h) t( B5 l1 j, Y! S
ret = platform_device_register(&da850_evm_tl_leds_device);
/ Q+ X/ L) [$ x: h0 e if (ret)
' y- T1 m0 R6 ]% R* Q pr_warning("Could not register som GPIO expander LEDS");2 p7 @0 H3 s4 r
else
# n7 p; L& K. V z" v printk(KERN_INFO "LED register sucessful!\n");
* k& E0 t- e5 _( [* E0 {: E; V- x% K) D# ?* X. m; }4 W% E
return ret;$ H+ s. n# ^; j
}* S0 E. y t; z# g' t
6 f1 u, o# n* H( M
static void __exit led_platform_exit(void)7 a5 T5 N7 ]6 g. F! K) E
{1 z" x: ]8 O) R+ y2 H
platform_device_unregister(&da850_evm_tl_leds_device);" g) S- X$ Z/ x5 ?- y" `! X& i1 o
1 I3 }0 P! t9 L( b/ s
printk(KERN_INFO "LED unregister!\n");- i3 `6 j& }# U6 R
}
( I! f+ s& U0 t" d
+ a2 e# m6 G4 f. r! S+ [9 q$ rmodule_init(led_platform_init);
8 f9 {( I- f ^, t# Gmodule_exit(led_platform_exit);
! E r0 N* ^1 u, }( F/ t- K# U# S7 X0 o, a& w, g& u. U2 K
MODULE_DESCRIPTION("Led platform driver");
9 H! c/ c* ]( ^0 CMODULE_AUTHOR("Tronlong");
U S6 v% Q) K# ?- ~+ b2 l O PMODULE_LICENSE("GPL");0 N2 _3 e s. @1 V
/ B$ G& |5 n) K H
|
|