|
|
求大神给下面的程序做注解,请稍详细些,谢谢。2 c& A: \5 \. c0 J% F" Y9 }% f
#include <linux/init.h>
/ j) z# w8 q5 v#include <linux/module.h>) ]% N8 v' n8 E8 t0 q$ J' d6 E0 S, h
#include <linux/kernel.h>
. [& V. j: {, e1 e$ \7 L! N#include <linux/types.h>
, }. Z, r4 C- `" ^#include <linux/gpio.h>
o) e2 @8 e0 b#include <linux/leds.h># N, e& h: c6 r, L5 p
#include <linux/platform_device.h>
0 H/ n, ^3 U' n b ^" H! [3 H$ r! M; G' e- w
#include <asm/mach-types.h>
4 i4 `7 i3 D0 j5 G& E+ y, h( B#include <asm/mach/arch.h>
* I" E6 d R X#include <mach/da8xx.h>
4 m8 R- G7 M, x7 y( h2 ]#include <mach/mux.h>
. o' A/ u7 ^( g6 a4 m# F; v
* U4 G2 m9 t! j. q$ r% {7 O% j$ v#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)7 I3 c% G9 V |+ |1 X& G
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
& G" j" Q0 P. A) ~#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)( F: c3 O' `- ^7 w, y
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)- o* D1 Y; Q4 R s t
' y6 Y1 `0 Q5 ?: C: I1 ^3 A/* assign the tl som board LED-GPIOs*/
' Q2 B- O1 X) y$ w. _" O. Z& u4 l9 A6 ~static const short da850_evm_tl_user_led_pins[] = {
2 {7 K& n9 g8 W1 i8 C% P* s) v /* These pins are definition at <mach/mux.h> file */
4 Z! Y# ?8 c. J: F$ C DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
# a6 R p7 Q) X* H# N: ?7 J -1! M6 Q1 l! G/ C
};% {# ^ O2 p2 r1 p4 i" {! D
# b6 e) o6 b' Rstatic struct gpio_led da850_evm_tl_leds[] = { |" _- a4 b, p
{
5 v, C( Y% S- L8 Q0 t .active_low = 0,
! H2 Q/ n2 I9 T" U1 X .gpio = DA850_USER_LED0,3 Z+ R' C2 G' P( Q7 f! n
.name = "user_led0",. ?7 T6 D, `5 {4 R% ?
.default_trigger = "default-on",* ^/ H4 d7 |& F5 {9 I0 p
},
- g# J8 I- w$ G) | {
. X( [- V4 l7 Z3 B1 r7 J$ Q) l .active_low = 0,
1 e. d" {! }4 [7 s2 a/ l .gpio = DA850_USER_LED1,
. U/ L' y K0 v, @4 x2 W+ R; e .name = "user_led1",
* z Y m2 [# J e4 o6 s, O .default_trigger = "default-on",
. I8 K" j b) h },
8 V* H# `' \( l$ J {2 X, u# i8 p* Y2 _4 @, f
.active_low = 0,0 u/ R& Q' H! `2 {# \0 j- F) M
.gpio = DA850_USER_LED2,7 T: C: L7 Q4 ^& q( R& ]
.name = "user_led2",
% ~* s8 I, Z) I- S) c .default_trigger = "default-on", H) F$ P% Y7 o9 c- l
},- z& D$ O6 R: e+ F: I9 I
{
. L% e6 n6 T% f. O- T6 } .active_low = 0,
9 J+ a" E# j/ s) }7 v6 Y& T .gpio = DA850_USER_LED3,9 @' T# `1 A" t$ D [2 r# Q1 M3 ^, n
.name = "user_led3",# Q: G) c, \" d
.default_trigger = "default-on",
: z0 X; G4 q5 @ },* G# h$ e5 {/ {( j' H
};& m6 S& Y7 ^; M9 @* G0 O2 n& I
, ^: X! \3 Y2 O. vstatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
7 z+ Z8 y" t% n; @2 k7 U) B .leds = da850_evm_tl_leds,6 s* c4 V! z5 i0 e* A* D0 A# z2 N8 j" F
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),
4 O n% c M. o1 @* y! z+ x};
& P N& {/ `2 P# P: H0 l% j' \
5 g- [( c; A+ d' ~static void led_dev_release(struct device *dev)$ _9 z( P: }9 d6 D9 j. h1 ?9 s
{
. j) |! Y- E. l# W( T};
. r" K3 o( s1 v* t0 k0 P, j/ @! O; I! ~# W, L) I0 C9 ]
static struct platform_device da850_evm_tl_leds_device = {8 c- L3 m$ U2 {
.name = "leds-gpio",8 g) Q% w5 d/ J# I
.id = 1,
- k- j6 {; f' Z8 } .dev = {( D2 |: R. N/ E0 k8 a# o) G" P% \
.platform_data = &da850_evm_tl_leds_pdata,/ u5 a" Z# @ X- g
.release = led_dev_release,
$ b! [) T8 Z5 m. V/ o; v6 Y) T }) k$ W0 p6 Q/ I4 ]& w
};" w' c6 `* V/ z. Y) G5 d
& \4 v! e2 x2 G- \) @
static int __init led_platform_init(void)2 a" m: ]- E8 n( I) C
{6 n2 F0 D+ a1 Z; Q* d0 F! w; h( X
int ret;
( q; u8 F, `: O) }% r3 p- ^#if 04 X% G w' p1 ]; r2 Q6 I
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);# w* W9 w/ h* z5 C, I8 S
if (ret)
( {3 I D0 W k8 U ]& g$ H pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
7 \$ Y/ A2 e, Q" I2 c( V2 g "%d\n", ret);
# O* D! n$ T7 k$ ^& V; C#endif; k% y3 y s, B1 i0 t* }
ret = platform_device_register(&da850_evm_tl_leds_device);
$ g3 [5 c& F# ~% U if (ret), P9 e5 a- Z! ]. i) e j
pr_warning("Could not register som GPIO expander LEDS");3 v/ s" _) j3 }* C2 L& U# Y
else2 A. e8 d ]8 }7 R: O
printk(KERN_INFO "LED register sucessful!\n");
& K7 m# `* w7 L3 Y+ M
9 |1 T2 [( I0 f return ret;
m) ~, s# J* Z b# G7 r5 S}8 h! `' r" ]5 D; x7 H/ G7 ^: p
" b5 V1 g9 {4 T
static void __exit led_platform_exit(void)
P- f$ Q& X' Z{
& S; z5 F' n2 a; m platform_device_unregister(&da850_evm_tl_leds_device);
& O9 n7 ?, I7 U6 K! T( x% W; s- Q0 R& p/ i
printk(KERN_INFO "LED unregister!\n");
+ k6 Z+ x9 F5 k. {( @8 K% o}
6 `, K4 F- ^2 ]. ^- Q
B. t$ m+ k4 N' X& dmodule_init(led_platform_init);
; X# X, @# M9 e" g1 lmodule_exit(led_platform_exit);
6 L% d d/ n V5 Y* a+ m! F1 [* ]. B7 G* F3 y1 N2 N I& n
MODULE_DESCRIPTION("Led platform driver");
& n/ j S3 [: g2 t4 y. k6 L% c* yMODULE_AUTHOR("Tronlong");+ j0 l j; A o4 ]4 p
MODULE_LICENSE("GPL");
# Z) S* S$ |/ o2 F' a. J
( n0 P! R- K& L3 p$ | |
|