|
|
求大神给下面的程序做注解,请稍详细些,谢谢。 i7 f' u7 h1 u' a8 c$ e& }
#include <linux/init.h>
- s. r" E( C* E6 K" w* ?- @$ F+ E/ c+ t$ s#include <linux/module.h>
6 l( n# m) l( n& L# {7 H" T#include <linux/kernel.h>
! k1 @8 ~+ f! _2 L) D; {. N#include <linux/types.h>
0 }, @* z7 M1 j4 M T# F8 x5 \2 X#include <linux/gpio.h>
4 K5 ]0 L* G- h& x5 v: o#include <linux/leds.h>
7 ~# b* p4 `4 b# ]#include <linux/platform_device.h>! m# o% N8 B! {' J t0 w! w& j& \
1 E9 C' r1 x3 o
#include <asm/mach-types.h>
) }" E& ~# ^ ^& c#include <asm/mach/arch.h>
3 s. _1 g$ y+ f) l5 {#include <mach/da8xx.h>. O* I1 Z2 p# T2 O' Z
#include <mach/mux.h>
- i6 h! Y* i, h$ |( v, X4 q. T p
" I9 l. Y/ l: U' S: f#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
" Q! h- |7 ], q. @7 ^8 H$ T# \#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)% ?, a4 x9 {* J5 W
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
2 n7 _, V& ~' x8 H Y' B$ d+ Z+ i#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
& o" ~* X- n( E
' {9 C8 c' w* ]1 j/* assign the tl som board LED-GPIOs*/
a) b' g1 k' @& {/ x9 ]1 |static const short da850_evm_tl_user_led_pins[] = {4 G0 [7 P! h- e( c! ]
/* These pins are definition at <mach/mux.h> file */% t- [" ? F6 M8 m
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
6 E( d) y/ j& G W" L8 E -1
/ `' [* b5 n% ~};/ E' d4 M, j! g: s2 N* Q
]$ b8 |. C# v+ ?$ ustatic struct gpio_led da850_evm_tl_leds[] = {
- b2 o" t" O3 o {# E7 K7 V& b8 v$ Z0 S* a1 p
.active_low = 0,2 q. |5 O* ?* k' v
.gpio = DA850_USER_LED0,3 ?$ M' N* @, L9 s
.name = "user_led0",
: o/ Y+ v7 j' R .default_trigger = "default-on",0 X" y6 G3 H! n3 {
},
0 W5 W# U2 I0 W. o! T$ c. Z {
/ {/ F; W) Z* o, `9 J# R7 d .active_low = 0,7 Y$ [7 k \. I4 f; N6 e& g
.gpio = DA850_USER_LED1,
3 E( }5 r! p& e. Y. Y .name = "user_led1",
. l3 }; r% @ }, P2 j6 I- U .default_trigger = "default-on",/ C7 N9 G( W3 v) ~; D
},7 r( `+ D3 Y1 e( ?
{9 m) ?% l3 m/ v! x
.active_low = 0,
# E1 c8 J7 z4 i+ \. c3 o* x .gpio = DA850_USER_LED2,
0 A1 @" I( x) O) z2 g .name = "user_led2",% u& A# x: [; K) a/ a/ x
.default_trigger = "default-on",
7 I# L: V/ u! R9 s: A! J },( W: z3 T2 ]8 H c& G8 q
{# L! K( k8 o9 u4 c' }
.active_low = 0,
; Q$ a1 N0 V6 D& i4 U6 ?0 {% l1 \ .gpio = DA850_USER_LED3,/ m, Y% F$ ~) F, U5 l0 P6 ?7 E% `$ F
.name = "user_led3",# w/ o, w3 ~% h( |( i
.default_trigger = "default-on",0 Z5 _1 x3 t2 U+ `3 v" X
},
% y' f+ ^7 ]' g& t# q/ x7 q% z};4 V# ], @$ {9 k4 y8 W4 b
/ E9 ^1 A6 _$ h2 v* R
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
$ B) B/ ]+ p9 W' f$ w .leds = da850_evm_tl_leds,/ W" M: C- ^3 F+ l4 s/ J
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),# h' x# `% S8 s
};
8 E: w& K# F2 S, W5 z
% N, R2 x8 k7 K" M% |static void led_dev_release(struct device *dev)5 U1 p% b! x1 t2 y$ {1 A V
{/ c1 f! B2 j, x3 |6 K
};" \" s* b5 p7 N5 U
) \, C! l, m- I0 \! e
static struct platform_device da850_evm_tl_leds_device = {
8 i3 h. D4 i+ N8 |( ~ .name = "leds-gpio",
+ |$ Q; `* Y" }, r! x .id = 1,4 r* c. _2 d/ x& ]$ C) s
.dev = {8 n. m7 F7 r2 o/ ?7 a
.platform_data = &da850_evm_tl_leds_pdata,4 J' D. M3 h8 k: U! J1 X) S
.release = led_dev_release,
# r7 Y( ]9 g P1 ?; U: L }
1 G9 ^" ~" c! ^8 F, ^" j};
* _6 D9 j1 J/ v% g" v$ n/ M7 [5 j5 v8 w& ]/ \8 h# J0 \
static int __init led_platform_init(void)
/ j! H! P, D6 S2 w Y( O; N{* \# @0 K! R* U; c
int ret;
" c7 ]1 Z6 w# z/ j- |#if 0
" b P( A+ `0 e# w2 o# Z ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
8 l/ c2 c' L; [: z if (ret)
( w$ l, g5 w% |7 j pr_warning("da850_evm_tl_leds_init : User LED mux failed :"% r, h V. m( c1 V. g+ l# a% k
"%d\n", ret);; B' |* t" i0 o2 u
#endif
, Z& W5 z ^: W ret = platform_device_register(&da850_evm_tl_leds_device);/ J1 ~5 z3 v0 Z7 L3 C0 C; _7 u. n
if (ret)( R9 l6 x! p" ^
pr_warning("Could not register som GPIO expander LEDS");
3 T7 |# n3 n, |3 B7 f1 Z. q else
' ~ y# G' x* D7 \4 s printk(KERN_INFO "LED register sucessful!\n");' J- c& d c/ Y8 ^9 P
' O, p% J: _; D9 M+ @
return ret;6 ]* l- n3 k& u8 j. w- H
}+ T, W$ M! H: H8 _' @7 i) O! Y
( ~$ g$ p. y5 k! f1 V# o) H, Gstatic void __exit led_platform_exit(void)# E9 K& _3 [: e U% \* r
{
4 u# `" L+ B E( j+ N1 h+ V6 V platform_device_unregister(&da850_evm_tl_leds_device);, |2 ]. i0 k+ @- |+ P, `
0 y, D W: q+ Q. J
printk(KERN_INFO "LED unregister!\n");7 N; ]" P& b# K% I0 n i5 ?9 D/ r# i
}& o3 m1 [. X- S/ ^7 _
# @5 u- M% V3 H# N2 |module_init(led_platform_init);
8 u, ~# U* L t, f* imodule_exit(led_platform_exit);
$ f7 ^& z! `" d/ u, e( r$ v
- W5 C/ b4 i! N" t4 GMODULE_DESCRIPTION("Led platform driver");' O8 u3 M, U& j0 _( |
MODULE_AUTHOR("Tronlong");
: Z7 o# W3 X3 pMODULE_LICENSE("GPL");& V |: m5 y6 Y1 A' ?( y
8 _1 ?) X" ~" [, Y |
|