|
|
求大神给下面的程序做注解,请稍详细些,谢谢。6 N$ v) i3 E: m2 W( o
#include <linux/init.h>- m& T* F5 b; I6 H
#include <linux/module.h>
! {0 @( x% g5 A#include <linux/kernel.h>8 k6 f' b7 A+ p X
#include <linux/types.h>+ q3 ]# A+ J' Q% n. ^5 D
#include <linux/gpio.h>
: `6 w5 o) B3 `2 z" ^1 ~#include <linux/leds.h>
7 H# G& @# X% _$ A3 o3 D0 j#include <linux/platform_device.h>
" D2 A6 h9 x$ s# E; \9 \8 z" b1 D; I3 Z: R- o3 l
#include <asm/mach-types.h>
7 C% q/ q2 U; b1 f#include <asm/mach/arch.h>
) O6 {4 o, ]2 E w; y$ ~#include <mach/da8xx.h>. l0 R) U. {6 c* Z, m
#include <mach/mux.h>: x4 [2 A/ }$ M# \' n! W
$ L5 w" ^% `3 _& q; e1 a& u
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)( c% Y" p$ {' F' p9 A% E
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
; @% R! d! O& B6 i4 q( ]#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
4 q: v+ j4 y5 i0 ?8 k9 q#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)& ^3 w! H* K" i+ F4 T9 Z9 m
& n9 _5 Y- k2 C8 E6 C* w
/* assign the tl som board LED-GPIOs*/
- w8 y, L% H5 G( f4 _# astatic const short da850_evm_tl_user_led_pins[] = {1 A8 m+ d8 ]! f' v1 [) |
/* These pins are definition at <mach/mux.h> file */
I+ h' c1 G! [! m4 [" j4 h DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
# c4 z5 ^5 c; |1 A7 p" o" P! b% o -1% o6 B$ v5 H& w% E4 v E- _! G
};
6 V" ^ G. s6 T/ y1 q: c% B
# n7 b" P+ h& H' J( lstatic struct gpio_led da850_evm_tl_leds[] = {' E) \) z' Q% H% x4 z' ?
{) m+ t; o5 i0 C6 W) B! s
.active_low = 0,
9 T% g; n' [( W5 H! {5 L# v .gpio = DA850_USER_LED0, G) S; U9 |/ t6 S7 N
.name = "user_led0",( C- K/ O7 d4 k1 W8 ]* U. K3 {) z
.default_trigger = "default-on",0 X5 t: y4 R( M7 C0 q g+ _
},
4 o2 m" D8 x" l) F" Q" L {; V3 t: T6 K% o, [& Q% S" W
.active_low = 0,
6 K; P% c R @; D- g9 z .gpio = DA850_USER_LED1,
% }$ O. M$ a0 X7 k7 P .name = "user_led1", P, [- ]( i: I. u: a
.default_trigger = "default-on",
+ C/ e: P$ L, W: A* Z- _ },
$ c; n/ D& k0 X1 i9 V+ C9 ]- \6 \& K {
8 a$ Q% f3 `& B; @9 V w j7 u- J .active_low = 0,
0 z3 d1 x! |# L2 f .gpio = DA850_USER_LED2,
$ Y1 k- }' E3 u, s) v9 L4 R .name = "user_led2",
, _( j" b: u( O7 _6 ] .default_trigger = "default-on",
, \7 Q; W% Y- `7 Y% U2 S0 ?) i2 j6 T },
6 J& j' r$ a4 u+ _ {
. Y& B# M5 `1 u5 c8 |8 ?0 z .active_low = 0,4 F1 t& k* E, T3 p, K, k( n
.gpio = DA850_USER_LED3,
7 [! D8 z3 G* j .name = "user_led3",
H3 E, {: I# J3 Y* U" x! R3 ] .default_trigger = "default-on",' q! J6 q7 A) D, s C
},
: ?5 j! ^* }/ O( l: D W6 v};
/ c7 A' I& ?5 S7 u4 b ^# @" C+ v( B3 r* N
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
' E# s0 N# g8 Q8 u .leds = da850_evm_tl_leds,. I6 j2 V# K& h, l
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),1 k% y# d; F3 P7 g8 l& d+ ]% C
};5 c* b+ J! D' o
& ]9 ^1 |6 p* t0 | p( |static void led_dev_release(struct device *dev)( e' X" H! N3 D( \) S& A, i$ `
{- H" s6 ?1 j2 _- k7 h6 f& P
};5 d8 u! P' G6 P0 }0 u
; J5 H7 i: B% B5 I0 j: r5 s! M4 bstatic struct platform_device da850_evm_tl_leds_device = {
U) Y( m' o+ S6 C& A/ q( o .name = "leds-gpio",
& o0 e6 n; w$ O G! t .id = 1,
( o. `8 ~) I2 h) Y' r0 N: w .dev = {
+ K9 O; {* Y1 W' y! O7 i .platform_data = &da850_evm_tl_leds_pdata,
8 o, K8 g9 ?, b9 V- h .release = led_dev_release,3 x& q; b! h6 z; A! Q
}
3 Q5 H, H6 F3 n" K- Y& h9 z};
# @" b. g$ Q+ O* ~1 s: X0 P) Y+ ?5 m8 E
static int __init led_platform_init(void)
4 Y( T% Y9 U' I4 u- ^ U9 Q$ | {4 ~{. A; {. Y1 ]# D* C9 F
int ret;2 u2 e, ^% A2 C d4 B/ ^
#if 06 K3 b' [2 j! R) F6 @
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);8 C3 H- j+ `' ?4 b$ ~( s
if (ret)
3 B: {4 c& @5 K* G6 Y6 o6 {4 e- f M pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
4 O4 P' ~# K4 Y; ] "%d\n", ret);
$ p7 ^! G* o) c#endif3 s; |; D* h2 M% q5 b
ret = platform_device_register(&da850_evm_tl_leds_device);
/ s# H9 z- P) x. w4 [7 s0 [ if (ret)
% v- ^, t! c }8 ?8 B pr_warning("Could not register som GPIO expander LEDS");8 A* t5 b: ]" X5 h
else
5 |! L6 e0 S5 T8 W' u3 r d printk(KERN_INFO "LED register sucessful!\n");& D0 u- L' V2 s( L1 K
9 [5 M" D- f! x2 X6 [! Y9 m. Q9 | return ret;# K2 x; s4 [' c7 a
}
" D. Q5 y v% Q- s
* v2 O/ U$ L, ~5 Hstatic void __exit led_platform_exit(void), w% ?1 ~+ R$ X" L
{
5 H p+ I' s$ r$ V# A platform_device_unregister(&da850_evm_tl_leds_device);
/ V0 w* Q0 K3 n! }2 z$ J, F8 ~! O2 p; Z W ~; y* c/ W
printk(KERN_INFO "LED unregister!\n");8 J* n* H/ y7 F0 O6 w
}
6 h" b; \9 z3 o8 A& l* Z5 Y5 e
`5 K3 i% ~+ R6 b7 rmodule_init(led_platform_init);
5 X* y. A0 K1 v& G1 T7 ymodule_exit(led_platform_exit);- P( M0 Z% j! F5 q; [2 |5 N
. E3 w$ m B( \6 x+ K/ R# ?# MMODULE_DESCRIPTION("Led platform driver");- p% d6 \0 r# c; Y% G
MODULE_AUTHOR("Tronlong");
" D' E3 n1 F C \MODULE_LICENSE("GPL");
, j4 S0 D2 L! B! ?4 l. P! Q
7 S6 M* u9 Q/ c& K0 y) H. P |
|