|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
1 i+ U' D" V: c3 f2 i e! I E#include <linux/init.h>
, J) n2 W: B* o% V+ l9 E#include <linux/module.h>
4 M+ Z$ i" W/ V( k. S#include <linux/kernel.h>
( e7 g! T% n" h& i' ~#include <linux/types.h>& S. o+ a3 m3 _7 I5 d
#include <linux/gpio.h>
0 g7 K. ?8 O+ P3 ?% b( I$ K#include <linux/leds.h>
( i$ f; n" k0 A* v3 c) g1 ]#include <linux/platform_device.h>8 k# \/ C) {4 n: G
) X% _" g i; c: ?5 y1 P6 \! l#include <asm/mach-types.h>8 U K+ v7 J) g" k5 q, K/ h! ?% o' g
#include <asm/mach/arch.h>
2 _, [& n" e: X. w C B/ J#include <mach/da8xx.h>6 B1 L; O9 S4 L, F: X" Y) u" k# |. h
#include <mach/mux.h>5 B" Q5 t! m) e* ~; |3 Q% ~3 P
2 i0 B: Q9 i Z# x" Y#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
" a; U3 v1 y- F. O. g! p) A- Y#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
+ X8 M7 @5 v$ O#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)" f: t6 e+ E+ `0 t. s' O3 e
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)" f8 J0 ~1 P) _( ^
' g0 G8 Y5 T4 q. I+ R
/* assign the tl som board LED-GPIOs*/
$ o1 |9 H& {$ d3 Cstatic const short da850_evm_tl_user_led_pins[] = {
* E0 ~) [+ a3 J2 S: { /* These pins are definition at <mach/mux.h> file *// H7 b2 c" H* V. K& Z1 i" @
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,% K4 [: G3 f# M% Y; R
-1
* Q# d5 P, L" q4 N7 n6 }};
, \4 k2 h9 {; [) Z0 _: ~* }" I- j; |5 A2 d" N1 G
static struct gpio_led da850_evm_tl_leds[] = {( m" F% Z( F/ u! S( Z$ t. z
{
! z" D p, O, i .active_low = 0,
6 L) m' M" l$ E+ y9 u" p/ }# H/ W .gpio = DA850_USER_LED0,# T* o. n# | }) B$ S; Y
.name = "user_led0",
( c w. T- [7 l .default_trigger = "default-on",
0 v" A' h X! M9 \ },
$ o" @7 p6 T" T( D7 G P, D {
1 H# y$ u, J0 D1 D' N$ N .active_low = 0,
0 Y. t, q/ |9 J; M0 S: Z .gpio = DA850_USER_LED1,/ j$ W" ^5 m" K% c; G. s
.name = "user_led1",
/ b' }; l( M& K8 D .default_trigger = "default-on",/ q* N& I" N8 l' c5 n( V( H
},, j% \7 _$ w8 E6 }2 e$ ?- f. f4 o4 Z
{
+ u( I$ H: Y' O .active_low = 0,
" v! W/ n. i) T! c% s/ m- n .gpio = DA850_USER_LED2,
3 G9 F+ @! M5 A5 j .name = "user_led2",( B* V! }" M! ^1 M7 \# ^
.default_trigger = "default-on",
. k% C1 d6 }6 q: ?8 p& L. }* m },7 o+ K& Q" P1 K3 N9 z3 J
{1 p/ E, H& r% ~$ v2 H/ q
.active_low = 0,& U3 i, l, | q8 b! l# o. u. Y
.gpio = DA850_USER_LED3,
. n% j+ i, H F+ H( d .name = "user_led3",' v+ V2 B& O# u% `8 n8 e! K
.default_trigger = "default-on",
) K1 I8 C4 d7 L7 R },
; g/ l7 T# T. _" s- h& m};
9 x$ W$ m$ Q# T3 }4 g4 B: B+ _
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
. F. I1 N$ q4 }1 _( ?3 |1 Z; Y) m .leds = da850_evm_tl_leds,
! F8 f+ L1 k- J Q2 o6 \ .num_leds = ARRAY_SIZE(da850_evm_tl_leds),# M, y3 y' Y5 c% U# j3 X( w/ u
};
0 J0 h6 r, u7 O4 @ ~0 ^
9 b, U2 d0 n: ]% o- f! Q7 J: Fstatic void led_dev_release(struct device *dev)
: _1 `0 u( _& X/ H1 v: G2 n{: T3 ~/ O: w& \* V2 }
};( D1 I& M; s( P% k& Z9 g
& B3 I" z# P. t! g2 Q3 ?static struct platform_device da850_evm_tl_leds_device = { U6 C1 t* H+ x& j* N9 Y+ m& ~
.name = "leds-gpio",
: E% H% c2 r {7 v |$ W' L .id = 1,5 H8 W. k+ O; R6 Q4 N$ T: p9 g
.dev = {
; Q9 E7 R g3 V/ y .platform_data = &da850_evm_tl_leds_pdata,
/ O7 f: T3 I1 n/ G1 J+ c( B- J .release = led_dev_release,
( ~- W2 v7 C) \$ M }2 @4 K" q* u" l7 r7 h
};
. w; j( k# R0 l8 P T1 ?8 n) L
$ V) [1 A9 b. B* K+ f- Q! Z0 Qstatic int __init led_platform_init(void)1 \3 q ^2 w! P. J0 V
{5 M- |! Q& B; b. D! Q N
int ret;2 I6 V5 ]5 h- [3 m
#if 0
" [( p+ C( a+ w7 m ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);7 v+ b5 J H. r, i B
if (ret)
4 h7 r% @+ C1 K7 w% |( c! J pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
7 Y/ M1 b+ e8 V "%d\n", ret);
& W) P4 y# n# t0 D( J#endif N/ o* U8 v; ~2 p
ret = platform_device_register(&da850_evm_tl_leds_device);
3 p4 u& s; V/ U6 } if (ret), E, l8 t( v, M- D V
pr_warning("Could not register som GPIO expander LEDS");
8 _ R, {* L; U# O/ u else4 t4 m; h! q6 w6 y: E$ \% q, P
printk(KERN_INFO "LED register sucessful!\n");0 X5 r/ o; V: w Y: H
% L3 h9 G' y8 `8 H% T
return ret;4 T4 m: j$ x! y9 ^- W' j) V, W
}
9 q' c) a4 ^% j7 \/ i0 z) m Q; \- b; I5 [
static void __exit led_platform_exit(void)! s) \4 q1 `: E8 |
{
- t2 E# w$ U$ _2 |8 v5 I7 h platform_device_unregister(&da850_evm_tl_leds_device);
/ }. j' f0 M9 w5 j7 ?/ {. b8 u1 X9 }
printk(KERN_INFO "LED unregister!\n");
/ E r! _& c$ U2 ~1 H' Z) p0 z7 L}
4 [7 f3 E# ?/ O- i7 S+ Q* V+ c G4 J; M- D* \
module_init(led_platform_init);
) [. Q Z! J' l. Nmodule_exit(led_platform_exit);& p* r0 O8 B* d, I3 ?" l1 \! Q# j# |
4 F2 W' m* \7 p. r$ k5 L P
MODULE_DESCRIPTION("Led platform driver");5 O" F. o: t5 @# |* L R
MODULE_AUTHOR("Tronlong");/ K$ k# e% c3 s; r' N
MODULE_LICENSE("GPL");
. K: i7 c+ Z$ Q; K) t$ Y& N8 ?& K' O/ Q [% J, o: F
|
|