|
求大神给下面的程序做注解,请稍详细些,谢谢。
: d+ z9 Q; O( v" x3 ]% {#include <linux/init.h>
- Y0 M) n' P: o2 E# J#include <linux/module.h>
4 C, i! w0 X) W' r0 y#include <linux/kernel.h>
; d3 h1 f$ [" S( {: J' n#include <linux/types.h>1 E8 N: w7 |# X9 `& e9 }6 n- j# ^
#include <linux/gpio.h>( b: r! X# e! `7 }0 Q9 L8 v, ?
#include <linux/leds.h>
2 d( `9 w! d0 U7 Y {#include <linux/platform_device.h>
. K ]$ @; F; K. T
- V$ K. h2 d _8 v) N, M" I#include <asm/mach-types.h>1 S# b! h& u# \/ O; |8 C
#include <asm/mach/arch.h>& K7 w# _2 ~$ |
#include <mach/da8xx.h>
' M* @: B- X/ E9 ^' ]4 U6 `9 G#include <mach/mux.h>
( w& h2 Q, B5 ~$ ^+ T# J1 F" \8 e4 a4 E7 U' Y; \' E4 _7 Y
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)0 h* ]5 f- R% h" [8 }
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5); j1 z$ M4 S+ B2 u7 V
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)) L, b2 M C9 b7 J) C$ u+ X- c
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
" n3 L2 f4 \. p3 `( E
/ _0 ?% f s7 a! v, I" h+ u7 [: _/* assign the tl som board LED-GPIOs*/$ [: i6 P6 S: r/ T3 u5 c0 I, Z; V( |+ D- `
static const short da850_evm_tl_user_led_pins[] = {
+ b7 S6 a: U, f2 y1 L7 q% d /* These pins are definition at <mach/mux.h> file */. R) r' F3 b7 B! `: j
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
0 T8 i& X% `8 _( D+ { -14 o4 ]: U: O5 ^; Y
};/ n" I) q2 J# c" P
0 Q8 j9 ^$ e# X& o( K! |2 L
static struct gpio_led da850_evm_tl_leds[] = {9 E1 ?" Q5 p) c* U3 Q
{* p6 s5 a2 s& F4 X# Z) C5 j
.active_low = 0,8 G5 b( ?9 p5 {1 b
.gpio = DA850_USER_LED0,* a5 q* J3 _- ~+ O _( X2 _
.name = "user_led0",
/ f: w1 d" p# d2 V3 ~$ H5 A .default_trigger = "default-on",( p$ x Z6 q5 ^; x
},
- V, ]/ K8 f" A) v/ ]# ~ {6 @+ c! i' V( S* g
.active_low = 0,
2 Z5 m0 T9 r8 |* { .gpio = DA850_USER_LED1,( q) n8 j( t9 A$ H+ ~
.name = "user_led1",3 e, ~+ C9 C, _* R# m
.default_trigger = "default-on",6 B( e8 j' p4 K6 _# X
},
' Y3 L6 T; U6 p- a% g {4 |/ O1 N3 ]( S3 @* J
.active_low = 0,, O& j5 O7 D2 n0 |+ M, R
.gpio = DA850_USER_LED2,; g8 r7 N0 _1 X, {
.name = "user_led2",' b1 {8 |5 v8 J5 o0 b( Y! {
.default_trigger = "default-on",( q5 T" Y) V1 o( S- m
},
9 G! d. M) G2 Q9 h4 j) I; E {# w' `3 P, u% w2 i, `1 Q
.active_low = 0,# ]4 p. q; |0 |/ k
.gpio = DA850_USER_LED3,
+ R0 W( ?9 G1 c+ c .name = "user_led3",
# G3 o1 a7 \. U0 V( ~ N .default_trigger = "default-on",
3 \, i+ A, R5 h; U, R7 d },* Y R' H- O3 h4 A2 R& m2 t
};
0 G: e# s1 _4 K
( D& F" y/ _# B- V% `. t1 Y8 pstatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
4 D* n g, @) |. \8 @+ p .leds = da850_evm_tl_leds,- A% a, i6 G& g9 e8 a9 }0 O
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),
0 P0 ?" l @: A8 Q" [$ f( t};) a4 I8 ^7 p8 q
3 Y) j/ @ Y7 G3 ^( M
static void led_dev_release(struct device *dev)
J& u( |: u; o! y+ a{
, a+ l9 l5 `( D4 }, D) ~+ e};# j; _: H5 D+ h/ D; W& u
( `( j1 j2 Z; ]* g3 x l/ j6 k% I2 F4 kstatic struct platform_device da850_evm_tl_leds_device = {/ e7 b5 ~# G4 d7 Q# y: v& k4 x
.name = "leds-gpio",
. T* d( G" C- s; \) q; B; f2 a .id = 1,
( t0 r1 d% A6 a. D# c9 d3 J .dev = {# _* ~% U' Q; k7 f7 B( i5 v s
.platform_data = &da850_evm_tl_leds_pdata,
3 x0 u' y3 S/ s- ` .release = led_dev_release,: {, M! P* Y( Z v9 L* [
}
3 {: i; [# K @4 L9 c& |, e};
3 R3 S2 V5 E2 M; t R7 w* W
0 j' r+ q, f1 T! X. O3 J Zstatic int __init led_platform_init(void)
: U" }/ v, [3 F1 X& k{
3 H* e* w4 R+ x, ~, d7 `2 J int ret;
6 L `* r* p( v( y#if 0' W4 R+ M' l! N, j
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);6 {& m4 ?2 w0 d+ y* s( ~
if (ret)
; K, E+ I, S2 C1 C pr_warning("da850_evm_tl_leds_init : User LED mux failed :"$ c- u9 ]6 x: u {* f
"%d\n", ret);: } P _. Q. k4 e! p
#endif
* j, k' u( I4 ~% L4 E ret = platform_device_register(&da850_evm_tl_leds_device); l8 T& Q2 ^% p8 d* Q) i1 T
if (ret)% E1 k8 L* p/ u& k- }' G9 k5 v
pr_warning("Could not register som GPIO expander LEDS");
. R; `& N4 I: P& K& m0 B else3 x) k* p2 e9 U, B' L% I6 Z
printk(KERN_INFO "LED register sucessful!\n");0 a4 } n+ e: L3 X+ H$ i
. k9 C- ^/ b0 Q3 p) [9 |0 C3 ~ return ret;4 B2 }4 d* T7 O5 F0 |6 q
}! X. R% q- G# \1 W0 [5 M
! C) B; Y1 a @! y+ g
static void __exit led_platform_exit(void)
+ y2 i! N" H7 ?% j% ?" ~, ^{* v9 E/ A+ y* B( U
platform_device_unregister(&da850_evm_tl_leds_device);/ n+ R* Q$ v4 u- G3 w5 y5 C* l
! u- e3 ?) N; D: F
printk(KERN_INFO "LED unregister!\n"); O# I! k+ F9 C
}9 ]$ I8 m; L1 K, z
8 G: a% N6 s( n" gmodule_init(led_platform_init);
7 z& m8 I G( I6 ^/ `module_exit(led_platform_exit);2 g. C6 |% f0 [ H9 J
5 q. d. U' @! W U" S4 e- h2 |- ^7 ]MODULE_DESCRIPTION("Led platform driver");
* P, a/ F% i9 o4 j' Q$ }& MMODULE_AUTHOR("Tronlong");
2 ^/ I$ u+ W5 N; tMODULE_LICENSE("GPL");7 t" `: ^! b+ n- `+ x' N) X
* X8 W! k. d U4 ~6 j+ u
|
|