|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
1 @& d9 C" e1 v: I#include <linux/init.h> P5 b1 h u& P- I T5 K
#include <linux/module.h>
7 i; z0 \& ?" R( [" h6 H% t#include <linux/kernel.h>
$ ~2 M6 @4 Y7 i3 Z# Y) ]* R#include <linux/types.h>
+ z) m5 d1 ], D6 `#include <linux/gpio.h>5 E, R' q |; ]9 S; r1 o2 j
#include <linux/leds.h> [( J. [. I! z9 _% y, m& |
#include <linux/platform_device.h>
! Y! c( w, G5 `/ j
% D$ F* y7 U- O#include <asm/mach-types.h>
5 u. V; M# _% M g/ |, h#include <asm/mach/arch.h>
: H! m9 ?9 H% {" Q8 U; t#include <mach/da8xx.h>
/ S) O4 E" v K#include <mach/mux.h>
2 W: h, b' H1 K9 a3 d ?9 O: j9 \8 x: R& S
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0); B: }7 Y8 f( ]) ^: H
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
, S( Q n; y# [+ N9 x#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
8 G' b$ `& \* B- v8 r#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)2 X( S" G' z+ t' |" w& I1 l. L, \
& |. Q# G$ Y( z4 j, m9 a, I$ X
/* assign the tl som board LED-GPIOs*/
( l- C5 o' Q) m2 M- b, g8 }( j' xstatic const short da850_evm_tl_user_led_pins[] = {0 D4 X( a z* K: f4 [
/* These pins are definition at <mach/mux.h> file */# O3 m6 J1 ^; l; `6 u
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
' a$ y) ]! g( w9 ?/ j0 ]7 z& m. | -1
* Y% A/ d+ `8 ~8 O# m4 J; t};3 F" B& X0 X1 |' V) g* K* J: ?1 b# _
( j" X- j$ a1 c$ ^, _static struct gpio_led da850_evm_tl_leds[] = {
4 w0 u! t: F G5 t, o' K4 ` {
1 |: X+ g. T6 R l( M .active_low = 0,$ z: b1 n& }# }0 n# L! s+ n
.gpio = DA850_USER_LED0,1 N! n, ~* s! x9 n( Z" |
.name = "user_led0",, L# F$ B$ V( N2 \) O4 M5 c& r
.default_trigger = "default-on",
% ~2 c' d( u, C8 l# V/ R },; C+ `; w7 K% r& G
{- ^+ ]7 {' R$ x! Y- K; w
.active_low = 0,/ F) v6 [* |% [, o4 ?
.gpio = DA850_USER_LED1,
' F3 y6 q2 @( M .name = "user_led1",
5 ]; v u' t: A. y- t9 K: E: {: ^ .default_trigger = "default-on",
9 _! [5 j- E" v; p },
! g: S& v- w( m {1 q9 P2 n- \# `1 l0 K% x
.active_low = 0,; g& R0 }, f+ T ^- N& O3 R* i0 l
.gpio = DA850_USER_LED2,
- c5 n* `0 h- p' K3 F/ o3 I }, h* P .name = "user_led2",
9 h8 t( p- o. Q1 ~$ y, z5 A+ ?- s) q .default_trigger = "default-on",
6 R- I C( [; Y; j$ j ^# i },, j+ M0 z- g5 N; P
{) e- }) F7 A: ]5 b; q
.active_low = 0,8 D' c& ~7 Y; z/ e- g' c' M
.gpio = DA850_USER_LED3,2 e$ x. j8 q5 r- v/ p$ m, _; f6 p
.name = "user_led3",
3 W- W% {% o; p; ?# ]3 X' L% I .default_trigger = "default-on"," P" t, |" c" f
},, F* w/ i1 q. m$ V1 X: v0 V7 v
};# S# d2 S7 w1 p/ t
& B. Q* e" \* d G4 s
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {* n j9 V- U+ U5 q& w* I
.leds = da850_evm_tl_leds,. H' ?2 N7 k( \: W. z* S
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),' P5 O: {' o) g- E, \# t1 W
};
4 T* V0 T8 G/ f0 L7 y4 O# f. E! W q! N5 W+ e5 H8 x' @
static void led_dev_release(struct device *dev)
6 [( s' x! ?. j/ g `: T{+ o* N+ F& E9 s- R
};4 \1 E B# y8 `) s
$ j2 y6 P( ]! P; q% p1 s/ X
static struct platform_device da850_evm_tl_leds_device = {3 i3 z* Y# ~& x4 G0 y5 V e5 d
.name = "leds-gpio",
' r; w3 m$ T1 C7 X: Z .id = 1,
; {/ P' A$ ?! f( z; X+ A0 @, ? .dev = {
* m/ l& B5 ]; G' e& ]) w2 Y .platform_data = &da850_evm_tl_leds_pdata,
* X# c; {9 ` k% d4 n .release = led_dev_release,+ z7 U [7 L, @7 D5 H8 M d
}
% y' N3 y. r) {' z6 V7 B};4 f) a' S# D. J7 v
. X9 j/ N0 o, Q2 @+ t5 Sstatic int __init led_platform_init(void)
# ^- J% ?7 { i6 }0 o{0 s6 n, ~2 C; j, e! K
int ret;
: i% R* p; s3 f }7 U+ {#if 0
, R3 G: S0 }. `+ g; I6 t ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);& N* f0 Q" R# ~/ D: [
if (ret)/ W7 [4 N* \ s; r4 t* S
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
& B z. P9 g* ~. e2 ^) e2 ]* n1 ^ "%d\n", ret);) K5 l7 s9 w* j* }7 |- G5 o
#endif6 B# |* O+ J9 |. _
ret = platform_device_register(&da850_evm_tl_leds_device);( V+ i7 z2 ]' W) ~+ Z
if (ret), t" d6 {+ A1 J, F: d+ g$ F+ z0 Z9 B
pr_warning("Could not register som GPIO expander LEDS");9 y( \9 A2 T; Y8 {5 e o# G
else
, f0 P+ `. F9 I printk(KERN_INFO "LED register sucessful!\n");: d! M# w( d$ f
1 W6 ^ {0 T2 @( y: }1 ]
return ret;
; d- R4 e/ D* `}: I+ g& f% V2 Q
0 T- N% w$ u; a L Ystatic void __exit led_platform_exit(void)7 {1 _: O0 z8 l; T
{
) U+ u1 K* U1 p# l; z7 V% U platform_device_unregister(&da850_evm_tl_leds_device);/ x6 H4 D. o( n' o$ Q- w1 u& z/ `
/ h* M$ B0 c9 f+ f printk(KERN_INFO "LED unregister!\n");
' z+ I6 d, P$ \) x# F7 }- Y}
5 B9 ^' i c7 l' V8 f9 A4 s3 R6 g( \1 ^- k( I ]
module_init(led_platform_init);1 ~& J& S' E4 S9 {
module_exit(led_platform_exit);1 _9 E3 e6 r5 a" |( D; n. _- B6 g
: h9 I2 h& ]: n4 oMODULE_DESCRIPTION("Led platform driver");) |8 ?: C- v1 S$ F: M u1 }( I
MODULE_AUTHOR("Tronlong");+ ~7 N# v. u! V
MODULE_LICENSE("GPL");* {5 J& [( }! h( u, q l
* P T6 c6 ?$ {9 T |
|