|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
6 N3 }; H* I2 C' Q0 Z+ u, @1 \3 i2 J#include <linux/init.h>
1 Q; V& H* A8 {) J* b#include <linux/module.h>
3 G; ?" p# E, F! P3 ]#include <linux/kernel.h>
6 D# l6 `- F/ e, b#include <linux/types.h>
, A9 b) ~ ~) k; Q2 B% ?3 Y#include <linux/gpio.h>$ v# \& ?. y9 Q
#include <linux/leds.h>) `3 Q, u, w; ~' w, K n
#include <linux/platform_device.h>8 u! b) d" {2 n* o f, H% k
" x7 `0 o2 d0 H, U) s" g7 C#include <asm/mach-types.h>, L, U" e1 |! O) U) O/ X2 g1 M" M
#include <asm/mach/arch.h>
# J" e% k/ e" L7 R! J#include <mach/da8xx.h>2 q1 Q& L/ C7 R: U- k% A
#include <mach/mux.h>: t9 W8 z! H- ^+ a
; V- l3 `% P1 q* Z
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
+ t4 [; J2 ]! q7 ?8 n9 K#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)( z9 ^ W9 F3 C% `2 c9 [: p1 V
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
- Q% N) |% x; y' Y) T#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)( |- e3 N& S1 e" L% o5 s
2 T" e' s* V0 N, X7 X, m% {' e/* assign the tl som board LED-GPIOs*/
) M0 K y8 {. I0 h1 I+ N- O& xstatic const short da850_evm_tl_user_led_pins[] = {
- t. y2 a. k. W. P$ v /* These pins are definition at <mach/mux.h> file */
) Y7 B0 {1 P0 U ?5 | DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
3 V9 D( Q O6 Z4 I -1: a' O5 m4 W! u' K" R
};. g3 r( w$ r- @) G! W, [0 z$ L. Z5 ^
R* K/ e T6 l/ y. ^
static struct gpio_led da850_evm_tl_leds[] = {
; H7 O( _! C5 r% u {6 B# _" x! g) L' j# M
.active_low = 0,2 D/ L6 j) s' V
.gpio = DA850_USER_LED0,
$ F. u+ A- N* R: C$ H& w& x) x .name = "user_led0",
) P# \( j3 W0 E2 t1 @3 D' ` .default_trigger = "default-on",
5 @6 u4 B* `: ], t7 M& f# J },
) X8 q9 L1 b: {! ]2 A% m" Z, N {
- J+ T3 S) k( Y' ~& o .active_low = 0,: { i3 t6 _9 g! g4 v; A
.gpio = DA850_USER_LED1,
; P h# i5 v- X" O .name = "user_led1",5 b8 R K6 W+ {# r. T+ m
.default_trigger = "default-on",( }; L" G! x* B5 m; F9 S4 t
},6 R! V+ M1 v# [
{
7 q- X& O* R' r" a, [1 I1 S" e) {+ Q .active_low = 0,
, ^4 g& M6 I; [% b H7 d .gpio = DA850_USER_LED2,
6 F# T' o' C+ o3 {7 S .name = "user_led2",
5 F* `" z1 L( F .default_trigger = "default-on",: X) a# R" u3 e- v, q
},
: `! ~% G0 M% l& `" o+ S: v2 ^ {8 u- R; U9 G; ]" X6 r
.active_low = 0,
! j9 G9 H3 m* y, O% b. R+ G8 S9 g .gpio = DA850_USER_LED3,- g: y6 f4 V0 u: Y/ ~2 |
.name = "user_led3",: X% H' }6 Z; J5 T& m2 F
.default_trigger = "default-on",
5 o* k. E$ Y: V( { },9 d) l" @0 R- o4 C, C+ m, d
};
. ^6 o$ Z, {' |
2 ~: I: ]7 X1 r7 h- p8 Mstatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
# @( {# ?# M1 `& d .leds = da850_evm_tl_leds,
( _1 ?; F0 F& ]! n9 i# N .num_leds = ARRAY_SIZE(da850_evm_tl_leds),
8 d6 Q7 C6 G8 E4 G% q* u" T};
4 p( f, B' w# j* \! }4 Y1 M/ i* V! L! k
static void led_dev_release(struct device *dev)2 d" d" \' v/ A- J+ T X
{
$ l: r& c' H& e3 |};+ r/ B9 u6 M5 O0 b% v& L& \
0 A5 p0 q+ c% `8 O3 E' `3 h/ ~- F xstatic struct platform_device da850_evm_tl_leds_device = {
8 l+ s% `$ c' P; g) L .name = "leds-gpio",& D0 P6 E. h6 `
.id = 1,
1 M, j+ P8 ?1 d/ `( M .dev = {
# s0 W2 c% Z$ ]' n3 Y, m! c0 m .platform_data = &da850_evm_tl_leds_pdata,
* H$ T, V! ` L- O8 i* h# L .release = led_dev_release,
% a4 k6 z. V4 S* K$ a }* t3 T' c8 t7 D
};
7 |4 }/ X0 ^- @$ Z1 y" s6 n
8 U$ k; e# {) |9 E) a8 ~static int __init led_platform_init(void)" M& F$ a* r) Z1 R% p+ Z( o
{) }0 e) e ^& T0 E
int ret;
1 i; t- v) P( G: t4 U#if 0* G4 R) W7 Q" x# ?
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
* u+ q! n4 ~% z0 z0 X C if (ret)3 _* @9 U9 u2 {
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"- I$ _( _* [9 i
"%d\n", ret);
; O$ `+ |' W8 D$ A$ z#endif$ H O4 i) w3 V
ret = platform_device_register(&da850_evm_tl_leds_device);
1 w4 Q1 v* `1 j/ L+ A$ x) h; m' G if (ret)9 b, b" ~5 N8 K V" K1 K
pr_warning("Could not register som GPIO expander LEDS");! R6 U0 ^% i6 a& Y9 Q5 I9 z3 N
else
. ^0 ?* m% @- s0 f$ B# _ printk(KERN_INFO "LED register sucessful!\n");' G% E/ d0 p" `
9 ` v" D. D8 E- w* e8 O& u return ret;
' R, C6 M ]: r; a! [}
6 B3 ~( r: f# l; f2 X+ _
; |. ~0 l7 S" C3 [2 Ostatic void __exit led_platform_exit(void). H' r2 t; U% e! [( G
{1 v% ^" A& X, s$ F0 I( r, h' X* S
platform_device_unregister(&da850_evm_tl_leds_device);
# ?; M m0 F9 q* O5 ~. I0 t6 a# T( _2 W
printk(KERN_INFO "LED unregister!\n");" H0 S/ p1 { U% D9 ?" P
}
: }- \! g! X; p2 A- @4 Z4 T/ G! v" v) W/ I- o$ X
module_init(led_platform_init);
" [6 n4 h. n6 j3 L+ O' rmodule_exit(led_platform_exit);6 Y# e x7 d' `! Y! r
( S5 W' o! }' C- }) n9 r4 IMODULE_DESCRIPTION("Led platform driver");
2 t3 U. G% x6 a) O0 VMODULE_AUTHOR("Tronlong");" k6 d2 B9 `/ b! w, W9 r3 I
MODULE_LICENSE("GPL");' L; P5 s( S4 N) h7 o# P
5 {5 o [3 [) l
|
|