|
|
求大神给下面的程序做注解,请稍详细些,谢谢。, y) F: u( K+ O
#include <linux/init.h>
& q D# Z: Q4 ]7 z- v p R) h#include <linux/module.h>. T( k& ~' w( k- G/ W
#include <linux/kernel.h>
$ ^+ T' q: j# E* F, R9 S! F#include <linux/types.h>: z% _, e' z. O) Y0 X! j4 s
#include <linux/gpio.h>
6 L2 ` s, t. P2 p5 e#include <linux/leds.h>
3 G7 U3 u$ _. n9 P#include <linux/platform_device.h>
7 N9 n$ j N& \" x/ J& @; e1 G- X; w
#include <asm/mach-types.h>: h: @7 k# \# o) ~. ]
#include <asm/mach/arch.h>) h3 \6 u! K, I6 P
#include <mach/da8xx.h>
( J* Z- O- S. K. P* ^$ U" t C#include <mach/mux.h>3 h1 l) M# ^2 B8 `& ]$ K( N
! U7 r0 m8 s' w k2 M
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
5 |' |9 L4 X _* f/ }7 k#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
0 F, P( J/ @9 O5 K, Y#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)* Q% v7 ]3 v$ K4 L9 e
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)+ i1 H9 X7 W7 ?5 G9 O2 v0 `
/ }9 L8 n+ x. M1 `) S/* assign the tl som board LED-GPIOs*/ p1 ]* b, }; `4 t; }7 `$ s& v
static const short da850_evm_tl_user_led_pins[] = {& ?! R8 q$ _2 [6 e
/* These pins are definition at <mach/mux.h> file */
2 t+ b9 F+ l8 m3 M* M* P DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
. X( W# _! z: c; Q# n/ P -1
/ g. N) m9 G/ p+ k9 n* a8 k};
6 N3 b- U2 I+ j: d: l6 ]5 u; N8 E& k7 K. J/ S. D
static struct gpio_led da850_evm_tl_leds[] = {: f' a" P j" v! q4 \
{+ o5 Q% J, M+ L9 e3 X7 b% c
.active_low = 0,
+ Q- T' `; N9 X [ [ .gpio = DA850_USER_LED0,: L! I% n( x J! R9 i0 N, q
.name = "user_led0",
* x ?* c* d7 T& D .default_trigger = "default-on", O2 D# K3 m; _" o9 a) d) H* g
},
; R8 N* ~9 I1 `4 _$ h {
$ l0 j* ~1 F. y R) k .active_low = 0,
3 x& K/ W9 e: t .gpio = DA850_USER_LED1,3 Y5 _; @+ @* w+ [4 ~0 S- `5 o8 O
.name = "user_led1",
6 X8 w- ]5 [" w# [6 _ G8 g# H; V9 f .default_trigger = "default-on",+ V! v' I) ]; |' \
},8 c) m# k2 M) E m; _& B8 v
{7 z8 Q- z) C6 M: U, {( X
.active_low = 0,
- h* z" s- G) |8 Z( {% e+ `; S .gpio = DA850_USER_LED2,
5 v" I: |( K( w .name = "user_led2",
$ t7 x0 Y) a; h- s1 o$ l# M) v; u .default_trigger = "default-on",
" e, i! U, [1 s. K, [ },
: `+ U+ ]: J9 o( z# a) h& j5 s {& }0 [0 X. j. W x
.active_low = 0,$ \0 N8 U2 j; ?# N( x
.gpio = DA850_USER_LED3,/ b) w, o& @8 U! L/ ]( G- H
.name = "user_led3",/ r# K& V/ m* l( d; P V0 g
.default_trigger = "default-on",
( ?) b: \3 N' K1 C4 R },$ R$ B; ~: V! o& X0 x+ U. O- q6 S
};
W5 F ~4 x, ~: x3 O, {5 D
) v2 W+ Y2 b' N2 U4 q0 d, M! q( y4 fstatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
1 u6 @$ w- h1 n4 T$ _. T .leds = da850_evm_tl_leds," Z2 J. i& p' L' L
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),
, S: C8 h: u5 J/ }3 A H4 J- A};
# P% \7 k4 }) g* ~7 T# O. Z: |
1 b3 m g* N' V1 R' Kstatic void led_dev_release(struct device *dev)
5 ^5 ~% K2 w6 u* W7 ^{0 U' v7 L( C( V5 F" Y
};
! _/ B) \3 j* q# q
5 M$ l5 @* Y; c7 I; i, T! O: Pstatic struct platform_device da850_evm_tl_leds_device = {( \! r9 [# j0 ~$ @
.name = "leds-gpio",
4 C: f) z/ @, h, @ .id = 1,, d$ A& K% R' a2 z. A/ o
.dev = {
. a1 E9 n9 B% G7 O8 R( I .platform_data = &da850_evm_tl_leds_pdata,
$ [* g! y8 G9 U! L: `. a .release = led_dev_release,; V) m- n' w" V/ e) h
}
. l% |/ | K/ @( |};
3 P8 {& f) [! R) O, J; f! O) k! |' f" N
static int __init led_platform_init(void)
# q! _' T' x" r6 n$ ]: ^" B: h5 J{4 U" h9 B8 a+ [4 `( C8 a- n
int ret;
' T8 G2 y) M0 m- R3 D: P6 ]: q#if 0
- x( P( B2 L1 H: ?* b* Y5 o2 T ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);/ v" Q/ o8 K5 t# a
if (ret)
/ e# z4 o: o% Q- v* _( _3 l pr_warning("da850_evm_tl_leds_init : User LED mux failed :": g3 e: ^/ `, v
"%d\n", ret);# X! F/ g" G; O1 C) D( h1 I
#endif
# }$ C# }) R* {( V$ R ret = platform_device_register(&da850_evm_tl_leds_device);' Z/ \6 E& f! x0 y& S, j
if (ret)
2 n9 c {1 M; b k* h s pr_warning("Could not register som GPIO expander LEDS");( T0 o; i- Y' j
else8 E$ X$ |& K9 F. O4 V2 Z, \
printk(KERN_INFO "LED register sucessful!\n");, Y: ?" R% u& q8 {. c! l
* v* W! } ^9 k) \, l- F4 @ return ret;2 w( k1 o$ F& w! E
}
/ L x, Y' ~, s5 b9 v- I* Y% d d! n" N8 E- O
static void __exit led_platform_exit(void)
% H7 i! [0 R' ^{
1 `& M! y3 v5 j4 ^ platform_device_unregister(&da850_evm_tl_leds_device);& f& i3 x. \) m$ f; k1 B5 L
) O! |7 @% C5 Y: d1 V D2 v printk(KERN_INFO "LED unregister!\n");
* T0 E) V2 F/ E- i. ~# ?* m2 d}
, b( T0 ]/ L- P! _; Z+ G# U) F( ^" ]% i' X" S: [
module_init(led_platform_init);! j0 S& I3 K0 h$ m* ~: c7 j
module_exit(led_platform_exit);
$ g) ?: T t4 V( N! M* A$ ]" L/ y" y- o7 ~
MODULE_DESCRIPTION("Led platform driver");
& E1 `" Q" ]* t- l l vMODULE_AUTHOR("Tronlong");* U7 H: |& a& T& q Y d
MODULE_LICENSE("GPL");
4 U; o) z4 h$ E. D% m
+ e! ?- q. ]) A6 L- |8 T" d |
|