|
|
求大神给下面的程序做注解,请稍详细些,谢谢。( x( _6 M' R0 Y( p4 s
#include <linux/init.h>! D' e6 c5 Y% o$ v5 S4 V; F; c/ z
#include <linux/module.h>6 |1 t! l6 \7 I% Y; X1 A/ L
#include <linux/kernel.h>1 ?( O+ R# ^4 P) w$ y9 m
#include <linux/types.h>2 w! s& [5 ^9 B$ X" ?
#include <linux/gpio.h>
$ x. [$ C% J6 G/ a6 j- N! t6 E#include <linux/leds.h>! n' b! k. W. g- C4 p1 D# M
#include <linux/platform_device.h>
/ w- p0 x8 d# A$ i7 {& ^% c
) J7 h" n, ^5 [- x#include <asm/mach-types.h>, r& t% j( r# @5 b
#include <asm/mach/arch.h>
; s2 z! T/ Z; d8 F+ P, h0 L: |#include <mach/da8xx.h>! ^+ }* |$ ~) V) i) p. G6 p. E7 [
#include <mach/mux.h>: C, g' h+ B1 V+ L: v/ I9 ]
7 u" [8 j M) z3 J#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
' k, n3 P3 H2 t! T a#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)( F" _& c( C. J
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)3 _" h3 E. w0 c, ?7 Z
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
# D' L. }3 R3 Z. `
& u [/ t8 L/ F: m/* assign the tl som board LED-GPIOs*/; }9 H9 F4 {* G9 l0 c s
static const short da850_evm_tl_user_led_pins[] = {
- T$ I V- O2 K0 _) ^ /* These pins are definition at <mach/mux.h> file */
/ I' r3 E# M; x4 p( x DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,5 I) }/ j3 t7 P
-1! k$ K z2 _2 V
};- P q+ A) j4 I6 X9 H, s$ Z
; I. L1 x' K/ ^% D# I
static struct gpio_led da850_evm_tl_leds[] = {# O1 i: s: z, {& N5 D" z2 u8 d
{+ E- q+ _7 T9 d6 f5 G1 |
.active_low = 0,! |/ r0 w- O" r" y; u0 W
.gpio = DA850_USER_LED0,
- g: ?- g+ t0 H$ A .name = "user_led0",
5 P( b& O# f7 I- Q, W. C& |) P .default_trigger = "default-on",* X% W# x) X6 X4 u# Q2 p
},$ v* z/ a+ `; ]' x: c, S
{
# ?- G3 o9 g' o .active_low = 0,
+ ?% A3 l& D1 x7 G .gpio = DA850_USER_LED1,
# f5 n* `( e8 J .name = "user_led1",- G1 Y! _$ Y# l" T
.default_trigger = "default-on",9 M+ ], j; a; a* K. W! s7 K
},
/ c! B, y7 O. ` {
6 a: T* |7 A. z5 c" | .active_low = 0,( L! a2 q& Z0 F' @
.gpio = DA850_USER_LED2,
" ?6 i& U( g" c2 m! y M .name = "user_led2",& W7 H! D1 Y5 j2 q3 {/ q) F$ d
.default_trigger = "default-on",
* h4 s6 [$ n4 n& L$ z. m },
9 R0 @! i* A4 _2 V {
; S* v% N7 L" _ .active_low = 0,
6 F2 Z1 U6 `+ Q$ i: \7 ] .gpio = DA850_USER_LED3,+ g; F1 n3 T+ q( Y, g) N) N
.name = "user_led3",
# Y' C) q, I+ ?4 {4 |. J! b1 A& f .default_trigger = "default-on",
7 w, O" A0 O, m' k/ O' y },' h/ u, ^# ?& ~9 D6 x3 N! ]# ^* W
};
% U5 |5 R$ q+ H6 B4 H0 u+ d5 ?( H/ v" K4 N6 K
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
; i& a$ \, U9 H" @' ? .leds = da850_evm_tl_leds,
/ Z6 n( z; C, l* @2 i& p! Q .num_leds = ARRAY_SIZE(da850_evm_tl_leds),
# i6 b6 O$ n# J/ q$ T, j3 r};
* a+ e5 c0 N! t5 n8 Z) P
: r; T$ H. k/ s- Hstatic void led_dev_release(struct device *dev)0 |: ?' o1 v* ]; S+ [; j
{6 f6 u4 p3 ]' w3 ?
};; o' F! X6 k$ R+ w% u+ `
) o6 y7 u- D( F$ ~static struct platform_device da850_evm_tl_leds_device = {
# @' N5 o( L' [4 R# }" j! \ .name = "leds-gpio",- ]5 j% C9 Y+ i4 a
.id = 1,$ D& A+ x' b/ \! |
.dev = {5 ^1 t' R) O- W3 l+ J
.platform_data = &da850_evm_tl_leds_pdata,& \* k X$ @. d
.release = led_dev_release,# b( K9 X) X+ W* B
}
2 Q1 r' M* R7 N/ E};. l+ Q- T8 N8 E6 j/ j6 s2 H0 E
5 V, O, n9 r7 C; Fstatic int __init led_platform_init(void)
, [; W/ h Q6 B5 d4 P" `( A- @) S{3 H$ q! {4 p& S( K1 H) p* B
int ret;" ^1 O5 g' Q0 d5 }
#if 0
. h. K' t0 ^1 h- y- T: w8 {0 ? ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
* r$ U1 B7 ? [ if (ret)
; [, h8 s( |, X% F& q" l pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
: ]" m) X8 i2 m) |' _3 @; c "%d\n", ret);# B6 ^, h6 x/ o) G: ~3 }) {: a( L
#endif
7 j, q" A$ m& Z: g2 W* r ret = platform_device_register(&da850_evm_tl_leds_device);# E2 d7 \+ i" o8 Q# \# L- u; B
if (ret) A# h0 g9 Q% D! k$ G6 a! h
pr_warning("Could not register som GPIO expander LEDS");3 v6 G) {) e$ K) q- \6 n
else8 |4 e. Z' G, l! j. x
printk(KERN_INFO "LED register sucessful!\n");
2 Z6 M7 }& x/ A6 M2 A; J" t# k; J, ^. C$ m* ]
return ret;" E9 |& u& ^; w1 R7 p/ @
}
( a5 U4 `, K8 w7 n5 Y! }
# n1 O4 B$ x5 b% F* @6 d" v* p9 mstatic void __exit led_platform_exit(void)
% P: _7 D0 Z0 k2 ^# }' o9 @{
, }+ J- `7 p* x1 P3 r( ?7 ^ platform_device_unregister(&da850_evm_tl_leds_device);' G2 |9 ^' \! ^) P( G$ y4 {
" [0 O# g, K9 c) u% J+ s
printk(KERN_INFO "LED unregister!\n");1 A! W( j [. f0 c; [8 v& h) ^& o
}! s' O5 @- L/ V- c7 s2 l) J" y# e
& T5 b5 v, v& Y8 Amodule_init(led_platform_init);
) u7 s8 w0 P: m# J, l" T2 z/ wmodule_exit(led_platform_exit);
5 ?6 ]1 \* F9 R2 [0 f- T% |
" q6 a0 \3 ~5 w- B1 V/ c Y) I' GMODULE_DESCRIPTION("Led platform driver");
+ c4 q; ^9 e4 T7 ~7 ]- pMODULE_AUTHOR("Tronlong");
9 ]- T9 z. {6 F' ^MODULE_LICENSE("GPL");& ~1 M- B" I) q, S- m8 r
$ b. b# ~1 m# o" y" S
|
|