|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
! Y( Y- k% G; i, f8 e#include <linux/init.h>. \3 |) y A6 b0 b& F
#include <linux/module.h>2 v I$ S6 y g; K' ?
#include <linux/kernel.h>! W8 Q+ l3 q, r s1 O
#include <linux/types.h>. `/ s' X1 v# O8 i. o
#include <linux/gpio.h>
% S7 u& M* k; c+ m. {#include <linux/leds.h>9 i7 ]2 n2 a6 O9 b
#include <linux/platform_device.h>
# K. c- p6 C9 C4 G1 j
2 G+ u- Q' Y2 t- X& z7 X: ^ }3 R#include <asm/mach-types.h>
7 }! P) K9 K# o# Q$ p2 g; x#include <asm/mach/arch.h>& O/ @2 f& i5 l2 S$ h
#include <mach/da8xx.h>
& S3 o P3 X; X- n6 R; x#include <mach/mux.h>* w# v& s& @' T. L
; U2 W! `, Q$ w- U+ N* R#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)0 m' V) \) y! [
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
" Q* |$ R8 ?, q#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
+ h4 L) I9 {/ |" R: y; @' n9 q# z#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)8 [$ v9 o, [" x1 H# @* H U
' w- }* y/ j* b
/* assign the tl som board LED-GPIOs*/
, I y- Y6 z, A9 qstatic const short da850_evm_tl_user_led_pins[] = {
+ Y5 N, j5 G- a' _9 P4 Q* w0 ] /* These pins are definition at <mach/mux.h> file */
& [: B6 G9 @, O, ^% Q/ f7 Z DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
- `: }! R: o3 { -1
! J5 P+ B9 O7 P6 T, f. C};% P9 q" Q: j; G5 {( r' f
$ C! }/ H$ c2 q K% y* bstatic struct gpio_led da850_evm_tl_leds[] = {% ^0 W, X! Y, L. J; s0 |
{0 `4 Z _8 x0 m
.active_low = 0,3 _7 Q2 K4 W$ k; c9 L& I
.gpio = DA850_USER_LED0,
& E% [% U2 ~: f4 ^7 Q .name = "user_led0",
/ _( R! J/ w. ]2 x9 m .default_trigger = "default-on",- f) ~0 @! T# |
},- C1 X$ r0 b6 \2 e5 z
{2 u0 B: L, K; Y' N# n" }( `- Y
.active_low = 0,3 K3 L1 q/ ]2 I. o$ ]( \/ a& J0 d5 G% N
.gpio = DA850_USER_LED1,1 x! [# \( g1 W( d# h+ N& h+ X1 Q
.name = "user_led1"," n: |7 M, m" I! Z9 t
.default_trigger = "default-on",
, I H r1 v) M. k, X; o. L },
0 {6 f9 L, ]/ x: e" i {2 O z1 ^+ ?9 a* u( n
.active_low = 0,
. z6 B' R5 H* Z4 u5 o6 a .gpio = DA850_USER_LED2,: q; r3 G; a% @( f0 a: I1 L) D
.name = "user_led2",! i" a9 z$ ?% A9 S+ }1 n6 A
.default_trigger = "default-on",
1 U0 Y# v; ]* A2 I! S3 ]7 J },
9 |/ a" V/ f1 d" E0 ]8 m: O% m+ j( c {
2 `9 B1 Z* v. Z! ^ .active_low = 0,# y J: R8 n! z( t
.gpio = DA850_USER_LED3," m9 H& E6 _$ K) m- k. T
.name = "user_led3",
2 o9 n! [9 h7 d$ v- U .default_trigger = "default-on",
% b8 |9 [6 g8 P+ D5 K },
5 J7 t5 B$ b9 A/ c+ J+ q};
$ |- T3 G. I8 i% l3 ?& ^+ {; A5 D1 {% y ]7 d1 d
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {5 P! }' ^( T8 O# g3 q) ]* F# w" d }' j
.leds = da850_evm_tl_leds,
( n) o E# A- o1 h5 p# J7 K .num_leds = ARRAY_SIZE(da850_evm_tl_leds),! _/ S) q1 ?+ j7 a' x$ {
};
, u3 X/ E: w8 o' d) h
. `" K3 `" f0 j H. u$ M, F8 kstatic void led_dev_release(struct device *dev)
$ D+ X4 K' B# c6 o& T{- l8 W0 ^2 z, o" }3 G' c: {
};
4 z+ k- q' u5 E: K/ p0 P
- ?3 n8 U1 D6 Zstatic struct platform_device da850_evm_tl_leds_device = {
) q0 U' h. ^0 {. I* R) V .name = "leds-gpio",$ k; M$ w; T" N4 }1 V* R
.id = 1,0 y R# s# M& G2 ]! U4 }* ]% u
.dev = {% y; J4 B6 g4 ]* c7 \/ `
.platform_data = &da850_evm_tl_leds_pdata,
! \! S& B/ H! R8 y .release = led_dev_release,0 G$ B1 i# x( N( u4 \) M, e! Z
}
) T5 a( x- [+ O y/ c5 A o% B};6 K- g. M; P, h
0 I }$ @9 w/ U# sstatic int __init led_platform_init(void)
9 O7 ^5 U- ?/ L! E, F$ G' E$ J{
. R2 {/ [; {) P+ I int ret;4 s6 A: b6 m& N( j" @
#if 0% g5 q! v2 E2 t7 u6 K
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
9 T- C( O* ]6 E- V8 ] if (ret)
! A6 Y& C6 N z& ?1 {% W pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
5 B, e' c: b( u0 [, i "%d\n", ret);
* h' D5 g( y: T8 ]( u#endif
6 t: ]; a6 Z( ~+ S0 t ret = platform_device_register(&da850_evm_tl_leds_device);
1 S7 d. o* g0 n0 \ if (ret)
! P* n7 P' `: E, q5 N, {3 f pr_warning("Could not register som GPIO expander LEDS");
2 \4 \, x! O# c6 a else
5 C- D; h1 @6 s& a& h printk(KERN_INFO "LED register sucessful!\n");- L! E. l1 f8 Q8 d h! }( t
7 w y" j: J9 Y7 l
return ret;
8 j* s, g/ i6 [+ _* B2 m}$ ]: ~, ^ r) X8 e3 ~* b0 M
* g# L5 G7 |- xstatic void __exit led_platform_exit(void)
4 q- T+ ?# _6 e) E: u2 N0 e& e{
6 L% n3 q3 l) g; e2 I platform_device_unregister(&da850_evm_tl_leds_device);' e! F# h. T5 @
) d' w; \1 ]6 X: c6 j; n( K printk(KERN_INFO "LED unregister!\n");; a5 C6 c( E9 T; I, y
}: q8 k) T4 r- \4 v
! X. p/ m* M7 B, U
module_init(led_platform_init);" B; F& x6 } s& p3 |% P7 V
module_exit(led_platform_exit);# T8 W; W5 h& W! z. f2 a9 K/ h
8 q) @3 a: N" k- s! F0 Z1 e* B
MODULE_DESCRIPTION("Led platform driver");
, n4 [# T3 n; t# J5 ?' I* L% ZMODULE_AUTHOR("Tronlong");
5 y# y T( ~6 z- z3 ?% g' qMODULE_LICENSE("GPL");
, b3 k9 W) ~- e* c6 q, s; y
H. n3 B& I" ~8 {, N | |
|