|
|
求大神给下面的程序做注解,请稍详细些,谢谢。2 W; K# A$ |8 }5 ~4 |0 e
#include <linux/init.h>" w, z2 m0 |# d+ r! d3 a, e
#include <linux/module.h># J5 H; O$ h" M. S5 X* i
#include <linux/kernel.h>
" Z+ K/ V# E. x8 B& M#include <linux/types.h>, _ E+ p# E8 Y. W$ `
#include <linux/gpio.h>
! S; }5 ]4 s. Z( B! A#include <linux/leds.h>
9 M' _0 |0 |* x- x" X#include <linux/platform_device.h>8 E% d4 p# E7 m+ a
0 o* g d7 k+ D! M/ x3 w#include <asm/mach-types.h>
" C! V1 g5 H7 A3 c" Z( W" W# i#include <asm/mach/arch.h>% \4 [5 a( `( ?& a! C' D. n! y
#include <mach/da8xx.h>
' r: [, d# W! W" J' |" W#include <mach/mux.h>7 F. j; ^6 }" x2 w; I
- u' |* m: C: G! t( G8 l5 J% m" Q
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
# v8 m$ ], T8 x% t0 q9 E#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
( }' U# @& L: i# |2 |- |7 P#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
' y+ z/ D' ]$ ]$ F# Y9 t#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)& _4 T* k% b" z6 d7 x" `
7 O- [* P5 q; ^$ V7 J
/* assign the tl som board LED-GPIOs*/8 ?; T4 v- t9 d" V
static const short da850_evm_tl_user_led_pins[] = { y8 d3 J3 A* I5 }6 V
/* These pins are definition at <mach/mux.h> file */) J1 F( ]2 }* y7 }# l' q6 m
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,! P4 T2 [: }* n7 i
-1
3 Z' L! `6 ?$ n4 K9 E};
' R, |- u! p' R0 t. \+ r* y" \5 X. s' {( I$ W+ v* m2 ]
static struct gpio_led da850_evm_tl_leds[] = {! @* a4 K2 J# P V
{
0 _1 G- s) {" \5 Z9 n) Z: v .active_low = 0,
' H( v: T! Q) C1 [% _$ \ .gpio = DA850_USER_LED0, Q+ ^/ S+ |0 l) |" Z7 X& I
.name = "user_led0",
6 C! x9 y. u4 p0 G+ N7 t" ^. ^ .default_trigger = "default-on",( v9 E. u& N% [/ I. g% ?
},
) x: F4 y7 h4 Y/ K {& a& o R; W7 ^! k
.active_low = 0," U7 I6 g: y% |- O# s. d3 V
.gpio = DA850_USER_LED1,4 G. O2 K; I) h" F
.name = "user_led1",
9 g7 P; M3 {8 S .default_trigger = "default-on",
; V. F7 G( E* ?, Y# a, O5 |' ? },/ w. @% G8 ^8 F( H% e% E+ d0 t+ C
{
$ U. d2 h! o y/ E .active_low = 0,% u% K5 C* w7 D% A' I% t
.gpio = DA850_USER_LED2,2 M: ?8 e* s- N7 D( q
.name = "user_led2",
# I3 u$ G# W5 k- G5 z .default_trigger = "default-on",
7 g0 c5 `: N* z% Z; P$ }4 V },
1 M+ f2 @8 z. R- T! ^7 B {
- t \# H/ W9 g- V; _0 P |. d6 H .active_low = 0,+ z1 n4 W+ j/ ^7 l% m1 [
.gpio = DA850_USER_LED3,1 N$ m' q, s6 W7 X# |
.name = "user_led3",, l0 y" B# M7 m) P
.default_trigger = "default-on",
! L8 S4 P! Y/ ^2 ^9 i },/ p* a/ {1 c7 j! X3 O7 g+ |
};$ _/ V# |; W! k0 E
( }- t' c0 a' S6 T# t/ f
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
7 {# H1 \4 Q* H$ S5 \1 E5 z+ E* n) u .leds = da850_evm_tl_leds,
$ n. \* [' K# X' j .num_leds = ARRAY_SIZE(da850_evm_tl_leds)," d$ l" |3 N1 q0 Y8 |0 {- P: W
};# c7 Z: W, J4 P4 ?8 X
1 N: i0 C4 `+ D s' O$ sstatic void led_dev_release(struct device *dev), `1 T+ b. T5 q9 j( o' Q3 e0 s/ h/ t
{9 b6 g1 c* ]" D! | r& u# G
};
/ I& W/ R9 m7 F' A1 c2 i1 `$ @5 P/ q8 |7 @
static struct platform_device da850_evm_tl_leds_device = {
1 y6 O* ]" I# L3 w" b( F .name = "leds-gpio",, ], }) x$ W8 w% B! T
.id = 1,5 n: z; u7 v+ ]
.dev = {- j8 a5 Y! |) I0 I
.platform_data = &da850_evm_tl_leds_pdata,. E( z' _- O! y1 R+ q
.release = led_dev_release,
! H5 \. S" @/ R) E i; t6 D }: o) r6 z/ `0 b- v
};/ {, R' ]7 c( T7 C: p$ R- s) {" n
( A; T C8 G. estatic int __init led_platform_init(void)- N$ J& B3 W# l* i1 \
{8 z: G9 v; I8 c- t' }
int ret;
. z+ w4 x" e+ b1 k7 N#if 0
' S) S: K( a8 p. k) L ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
; S) ]* T. p; R/ z( }, a$ ~& N% n if (ret)* r: j& _, M; V w" K) J8 ]
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"7 @: t( r8 c; w3 g6 z) `( b
"%d\n", ret);
$ j" t+ F3 ^7 S% Q8 \8 F2 t1 E" w2 q#endif
' I+ B& o# o- R1 [9 X ret = platform_device_register(&da850_evm_tl_leds_device);
4 w- v" c; C, e5 L if (ret)
; l4 z7 s2 g+ O) P4 e( O pr_warning("Could not register som GPIO expander LEDS");
: [9 D2 I) c0 U* d' ~5 I else
. L+ H6 \# l0 [3 Q' a4 G3 ]/ L, @ printk(KERN_INFO "LED register sucessful!\n");
' `1 n) K# O, B( ?& m$ v6 X0 k
return ret;! W" a4 }0 e' i/ M: l
}
7 R8 y$ ^4 @/ e1 N/ e* v
7 K3 G3 |+ t8 a, W8 q* T/ \2 dstatic void __exit led_platform_exit(void) r( C- v" ?8 O7 ?' r; N$ c9 j
{
# t* g; t* `- V4 W platform_device_unregister(&da850_evm_tl_leds_device);8 Z' x' t( ~, L9 V3 d6 B( P
6 g" N) R! a, G
printk(KERN_INFO "LED unregister!\n"); s+ j, E# L5 z' T) L
}
: F4 |5 R" C0 a W: b2 U& v% k& e: X' G
module_init(led_platform_init);
( F! Y- l" y% P$ k0 [' W8 m8 s# N- Vmodule_exit(led_platform_exit);
/ p; _' m; }' q# j1 ?2 D8 O9 g t u4 ^: n
MODULE_DESCRIPTION("Led platform driver");1 F6 k) @3 j7 u% Z0 F
MODULE_AUTHOR("Tronlong");
- B3 H/ ^" B! ]5 H3 zMODULE_LICENSE("GPL");
) {' `9 z( I* b$ I/ h* C% E3 J
6 O/ ?3 C0 p7 u+ o: n% u |
|