|
|
求大神给下面的程序做注解,请稍详细些,谢谢。( z7 D; _% q7 Q" P A
#include <linux/init.h>
6 h) ^. f. s) M2 W6 `9 C#include <linux/module.h>
( ], z. w" L: `#include <linux/kernel.h>
- M0 l+ G, s, X6 [! f#include <linux/types.h>
' M( a$ W( W( e. M#include <linux/gpio.h>4 e D$ Q& L6 U% M ~( S
#include <linux/leds.h>; Y+ H( p3 ~: y. T, X* x9 M& @
#include <linux/platform_device.h>
1 e+ x" P/ G, y6 R% p. o
; D' |% f9 @ H2 I1 j#include <asm/mach-types.h>
3 B" R( N: V0 Z/ a) v1 o#include <asm/mach/arch.h>% [9 U8 q B( R0 `# }
#include <mach/da8xx.h>+ ?2 U/ x0 F% x W; y
#include <mach/mux.h>% i/ K& `3 Q% f! @, M4 d& n
+ I5 k8 I# z' u#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)( V' {* X W+ P/ @4 g; m( q
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
8 h3 w6 V0 G- F, E& M) T6 E9 b' ~#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)4 o5 Q: F! Y( F/ e
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
8 h9 z% z' N, t6 L/ X' N, g) V7 R! r8 R- ~
/* assign the tl som board LED-GPIOs*/ V( ]* S1 n3 j+ O% P. \) S
static const short da850_evm_tl_user_led_pins[] = {( Y: T1 z) ~* R; _' P+ x) a
/* These pins are definition at <mach/mux.h> file */8 E+ x# h. Q" _/ i- E* m
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,/ \. k( t' z- v* j( D
-1
8 D2 s+ n' @7 S2 X, f, t4 E};
5 X2 c. ^: V) [, W6 o
( t# j9 n' W* z, P E$ @static struct gpio_led da850_evm_tl_leds[] = {
# k! o' k, }/ F' q S/ y {
0 r7 O' G" J* `, ~ .active_low = 0,
/ [# e; s. c+ A4 J! N& J* O .gpio = DA850_USER_LED0,
0 u0 T. B; w4 W4 X: X8 G .name = "user_led0",
4 [: L2 \+ w' L( L7 \& L0 x .default_trigger = "default-on",
7 G: _9 I* C8 [$ k8 I' Y8 e2 B },+ V* n$ ~) T# \3 v6 _0 b" J9 t
{$ T c7 \# I7 D
.active_low = 0,
- f6 _: _6 ]3 b .gpio = DA850_USER_LED1,
+ d% p- a; `( h7 ^% R b | .name = "user_led1",
* j" R1 Z& K" g7 X .default_trigger = "default-on",
- k& g. m& m& n, b4 X3 J0 ^3 K },# B' c- A, ]( R. Y
{' F( z& z$ K! ^. ?0 v) X
.active_low = 0,3 w& [4 @, b. b, i' x1 d
.gpio = DA850_USER_LED2,* a% H3 m0 D3 H9 ^" k/ g
.name = "user_led2",
$ U$ Y' X# d* l8 g& C) u0 M$ B( t .default_trigger = "default-on",
A! h( a/ J8 A* X* J# n; U% L },! k( R, G6 m* w3 I, O# z
{/ z% \, p7 F7 L3 B% e$ E
.active_low = 0,6 N4 T1 S) P5 F8 B+ \/ h
.gpio = DA850_USER_LED3,
- D" q7 l. n0 r9 G; j. N& T .name = "user_led3",& ~: Z- i1 }7 v& v8 D. } V
.default_trigger = "default-on",& d1 E: @% H# a. o3 N- _
},, e( w0 L9 i- j5 |5 x1 t9 A) l
};6 ~, z( ~% Q5 P/ }3 Y, s0 d
* n/ B3 L' }# g: u5 `static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
h% S4 ^% K8 D2 `' Y4 g .leds = da850_evm_tl_leds,: H, |+ N% b) S/ s
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),
3 w8 h: B* ^; V6 x- m: e9 {1 n};+ a( b9 q* Q# ^) Q b: Q
* n. c/ T0 v1 B' Sstatic void led_dev_release(struct device *dev)' T3 N7 p# x+ }! u9 K# d
{ P7 k* B2 s9 a
};
6 ]9 ?4 l. ], Q) | T" Q- U2 W. I# Z8 b" a1 m6 {7 ~
static struct platform_device da850_evm_tl_leds_device = {) n" Q2 ~1 i+ T) I) [6 L
.name = "leds-gpio",
" m$ a; H" b0 k' \4 f+ S .id = 1,) o$ a3 d* Z- t9 J
.dev = {
4 l3 }/ b @- m. O .platform_data = &da850_evm_tl_leds_pdata,( ^; P5 B& r8 `( P" w1 B4 c
.release = led_dev_release,; p& V) H N {+ y; ?+ _
}
; c# y% L* @) i};
) S9 v6 D" R! l# j8 z
7 ]3 t& G) `3 Jstatic int __init led_platform_init(void)) E5 T) i8 x, i2 _$ h0 ^! B
{
7 G1 [' d: U; k- w int ret;! O* K4 n% g# E( J. n
#if 02 M( l+ \ P4 u
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
9 A% P- H6 X3 W4 x& U if (ret)2 T3 w$ D. d/ g
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
- p. I! x$ v. M! \9 V) D4 G "%d\n", ret);% h, B: w2 o. n( k4 R! Q
#endif9 D% Y* a! T9 r2 Y3 I
ret = platform_device_register(&da850_evm_tl_leds_device);
. e$ f8 a% H ^% q if (ret) L2 ]+ u: u. j5 K/ `0 w
pr_warning("Could not register som GPIO expander LEDS");
) T. P! c4 V, @/ Q# H# V3 `& ? else. I* t! @+ F8 h/ \
printk(KERN_INFO "LED register sucessful!\n");
4 r8 \% `1 L5 u8 D' o) z4 c9 A
( g* }1 W% T4 ]& o return ret;
7 h: r" L) _' {1 n4 D& _2 u0 e9 ]}; @$ Y. W- ^3 a9 ^9 r% d! k: H! ^" E5 b
/ C& d$ `7 X* X1 E/ p1 J E$ Pstatic void __exit led_platform_exit(void)" d3 S% ~! D4 G
{
9 V+ l j% Y) \+ B8 l7 ` platform_device_unregister(&da850_evm_tl_leds_device);
/ E+ X4 Q/ I% y' f4 O5 F7 ~# q0 v
# i/ r& m$ v. y0 \ printk(KERN_INFO "LED unregister!\n");
& _; K; d' J7 A$ u}0 ?: G: `2 }' _! K0 m+ B2 t
: E8 h; \! C' H/ M8 c+ R
module_init(led_platform_init);# [, S. b( @5 ~( ]; Y; A5 T
module_exit(led_platform_exit);; F9 ]8 {+ u/ ~$ ]7 N4 }
! _5 A2 ]6 A2 x- ?0 T( {$ Z7 z, ~
MODULE_DESCRIPTION("Led platform driver");& P/ B" }/ |% r+ E! r G
MODULE_AUTHOR("Tronlong");* t* ^0 p1 s9 n5 s
MODULE_LICENSE("GPL");
4 y% m: T# J; k: e1 L) c9 {9 L% ]- I+ n2 R
|
|