|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
5 |' |7 @# Z( {! C- N. s" U#include <linux/init.h>
8 y/ i0 @0 K/ p" T5 g#include <linux/module.h>
; e4 q t" W4 t' W: N7 A#include <linux/kernel.h>/ ^! D$ t" E- [ ?$ _* v, y
#include <linux/types.h>
2 N; r/ @5 p# }9 z% x; ~#include <linux/gpio.h>
+ U8 D( r; e4 h/ ]+ Z7 c/ k#include <linux/leds.h>
% d: A( a& b/ |. }* c7 ?6 N% i#include <linux/platform_device.h>5 H( z% ` V# D, h
# }3 E) e1 J, d# J3 j#include <asm/mach-types.h>
& j/ A' j2 P9 K) ?#include <asm/mach/arch.h>
5 |9 [- d, Q3 E9 w) c+ G#include <mach/da8xx.h>) s/ O" C0 d3 c$ W" u
#include <mach/mux.h>
6 k, U% I) _/ J# t( n' J4 o2 A5 d) |/ E3 y
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
6 C* ?0 ~6 ?9 B+ w# K4 D#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)% _8 n5 M) h; B' A
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
' Z( f. u- _& q, \/ P5 V# k l#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)- l" S, H4 {* k1 f; @! k
2 o. h9 N- T( r% H0 d
/* assign the tl som board LED-GPIOs*/
& W0 b+ _( [' ^/ u, w6 tstatic const short da850_evm_tl_user_led_pins[] = {
( L2 Z) z" h. \% B- j /* These pins are definition at <mach/mux.h> file */, W0 V# x% U/ ~" X1 w8 G
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,8 t% p0 e/ `7 z
-1
) a) S* _ v5 F$ }};
/ c0 ]! s, y' B$ r1 d
" y9 w/ y+ ?$ r/ T2 Y( z" X# T6 j7 sstatic struct gpio_led da850_evm_tl_leds[] = {- t/ y8 ^* s. K5 p6 A) M- ]
{
' I2 o4 ?5 J C- H3 ` .active_low = 0,' ~7 K$ r% f" J5 V1 I; ?- k- f; y0 Y
.gpio = DA850_USER_LED0,
# a/ `* u& ?4 C9 j .name = "user_led0",& X2 V/ a, c$ V+ ]$ j
.default_trigger = "default-on",! J+ ] Q. I x: C
},- K9 h v }; g$ l& Q, J
{
8 e, E" C% i/ `" n% O4 H .active_low = 0,
2 t7 p" O9 ~% k* |8 b5 L0 f .gpio = DA850_USER_LED1,- `2 V- W& A. O/ q
.name = "user_led1",, H D, x$ S4 q% ]' R$ U
.default_trigger = "default-on",5 A$ P, _0 E. w+ b
},
& c ?' D3 D5 j% w { `) Z" N. Z" {
.active_low = 0,3 c7 _4 t. [' A
.gpio = DA850_USER_LED2,
( h* V6 ]+ _; @$ l .name = "user_led2",3 f3 W- x5 X7 L; V0 w) w: o
.default_trigger = "default-on",
0 ^* M. n3 R- p% m% v* |8 y( f) I$ { },
3 e$ d' N! l0 z, s {6 Y- _8 R4 T# o/ r' F6 C% r: b
.active_low = 0,. h9 a. y- ~5 h
.gpio = DA850_USER_LED3,2 W0 O0 q1 s6 e
.name = "user_led3",
" m1 M6 m. o2 f .default_trigger = "default-on",
( [0 b& W5 x3 t2 h, o, H },
# _8 p9 o. P- f* l' {" e4 J" A};
. s5 z* p! P d& S' C3 {% G, N$ Z- o) _$ p
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
& M* j# L' p; O! L( U8 A .leds = da850_evm_tl_leds,
2 R( H" Z% f Z; d$ h .num_leds = ARRAY_SIZE(da850_evm_tl_leds),! I# [, I2 V! x' f+ S. D
};
: E- ]: M. y1 V: z" E1 y. o
4 d( C) L9 N* Q' Q* w1 Q& Vstatic void led_dev_release(struct device *dev), ]. g- k/ z" X! I- r2 |
{
V) N- T$ X- f% V; Z5 ]; y};
1 Z# B8 f6 J4 o& _5 u# l) s- b& X9 u7 }. O9 y
static struct platform_device da850_evm_tl_leds_device = {; Q7 O$ G) \+ u& e' l
.name = "leds-gpio",7 G. `) C' z+ e& c" j
.id = 1,
) s/ i3 }1 k( z# R# d& k .dev = {
0 X( {, X+ C9 }9 w5 k+ D .platform_data = &da850_evm_tl_leds_pdata,; P$ t1 {/ p1 f9 B p
.release = led_dev_release,( W, r) w8 f# X
}
5 W2 [. k( H1 |};) d3 e9 _, q/ H0 X$ V
! u- }+ V9 I$ N( r( C& kstatic int __init led_platform_init(void)$ L3 j- M" {2 ^; |+ `
{
" Q/ Q' Q4 y1 J+ l2 f* L4 U4 _$ x int ret;
, Y# S6 s1 z+ `% Y7 M8 U0 _0 B#if 0+ C$ a' B! u* U0 S) z/ Y2 e7 g! K3 j
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);& M9 J+ c' H' V& ]( ~) [7 _( q2 z! v
if (ret)
1 k) K \; d/ g; h pr_warning("da850_evm_tl_leds_init : User LED mux failed :": a8 [/ K* X. B
"%d\n", ret);9 w+ A9 K% |7 O( P; l9 L
#endif m& G! O4 E1 C6 r9 p, j. B
ret = platform_device_register(&da850_evm_tl_leds_device);* _5 ?+ `8 g G8 w% Q
if (ret)2 B F# o3 D( N$ M4 }7 @
pr_warning("Could not register som GPIO expander LEDS");
5 _* w. m) n5 D' D( s else
$ G: Q+ ~7 ?0 }% A6 b% n printk(KERN_INFO "LED register sucessful!\n");; z! [' b% D- U' p% `
$ c% v# t: S# o( Z9 e% H+ X
return ret;. r, h: s9 f2 a6 L% Y' z( N3 g3 H
}
/ K* j9 J9 N& Q) p) q4 j, b7 G6 K* J7 M+ c4 y( a/ A
static void __exit led_platform_exit(void)4 r/ v) N' X4 ?; ?( N& n
{5 q& J0 ?/ b$ j" g% R9 Q
platform_device_unregister(&da850_evm_tl_leds_device);' q2 c( l, E% e) u
2 O% _; @0 P- u1 x printk(KERN_INFO "LED unregister!\n");
- }5 t% F. B; A4 H) u}2 S- F+ ^# R: Z) H$ ]4 p
& i. y6 R, x, ~3 G
module_init(led_platform_init);% e/ {, D# H2 K# u- ]% H
module_exit(led_platform_exit);
7 _' c5 W9 C, R6 Y+ |# J
" ]7 R% n: Z o5 n' ?' V- b" mMODULE_DESCRIPTION("Led platform driver");' s& _; L0 s3 ^; c/ y( |
MODULE_AUTHOR("Tronlong");
& D# j" f! b' o i- n/ s; ]! FMODULE_LICENSE("GPL");
' R7 G% ~! o; l- Z, F" J
; ]9 W( p9 k( a5 }5 ?' y( V/ q+ n! Y |
|