|
求大神给下面的程序做注解,请稍详细些,谢谢。
, p) r0 r0 U$ U#include <linux/init.h>
8 _9 q, N) h& P4 y#include <linux/module.h>
0 U# F) Z5 e9 P. ^#include <linux/kernel.h>0 j7 f' X/ s6 ]4 d
#include <linux/types.h>
3 l* k% M( a, l: X#include <linux/gpio.h>& } P& p# y* @9 y& m o
#include <linux/leds.h>% [9 ?/ U" B1 ]1 `4 U, S% C' _, a
#include <linux/platform_device.h>) d3 ]! {' b. q- E' ^# {& V
/ ` \4 f/ _% F2 `, K6 b% n' F#include <asm/mach-types.h>
' ]$ o* F: S2 c; k/ Q+ R+ T4 m4 h1 N#include <asm/mach/arch.h> `& W& P9 {- f' E' }
#include <mach/da8xx.h>4 W& S& x- ?; O' J
#include <mach/mux.h>1 e7 J' o+ l2 s' u: V* e* m# O
6 J% t" S ?5 H* b/ }- K- M
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0). {4 v! {# U5 B5 u! I* l$ c
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5), n. Q5 {+ s% e, l% ?' n8 e
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)" ~7 @. R$ }3 v+ A0 r& j
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
& t1 b4 J6 b2 a7 @+ W- A; L ^* I) E# O( B5 _ V
/* assign the tl som board LED-GPIOs*/0 ]# N. g) e, [/ O$ \, V% T
static const short da850_evm_tl_user_led_pins[] = {$ M" W9 U- E5 _0 Y/ f" @6 m
/* These pins are definition at <mach/mux.h> file */- Y2 o! h% p7 t: _7 H. a) J
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
* a' i. s- @% v. d -1
1 q9 ]3 j: x: U4 F6 C};( t/ v" v( k; L1 F3 b, v
3 X. o4 y3 w4 \( H# b: E& X+ F' ^
static struct gpio_led da850_evm_tl_leds[] = {
6 O4 r1 a7 d8 J {
% y7 }9 p/ _& A* S+ }3 D. c .active_low = 0,
7 e m. }& t$ G0 b, Y6 J .gpio = DA850_USER_LED0,0 }: F+ m( P1 [' E% i! V, P
.name = "user_led0",
6 ?0 [, y2 I' r& B .default_trigger = "default-on",
) a% L) P2 I5 D, s },
6 [, G- e ]# V {, ~ d! \- F7 }
.active_low = 0,
: l0 X! A* a: p2 R1 d- D( b- B .gpio = DA850_USER_LED1,8 H6 X- J! `/ ^ B6 ^' p5 K( L
.name = "user_led1",
8 q" j: Q! b+ l1 m .default_trigger = "default-on",
/ a, h$ a' p' e1 V+ X% m6 Z },* \" g# z/ m9 e! o& L1 k7 s5 J
{2 _0 Z- i* A: C$ e# ?+ Z0 P3 o
.active_low = 0,
, D( c1 `5 p2 Q; V7 G: h, N .gpio = DA850_USER_LED2,
/ H9 K) D/ p: z2 H* x .name = "user_led2"," V9 Y% s$ h; T) k# w
.default_trigger = "default-on",/ i) k0 _4 P- d$ J( [- E: U8 T! L: f
},
! ] ^/ t4 E6 b7 W9 B4 x {
4 h$ l1 A; f/ B1 h: t* f3 c .active_low = 0,) b/ g; M, B4 e0 x- j( D
.gpio = DA850_USER_LED3,8 b% i) C' S o {6 M4 S. p
.name = "user_led3",8 @8 q N8 w) F2 w" P0 A6 s' v
.default_trigger = "default-on",
$ T# S0 W; ?+ z9 m4 ?% x. S5 s4 z },
: V L, T* I- ~6 ~7 m: D. c* F};+ \+ \$ y% L' n& {
7 w* y, T" ?. u$ r9 Lstatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {! e7 W$ W9 m4 x/ G) Z
.leds = da850_evm_tl_leds,
3 [; _7 g; q+ h" ?9 t/ _. e .num_leds = ARRAY_SIZE(da850_evm_tl_leds),
' W' j" N9 a1 I" U0 E};9 }# F+ n4 ?, ]4 W, c1 w5 l
% g1 Y4 L% N9 Y1 s, pstatic void led_dev_release(struct device *dev): F) _0 T4 X: b5 G% G
{
4 m. G' u5 Z$ L9 b ^5 }};: N7 x, W( [, G# }5 ]
6 N" K2 _) J% ?3 o1 j: O, ostatic struct platform_device da850_evm_tl_leds_device = {
8 h4 F4 a+ Y J5 \% r8 A ~2 | .name = "leds-gpio",& q: y2 _" i9 A9 [" E. a
.id = 1,: h0 }& B6 b, ]# H
.dev = {
% n% e% ?8 i; w2 q$ K/ V7 I .platform_data = &da850_evm_tl_leds_pdata,
# m; O! u Y7 q/ X( d5 v .release = led_dev_release,
; ?: Q8 p3 q5 z* ~7 E6 v }( Q/ n' }: s" W4 D# u
};
) U7 |% w: V: X3 F0 A; f' i
3 E: w8 L" c1 B2 `# c5 j. Bstatic int __init led_platform_init(void)
8 o7 q) M# D. F2 k3 U/ z$ E5 g) p{
- }; ]$ `+ J' M' R- o. M int ret;# T) g* X# x; A" l! }6 A
#if 0" n7 `) N; n5 j) f* h# F
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);: P: N: Y: r0 S0 M3 n$ w) x% H/ e% ]
if (ret)
! ~3 w! B& h0 y- p1 v pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
% |1 `0 i( U0 ? "%d\n", ret);
( z6 w% H; |5 _0 \$ G#endif
8 b& p& Y% I3 C* ~ ret = platform_device_register(&da850_evm_tl_leds_device);6 C; i+ g, Y# U) ~
if (ret)7 B; T, S9 \. }0 R
pr_warning("Could not register som GPIO expander LEDS");8 n/ `2 n8 K- C8 u: C. A) f
else. R# f7 ~7 K) c/ y3 g; @9 [( F
printk(KERN_INFO "LED register sucessful!\n");7 A# {3 ^- r! e7 J: u& c
5 c( X" j( Q6 b return ret;3 G6 n: X0 z+ G% k) _! R
}
* H) e5 q, t' w
' z0 g8 @8 h% @- L6 Pstatic void __exit led_platform_exit(void). m, K1 t" o Z# [* v
{
! t/ |3 u3 r6 _ platform_device_unregister(&da850_evm_tl_leds_device);4 `. ]: o3 v; w/ ]$ |5 W' _
3 s/ |) w% S6 e+ W4 b printk(KERN_INFO "LED unregister!\n");
% m5 r' y- b& {6 z; D6 e}8 z) P$ c5 v+ U( f* ^. V
1 k5 d0 `: ]+ G( vmodule_init(led_platform_init);) u& h1 O/ q( |; n/ V) J. K+ Q* l* T
module_exit(led_platform_exit);' L4 }* P% `' Y, Q. K5 L
5 X0 T2 {, `% Q8 V: H1 Q
MODULE_DESCRIPTION("Led platform driver");
+ a. b( }) l% l# rMODULE_AUTHOR("Tronlong");
' Z3 y1 R: v8 ]" z3 x* f- W: DMODULE_LICENSE("GPL");
/ |5 O4 e6 Y- n& u8 c
2 {: T8 I; t7 W$ u& P0 U |
|