|
|
求大神给下面的程序做注解,请稍详细些,谢谢。" M- X% @' ?: G5 V9 z
#include <linux/init.h>
) l' o# B. E0 I) s# I#include <linux/module.h>
0 N1 _' [7 ^4 N' k) O#include <linux/kernel.h>0 I% _9 T+ `# L) q
#include <linux/types.h>% C: G( t0 D9 q# I$ t- _
#include <linux/gpio.h>& p1 J5 \2 g2 G# V1 e
#include <linux/leds.h># j; H8 b7 p/ I9 T
#include <linux/platform_device.h>3 Q. `' j& b0 u* R* E
6 |, L3 l2 [5 M- [
#include <asm/mach-types.h>
% |6 N6 Y7 Z7 f/ U; T2 a#include <asm/mach/arch.h>
0 d/ h2 w2 v) o# j( g1 y% U#include <mach/da8xx.h>
9 K( h c5 ^+ m3 n3 j7 q/ Q#include <mach/mux.h>
1 I" B. N4 ?8 J/ o* B2 b- D8 c
) ~2 }3 V6 E: F#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)& l; m" q; F/ N3 H, I
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
' B9 n9 F, }( ?8 Q3 l#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)( v5 d: T+ n0 u$ ~% V: O) A
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)( H5 ^$ p5 c9 H
$ D: y5 J3 H6 {0 c7 O
/* assign the tl som board LED-GPIOs*/ A1 [9 M: p$ ~; {3 A
static const short da850_evm_tl_user_led_pins[] = {
. Q9 a/ T$ Q e8 ~8 g) U: Y" H /* These pins are definition at <mach/mux.h> file */2 o% q3 J" i0 f( i* I M
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,5 \% B: \7 @1 F0 Z, q' H6 j
-1
$ Q0 R, c$ K/ \0 N; b};
7 U5 y! w% t' @1 h6 ~; E) I4 Y# Z# B: f l5 e+ m
static struct gpio_led da850_evm_tl_leds[] = {
: d' D" @& h, s7 o {
: f3 E8 p3 `3 r" Z1 q4 ^, d) j, V .active_low = 0, c2 ^) G3 F, F, c
.gpio = DA850_USER_LED0,
2 S, _1 D0 y% @% M8 u .name = "user_led0", p+ p, K8 C& V! Z! V
.default_trigger = "default-on",
% ^7 g$ Q& b. f },: j; n% P+ j0 F
{8 |6 |0 f2 `; W' d4 j
.active_low = 0,; ]1 I1 N9 _; B" V/ l9 B
.gpio = DA850_USER_LED1,! L! S1 Q! e# V: A# K; T- V2 z. U
.name = "user_led1",
+ Z1 S+ k$ g& _5 R, w9 p# \7 L .default_trigger = "default-on",
6 `2 N+ _ W" M1 o; \: l& M }," U1 n) J$ H$ }9 c' u7 M
{
9 r/ s7 ?2 d0 @- e2 C .active_low = 0,( Z9 }3 J: K" m
.gpio = DA850_USER_LED2,
! a% L3 A# q x5 }. { .name = "user_led2",
" x0 e' G; u& T9 [ .default_trigger = "default-on",
" |! C0 ^6 O' c" z/ I$ { },; c' N* c8 B( ^7 `
{
. {5 D/ v; D" }3 D2 T .active_low = 0,
. X: K& t# l; A9 X7 ^ .gpio = DA850_USER_LED3," t8 d/ R, c) h! m7 ^# y; W
.name = "user_led3",& d8 @* }* P! ?3 i7 z8 `( c
.default_trigger = "default-on",
) m- D2 Z) S# R4 J) u },8 p9 ~& y1 z0 K3 O6 y& n M
};
! e) l5 Z- q' p$ e3 Y5 a+ @ {2 c7 l1 C3 T2 }9 N1 q
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {- _) D# L+ j9 M. W8 G
.leds = da850_evm_tl_leds,
/ g7 G3 v, F8 V9 { .num_leds = ARRAY_SIZE(da850_evm_tl_leds),
9 P. k+ F6 `3 o2 `; Z7 {};, c% P. E3 P4 y+ b+ T9 u4 g
2 @6 K' _8 n* R! Z1 ^( c \# D, bstatic void led_dev_release(struct device *dev)
4 J+ b, G1 n! C6 f( {{
, k. i+ t( v/ D* i3 a) c};
. O3 ?( `% X+ ~, v/ [3 X* j
% f. ?+ q/ k6 h; b8 dstatic struct platform_device da850_evm_tl_leds_device = {2 x" U4 E5 e( B! Q" A0 m2 z
.name = "leds-gpio",
/ |2 S- C/ i' t j' o .id = 1,4 l( D+ Y+ O% [
.dev = {5 K$ ?- j0 n! ?$ o
.platform_data = &da850_evm_tl_leds_pdata,6 P9 @8 w! x( Y. |( `& i
.release = led_dev_release,
8 t- U. f( d' w+ U }
- ~9 A4 Q& l4 ~) _};
, e, ?3 A& x6 ^" v: B
3 H. V S0 G: Gstatic int __init led_platform_init(void) ?6 e' Q" p% u# m9 c
{! k8 v% Z) Q/ ]+ a' v( {2 r
int ret;
6 c2 { q$ r0 r: U! U& j0 a#if 05 T4 i7 ~8 ]3 ^2 L( W5 f) ^
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);2 K1 F* {+ x) W0 l
if (ret)0 g% w3 P+ x8 v4 G3 e% F
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
F$ Z6 {0 T& p8 c "%d\n", ret);% B8 B" B8 [1 P) }: ?. {0 \" ]
#endif. l! H) O2 T) l
ret = platform_device_register(&da850_evm_tl_leds_device);2 \' n7 B+ N/ h8 J: }4 H# ~9 {
if (ret)4 V. z7 U+ }, E2 p9 [
pr_warning("Could not register som GPIO expander LEDS");: S3 l: x. Z) U1 J/ ^9 Y
else- L$ e% r. Y0 b+ G8 }2 ~. w
printk(KERN_INFO "LED register sucessful!\n");0 p3 \8 ^6 D) x, z' l% ?9 D o/ ]
2 X# `: O/ t" E& c& H
return ret;
7 S V2 t) U5 q9 L: G9 m3 ~" |}' q3 N. V6 I8 I8 T8 k# s6 q
P6 n* |7 a5 h3 X3 m# V+ Q) i
static void __exit led_platform_exit(void)
, c- e; R: }( Y0 ]{6 _8 l% s9 @$ O: a, Z1 y J) l
platform_device_unregister(&da850_evm_tl_leds_device);
8 p4 `& H8 @* |4 p; Y; t9 H8 o# Q1 Q( a4 _: E; @/ ?
printk(KERN_INFO "LED unregister!\n");- G4 t( T) T K# Z* f" v% @- Z4 W
}
' X6 c, r# d" H5 L2 k- y0 M2 j; G% s0 `( D5 k9 ]
module_init(led_platform_init);
D9 f, e0 {8 y$ X ]module_exit(led_platform_exit);
: k- \4 W. a$ r
6 \& y. P& p- ^$ B* e" m! ]MODULE_DESCRIPTION("Led platform driver");% \$ k5 |( G; k; f# E4 ~
MODULE_AUTHOR("Tronlong");
1 w/ \# e/ {9 p9 |9 M" y# j/ t1 iMODULE_LICENSE("GPL");. ^' ~( U# @7 ?& E/ ^
) h7 L- N! [" |8 |& W( H
|
|