|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
' h- ~( ?% r" s8 |) z#include <linux/init.h>
$ x7 J0 k# B2 G8 z. v5 ?#include <linux/module.h>
, J; n5 M4 ~2 \- P+ F#include <linux/kernel.h>
- T3 X: y t# H! @7 w( h+ ^; f2 g- y#include <linux/types.h>
5 ? ^1 f, X- t#include <linux/gpio.h>* s+ A! @1 q+ l! w: y0 `% O
#include <linux/leds.h>
$ ` A+ B2 j; v) W0 q#include <linux/platform_device.h>
5 Q+ }& e7 z7 P% s7 J7 }( Q
2 n& |9 T& t9 l4 ]7 E0 D#include <asm/mach-types.h>! D! R1 A) B0 A: O8 }' E, a; }
#include <asm/mach/arch.h>6 B5 C3 B3 B: o. Z# b: v) Z: u/ E7 E6 n" O
#include <mach/da8xx.h>: h1 `% W. G( |. n8 }; `7 k
#include <mach/mux.h>/ _: n: q1 n& }
, f6 [7 q$ T d+ R6 W7 t/ H! d#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)+ {. b0 I; {; u
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5), T. T7 G- N7 y. w$ M+ A
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
. K) T' ^% ^( i) R" t' b) u2 @#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
! I' \ b! E9 I' a5 `' A" o4 F9 k' Y G7 J: S' f9 B& J+ R8 j
/* assign the tl som board LED-GPIOs*// N; h( ` n4 e, T9 `2 m0 k
static const short da850_evm_tl_user_led_pins[] = {
( u" }' ?% }% e1 v) u$ {3 H) a+ l /* These pins are definition at <mach/mux.h> file */
$ @0 Z4 d# B$ c DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
1 F. k) L D# u -1
4 W' R5 W7 `' Y. v- i$ d};
u* C5 ]4 }+ D; l# q- w! P! T$ p2 J1 z1 o9 E, i0 k
static struct gpio_led da850_evm_tl_leds[] = {2 M& X- q$ K& j
{
, V {, p( v4 S2 l .active_low = 0,
$ T6 t+ ?9 p% P( Y .gpio = DA850_USER_LED0,+ B+ q( i; Y" W. ^
.name = "user_led0",# D. a: Q. ~7 N$ q
.default_trigger = "default-on",& a) b$ `0 o" ? B) W: m d
},& n+ y- |3 Q' F9 n7 `3 t9 f, e
{
& Q$ f" w* Z8 m, L .active_low = 0,7 a$ z2 B( d" X; _$ ?1 e* A
.gpio = DA850_USER_LED1,
& b1 ?& E" U2 }0 H$ w, t9 F0 n .name = "user_led1",
! p( w0 l; D. h( N4 L .default_trigger = "default-on",
+ X6 g0 Y* E8 G: a$ Z$ d },7 ^5 T, E6 Z8 h
{
) R$ g7 }3 V* t .active_low = 0,/ d* {* e7 V# ] }! ~! u8 B2 w
.gpio = DA850_USER_LED2,: I0 S. u( c* Z
.name = "user_led2",
5 j6 l* r5 F2 ^- K .default_trigger = "default-on",
0 ]( K* @; _, f. K9 O4 R },
6 _: b1 P+ Y' ~' i0 H+ _ {
0 u7 i( \. `8 B. w' {- m# J" M4 | .active_low = 0,
! C' L n( Q- {4 n .gpio = DA850_USER_LED3,
! d$ G! I2 [! ]! x2 g9 W2 ^! b* z& }5 ^$ }6 p .name = "user_led3",' r8 a& O; M y' I( b+ J/ J
.default_trigger = "default-on",' |4 t3 a+ u' ^' L" P* \; i* O
},
* }! r( v6 K( l' a4 F};
B; }- w: o9 L5 G. r. }5 O9 a
0 }" O5 w0 g- n" L0 ^static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {/ Y- I- [) }& O! a6 I+ I" w
.leds = da850_evm_tl_leds,
; [# S3 d& K' [5 X .num_leds = ARRAY_SIZE(da850_evm_tl_leds),5 J( d5 C2 a! E# |2 `$ [5 C
};) @0 B+ M( |/ a1 x6 ?1 E9 k. Z' z6 h
" u7 m2 a/ N0 u# [. ^% cstatic void led_dev_release(struct device *dev)
! S" Q/ E! \; Q7 k# y& ?, E) B{$ m% _2 I: k H! q3 k0 H* e
}; S- U% \0 H' M3 V M
' n8 h3 e/ s5 D$ astatic struct platform_device da850_evm_tl_leds_device = {4 A4 t+ K! q2 r5 g
.name = "leds-gpio",/ p1 i: r- U( }- L, q* q! N
.id = 1,
4 K, J# N, ?% e+ L9 L3 S .dev = {9 t. s9 D: f/ k/ v& p, `6 R
.platform_data = &da850_evm_tl_leds_pdata,
4 N' S. I6 Y I3 M5 p7 H .release = led_dev_release,8 O) c4 D4 K4 q
}" x2 S) }2 Y+ b/ ~: C Y
};
0 a( C- @+ Z& Q A: L+ Q, H8 J; A" X _* o& d: }$ |9 Y9 o3 s6 ]
static int __init led_platform_init(void)
( |3 ?6 S6 J7 Y{3 S! E( C2 a9 k& ?
int ret;
0 k6 Q) C8 a1 e#if 0+ ~! ]+ v! a" O0 N' w$ B0 v
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);: O7 V" L0 A6 e
if (ret)
5 R! Z M1 X5 A9 D' k/ _$ \) j pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
% U4 T6 w# N- o) S, O2 M: Y; q "%d\n", ret);
' B1 E8 t) X7 l( g8 n; Z* o#endif% F7 T: W5 X+ p ]9 s. H
ret = platform_device_register(&da850_evm_tl_leds_device); P$ v5 w& t% t
if (ret)
! k* l$ J+ g. j pr_warning("Could not register som GPIO expander LEDS"); t f5 S2 `0 e9 n
else" G5 i ~0 |" c5 u3 J! e& z9 n. u
printk(KERN_INFO "LED register sucessful!\n");% p/ V0 F# P/ p0 a
( V- Q. h. X; _, c+ K
return ret;8 w- _* N1 k( b! e
}
9 n2 M* v; A3 x( K
" `) o+ y3 U2 h: O2 Kstatic void __exit led_platform_exit(void)1 [) h) _. w* ^1 N. F; h' I: G4 g
{
0 k% I) @1 ~3 ?. _5 _ [( }* l platform_device_unregister(&da850_evm_tl_leds_device);
9 I. f3 x- a8 ^: @, L, L# m3 d+ q$ l2 J2 j5 J2 [) X, ]
printk(KERN_INFO "LED unregister!\n");) B* N0 a: g9 z N) T9 e
}
2 k" ^5 a! c/ N1 r/ Z) T& m# y t" h7 n: R3 G
module_init(led_platform_init);! G8 I$ z$ F% ^. E
module_exit(led_platform_exit);, @$ u9 t/ t/ ~+ o! l' t; F; e
" ?$ k U9 x/ fMODULE_DESCRIPTION("Led platform driver");" o7 q: S! @/ k1 l% i
MODULE_AUTHOR("Tronlong");! z- @; t- Q+ F- J4 o
MODULE_LICENSE("GPL");
5 Y5 H7 Z, g8 i3 i# _7 g1 X; P3 B5 d" `) {, {' t
|
|