|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
. ^1 ~# n! j1 q4 _7 r& x. i$ i#include <linux/init.h>
) _- L; b( [( B, |#include <linux/module.h>
3 u+ J2 \) c" T; ]3 @& w1 z, `2 ?#include <linux/kernel.h>7 ?2 V4 _0 g1 a. H! W# D! C# [
#include <linux/types.h>
" L* J* q) f8 y' }#include <linux/gpio.h>: X' l# S6 a* R" K
#include <linux/leds.h>
1 @8 z. l/ p0 g( v% J6 V#include <linux/platform_device.h>5 Q# a0 u3 p* v3 X
6 v8 r( D3 _* [/ a$ j#include <asm/mach-types.h>
$ c. a6 E" l) B# |4 [#include <asm/mach/arch.h>
: s. R0 q. f" X) n: D#include <mach/da8xx.h>: G* E- M7 S2 ]$ Z/ B ^' `9 K
#include <mach/mux.h>
" D& w3 q: k9 |) }# N9 ?% I* C4 W5 I, o* g) M
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
/ X* l) M' a( n: y/ P#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
! |8 o7 G& X8 j* s! y) I( y/ R1 B#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
6 [% K5 \' x/ }5 O! c6 h3 h# O#define DA850_USER_LED3 GPIO_TO_PIN(0, 2). a3 j; U1 g; y& d; o+ k
8 x3 B* R/ g2 v6 ~/* assign the tl som board LED-GPIOs*/
, L% w- c& g: G# xstatic const short da850_evm_tl_user_led_pins[] = {
0 y, C! C. _( I5 F3 Q# L$ g% | /* These pins are definition at <mach/mux.h> file */
$ w6 M! j+ W- i7 F7 O3 T3 q DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,: | ?: O, Y |5 [: ?
-16 m- e, M# J3 ?: p4 m {9 D7 z
};1 }) G- _+ q; K$ I
) G" b/ H( Y% i. c) x. [: Wstatic struct gpio_led da850_evm_tl_leds[] = {: z. z! r& N6 C5 x/ ^- ]) [* U% E: o3 z
{
# a" J! g) v, Z5 n- A. R( E. U .active_low = 0,
* Q# U( o( K( M; ^! Y .gpio = DA850_USER_LED0,
9 v6 i/ u0 ~( o$ s+ g .name = "user_led0",9 A1 } ^: J* W
.default_trigger = "default-on",
/ Z# }! W: O) y. p3 c },4 G/ H7 E6 B/ c- H3 y$ h
{
- n7 ]5 F0 A5 Q' J: L1 d .active_low = 0,
) ~! A$ I$ X0 {$ {9 \+ f( H3 v& {2 ~ .gpio = DA850_USER_LED1,
$ f8 Q i) l3 j3 n: P1 Q: Z .name = "user_led1",( m4 s. G1 j9 H7 o- H
.default_trigger = "default-on",# |! p, Z T" S
},
5 g# R) D8 ?3 J) d0 { {' g; [/ Q3 {( K7 r; A- h6 n
.active_low = 0,2 ]4 i8 [3 N9 c# C
.gpio = DA850_USER_LED2,1 U/ I9 J8 l1 l2 ~* \6 a8 `
.name = "user_led2",: M6 A6 e7 c! Y# h# [% r
.default_trigger = "default-on",; O/ ?- x: O( p" C( W
},+ `! E e! x. ?
{3 i8 ` n! `; V; M4 r
.active_low = 0,) c) @1 O; _5 e2 r* T
.gpio = DA850_USER_LED3,
( k. d8 S, J6 F8 D. e& v! R .name = "user_led3",
% x: L1 x4 b. o7 z .default_trigger = "default-on",7 K/ P% s; g! g9 [% m( i
},9 `( B' [1 |9 b1 j
};: D) X* P/ J% Q% l$ B2 }- T4 u# u* @
; t2 c3 w7 ]# S! B
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
' V) |( j' |$ r4 G .leds = da850_evm_tl_leds,
) g# R* M& s# r. m .num_leds = ARRAY_SIZE(da850_evm_tl_leds),
' x! R3 Z+ a, p% f& E* ]};. _/ t- s8 U1 w% |2 A1 z u
; Z! _* c$ c1 c3 xstatic void led_dev_release(struct device *dev)
9 X. q' C: T" m0 o" m0 \{
^) X8 ^* P) t};5 M1 o4 [6 G; Z, y$ e( ?
3 ?1 U5 x$ G$ C
static struct platform_device da850_evm_tl_leds_device = {
4 Y* d6 |1 A* }6 y .name = "leds-gpio",1 }! D8 g5 j- C% j
.id = 1,/ Y! [; s v: Z" t# C5 Z$ N
.dev = {& m# j# g' _6 e' } d
.platform_data = &da850_evm_tl_leds_pdata," r, f4 k. `. c! u
.release = led_dev_release,* M4 l* }* ^' R2 e& ]- x1 }
}
% |9 x2 C0 y. R( f};2 g: `2 L: }8 b5 S/ f H5 d
, _+ m, W. [1 I& Jstatic int __init led_platform_init(void)* r$ W2 W* y8 g2 d @) n
{
# P( J9 u) C0 P5 D R9 T4 u# f int ret;
- i& Q# \0 t" t7 L# k#if 02 Q9 R# D) n! L, u
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
# g4 W$ j3 p9 ?( S) u% a7 J. z6 E if (ret)
- n6 G1 B: {( W" O' N: C4 {" c pr_warning("da850_evm_tl_leds_init : User LED mux failed :". e. x! i$ u6 D, p
"%d\n", ret);
# x" l8 E" w) d( P#endif
- t/ x9 T+ U" ?5 t( m ret = platform_device_register(&da850_evm_tl_leds_device);
' N+ g( Z2 @5 Q* X& n if (ret). m' X. u) ^9 Q# M0 Q: ~
pr_warning("Could not register som GPIO expander LEDS");" _% U9 t7 ~+ n7 n8 X
else
6 X0 W, S" ~+ u- I9 @ printk(KERN_INFO "LED register sucessful!\n");# ?0 ^. s! Z" w5 O( I
. Z# d' P A+ d9 x
return ret;1 u P- Y; I3 B0 \
}* D2 Z9 X: G8 v; }8 Z5 K
6 C4 a1 w7 X: F e2 vstatic void __exit led_platform_exit(void): z; d6 K& K9 m' D' ]* _4 k) ]
{* t" m( i. v- K
platform_device_unregister(&da850_evm_tl_leds_device);
I& I" W2 u: ?7 z1 f$ O; E: k. S# v9 `7 O
printk(KERN_INFO "LED unregister!\n");
9 f1 h$ N8 k7 @7 ^}8 m: s# _4 H6 z
' n/ J% H( D5 ~% @
module_init(led_platform_init);
2 y# U$ d% ?* n! |5 T5 U6 Wmodule_exit(led_platform_exit);2 ~6 U! Q6 P' [$ S* z) q
: I0 \/ k) [$ ^. l. a
MODULE_DESCRIPTION("Led platform driver");
, n5 g) A/ H, G, V5 T- {% gMODULE_AUTHOR("Tronlong");7 l5 f7 H7 d0 s3 A: d& m: ~7 r
MODULE_LICENSE("GPL");# Y% @7 l) f3 n8 Q! ~ K
" B; C* \4 j9 y$ g |
|