|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
9 V0 W) `. K0 U8 R#include <linux/init.h>
7 j/ \$ i L' Q8 K9 x#include <linux/module.h>
) t% o, c$ x5 t$ F- Z: y#include <linux/kernel.h>
- f: P' S! \- S; b, k#include <linux/types.h>
' x- }0 U; ~5 P- ]#include <linux/gpio.h>
) j0 L2 B c+ B% E& k4 D#include <linux/leds.h>. Z) V, D! b( ]9 j2 Z4 [1 r
#include <linux/platform_device.h>
3 v3 m. H9 j9 F* x1 f! i; m( i# B7 A/ H; \/ b; G4 @& y- a
#include <asm/mach-types.h>
3 |1 q% m: ?4 P#include <asm/mach/arch.h>
, B A# p8 f9 J#include <mach/da8xx.h>$ q6 a- D) ]5 E) z. v
#include <mach/mux.h>7 `, {1 L6 `/ S3 t4 l
S; w% i5 ~& \3 q5 D; \9 j
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
* [: l! f1 Y4 Y! y#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)$ H% ?9 K' e- f- z* N2 {
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)' L4 Y9 {2 z( s% |) s: H- l" }
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)# Y2 {# j) |! ]
6 P+ b8 w; v/ F/* assign the tl som board LED-GPIOs*/
9 M% w4 c1 M2 p) [; fstatic const short da850_evm_tl_user_led_pins[] = {$ q8 K, o0 U+ m6 j. K2 C
/* These pins are definition at <mach/mux.h> file */1 v& V8 P0 M+ k- I7 j
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,/ U, N' m& G! C6 y' n# A) O; m
-17 {6 B9 s+ E, I: X" E
};& D2 E& `& l9 ]7 _2 A
) z/ F, }6 s4 l: R! E
static struct gpio_led da850_evm_tl_leds[] = {; P+ p2 I7 E& _: Q* S
{
& o5 ] Z. x2 F1 z5 `1 \ .active_low = 0,
8 O3 d* k: S8 D .gpio = DA850_USER_LED0,
( }. s" F8 v- Q% X/ B! X3 v* m .name = "user_led0",+ b4 C- V* r) M v. u
.default_trigger = "default-on",9 }' n- O+ k: d
},7 `' X- c$ H C8 {9 R
{
6 ]% o' A+ d7 f( L J, | .active_low = 0,
& `8 g% O! z8 I6 \0 L7 O: e: V .gpio = DA850_USER_LED1,5 i& d% p' z0 e& Y
.name = "user_led1",
3 x2 L$ z/ [) ]; u .default_trigger = "default-on",
8 R2 B0 }3 M, r },
. H. C% c! v) ^! `3 b {
9 W7 A0 W1 c/ w .active_low = 0,
4 U8 a: @1 q2 k, l, l .gpio = DA850_USER_LED2,
~* H8 d1 x! ^* B .name = "user_led2",
" Q& K! ~+ x( _ .default_trigger = "default-on",
$ r9 N' r. l r+ x7 A5 S1 D },
- ?# M0 \4 ^' w K0 G- o {
+ Z) t# D& A+ R% \" e- r$ c .active_low = 0,
`! v' ], R. a5 K .gpio = DA850_USER_LED3,
( w& }; i% D& G- [- C .name = "user_led3",
0 L. h% u) y: L$ q; u .default_trigger = "default-on",
/ t) Y' C( ?9 A5 f0 A) V. w },
8 I9 ^0 l% g* o2 R2 ~8 g! D) C5 G};
1 @' x3 n( k- Q# W4 T6 H' u! y- [, p) l' N3 J1 K3 e
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {* M7 @8 ?2 \$ `
.leds = da850_evm_tl_leds,' q3 S3 A! u% ^% f9 T8 C( o+ @" {
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),
" L' J% N& M% ?6 g3 R) w};
: O$ N8 Q. g2 p0 J& Y) M! L
. l0 y) L! }3 B! \* z. P6 c# Fstatic void led_dev_release(struct device *dev)
/ i+ d4 X: c* `8 p8 O{6 t( c8 i. F5 l* C
};
& G" ~& q5 ~& f, k( x8 ^, X
2 f1 S. @) @: dstatic struct platform_device da850_evm_tl_leds_device = {
+ h2 _7 a; q+ q" s, t7 R: Q- P5 S7 I .name = "leds-gpio",; H/ V/ m. Q& T# s' A
.id = 1,
& F" s& z8 a" }. `! S .dev = {
- `# M" [& `- y4 n! A4 C) u .platform_data = &da850_evm_tl_leds_pdata,9 M4 w! d& Y8 ?# w! n
.release = led_dev_release,
' [: j: |8 i1 I }! Z) \1 k: {# I! X
};" h9 f# }+ e' B7 N% x! H
8 F/ }! ]3 n) `, ^, I! i( \8 M5 A
static int __init led_platform_init(void)" c4 d$ S, } n
{0 F# n" P j# O/ q
int ret;' U* A. c) L2 o+ q% X5 S# d3 e$ x; l
#if 00 b' D& w& d8 r! G$ k. m. y! ?
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
! X( `' [1 d: `4 {5 \( l% A/ G, R if (ret)5 o. \5 |7 F7 O; }3 E; _, R7 t
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
0 v, O. K+ O6 Q, w( d2 M/ d" b ` "%d\n", ret);
* A" N+ F/ {6 X9 o+ |7 E#endif y! b0 J. }0 S' c' B2 l
ret = platform_device_register(&da850_evm_tl_leds_device);9 L1 z+ Y' s9 k! |% m
if (ret)5 Z- |0 J+ M/ R6 U |. X6 l1 L
pr_warning("Could not register som GPIO expander LEDS"); |8 U9 E! t2 M% V0 I. S# q& X1 h- G
else; Q$ n2 X$ _0 v# H6 v3 v% A
printk(KERN_INFO "LED register sucessful!\n"); [. j/ B1 s7 A5 Y. C4 S3 R
$ f4 c: }% I( W8 ^ return ret;$ {- K c: v: y8 B1 ?
}2 |. C/ x6 k4 G% {4 V
( |+ ?: }2 t5 J1 I' e3 d
static void __exit led_platform_exit(void)
/ D2 H U1 T; L( j{% C K" A$ Q7 W+ D8 E
platform_device_unregister(&da850_evm_tl_leds_device);, U- u( @. I, U: O" {
3 s! P/ s% o. a, r7 c% {% H- N
printk(KERN_INFO "LED unregister!\n");
. @0 |( f3 [( i) U}
# }) F2 F1 e9 H6 R. }6 q/ q& ], D! Z8 R$ s0 h) I
module_init(led_platform_init);* p6 T% @$ H+ k
module_exit(led_platform_exit);% y$ V G6 }+ c7 _* ?8 d) L, {+ }% c. d
$ Z/ Z2 @: z) ~! MMODULE_DESCRIPTION("Led platform driver");9 n* _$ ]- }2 H% n0 p( z4 l
MODULE_AUTHOR("Tronlong");$ j6 h$ ]0 z4 P# w8 ?
MODULE_LICENSE("GPL");/ b8 y) n+ I+ W& N0 T, ^
W) _$ G- P( \4 M( ^9 N, n3 S) F |
|