|
|
求大神给下面的程序做注解,请稍详细些,谢谢。0 `/ e7 u8 ]3 d' i% d6 f, @! e
#include <linux/init.h>
: ?8 h4 ^$ h5 |5 g. B# c/ V9 c4 k#include <linux/module.h>
! } c* V" @! ?# k9 d#include <linux/kernel.h>
7 i1 s, Z4 r+ ^9 N! M8 n D#include <linux/types.h>
: u6 m- u: w) \: K/ J7 ~#include <linux/gpio.h>& b9 ]3 v, V+ F6 i; Z' N
#include <linux/leds.h>3 O( Q0 P0 U s" {# T! Q
#include <linux/platform_device.h>: J0 d( v: g4 M7 ]; K' Y
; R; H4 T/ t6 c u! h1 [, w#include <asm/mach-types.h>. B* O: o4 f! v0 [9 Z) z: Z4 X
#include <asm/mach/arch.h>
0 i7 O* z2 U) l, p o#include <mach/da8xx.h>! ~: g& i/ ]/ {. q" X4 B- F1 R
#include <mach/mux.h>
1 D0 R' s$ y9 V1 b) |' P- l' T/ j" E- V c
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
, D6 @4 i& ^5 q: ~#define DA850_USER_LED1 GPIO_TO_PIN(0, 5): [8 i, T K3 k/ a0 `/ e) I
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
% a! a2 _: W8 @' H, }4 }4 F#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)6 w9 R+ z# u' U( Q! D; n
3 `6 E2 U$ c# C+ u% [5 n( ?# ~# z' U
/* assign the tl som board LED-GPIOs*/
8 Y! ]! L c3 | H5 T: o8 h2 pstatic const short da850_evm_tl_user_led_pins[] = {
) s5 @$ i1 h$ Q+ i- W: Y /* These pins are definition at <mach/mux.h> file */3 X( P( L& y% e J( n* d1 A8 i+ W
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,8 @* D: S1 p# G' G0 @: e0 l* n3 O
-1
% Z i0 Q3 S: i) B8 l};% I: r( E; {4 T
5 v4 l+ v* K6 D2 Kstatic struct gpio_led da850_evm_tl_leds[] = {8 e# |6 U3 a( X* \
{' o+ s/ d0 g" U; c, l0 P9 i8 `' n- R8 q: }
.active_low = 0,9 k2 e. J9 r! O( G! }
.gpio = DA850_USER_LED0,
% R% u$ v v$ |! |$ o2 z8 c .name = "user_led0",. d7 o) Q2 d! }( D3 y1 k, ~
.default_trigger = "default-on",
" U. o* _ N* L( F5 O( q },
3 n) g. u# P, i {
! I8 q' u2 h# Y( Z7 l- F .active_low = 0,) ]& k& \' m7 ~
.gpio = DA850_USER_LED1,
/ @% X0 E; ~$ ]+ g! A' @, K! N9 q .name = "user_led1",0 D' r$ r8 S; a0 _3 T1 C
.default_trigger = "default-on",1 N8 F( y. U2 y$ m3 s4 V
},
# y* Q) f, @5 k Y/ ~ {
6 N: _" I" J' ]% d+ i3 Q9 l; A2 l .active_low = 0,
5 Q1 V; y: X. I .gpio = DA850_USER_LED2,5 e" M+ y7 T1 V
.name = "user_led2",
* i" c1 b& M0 Y3 X$ q! c H .default_trigger = "default-on",% T/ k. G* g9 F4 x, L# ]% J
},
5 ^3 p8 W' W! i$ o% D1 Z, {- G/ c) e {
6 t1 ?6 X2 z$ o* @/ H6 C4 } .active_low = 0,) h& k! m4 W. i* }% F
.gpio = DA850_USER_LED3,
) v2 C1 n! X6 s8 L7 i! d .name = "user_led3",% |0 _4 ?6 }4 ]
.default_trigger = "default-on",
0 Z. a0 y# V# x4 G; o8 J( | },
1 c" q( D) |* @ w};% a0 J( u K" ^& U, K# d+ |
5 F# m2 x I4 f3 v/ ^; b" ^# Q- K
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
! L# w' h7 _# i+ ? .leds = da850_evm_tl_leds,
" J8 X$ e) p- r5 U8 ^% l& { .num_leds = ARRAY_SIZE(da850_evm_tl_leds),3 Y2 j7 [3 ?, Z) k" {
};
+ R- v4 k: @8 e4 a0 U" [$ ` {$ r( s& }* N% N2 q& S9 k: V
static void led_dev_release(struct device *dev)
$ ~) U/ X' ^/ i2 z3 L# W{( Z1 P* u( M! s8 `9 @0 e' [
};3 g0 k% r: ~/ v+ j+ w0 j
& a6 }& M/ Y$ }2 r' b) t& sstatic struct platform_device da850_evm_tl_leds_device = {
6 h$ ~' [ A/ Y1 Q) a2 w# T .name = "leds-gpio",
! q. ?# ^; K- g2 J6 U" O; \ .id = 1,
: `+ C& A" X2 R | .dev = {# f$ c$ W) w. j5 B' M0 I
.platform_data = &da850_evm_tl_leds_pdata,2 J, f6 g$ o' M4 A2 y
.release = led_dev_release,
; y. M$ y3 V I5 U% r- [2 {( e" ~ e# A }
6 A# K/ E. z2 e; g. d7 ]};
! V9 f$ R" [5 L2 b) ?7 F. z, R j( f
) M0 B% Z3 r6 W' I" E9 Tstatic int __init led_platform_init(void)
3 U! V/ y M9 F" k( Q{
P3 k% R: U# A6 ]8 U* O4 M int ret;
T) b- Q3 y2 {; e+ F1 m1 ?#if 0
0 H, b" T4 `& U! N: h2 A ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
v4 O8 }9 s0 N+ n9 q% f2 O if (ret)0 X- y2 _) Z3 A% R" J& g
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"& r' h" e4 n' z" o
"%d\n", ret);0 h1 z+ s; N* K% n1 E7 n2 h. h
#endif
- w! O; |- T5 y; h! X ret = platform_device_register(&da850_evm_tl_leds_device);
% d U6 L* r+ {/ f- G if (ret)9 {0 K- d5 B- d7 E* _
pr_warning("Could not register som GPIO expander LEDS");, s) P. F8 v, l! L
else
8 {) T$ _' i( ?. n( u+ P4 V( c printk(KERN_INFO "LED register sucessful!\n");
# L# z8 `7 } B% ?0 R% P- |
0 L% y. c. {8 D4 [ return ret; |5 p+ p+ R6 z% g9 q$ |3 G
}6 H) b, K! |. M. h* ^" z5 ]8 W& x0 s
/ b) L. _0 Y v/ ]
static void __exit led_platform_exit(void)
# b1 b4 A7 D( N9 y7 H{# Z3 y0 `, e( ]# K3 i S6 q
platform_device_unregister(&da850_evm_tl_leds_device);
, U& z X& u( v4 w- d+ b$ H, `) G0 \9 j# ?
printk(KERN_INFO "LED unregister!\n");
; U$ c/ U, R4 V; z& z}8 Z& S# I; F( Y: F: l* v' s u/ V
+ b- M# Z1 r; \( u. E3 q, \4 T
module_init(led_platform_init);0 i! [$ K: ?9 ?7 T9 W
module_exit(led_platform_exit);' g: L+ h/ L6 h/ H% f8 {9 z& P
% V9 z' s! t" }* x; _; lMODULE_DESCRIPTION("Led platform driver");, B: J, P- ?- H4 E/ x# Y
MODULE_AUTHOR("Tronlong");
2 ?, ] l1 h& s# kMODULE_LICENSE("GPL");% t V( r) h6 ]7 ?* W
F8 |1 M! D# R- q
|
|