|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
. `( T7 U% [1 B* B+ w#include <linux/init.h>
f. I- l" v4 C# N" e" {+ A#include <linux/module.h>2 Y3 R6 d5 i& g
#include <linux/kernel.h>
' ~% `" U0 V( Z$ b#include <linux/types.h>
3 K3 @6 H2 N4 z! C#include <linux/gpio.h>
0 |% W* Y/ r% J" n#include <linux/leds.h>; u8 V4 X/ w% \9 W3 L
#include <linux/platform_device.h>
) ~! [6 [; r0 K8 E$ U1 Y- a2 B5 s8 J& y5 {, ]8 r! @% b
#include <asm/mach-types.h>: h- \* r5 o# e; j& }, z
#include <asm/mach/arch.h>/ E7 n$ w# J% m7 D4 B' S* H
#include <mach/da8xx.h>% [9 k/ i- a8 _% F6 X
#include <mach/mux.h>" I1 C9 V0 Y, Q V$ I, e9 A4 n
) s( x: _$ {6 D: Q' |( ?; G* v
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)" x$ t/ D/ m- d2 z- f
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
6 M" V1 d2 h+ w& ?#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)6 O$ P* h. E0 T. r
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2). [0 b: r' d* L! k7 U
, G0 q# h, v+ I _2 \8 l9 l; |/* assign the tl som board LED-GPIOs*/1 a/ g- l' e" k3 Y
static const short da850_evm_tl_user_led_pins[] = {
6 X( t: U/ }0 h/ Y! | /* These pins are definition at <mach/mux.h> file */
( A+ Y2 L( W0 F: ] DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,7 J/ d; [" A) D+ F& [; J
-1
5 i& I& r+ i' ?/ k0 D! C+ ?};9 G9 k, M" S. I. T* }" Y. q) T
* e0 Y. b' ]+ r' \4 k# D4 u
static struct gpio_led da850_evm_tl_leds[] = {. x0 r( d* y9 o7 F3 Y+ i* ]: m
{
/ W2 X8 w; [& y% J .active_low = 0,! Y- U4 g8 \' H1 l! v% f
.gpio = DA850_USER_LED0,
, S' A9 Y+ v, Z/ X5 i( n .name = "user_led0",
2 X, m9 Y1 i; F0 Z .default_trigger = "default-on", H2 i* r/ v& w9 [
},6 p* U) V1 E. ]0 N* x( ]$ H: Z# B+ B
{
) }6 S. `2 C) I3 {" @/ \# r .active_low = 0,
$ h0 R* p# h) e" v& S& o .gpio = DA850_USER_LED1,
1 H, g6 e' F5 N9 N/ ]8 @' G" |" C2 Y .name = "user_led1",9 w0 F2 R' x M0 F) Q
.default_trigger = "default-on",
" t' B2 |# @, u7 Y5 ` z },/ C% W; H- Q( n" L; @2 N, ^
{2 N* v; o# v* H: V5 Y: p6 L& p8 ?
.active_low = 0,/ b3 I* Z6 ?) m! T7 s( r8 k
.gpio = DA850_USER_LED2,2 Z; U* K- u [5 o, O, a7 L( m. R
.name = "user_led2",% s4 Z5 w6 A2 N+ _, Z9 h5 e
.default_trigger = "default-on",
2 T) B* J/ x) N8 u) K, n$ T },3 ?2 r7 t9 B" S' K8 e. a
{
( [! K( Q( T# y U+ E8 Y .active_low = 0,- \8 _9 G& W! a6 \7 M
.gpio = DA850_USER_LED3,
" {4 f3 w+ A# Z E1 l" [1 ] .name = "user_led3",
0 b, f/ m' `4 u( x2 P" t .default_trigger = "default-on",% n4 c. c/ N7 G1 A$ X
},
9 d5 B9 x3 Q) H4 Y* e};
5 s+ m; _& @( }* H5 A1 P
+ ?! |+ Y6 T& h5 V7 A7 T; C9 rstatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {8 p. {$ i* M, Z+ x) R3 k' M* `6 h/ \
.leds = da850_evm_tl_leds,& K5 b9 p% W( d2 ?. h8 X, A
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),
; ?1 `' x, x3 x6 F: V};
. L1 d9 s8 H1 ?0 J% k0 E$ ^7 j! r' f- O" w+ e' i5 S( l
static void led_dev_release(struct device *dev)1 a. A0 C" D5 k* S
{
1 }% Z) q6 r$ E8 s};
' E' l" x' l) u% I$ H2 P
4 d6 p' {+ _2 a! J' Ustatic struct platform_device da850_evm_tl_leds_device = {
+ |+ V/ F. [1 i .name = "leds-gpio",
0 P1 X3 k% n! |2 x .id = 1,
3 w& u- v) Z- A .dev = {
+ w& j& V& n& {8 O- y+ D* F p .platform_data = &da850_evm_tl_leds_pdata,
5 S& A' f ?9 _, L5 z .release = led_dev_release,
. \+ a5 e! c8 @; _' i2 X4 v) J }1 ^( f( ~# X' I | p* F
};) D+ ~! `0 E+ }& v w
4 f/ y9 {) T8 B1 H z( i
static int __init led_platform_init(void)3 r6 ?1 i% a C4 ?. B' ^& A! _
{8 ]+ i8 p. z2 c4 g3 i
int ret;
3 V$ v0 ?% u3 k4 ^$ @8 Z#if 0+ l; @8 U" ?- i! a" S: |1 P8 q! A
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
5 ^2 x9 V- }* B2 l if (ret)
3 a& V. P; j0 J3 b; w- A9 [6 w pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
" @: K. t9 _" d "%d\n", ret);
& k' h8 p* I# d- x#endif
$ S4 J# [& Z: k ret = platform_device_register(&da850_evm_tl_leds_device);7 {# T- |) y$ u
if (ret)) H0 z" u# s- g! e
pr_warning("Could not register som GPIO expander LEDS");
# V$ n! R. l7 R else
" c- o3 D2 P, o. L) L% R printk(KERN_INFO "LED register sucessful!\n");* u% }9 l9 h0 Y; f8 r( m6 n
0 u7 ~: r* K% J+ X4 q0 E return ret;
6 q1 q% @5 s W: T; B4 P: ?}
p/ s' d( V U% Z! q z8 L. e2 ~: z
static void __exit led_platform_exit(void)+ k( X5 J* e, C. `# z9 K+ [
{
" H/ a p$ Z L$ I) u platform_device_unregister(&da850_evm_tl_leds_device);
9 d0 @8 [8 v& y, i6 M) B2 v2 p+ F) O8 s, H) `# I
printk(KERN_INFO "LED unregister!\n");5 u& e8 G" C; j/ x
}
p' i* E/ {% Q/ l$ w, ^( l4 Q; ^$ K |
module_init(led_platform_init);- ?7 j' R( l, Q" o/ ]
module_exit(led_platform_exit);; X0 r" \; C4 D
# @/ j: L. }' u3 E6 w
MODULE_DESCRIPTION("Led platform driver");8 p7 P O9 Z! c8 N; E& r/ \
MODULE_AUTHOR("Tronlong");9 ^/ h: `: [3 b) Z2 W$ d* K! _
MODULE_LICENSE("GPL");
1 q% y* V- n: E7 `
, }. G/ b! P8 _: h. |( Y$ Z |
|