|
|
求大神给下面的程序做注解,请稍详细些,谢谢。# o5 S# X1 v' g' T
#include <linux/init.h>/ q; K- ]: m9 `3 I! G5 f& a
#include <linux/module.h>
8 x" F, z; |. {#include <linux/kernel.h>
0 M" C8 q4 k9 A, C! Q#include <linux/types.h>
+ d4 P% b f% c' j2 G. ]# O#include <linux/gpio.h>
, m" A+ k3 o. M* ]- J#include <linux/leds.h>* Z& j& b4 y0 }+ K6 v6 {
#include <linux/platform_device.h>
. z- g5 ~% B: O9 u6 H( k2 Y1 a& _' j/ v( Z7 {* F; V% w) L
#include <asm/mach-types.h>7 |* j3 e: F% ? h
#include <asm/mach/arch.h>
) l1 N2 q6 \! E/ {1 t: h' L#include <mach/da8xx.h>6 F4 x1 g, b/ G# g2 _4 O
#include <mach/mux.h>
+ z6 Y* C8 ?! u+ z
9 C9 u4 r' c0 X3 O1 Z. ]+ z% [#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)2 Y0 P' [0 \7 N& F2 V0 l
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
_5 W+ {, V% I+ ~8 `4 e# z#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
( G' ^5 Q7 _0 i& N u1 ~#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)2 A8 ^" w( B6 c9 K2 W* L
$ o! r: u- b# j6 f: D) ? q
/* assign the tl som board LED-GPIOs*/3 }& ^, T4 m" [ Y c4 X
static const short da850_evm_tl_user_led_pins[] = {. v& Z( ]9 r4 a! X2 X. N0 b1 g" C
/* These pins are definition at <mach/mux.h> file */0 w( r( y! A6 Y' q) h
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,9 q8 p7 m/ e: i
-1
" n$ ~, {1 L& q' }; S9 H1 Y};
/ T5 }9 _% B) E" L' N# j+ `# k+ `6 y
( k) y1 P- m, f% f" sstatic struct gpio_led da850_evm_tl_leds[] = {( j5 N$ c9 R; T) t7 P( `( ]
{) [& {( M; }5 j6 h3 ]
.active_low = 0,
9 _9 `$ ?. j/ @2 P .gpio = DA850_USER_LED0,# F; M' c) P. z" G. U( z. |# {
.name = "user_led0",0 c! R4 |& y* b; s+ l2 b
.default_trigger = "default-on",
- u: h' `1 ~6 X, {8 Q },& K- x* j3 T9 F t* y9 a) W! Q
{
# V3 g' B/ l- P7 N* C .active_low = 0,
4 M E7 p/ ?, [2 q .gpio = DA850_USER_LED1,9 k( a, @* D7 ^. Y# f2 \& x
.name = "user_led1",# x) v. e% W! g1 \6 d3 n* `
.default_trigger = "default-on",5 ?/ m* o( y5 e
},
6 v+ |6 G: i. h% r' x2 t {
; @0 D7 ]2 ^8 t) J8 ` .active_low = 0,
3 j5 v! Q# {0 B; v .gpio = DA850_USER_LED2,+ n& N% A* v+ A# S; s* l
.name = "user_led2",; b' c+ j3 H! g! m
.default_trigger = "default-on",8 \# R7 i6 U* \' Y# m$ h
},9 o" d; y! `- m3 h. q7 ?
{, B" \& x! V# t5 ^8 a
.active_low = 0,
) v' i+ P/ `9 | .gpio = DA850_USER_LED3,* k" g% |: h0 J( S" b1 R
.name = "user_led3",# W5 x4 M w3 r+ S! {! q
.default_trigger = "default-on",
( E! g, p$ J' n& k3 S7 }; T },
S/ {0 z! E& C1 v};' B$ e7 s& D5 G& U
2 ~: J& \8 B F! O7 \( r9 Cstatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {+ M) z8 v8 G: @
.leds = da850_evm_tl_leds,7 ]% B M( l( j2 ~9 C
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),& s4 @ U7 q+ H$ V q0 C9 E. Z: u2 T
};
) x5 J9 @( l+ Q b& _! D/ j* I; P5 ^& x0 Z B0 W* H
static void led_dev_release(struct device *dev)
/ h* V. F! ~% D8 C: n6 n{3 R8 s' n! J* u ?4 ^
};
$ A3 D/ _) D$ @+ X9 ~3 w% g! c. ^# z. |" t! j1 E% J' F* b
static struct platform_device da850_evm_tl_leds_device = {
; c2 m% g" b4 Q5 ^. O' }. Z .name = "leds-gpio",
- P( m- e) s7 s .id = 1,
8 Y i' t' R+ }# I( Z# u0 h- F7 u .dev = {1 C7 k7 ~" l5 O. d# ?+ M8 s* x
.platform_data = &da850_evm_tl_leds_pdata,- }# m& l- M! y @& G' \9 g
.release = led_dev_release,
' W- }! D: V# p5 B' K }! [% D% H2 V+ z+ h
};
' z% e+ J' k8 o5 K6 e. k- z- S
9 g8 W% K6 o4 ~4 r2 t7 L* K- wstatic int __init led_platform_init(void)) y0 l% }2 K' h# s& X
{
{. H" ~' U5 z x N& N* ] int ret;- z. o1 M" ]) K* t
#if 0
: t( p1 h/ ?$ ` ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);% R A/ u5 D' m+ Q. y: L! K0 Y+ a/ _/ r
if (ret)
* K; x8 \$ F! u3 g+ c pr_warning("da850_evm_tl_leds_init : User LED mux failed :"8 n9 G" ^) l" |: |; @! v7 I
"%d\n", ret);
1 Y% J' p5 w" R( i3 z) Y# P#endif
3 u0 O2 C2 @" R7 T5 J ret = platform_device_register(&da850_evm_tl_leds_device);
& W* ~" h& N4 X if (ret)
0 ?. d6 N( x3 J7 j) M. j, @ pr_warning("Could not register som GPIO expander LEDS");- G4 H. Z; @' i; I! ^
else
8 o5 f# D$ V: `) m1 X# v* W printk(KERN_INFO "LED register sucessful!\n");
; x! d v* `4 V/ o' G* E: |
, a' d5 M" c+ z+ i+ p+ M return ret;
6 ~" ~* e2 k* o' @' v: m; F5 x}) E- H3 P" J0 b2 d
8 F1 o' `; Q* Sstatic void __exit led_platform_exit(void)/ `* W- c& |# @+ M% X0 K7 e
{" F9 u, ? B' a7 S; B. P& ~
platform_device_unregister(&da850_evm_tl_leds_device);
; @) J2 e `& u7 y( G" I) u: b' j
9 z4 w- }) I$ N printk(KERN_INFO "LED unregister!\n");
! Q" B7 G; l, w$ Y% G0 T: L} q9 Q! T3 |7 F/ r* x
% D! |; V0 C- F3 @3 bmodule_init(led_platform_init);
1 R6 {7 q; a2 C. J9 W8 kmodule_exit(led_platform_exit);6 ^7 S z1 N( K! Z' v% T- |& t, w
$ ?2 u- I8 X! N6 m4 w9 O! L
MODULE_DESCRIPTION("Led platform driver");
+ z- |0 j/ t+ v$ S' N0 \+ g F. rMODULE_AUTHOR("Tronlong");. K( n8 k+ @1 |. p1 p# \7 D
MODULE_LICENSE("GPL");
+ v9 A2 f, L' z0 i: B% [+ R6 v+ |; i- F
|
|