|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
1 ?3 l. }" q! l0 b3 P4 F7 o#include <linux/init.h>
8 Q3 u+ j4 m* h- h! x#include <linux/module.h>
7 [6 N5 w$ r) w# h. t#include <linux/kernel.h>
7 X2 R0 O( Q# L/ g- C#include <linux/types.h>/ {% y% J$ Y$ `
#include <linux/gpio.h>- `1 @+ a* }% f
#include <linux/leds.h>: A) }7 w T2 o& m
#include <linux/platform_device.h>
& ^9 V, D R. g' Q) L* I% O
( ]' o+ j4 J) |! b9 @#include <asm/mach-types.h>$ E% X7 P2 d. |! Q% h( n, ]+ a
#include <asm/mach/arch.h>" n5 f: H- `5 H/ B% D- u
#include <mach/da8xx.h>- Q3 \& l. E; v s7 d6 u
#include <mach/mux.h># i# y- m4 t0 S0 f/ x. G5 ^$ p
" S; w) A" C" Z, P9 {4 y& C. G& `
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
4 T+ A. e) D, S, h9 F#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)% _+ }% l3 t( ?: e6 B8 X* `
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
. I4 l0 I4 d$ `. F3 v" O8 ?5 H& v#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
% g. {; q S- k* ^2 u5 T+ Q5 z, V$ b% O
/* assign the tl som board LED-GPIOs*/
+ w E( x4 x) |4 Sstatic const short da850_evm_tl_user_led_pins[] = {
) m' @2 Y1 z# U /* These pins are definition at <mach/mux.h> file */, }$ `* {+ X( Y' p$ E
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
. `/ O9 t' M6 A1 q -1
% d$ f) d+ x( l' E3 j: h};
3 ? u/ H. n& ^+ N$ K I& M9 m7 U( r( j# C( n" w, o& k
static struct gpio_led da850_evm_tl_leds[] = {& Q4 P, l5 [) ^& y4 U" b
{* G5 b! X4 o3 j, q4 i9 Y' w
.active_low = 0,
) ~, Y& y r- W" e' b2 p& S .gpio = DA850_USER_LED0,, t0 d: v2 P7 [4 i5 y9 Y' @
.name = "user_led0",
S% y: O9 I9 B/ ^- u( V' j/ m .default_trigger = "default-on",6 R; k2 ~5 W* }; g2 K8 B' d1 p* [4 y
},7 q* v: K* J0 H ?. c6 x1 k6 }$ @
{
4 E9 }0 [* n: D( Z* t4 v" f .active_low = 0,
8 v2 F! N) H5 F- ^ .gpio = DA850_USER_LED1,2 t! Z; s; |' _+ R# Y. [
.name = "user_led1",
6 o$ q9 l% ]8 _# b .default_trigger = "default-on",
/ s& t' ?: f; t6 f5 g4 K },
4 q; G, C3 d; R$ a0 N {7 Z, y( b4 W0 f9 u, |0 J" x P8 V
.active_low = 0,
3 f9 w9 Y4 Y9 C2 i .gpio = DA850_USER_LED2,+ M& Z: Q7 ~ C. V$ Z+ {' S- D
.name = "user_led2",
+ `) W" I( ^: ]3 P8 N .default_trigger = "default-on",- y: v1 k) U8 i2 Y5 ~
},
9 I% Z8 M }4 t) V: J7 s# d {; h- I# K9 a: v8 z, R" G
.active_low = 0,: } m0 k1 v/ l* W6 k
.gpio = DA850_USER_LED3,
7 H4 n9 I" A! C: d5 K .name = "user_led3",+ z' I( _" E" O' e% O8 O0 {/ S5 d
.default_trigger = "default-on",% }/ T. j4 C) G: z, j
},
; y! g* t" k; n& C& C};
( x5 w2 a% T6 X
6 C& s* A2 V' t0 x/ R! Mstatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
; r+ y6 ]% i' {( Z& U N .leds = da850_evm_tl_leds,
% v& R. E, w0 E0 ~ .num_leds = ARRAY_SIZE(da850_evm_tl_leds),
3 D w& v: t7 h. k' r1 |; [8 o};
6 V8 H0 Y! J" M8 o+ L$ _6 s8 x6 s% p8 j [
static void led_dev_release(struct device *dev)0 p' ]9 N! D/ d" n5 q @* K' r' w4 e
{
, o! o8 g6 Z: m& q) b6 b, r};
5 T6 G" g. z( F2 m+ u) v( }* O3 t S6 c* C; H
static struct platform_device da850_evm_tl_leds_device = {0 d* X7 |& J$ R9 o) G
.name = "leds-gpio",
- `' S) O& r$ ? .id = 1,
. Q; o6 [) S4 O; W. f .dev = {$ D2 E. z* s1 Y: [: }0 A
.platform_data = &da850_evm_tl_leds_pdata,! o3 S+ E' G- d( f) V/ S9 e
.release = led_dev_release,( b; `) T! d9 h$ d6 D
}
5 |4 s/ Q) g; ]& M! s, b};, a( B& m: \" J o% J% A
; o7 q2 Z! J* b1 C4 I" w
static int __init led_platform_init(void)
) k1 u2 j( D, L6 _) n{
+ W- P) k& Y% `# P1 |8 n0 ~6 { int ret;/ l6 e: K# M6 T3 C: v
#if 02 c; B z8 A/ P$ d4 r
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);/ q6 K# s8 z" x; I
if (ret); J1 M5 C0 C' o4 B& {
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"- T% `+ q* ^4 j& q- q
"%d\n", ret);0 {# u' Z- E# t* s1 |9 g
#endif6 r( p. i- D8 Z" q8 i M
ret = platform_device_register(&da850_evm_tl_leds_device);: c+ G0 N( D- |7 Y# v) J5 n8 q' d
if (ret)
0 {7 N9 f1 \9 z0 e* M' C" {* k pr_warning("Could not register som GPIO expander LEDS");* A7 p% o2 e0 B" v9 Y0 B: h
else
( z6 t/ R+ y/ V; e& c2 o, A: ^+ Z printk(KERN_INFO "LED register sucessful!\n");
( `" m4 U. R/ c, @2 Y: Y) \/ `% }3 B4 V" q1 l E
return ret;, M8 v+ `: J# q9 n2 o4 W
}
, I# e2 K3 r' M: H9 Y% {+ A- i h+ ?
static void __exit led_platform_exit(void)( }1 Q6 P" O8 H$ E5 g
{9 i3 [' }3 E. U% r/ N! U
platform_device_unregister(&da850_evm_tl_leds_device);
3 L6 w6 C1 m9 b n* u0 S4 v
9 j. a j9 l: e2 P3 U+ s1 @ printk(KERN_INFO "LED unregister!\n");: j5 s1 }& z' f/ D! m4 Z _
}- H0 Q! }) i# o, n9 R" t
6 v% t4 R2 H7 B, Z' X! `9 v
module_init(led_platform_init);0 C$ a0 }8 z0 D$ d. J
module_exit(led_platform_exit);" |0 x: q# F& c
" q+ @# E# Q1 }0 H: X, QMODULE_DESCRIPTION("Led platform driver");8 O4 C1 ?3 C& W; G/ D
MODULE_AUTHOR("Tronlong");
1 y: d% H2 B1 ~ \+ Z+ IMODULE_LICENSE("GPL");/ n+ m' y+ U: q
+ p/ M9 p1 ]1 B/ v/ y7 K0 e |
|