|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
3 J) F2 j+ l7 X4 g* `7 R#include <linux/init.h>- C' V& D5 C( i8 N E! L z) {0 B
#include <linux/module.h># ~7 n0 L, `1 y1 N9 Y; a
#include <linux/kernel.h>
9 S1 S1 p) N* f) J3 `* T#include <linux/types.h>7 g5 d8 V+ E; ^! h2 m4 }6 s
#include <linux/gpio.h>8 i: i7 r+ ~6 T6 z
#include <linux/leds.h>
7 {& W+ e" {2 r$ w3 ^6 v) j#include <linux/platform_device.h>
! `) Q5 G5 V" o# N3 Q4 E/ U. _: K3 h5 p, U$ D% N9 V+ m: e1 A+ }
#include <asm/mach-types.h># U; ~; j! C1 `4 _4 K+ ?
#include <asm/mach/arch.h>" n: R/ T. `+ O
#include <mach/da8xx.h>) ^6 l* n8 r5 E1 q+ ]9 s
#include <mach/mux.h>
" e X% v/ ?# J5 F& ^, L& U' u# C, ?" p+ N3 j" {1 K
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
6 a+ S# `/ ^; L3 u#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
+ X. C2 f; E- y#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)2 F: }9 V, R+ D3 [! K8 R- R
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
. ?! W9 u2 D) G, o: `, }6 U- t1 \6 x$ a' v7 I# p: t5 u
/* assign the tl som board LED-GPIOs*/. V5 j- L( h0 H& D# X* U
static const short da850_evm_tl_user_led_pins[] = {
+ b) Z0 C1 _$ o! ~2 W; E! F @+ p& D Q /* These pins are definition at <mach/mux.h> file */$ s" ]: c' n5 v: W7 K# W& K! U( \
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
- E' q4 d4 G s$ I2 }8 w% I7 m9 j -10 N* ?7 i/ X) U0 M- H ~. x' ]
};' z- g5 M/ q3 \' Q% ]
) c+ S+ d5 J ^$ }$ t" A& I% ]
static struct gpio_led da850_evm_tl_leds[] = {
: h( b8 N- k9 y& H- v {
7 c% i5 j- Q |/ W .active_low = 0,
' P( L4 U2 G1 H; V' j) _0 ^. Q( h .gpio = DA850_USER_LED0,
! j' H, z2 S3 A6 s, ? .name = "user_led0",( z1 O% A, e5 n# c
.default_trigger = "default-on", t1 U. w- B s, |) e
}, m2 N" _3 ?) ?# ?
{
% e% O( K' M/ n0 J .active_low = 0,4 \; W/ o! T: K r! I
.gpio = DA850_USER_LED1,
* w! a# _" O. o0 C3 z5 l& C .name = "user_led1",
S9 z, m- D3 H" C" V9 C% U) [ .default_trigger = "default-on",
. R& g( Y$ N# b U5 H: y8 [ },; O9 Q9 G) }: j6 d5 ~2 y# I
{6 o) e, }( T2 ?4 o" m8 j. e
.active_low = 0,9 ] Z5 _* S, M* b5 r
.gpio = DA850_USER_LED2,
( _0 W! _; c6 _ .name = "user_led2",
, C( _2 ^8 F* A6 z, I6 y1 N .default_trigger = "default-on",$ @& B- d5 B3 H. e+ }1 c4 b3 f) L
},1 S0 G5 A+ n- h% ?- G5 Z+ D# c X# ]/ t
{
# k% K9 R- C: c3 G0 w2 L# N0 t .active_low = 0,6 X: a+ c& x' C6 m
.gpio = DA850_USER_LED3,
5 j9 ?9 x! `# o# v7 s .name = "user_led3"," m1 J# g+ J2 @% T
.default_trigger = "default-on",9 x9 t' E2 c- d, k, E
},
' z- A/ ]6 T5 ~ N};
: t! F0 v( ^0 {* ~- u. E
3 o/ [3 T1 J! B" B/ c7 Qstatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {6 B4 u8 n! O$ y9 c! {- ~3 @2 v
.leds = da850_evm_tl_leds,! O2 H+ ~) d' Q
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),
L& T! K$ H/ m6 M3 I};
3 h; g% g! w/ U) r# I; P: Q+ y; {$ ]5 Z" L) b5 i" i; V2 C
static void led_dev_release(struct device *dev)6 z- }# ^7 K* ]2 q
{
, l; o# M5 r' J/ ]};" W$ y& |' [) n( T( K6 U0 B
: n, W9 G- c+ G! F3 ystatic struct platform_device da850_evm_tl_leds_device = {
# R7 E; B5 m3 Q: m* }7 _0 a" h) O5 s .name = "leds-gpio",
: L" C9 y8 i/ e4 b0 O: ]- r! ? .id = 1,- [ M; J' L O& I
.dev = {) }- Z9 W+ T9 Q$ Y/ C0 I
.platform_data = &da850_evm_tl_leds_pdata,: ?9 d: J+ S) j$ e6 W
.release = led_dev_release,5 v* ~% M; A% _! E$ Q0 I8 `' Z8 \* u
}. L7 q2 \7 H8 l! V1 U/ r% l7 G
};
" |6 A1 f8 V A4 M9 H
6 s8 L( v9 H9 e2 j/ S/ r1 A7 Ustatic int __init led_platform_init(void)
2 x9 Q R1 [8 b$ c8 F7 ^' S{
; W& f( h! q, e" t$ _9 D/ m/ [ int ret;
/ U+ p& E& C5 i9 H: v0 A#if 0
# y; ?/ p2 b. a1 _% E. j ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
$ z8 M4 k% }, }3 C if (ret)
f% G2 C5 _5 B5 i2 t pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
5 M8 \; ]+ @ v$ q: N "%d\n", ret);
+ z- B; M( [+ H! k: Y#endif
0 |- H5 o4 n1 T X4 R ret = platform_device_register(&da850_evm_tl_leds_device);, M* w1 v+ h1 Y
if (ret)/ n- m1 h. i4 `9 S7 ]( f
pr_warning("Could not register som GPIO expander LEDS");9 C7 Q! ]0 X3 a9 F% ~' Z9 D
else' h( _3 `6 O6 W+ N: h7 }/ Q' O+ s
printk(KERN_INFO "LED register sucessful!\n"); E5 c, B+ Z# }6 C1 j9 {7 o
& w/ u' f& x f8 a2 W- t/ C( Q return ret;
. [* t# c; u' Z2 g2 W. W! m}; \1 c# o! j6 o# W
, }$ M3 [, P+ m2 F# x$ t/ }- Y
static void __exit led_platform_exit(void)6 G1 p# D- K8 ~5 F: ]% [% h# r# |+ C
{
- M) r% D6 [' W/ Y# e platform_device_unregister(&da850_evm_tl_leds_device);4 V- X% \, @' \/ y
% w) h% m! R6 s printk(KERN_INFO "LED unregister!\n");. N- b4 j7 H! [6 l
}# m( l% h# C, q( o8 U% }- q" I
8 a. c3 l4 f$ }9 F4 W, H+ F
module_init(led_platform_init);( q+ |5 F. ]& V4 B: s
module_exit(led_platform_exit);
. h6 p$ B, T! d9 ~2 w, I( ]3 j" I. q& p- G' I) L. k4 M
MODULE_DESCRIPTION("Led platform driver");8 g/ c5 Y/ r9 V% H- i
MODULE_AUTHOR("Tronlong");
8 }7 X, D9 o0 AMODULE_LICENSE("GPL");
& a8 i1 X' A; s; z0 X6 V: d6 i# [
" c8 u$ \3 p D' P* f3 u% V |
|