|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
' h6 @* |1 {$ k# p* p; A; Y#include <linux/init.h>
l6 H% l6 J& `& C+ F, |#include <linux/module.h>
+ M+ y( H7 A% w- Q#include <linux/kernel.h>
! k( H2 x+ g0 _+ x( t#include <linux/types.h>
$ W- ]5 t. R7 O( L/ W& m& |1 ` [#include <linux/gpio.h>9 }5 V+ @' ~) E. F1 d- l L$ p
#include <linux/leds.h>, ^0 U7 @3 D+ u7 c1 N w, A
#include <linux/platform_device.h>
7 p( R1 H3 Y- S O# u R1 L; P7 G( p
#include <asm/mach-types.h>
W+ P0 D* p* }#include <asm/mach/arch.h>, ] R% U0 A9 D
#include <mach/da8xx.h>
! c9 g% b' f: g- `' N#include <mach/mux.h>
, _9 t4 t' ]& r: h5 M
7 f; E# O3 g7 K( x& q( v6 `#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
# \1 z; A' [4 m#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)% p q/ q7 U7 f- L5 _
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
6 Z& r* @4 m I#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
9 S! z- s* b7 ~6 q3 z" _: ^; @, E$ q$ `
/* assign the tl som board LED-GPIOs*/, Q, ?* ?. W7 E, ], {+ N# c
static const short da850_evm_tl_user_led_pins[] = {
. _4 v2 ^, `, s /* These pins are definition at <mach/mux.h> file */
( G' y5 G1 x9 ~% D8 t( {& K DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,; v3 c# P0 u8 Y- B$ M6 o4 {4 d
-1
- u- j& d- w, Q1 T: D};
' q( o: }5 V0 T( Y) c, M" I& p' U/ J7 U' H |) r3 f
static struct gpio_led da850_evm_tl_leds[] = {) q9 P1 r9 [; ]4 I: S0 c- G
{
. D; o+ P( E) p. e+ v* F .active_low = 0,
+ p+ O- W# U% }5 L .gpio = DA850_USER_LED0,3 W7 c- q# q/ F
.name = "user_led0",. a& `1 n+ z/ X' Z S% a$ c
.default_trigger = "default-on",0 F; q! R, z9 j
},
( T5 \, p: v n3 ^% Y( |6 j" J {
; a c3 L6 { I .active_low = 0,6 u% ^* H+ @3 R# R
.gpio = DA850_USER_LED1,
' E! I& W- l9 Z% X9 p7 [ Y .name = "user_led1",
* ]5 ]1 B. L& P .default_trigger = "default-on",
4 C" x! h) y8 o Z w# M },
- c6 i3 k2 ^' |9 B {( z* y- i( m! K5 M+ N# N; N& q: o
.active_low = 0,
( M; d! r+ ^* D5 w7 D .gpio = DA850_USER_LED2," R; H7 i5 D7 a3 ^0 `
.name = "user_led2",% ~5 Q: W7 l. ?! C8 a4 H" L! o
.default_trigger = "default-on",: ^( w' d) i' c0 g3 Q
},! B8 i- U( ]# q4 ^ l; a% K/ s( M
{: B$ k! {. u0 j. U, N
.active_low = 0,( z8 u/ n4 L0 f% d g
.gpio = DA850_USER_LED3,$ ?1 L9 N6 U- B' A, Y
.name = "user_led3",9 @& f) _( N; R1 J$ p" k
.default_trigger = "default-on",' {* \: r+ z9 w p" u) H
},/ W/ P" D3 i. h0 S! \" o3 T/ K
};
. a; ?9 L: s7 y: p" K
( n0 X1 x9 P( Q {6 estatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {: H3 y1 @: J! s# h. L
.leds = da850_evm_tl_leds,
7 c# ]& I R6 ]* L6 x8 A1 V) f: C .num_leds = ARRAY_SIZE(da850_evm_tl_leds), p: g% V" R6 v! }- s1 T' {
};
z; s2 K; l6 ]! Y
' K; b- a2 T, R* w% a% c" d' Hstatic void led_dev_release(struct device *dev)' C* V3 X5 s- {8 L
{
9 Y7 Z2 b" p0 q$ n' C};
# o, s% E/ c, s2 h: J; l) h l
9 ~$ F9 R# W, F. p6 Z6 o! {# `1 ?static struct platform_device da850_evm_tl_leds_device = {
- i- ^3 J4 {+ L7 f .name = "leds-gpio",
# z6 a* F! a& |" U' c% d3 j3 f- \ .id = 1,
7 M. W8 h! x: ^7 F" l6 ]6 E W .dev = {3 M8 ]1 ^$ y2 \# t
.platform_data = &da850_evm_tl_leds_pdata,
9 R0 f' s ^- i) e .release = led_dev_release,
. d: i3 U6 z) |+ Y }" A1 A) t" R: f2 ^0 C0 @
};& b1 T- }: V* Q. X0 X" d
! V1 `2 k& d1 x/ e0 o
static int __init led_platform_init(void)
1 k) b) w& o0 E6 P{
- H' p$ D( q g3 P, d; _8 T4 ^& z int ret;2 U9 [+ t3 T. B% D9 S9 O
#if 0
+ X2 E, C2 k5 i ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);. L9 @# x7 ]0 n/ v' f
if (ret)
6 c6 Q \' t* @( Q$ B$ ~4 W/ e pr_warning("da850_evm_tl_leds_init : User LED mux failed :"4 \ N. a2 R: ^/ x: ~ i
"%d\n", ret);
0 A3 o1 c( X2 {, r#endif
1 F( ^( H1 S# b' Q: D2 x! q ret = platform_device_register(&da850_evm_tl_leds_device);8 H" D x; d4 w( W. }6 _0 l
if (ret)
8 I# {" y0 ~5 {" @+ O& t/ l1 R pr_warning("Could not register som GPIO expander LEDS");. C. ^% l& B* D7 [" q3 M- g( @
else1 a- y% X$ n8 A2 j; F3 B$ W* l
printk(KERN_INFO "LED register sucessful!\n");( N' i1 a( ~. F* a
4 o- m" S# A, l* a return ret;" z2 F4 x( e/ m9 n
}
3 W, ?( ^- P7 Q* k5 F4 s7 y" R- U# {2 `1 A& m
static void __exit led_platform_exit(void)- V: U9 c; I- u& ~( U
{) o! I2 A, e7 y# P5 A
platform_device_unregister(&da850_evm_tl_leds_device);
# w" C. ]% e; X- `! y2 `, p; O/ b
, ^( A4 N/ O. h% T! n: R- D B printk(KERN_INFO "LED unregister!\n");
, S8 D1 {1 Y: Y3 y/ W3 I# V}( b6 ^% {* N' K- J9 }& X0 W2 E
$ D2 q, a' _$ }
module_init(led_platform_init);' Q7 w9 a: y0 f: v# o1 ]3 ~
module_exit(led_platform_exit);
0 l6 B! S8 ]# C4 m$ v
$ z9 p" Z+ H0 c( w% s* i, BMODULE_DESCRIPTION("Led platform driver");
8 E L b Y' X& N# v/ DMODULE_AUTHOR("Tronlong");
! u; `! @: V' i4 T% t2 q/ ?8 n3 [: OMODULE_LICENSE("GPL");' f) Q3 c5 O- D+ T$ ~1 \1 S
; p. b! ^3 n5 F
|
|