|
|
求大神给下面的程序做注解,请稍详细些,谢谢。- H0 }, ~6 u( X
#include <linux/init.h>& N: Y+ ?8 `% v$ _! L3 v& \
#include <linux/module.h>) l! [ s. u% W. c- G
#include <linux/kernel.h>
: }+ Y; w ~% k( m$ S. i#include <linux/types.h>
2 p: T! q; j9 p#include <linux/gpio.h>: O1 {7 E( o( j! J% ?
#include <linux/leds.h>. N/ D2 Y W6 P9 x9 M6 y; U! Q
#include <linux/platform_device.h>, ?- S# Y0 {; B5 ^1 u! i/ Z
, [0 u5 L) k/ g. y+ ^, X3 g#include <asm/mach-types.h>) j p* B; e" _9 C; c
#include <asm/mach/arch.h>" Z6 ?+ H3 S; C) @" Z z' X
#include <mach/da8xx.h>
+ s$ ?: ?, ]8 m- _( k$ A/ n9 Z#include <mach/mux.h>
5 a5 _$ K& `3 @+ D' E* x ?% k4 a1 {/ J' |2 D
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0): s, H9 J1 ~; g a
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
0 N$ P0 \$ N0 ?4 ]* G, D9 D# @#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)8 r4 Z& X" A8 M, F8 f5 T
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
+ \7 @ G' y/ I. b* F }) L" S* B6 e* Y( S
/* assign the tl som board LED-GPIOs*/- l6 C6 e0 o. p2 Q* q
static const short da850_evm_tl_user_led_pins[] = {0 x$ I; z7 k4 I. L, K# H
/* These pins are definition at <mach/mux.h> file */
. P" u5 F( g6 Q% B DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
% \, Y8 z$ O( }$ s* ? -1
1 x0 U! Z6 v a% b2 D/ u: W3 E};$ {- j. C; p' ]7 k. v6 K6 d' Y6 d* n
0 L m7 m* |0 M0 r& V* L* x
static struct gpio_led da850_evm_tl_leds[] = {
' o+ g+ |. @- c, A+ h {8 o# s" F7 g5 O2 j- P5 P
.active_low = 0,7 n! Y1 }" [4 ] h- h
.gpio = DA850_USER_LED0,
1 Q& ^! x1 a6 n s2 b& }( m; ^ .name = "user_led0",, \2 B N0 y* v3 i# X5 ~4 r
.default_trigger = "default-on",& T( { N$ `) Q$ c9 N5 y! P
},4 d: j7 ~+ t7 {# C d
{( s3 q Q0 ]- I+ y
.active_low = 0,
- x: A4 O! s# ^5 n .gpio = DA850_USER_LED1,
: d( ^, j; z. a: ]3 K& _* h .name = "user_led1",7 j- V4 u5 c7 ]3 W
.default_trigger = "default-on",
! d' z- `% h3 z0 i" j },6 d# ]5 d3 Q" x q0 N$ o; Z
{0 w8 B( T% ^) L" O$ l4 Q
.active_low = 0,/ @# j |+ @, {& W! q. N
.gpio = DA850_USER_LED2,
* A0 \$ n: ~' }3 f8 T8 b. m% x( P3 } .name = "user_led2",* {: Q! X& x$ a
.default_trigger = "default-on"," m$ F1 ?& L/ G; A7 d
},
+ Z, F9 B. I1 V! D6 a# E+ @' \ {
# M- ^7 W; n$ `3 |/ i# `( I .active_low = 0,# S5 G- B( r, j& j, H
.gpio = DA850_USER_LED3,
3 ~# t1 C3 i: X: e0 f: J0 c .name = "user_led3",
7 \3 _/ N1 h0 {; A: S .default_trigger = "default-on",
: a8 }* m9 e8 m; {9 `) f },, T" R/ n" s% N) Z' \4 R
};+ l+ X5 E# U; y
1 Y6 s1 G4 c9 f8 B/ L# I0 S& rstatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {5 A8 n4 T c2 \
.leds = da850_evm_tl_leds,9 ]* C8 R7 `" w
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),/ o! n+ P+ h* i
};- k' B: z* B$ N, \; ?2 i6 K0 Z
3 r8 s8 |9 h; v, q' Bstatic void led_dev_release(struct device *dev)5 c4 f' B% g% w& v9 ~
{* D' t9 I$ H9 Q$ U# n7 g
};
. R5 w- \; z {% d. x, _; V+ U
8 I* _8 ?& V5 Estatic struct platform_device da850_evm_tl_leds_device = {3 H6 P) v( ^+ X, r+ f
.name = "leds-gpio",
- S Y' W* N+ g6 Z7 E/ E .id = 1,
5 y( t; u+ W6 r/ f! {$ R .dev = {2 {% B4 W5 P7 b/ {! q! D
.platform_data = &da850_evm_tl_leds_pdata," f- P+ @6 t/ u5 e* ]- f$ S# I
.release = led_dev_release,
I# I$ ^& N, b5 { }3 s( ]5 E( }. B. F
};+ Z- b, ^ @( j7 k
* `; x# U# i: u$ ?& c2 O/ J
static int __init led_platform_init(void)1 f6 ^+ f( F3 v3 o w" w2 s
{
) M2 ~5 O3 Z, ?( |! G# E% S. K& U int ret;+ I6 V8 k$ [( ?. u+ {. G! P5 r
#if 0
+ q& Z5 P/ K* H% F ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
0 H" L- @: T2 y' V" g: U if (ret)
Z0 V* u% g1 E. I pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
8 o& O3 J4 k! Q: Z6 \5 v "%d\n", ret);* v2 ~' C# I$ G$ L- M/ b. }
#endif
$ r+ ^% M3 k/ O' X. e8 z% Z ret = platform_device_register(&da850_evm_tl_leds_device); g, C$ x: s$ d$ Q; j
if (ret)
: i+ V4 D r/ L pr_warning("Could not register som GPIO expander LEDS");
' d( u9 @- e B4 @+ o! Z7 P else. T0 {; j7 w: @9 s6 ?+ M5 N
printk(KERN_INFO "LED register sucessful!\n");+ ~0 O4 v( f, V5 V9 t% ^
. [' |3 l* S% b: C( } return ret;! f, R, Q) Z! X0 q
}! V2 n8 `# q6 ?: j1 g9 _! j
; ?* [- l* B4 r+ j- C
static void __exit led_platform_exit(void)
1 A l. \! Z* Q) j2 D{, C" A- h( g- s' K8 v$ a- k
platform_device_unregister(&da850_evm_tl_leds_device);2 `/ r6 [) @4 k' V* R
1 H- A/ h3 E: o. ]& W printk(KERN_INFO "LED unregister!\n");
" v4 l# g7 a! W+ q}
) ]. D! p( T% k' f( G* c9 z2 w! }
module_init(led_platform_init);- R$ Y- l4 u7 j2 w- x
module_exit(led_platform_exit);( i B& ^% [$ G5 ~3 }3 c2 U
5 o6 k1 Y8 Y% K9 S# Q' W% OMODULE_DESCRIPTION("Led platform driver");1 [ K1 R0 z9 w. ]0 H% _
MODULE_AUTHOR("Tronlong");1 e- f$ j; K7 D( z& U
MODULE_LICENSE("GPL");6 N9 ?, o+ Z: @) O
" Z, B; [6 R+ C* B2 [
|
|