|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
0 c' ]8 N R1 s5 \6 k( _# d9 j5 w#include <linux/init.h>" O( Z7 f& B4 k; |* L' h3 L" ]
#include <linux/module.h>6 Z9 z6 H& s$ u9 C% w$ D9 y4 `1 `
#include <linux/kernel.h>1 i3 p9 {4 B0 Q' @/ q( L" b$ i
#include <linux/types.h># `' V7 H) A* c0 {9 @4 X
#include <linux/gpio.h>8 q3 n2 _/ V0 M! z7 H( a l
#include <linux/leds.h>; E$ P* r) E1 s8 J4 t. V
#include <linux/platform_device.h>
; z: }$ i: V/ X- W) v0 \' S2 R; B) i
#include <asm/mach-types.h>, ~7 a9 J+ |5 _- |/ _3 N y
#include <asm/mach/arch.h>$ [& S4 ?7 U5 q: O: W
#include <mach/da8xx.h>3 O3 T( P/ S5 Q$ _) i; b
#include <mach/mux.h>
. R8 s+ ` m6 ^ m8 V8 |+ d( `1 d; j: T* p7 q% s" D' s8 l; g
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)* i4 W# N7 O( N8 f7 `
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)3 l! {1 F9 o* K1 f' `; R
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)/ o/ h- s3 @$ s A, G- x* [
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
|: B1 G) M. @
# F% z/ m$ F3 {' r c7 v/ j9 V/* assign the tl som board LED-GPIOs*/
3 }4 x/ u4 k/ n% C" g( c, sstatic const short da850_evm_tl_user_led_pins[] = {
4 x; g2 }( Y- K& x /* These pins are definition at <mach/mux.h> file */' X$ g/ L0 h. I+ e
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
" [* c l5 y4 G3 _/ _ -1+ H2 X9 r8 }3 a1 a. q' i+ o
};3 W9 W7 t$ l1 p6 m5 v
& P# F! x! B7 P" `8 C: i( G6 I) }' Y& a& Dstatic struct gpio_led da850_evm_tl_leds[] = {
! z) K# [$ Z; P6 X( f {
+ e. h7 G- }9 l! ], ]( }2 ] .active_low = 0,
, [5 t5 t4 ]# S+ ~8 z0 D .gpio = DA850_USER_LED0,1 ~" x; U! p& K( O! j
.name = "user_led0",
5 O# ^8 r+ `6 }; f$ H .default_trigger = "default-on",3 w" ? M9 p8 B# S
},# n) n$ a' Q& P2 s
{
% L* ^, k( f# x. U3 t. n2 l( ~ .active_low = 0,. G; o8 F$ \4 q$ P6 d9 [
.gpio = DA850_USER_LED1,
" b8 `5 l+ p) ?) ^, j, ]# b: \, I .name = "user_led1",
' U7 p z: d, p4 f. B .default_trigger = "default-on",
7 K0 p, ], r: P' E9 K+ O! } },' U( ^0 h5 C1 Z! o3 _
{! D8 A4 y: a8 d5 q2 h
.active_low = 0,% l7 ?0 O, n+ ]$ D2 F& Z
.gpio = DA850_USER_LED2,9 `: ^ }9 b* D
.name = "user_led2",4 G( j5 m: z/ q- L! z1 q$ A
.default_trigger = "default-on",
7 U% }) Y0 r4 f5 @ },
! y( m1 ]3 _" m7 J: `' t# D7 \ {' s* c& t. B* f0 W! u
.active_low = 0,8 S2 z& O3 E5 j, f8 t% p u2 ?
.gpio = DA850_USER_LED3,/ V4 C# {. v$ a( N+ H
.name = "user_led3",. V; ] i( \; J
.default_trigger = "default-on",
5 J' `. |! V" M8 U( s/ g },; R9 G- M. v8 f/ N& _
};$ l2 y1 W3 l( z3 ~( R
7 y! x& L. N* h0 ostatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
# h1 G# O4 {* [: Q: I .leds = da850_evm_tl_leds,
; C* I/ g, ]# _, f# |, h+ ~" t .num_leds = ARRAY_SIZE(da850_evm_tl_leds)," L+ I$ P5 F/ o" G+ `3 a
};, U- ^& l2 B6 s! X' Z H/ T2 g
6 R8 R) p, C1 estatic void led_dev_release(struct device *dev)
/ d* d0 q: k* ^4 A{7 l+ }- T# I3 s
};% g. O3 @* s0 r+ |$ r
: z7 e5 u9 ~) H! A! n: q; `2 F
static struct platform_device da850_evm_tl_leds_device = {2 Y l& i/ v/ z i+ Z6 W
.name = "leds-gpio",
1 Q }6 D3 W: p" q9 q .id = 1,8 R5 e" I# P8 _
.dev = {' G J1 c. R4 C+ ]* L: `( b. q h- f
.platform_data = &da850_evm_tl_leds_pdata,
4 C* e1 B# }* M H .release = led_dev_release,
% i6 P- b# X: Y4 _6 m( e }3 [8 `4 I$ K3 Y$ I. s, Q' F/ a$ ^
};
( M/ n% v7 E6 Y% ~9 \$ T! ^
4 z! `( i$ G) U7 c# k* e( _static int __init led_platform_init(void)
0 g1 p% j+ c, y6 _{7 s' d, a5 c: z9 A: B4 b5 i
int ret;9 o( ]$ F6 }* u7 H/ I" d/ \
#if 0
6 |. Q4 [8 B# S. ^4 U) \9 C ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);) x" W1 e7 f) m& I) }
if (ret)8 ~- P9 H6 B5 c- ], \9 `" N! a# d
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"; ^9 U. N* s7 ~- Q3 r( O
"%d\n", ret);
: Z2 ^5 V/ E. l; L+ d/ \#endif0 H' P, L+ Z* b, S: _! u- M. ~
ret = platform_device_register(&da850_evm_tl_leds_device);2 T7 D5 M6 Q2 U% B! I
if (ret)
g: M$ N6 Q! v pr_warning("Could not register som GPIO expander LEDS");
& G1 V; [$ n$ \$ Z else6 n2 M! w. G: y! F
printk(KERN_INFO "LED register sucessful!\n");) n# ~- m; d2 P& p3 N; X
4 s' \* G$ A' J1 b( o* v( [ return ret;
, S& ~/ d) p7 B% V/ w" X! e9 _}1 d+ w' U' _# s- {1 l
8 h, J+ L1 n% u% E
static void __exit led_platform_exit(void)
0 O! u% T8 Q2 N1 C1 c9 H# ~: w1 t7 a9 D{( n* e6 u; ]. p* K/ `2 ?
platform_device_unregister(&da850_evm_tl_leds_device);4 O) G* x& C" P$ G8 I
- e3 h- J$ @ p$ {" K printk(KERN_INFO "LED unregister!\n");
* X4 g. s1 t- ~ y5 J) I+ b" M- q}
8 R6 ` G- J6 Z! M" _$ u& z7 r% N7 r, ?0 o+ U2 i, ?2 g
module_init(led_platform_init);
u# r) O0 h* c2 ]) p4 pmodule_exit(led_platform_exit);
0 Z8 y2 R5 l# T8 m5 T. O6 Z1 e6 ~3 g$ l) [
MODULE_DESCRIPTION("Led platform driver");# j& g5 W; ~2 m" a2 I: [" P
MODULE_AUTHOR("Tronlong");' K0 u: _5 ?5 o/ C: h( [- v4 p
MODULE_LICENSE("GPL");: B, i. T% p8 y8 m
0 ^. y+ E3 p/ Z% I) o. g5 A |
|