|
|
求大神给下面的程序做注解,请稍详细些,谢谢。2 L/ P6 {; Z- s3 |
#include <linux/init.h>& m* ^6 Z O; O) G
#include <linux/module.h>
+ m+ ^! ~2 P: x, y#include <linux/kernel.h>. l$ _/ L! |% f7 G- V- \
#include <linux/types.h>
0 f2 u: Z3 x; S#include <linux/gpio.h>
; l7 X- C2 C8 |9 _5 p#include <linux/leds.h>& y1 @) F# V( B" |6 b8 |' F
#include <linux/platform_device.h>; X. ?7 O6 i; a. W* _
# w9 N) e7 I0 W7 v+ k- s#include <asm/mach-types.h>( G: u1 |3 _3 s$ z4 O+ a8 _
#include <asm/mach/arch.h>7 h% n U+ i7 y0 b2 x) ^6 Z
#include <mach/da8xx.h>! u3 V, l& C$ Q2 R4 O
#include <mach/mux.h>2 W9 E3 [. Q2 a8 _) L7 `3 y. }
0 J8 T( {, Q: K
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
* D4 c# o& U% r& ~#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)) M) l( \3 k' }* p/ H, N) d) J9 t
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)- \4 r6 ?% c8 {$ [ @0 z" {9 P( A
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)3 S4 v/ [/ O9 D/ I$ Q
1 o3 ^$ _( O$ l9 {. x& H/* assign the tl som board LED-GPIOs*/8 e/ G2 y7 x- A# N% W' Q s
static const short da850_evm_tl_user_led_pins[] = {
, e# W: {/ a( v- c /* These pins are definition at <mach/mux.h> file *// L; ?" O7 N5 `/ b
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,' Z8 T4 F3 p) L6 o; B8 p* P' X( [
-1
: e( n2 j: L' K- e, t+ i};; Y% E* l# y) O0 b, D
, f" j. B+ V% {9 D4 E5 E' C1 k pstatic struct gpio_led da850_evm_tl_leds[] = {
: |% g, w" ]- Q& ] {
* A2 ~# ]7 @, p! x% D .active_low = 0,! _; k. D5 k& d5 ]1 G7 S/ V
.gpio = DA850_USER_LED0,
& {( r3 J% e9 g/ B .name = "user_led0",- K9 x# m( k: N* `- f/ B
.default_trigger = "default-on",
. D- H7 |7 A( F9 h: ^5 l/ l }, i' ]( c% D- _6 g C) ]
{
; O5 `$ o1 m" p .active_low = 0,2 P6 ?" r/ ?$ {3 `
.gpio = DA850_USER_LED1,7 O5 G7 B7 Q; q2 {8 R) |! V7 ~% U
.name = "user_led1",
$ i/ F* P P* I1 s3 V U& u% G .default_trigger = "default-on",
) g$ B9 K6 g$ }# [( X7 | },
% E$ y' j7 ^; ^& J/ H {& I7 v0 ]* u. O4 ~/ C
.active_low = 0,' M$ O( t" o, }: z4 r
.gpio = DA850_USER_LED2,
1 ?" P. h: ]; v7 _) R. n% R .name = "user_led2",
! j0 Q4 b7 ]) i/ M .default_trigger = "default-on",- F( a+ ^; r, k( r6 \ R; Q
}," a+ }7 Y3 k- c- U2 k) F. G1 Y* _
{
* y, n) c+ Q6 }" B4 o6 j" f6 H .active_low = 0,
& O9 J: f7 F+ @! m+ r6 f5 R3 c" O/ Q .gpio = DA850_USER_LED3,' J4 A! h* i; S4 ` _2 _
.name = "user_led3",
: x+ q+ p. r( r" b$ y4 |# a .default_trigger = "default-on",
3 b: \$ i* R# N2 G. ]8 f2 y }," h; D z* L9 [4 Z* t
};, V* x7 \3 ^: c7 a2 ~. R
1 I! g% Y6 b5 [% o1 K7 t
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
{! }' n4 R; V3 `( j& O. O1 r .leds = da850_evm_tl_leds,
" h6 X8 y& Z T2 I9 b .num_leds = ARRAY_SIZE(da850_evm_tl_leds),
8 |0 L$ ~" w3 T/ `2 i2 X};1 ~$ G7 J9 O. S
) B. y4 c6 W) J- C4 x
static void led_dev_release(struct device *dev)" _6 ~, d9 |% J
{$ P m/ N. F6 x! i; y- O
};9 p* m: q2 A/ S+ g" k E
8 ]- h8 ], O3 n
static struct platform_device da850_evm_tl_leds_device = {
]. C2 r$ n& n& X" f) D .name = "leds-gpio",
% V7 q6 g( h" } .id = 1,) Z' f! z c. ^/ L+ S# e
.dev = {
* C% K m* V. J$ t .platform_data = &da850_evm_tl_leds_pdata,
4 \8 Y% O9 A; c+ K .release = led_dev_release,
: _: A8 V+ ?9 P' P2 R9 y1 r; h }
+ V" f R& P' d s* m2 l) v2 U- z};
* m L* r6 l$ |2 b- K0 ?$ [3 h" B
static int __init led_platform_init(void)3 E5 U" {( Z; A; W
{% Y3 o' z+ k7 y/ a( |, R( Z7 h
int ret;
0 Z+ K. P1 X6 ?; W" @. a" i#if 0
. A1 f1 \& V5 ?' c* K- c ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);1 D: x' m& b0 r! _
if (ret)# o0 ?3 b% J# S% p/ Y
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
; b" n) W7 ~6 R+ x; h( T8 o/ ` "%d\n", ret);
6 X# D; g; ]+ O/ c. z0 d8 B#endif
( U9 m0 h5 W( n% ^% k, W& ~ ret = platform_device_register(&da850_evm_tl_leds_device);
F) h) R: A( B% X if (ret)
9 Y2 M$ ]' f4 ?) v& v pr_warning("Could not register som GPIO expander LEDS");9 B4 I2 S+ P- X8 D! C0 Z7 e9 s
else
& }. y( y7 y/ w9 K+ N printk(KERN_INFO "LED register sucessful!\n");
& L, w2 J/ C" A$ L% p% o
9 ^" w, b, s% d; K$ M+ i" L return ret;* F" N+ D' O5 o! s
}
3 f2 r0 h' J# I1 H9 l6 a" o8 Y9 w
5 b& F; P7 W. y2 }/ Istatic void __exit led_platform_exit(void). |0 Q) X; W( a3 }$ C
{; [- j7 l3 M4 a2 V- ]* K; E) h
platform_device_unregister(&da850_evm_tl_leds_device);' x# ~1 K4 P/ h4 E6 x% j$ ^* {
4 R5 C& V. S# m8 n1 r8 J j printk(KERN_INFO "LED unregister!\n");
; a9 D5 S; k$ }& v/ ?}) o7 d+ B1 F" A: n0 L; h; r# M
6 {- k* B4 m! j* D: d
module_init(led_platform_init);
5 X/ f( k% i( Xmodule_exit(led_platform_exit);2 E. l* Z, e! R3 E- w0 a& B; F9 f
/ g: T5 [9 g8 L! O. ] e) A7 R- k
MODULE_DESCRIPTION("Led platform driver");/ ^7 W- v. u' u' D& j4 E3 W, p, X
MODULE_AUTHOR("Tronlong");
; ]; g+ B/ ~: s/ x5 J2 S) f- nMODULE_LICENSE("GPL");% U. f% o% m( c
6 p. ]# s9 ~% q, I Y
|
|