|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
. W, F6 D8 c! J* q#include <linux/init.h>8 {4 b2 h- p4 _7 J ?% @% I3 N
#include <linux/module.h> ^% n4 U& L9 q- w/ B' @
#include <linux/kernel.h>
4 i/ w" U! T o#include <linux/types.h>/ y& X1 r, _' K- r8 `5 _
#include <linux/gpio.h>
8 ]( p* F$ L9 }6 n* U. b$ I) {2 M S3 l#include <linux/leds.h>
7 D' z8 l4 D3 o0 L3 z) x0 G9 O0 Q W4 d#include <linux/platform_device.h>
6 K& C- e' M. x+ q" H8 ^
3 ^; m4 S' ^0 \4 J0 `$ x7 P#include <asm/mach-types.h>( M8 N% u! w e& C# `) p$ W# ~/ P; A a
#include <asm/mach/arch.h>
7 X$ V! b9 L4 i0 J/ Z8 \8 j4 R( {#include <mach/da8xx.h>8 f3 v: y* u8 o) q! i* B/ n
#include <mach/mux.h>9 x- D6 [4 U/ F, _
; B& G$ o6 S% d5 e
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
; t4 f; ~ S2 I9 v4 T3 j" L. d#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
+ C) c4 G' K4 Q, l#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)* M3 |/ R& d5 ?1 N
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)- j* v7 A! ^% J8 z x: {& @
/ Y6 |9 r8 M% @( {, q7 S
/* assign the tl som board LED-GPIOs*/
( p8 l. m! Q; S' W& A# Jstatic const short da850_evm_tl_user_led_pins[] = {1 p6 O& h8 i5 H' a
/* These pins are definition at <mach/mux.h> file */
% g# @6 {" h* m3 C2 F7 K DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
" F3 c+ c% A# f7 H -1
% x! s: X8 _. V9 V/ U};3 V. l% c' e8 r7 R8 m
0 S* n+ x( d6 c/ I2 j e% ^
static struct gpio_led da850_evm_tl_leds[] = {9 Y7 j+ u: L+ X
{) U8 P9 h( j$ E; `, v3 Q
.active_low = 0,9 X* d% B, _# j7 g0 F2 ~3 _! U1 L
.gpio = DA850_USER_LED0,
- R2 E1 l g8 J3 i0 n$ c+ }- o( [ .name = "user_led0",
/ d5 p2 g! U- h2 ]3 {" c .default_trigger = "default-on",: Y3 ^% R' L& U4 p. c: l, A8 }
},
) ~& s$ D5 S, c {# M7 `1 }; X+ ^( J$ X4 e8 v
.active_low = 0,5 k$ s, _# |, V7 N0 g( |
.gpio = DA850_USER_LED1,
& o2 p3 d$ p) Z& X5 Z2 l .name = "user_led1",
$ ?" a; o# W d1 P .default_trigger = "default-on",& b& z' C; C( Z& L- W. ^" {+ l( U& K
},
2 i U" M! a: Y. y# `' d2 g+ u {- c( C/ M# L5 p2 y" I7 K0 y2 {
.active_low = 0,
5 E( b- d8 ` q .gpio = DA850_USER_LED2,1 L6 O" k( s! \2 k4 h2 v3 a: e3 ?
.name = "user_led2",
- K" J$ j* Q4 Q% \; [3 P .default_trigger = "default-on",7 v+ O+ s) I% ^ ^, q9 E
},9 Q1 D, a5 d$ W% ?8 E0 Q
{
8 Y8 W( j: `) T+ J2 k .active_low = 0,
' G* B. c0 t! J/ {, ~ .gpio = DA850_USER_LED3,- I" r$ P; t6 j: N
.name = "user_led3",
& m: K& `' i* L5 d2 S: ~% E .default_trigger = "default-on",
. \5 o2 [! c4 Z( C/ F },; o9 B+ g* r9 }6 o, J% V( v
};
# X$ }. R9 V6 I. i C* A; Q
( `7 c( B" s4 [ C7 Ostatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
( o F+ W& h: }6 ~6 }! e .leds = da850_evm_tl_leds,
# B' B9 N0 J4 V; D' D7 Y .num_leds = ARRAY_SIZE(da850_evm_tl_leds),
/ Y( k4 Q# r$ ~8 Q};1 \9 I0 T( x, C. m/ @
9 K# `! O/ G/ q" w5 k! b
static void led_dev_release(struct device *dev)
9 a* v2 [" B W4 k7 a{
* r1 ^% G. r# w8 J+ V};
7 @( j" y6 u& }! Y3 R/ e* U; @
: i1 Q" h, T. f, Ostatic struct platform_device da850_evm_tl_leds_device = {1 D7 \4 r6 [1 \9 P) v( E
.name = "leds-gpio",5 _9 y8 f% [2 l7 @ a
.id = 1,
% \6 p6 u3 e6 Z% o% ` .dev = {: |. ], f7 H4 t D( `" y) R
.platform_data = &da850_evm_tl_leds_pdata,- x/ ^( \6 ^2 N# f
.release = led_dev_release,% _% F' S! w0 T
}$ M6 U3 q; v) D. p' U
};3 N$ M( r- i; d, b Z5 }5 w
/ @) [4 o3 y% }4 i9 fstatic int __init led_platform_init(void)
, p2 A8 O* G5 L; n3 a4 t3 X{
9 T* A3 z* X! W- ~* ]6 K- q. a* [7 Z: Q int ret;
+ e: T. I8 }% g2 ~8 v#if 0; ?4 ]) g) Y$ W; f( ~2 o0 y
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
9 P! U5 u6 o/ |2 u if (ret). @+ P2 k- Q/ v$ P) x: H4 u1 v
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"1 u' ?( {/ }' Q. [; ^) o2 b' l) I
"%d\n", ret);
0 M! X) C) K/ t) V) T0 s#endif
6 M+ N0 J/ p7 I+ z: ]* h! U ret = platform_device_register(&da850_evm_tl_leds_device);
% [" O, o5 ~! a/ { if (ret)
& d W, F- \/ S+ x, c3 v* z pr_warning("Could not register som GPIO expander LEDS");8 L1 h# I$ _8 u' c
else0 u6 j0 y- O6 @5 s1 M+ Z; W$ Z
printk(KERN_INFO "LED register sucessful!\n");
3 B9 s" ] p: a- @% y! g' I) ] S# R7 w5 b- L
return ret;; i, I$ ~" ^$ V- F
}$ m! b d: a2 ?5 y$ x6 s$ r
! z, n9 Z' U2 R0 r3 q5 O
static void __exit led_platform_exit(void)
! ^/ Q* L- p. p1 ^# g: x{' J; T( S; @$ j" I, m$ F4 r" ^" @
platform_device_unregister(&da850_evm_tl_leds_device);0 C% H4 A; E" y1 s
( C% V: f, P* O4 _6 ] printk(KERN_INFO "LED unregister!\n");' C( p/ k% S1 D8 A% t
}
& |0 B) d0 u8 Y R2 K! H y3 m( X6 H1 ~
module_init(led_platform_init);
6 S" G" e- `; _% o4 ]: |module_exit(led_platform_exit);
8 H3 B% Q- Q& _3 l8 d6 \* \
) k, X( {9 N& x% N% J; m' k( MMODULE_DESCRIPTION("Led platform driver");( r' _3 A2 |" m2 G: N9 k7 w. T2 h! A- H
MODULE_AUTHOR("Tronlong");
' \) j( s/ U* c: o) JMODULE_LICENSE("GPL");* a1 `+ {) G; O9 P. s
7 ]- r% j7 I/ V0 v |
|