|
|
求大神给下面的程序做注解,请稍详细些,谢谢。% M4 e, H( Z- b- \7 k
#include <linux/init.h>. |4 f- W" \6 e' H% t
#include <linux/module.h>7 L, J7 f& f4 E5 U& l" n
#include <linux/kernel.h>
1 T3 x4 m3 @. \3 L9 Y& d- Z#include <linux/types.h>2 d- r: p% E1 u2 v* p" z* f
#include <linux/gpio.h>7 v$ K/ S1 `6 N) h
#include <linux/leds.h>
4 k/ u9 r+ q# G#include <linux/platform_device.h>
' d/ T, P* w' ?4 j$ w: N% m
: P$ \1 x) c. K7 L+ A5 Z0 T3 p#include <asm/mach-types.h>, n3 j; v" V- E* L6 V) b, P
#include <asm/mach/arch.h>
; c. C* n$ q: t, Q) P* l#include <mach/da8xx.h>
7 p: q, Q- B# w" P; P& h#include <mach/mux.h>' p: m/ v/ j& X. r
# c$ q% w3 Y0 T" N. K: Q
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
6 C8 E, q+ k- Q ]2 Z& I& g#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
" J3 T/ l/ ~: a% H: l#define DA850_USER_LED2 GPIO_TO_PIN(0, 1): D. N* ]1 L4 A
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)9 r" i/ v5 z- b
$ i4 Z- m$ w; v$ I7 T/ m v4 E. O- }/* assign the tl som board LED-GPIOs*/: g: \, c: |; n4 k
static const short da850_evm_tl_user_led_pins[] = {
/ A& K2 @3 Y+ C$ E } /* These pins are definition at <mach/mux.h> file */# H; f. j' l' d i8 P x
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,5 w. z: j& R) O
-1- v$ n8 S- j; d" x7 N6 u1 }% \0 T% X* O
};# C' E3 w9 E$ Q& }
* V1 n: ~ |, T4 f$ zstatic struct gpio_led da850_evm_tl_leds[] = {
: O7 Y" B( z) T# C B {
# g4 m4 `+ F! \; R6 l' n, t .active_low = 0,
w$ e4 g) Y/ q6 x .gpio = DA850_USER_LED0,! d1 l. g3 I" T4 B0 P/ m7 |! L
.name = "user_led0",
9 {" W2 `% ~8 K7 W! q# h. b .default_trigger = "default-on",' h* r2 Z5 \9 G( F
},
- x3 S) |! z# x# R0 h! }$ j {2 z3 j' G. h" k
.active_low = 0,
& }* s. P- V1 X+ Y; e' t; T .gpio = DA850_USER_LED1,
/ G+ ^* s* t) x j: h .name = "user_led1",
; `2 R9 u5 m0 I2 m* ?6 t* v .default_trigger = "default-on",
$ y& J) f5 I. \/ M, F3 I },
: K/ i( `$ p: [ {; J! {) Y9 k' _% z( a. p" U0 L
.active_low = 0,: X$ L* h- b% u8 S- q. o
.gpio = DA850_USER_LED2,, h' t: x9 ?+ f, }, Y) q
.name = "user_led2",
7 v% f6 c- o8 V; O .default_trigger = "default-on",
1 j% r$ C& b* r: c },! O1 y, ]( a* E, q+ D4 H
{
z2 ^. n. }$ g. H& f5 j4 Q .active_low = 0, o" G- J {( y% R
.gpio = DA850_USER_LED3,* s2 t1 h% i* @# q/ [. T$ F
.name = "user_led3",
" n8 Y0 g' p+ I9 i .default_trigger = "default-on",
5 y5 `6 e3 R5 _* b% Z& ?+ u! c },
+ j" u+ U, P+ x# y+ i3 r* V6 p% y};
* x$ }7 Z" n: G& M5 r+ G; a3 c- m; Q. w
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {# ]) M- q* H+ Y- z7 e3 K3 W
.leds = da850_evm_tl_leds," j) d9 K" G* U7 N( ?- w! F) Q
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),
8 P) g* v* R; S1 J. k; a7 z j};! d/ ` L" ^/ w# j2 u+ }/ n) M
) l% G4 S! f3 ~" c7 n! f
static void led_dev_release(struct device *dev)
1 _% r6 J8 ?% A7 ?# ^8 v{) N8 h! x+ |7 \/ w( a) N" a( U
};6 i+ x# h* M- q1 L5 N5 k
8 I2 x& _ _' H$ N6 M# S! Jstatic struct platform_device da850_evm_tl_leds_device = {# y v4 I# ]9 y7 y
.name = "leds-gpio",
4 Y! s/ ]3 c G3 X% L1 s f6 ] .id = 1,
" m4 T; {" n( T6 E .dev = {
' i$ g: ]% I1 L6 Q .platform_data = &da850_evm_tl_leds_pdata,
" ^: E) o4 r: Z' K b .release = led_dev_release,
0 d2 @$ A: c# y }
# C( j7 f6 d; p5 ^& V6 C6 d8 u};
' R4 ~9 {% s0 y( g* r: p; ~" K2 Y H6 n/ Q- y/ ]
static int __init led_platform_init(void)
/ ^- T1 g" ^; I! Y1 e; P, F{
. Q( q2 R9 s% p, J: t. `7 N) [ int ret;/ y9 l# e! A7 }" X( E
#if 0
" c" ^+ _% v' J8 E. I ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);( R5 I/ o3 _6 ~ C! t
if (ret)8 p* p1 O( X5 b+ |, ]
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
, z6 U9 |" {3 ^% G "%d\n", ret);
) U* z6 V Z" ^9 g8 b: E! ^#endif/ ?0 b2 F; r K' D+ I: A7 {
ret = platform_device_register(&da850_evm_tl_leds_device);" i6 J: t$ O+ u ?/ i- `6 J2 |
if (ret)' ]/ A/ |2 _; J9 \( `* ~
pr_warning("Could not register som GPIO expander LEDS"); p- Q/ N8 p+ \9 w
else9 D& z! j" \, m6 Z8 G' X) h
printk(KERN_INFO "LED register sucessful!\n");
$ B6 k( y4 _2 k5 `- {' U* g' M. F0 L" l+ L6 `1 O
return ret;) l: @# t' `% f1 j
}2 J) }" g% U9 u; w" n6 R9 H
: t3 g, q4 R1 }# M
static void __exit led_platform_exit(void), o* u# k. n" O6 a! [, f# @( x
{
7 v% Y7 l+ |) g3 J# C0 Q% t platform_device_unregister(&da850_evm_tl_leds_device);
, W0 \8 p9 L# m7 ]
/ c" V4 q0 j) g- b" e; k printk(KERN_INFO "LED unregister!\n");3 X/ B6 @2 N! a/ Z/ O0 _
}
: z9 c, d' y h: a( l9 w" L
! y/ `$ b+ N: I- l Wmodule_init(led_platform_init);( g0 r; X2 a, L7 H3 k7 c+ _
module_exit(led_platform_exit);+ g5 M& n0 ?7 X6 }1 R5 w
8 |* W4 [* O4 o6 X+ ?
MODULE_DESCRIPTION("Led platform driver");. x: `7 s9 k, Q3 c8 x: U v+ y" m3 b
MODULE_AUTHOR("Tronlong");
/ b! u3 X* z8 K. O1 hMODULE_LICENSE("GPL");& i) {& u2 n G5 d
* O$ j! U5 I& ?! B4 c+ [ |
|