|
|
求大神给下面的程序做注解,请稍详细些,谢谢。+ D5 L+ M5 T" {$ d2 m9 r
#include <linux/init.h>7 G* ~, f7 a( R, k
#include <linux/module.h>
; K% n" A) h Z# _#include <linux/kernel.h>! F" y! _% G! c- k: q2 F
#include <linux/types.h>0 L- G& }7 i+ u. ?# l) h
#include <linux/gpio.h>4 m+ Z( B1 @3 S
#include <linux/leds.h>
$ _9 R: y# _. j; W#include <linux/platform_device.h>
- Z9 W W% g: A1 v* p
- A' a$ P# g# ~3 B5 L G4 g#include <asm/mach-types.h>
9 m# p, t: A. R; N7 k#include <asm/mach/arch.h>
! a3 n0 E. a5 X' A( w9 K9 t#include <mach/da8xx.h>1 D0 s/ {/ M" L1 z* }# l" |+ j% Q/ k
#include <mach/mux.h>
) _6 P5 Q( x7 T3 X: V8 Z. x
- v E! g! ~6 H4 Z( T0 M6 u#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)0 l5 _: o0 i7 x! S
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)0 W5 a: @9 T& r* {7 D+ R
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
* L* @: K% w' d1 y6 T! Y2 ]#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)% }5 t0 A/ M$ v6 [) @9 n
# r6 f# u3 m# a$ I' ^/* assign the tl som board LED-GPIOs*/: u$ I9 O6 F4 t4 `9 t8 ~8 W- H
static const short da850_evm_tl_user_led_pins[] = {/ \8 _ v8 c( g2 x
/* These pins are definition at <mach/mux.h> file */
# F" m5 ^9 H4 {+ J# y/ N DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,3 t$ {5 g0 x) B# w# n# X
-1
g# ^9 ~' x5 L" \. F};
d m$ I: j: t' Q) {5 Q& c
1 u7 W, q/ n: P% dstatic struct gpio_led da850_evm_tl_leds[] = { v9 U3 R ^2 \
{5 G, T/ I I7 X% i- k9 M/ C4 {9 ^
.active_low = 0,9 W2 p" d. |2 V+ Q A$ J
.gpio = DA850_USER_LED0,2 Q6 y- H! y' }" E
.name = "user_led0",
, t' | f. O* K+ K! G$ V' ] .default_trigger = "default-on",
& H5 p7 B( v8 q! D0 u+ J },
5 O, ]1 f+ G; s {, ?/ i1 \! e/ j5 G- A2 v1 p
.active_low = 0,
2 _% k ? z' A$ m) z .gpio = DA850_USER_LED1,
8 O4 c# s6 }+ {7 e .name = "user_led1",: u3 _4 p' S( Z+ L8 |3 t. g+ Q
.default_trigger = "default-on",
& R, y" R3 C+ t7 q0 Z },
5 X0 k3 x( x6 n/ U. G, ~* W( } {
* |4 g% `- D( N" E% x .active_low = 0,
8 D/ |$ M5 j5 w' e9 a .gpio = DA850_USER_LED2,
% k' F5 @8 n- u( Z4 q .name = "user_led2",
" z' X+ S; s1 R ]( N .default_trigger = "default-on",
: ^) @; C4 l4 \4 ~; E* v },
# P5 G4 ] S4 R! j9 V6 V8 ] {( d+ z" A& U( i8 m
.active_low = 0,7 j1 ^7 T; Z/ M
.gpio = DA850_USER_LED3,3 N* J) }3 W) q
.name = "user_led3",; Q4 x/ w8 l8 s( L- V" C
.default_trigger = "default-on",& B2 t4 u4 g5 ]% n' a( e4 V
},
. D7 k- [1 y0 u" C; C, U, I};: w5 r$ c0 z) R0 ]& ]- N/ r
& F# X, d& {# u: lstatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {' B( G' a8 p& B, |: `# t
.leds = da850_evm_tl_leds, C% b8 `1 x3 F/ O$ G L
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),
! ?/ B: }, f" u# \};& ^4 @, h/ M; P
/ i! b9 H7 y+ W7 G
static void led_dev_release(struct device *dev)$ O! t: Z8 T" @4 G, f' a: M
{8 x! {6 X4 k# Z8 M( U- J- j2 I
};
; U/ [& S6 L, p, _) c0 z
' [+ i Y: W1 Z( `+ W' e% Gstatic struct platform_device da850_evm_tl_leds_device = {
& P$ _+ F( v) ~+ `7 g( ~ [1 x .name = "leds-gpio",
/ m5 ~+ j" A, q& B# `" l( Y .id = 1,
+ G6 X- G2 A6 v# f' w) @( n .dev = {
2 v4 S! ]9 k, [3 F1 H S8 j .platform_data = &da850_evm_tl_leds_pdata,3 r; {1 b; P$ A6 ?
.release = led_dev_release,
7 J5 w# r: X1 e1 ]$ `9 x }) n: z7 x. H) U; f. N5 {
};
+ q3 D8 j- ? w: t2 K0 X
* ]. L f! t' w; |' Gstatic int __init led_platform_init(void)
/ C, ] w2 |% B- {{( w1 G) o. A6 ] Y+ y8 W5 P
int ret;6 }' L: C( P8 j+ h j
#if 02 O( u* v8 q. h% e3 o `
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);- S0 d* q3 ?4 y" K6 ^( T
if (ret)/ m5 ]0 ?) _& Z7 g1 x9 }
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"2 ]8 f7 ^# b. h( a9 { v
"%d\n", ret);
1 _# s8 } W- @9 O2 ^) J T0 r$ d#endif
# K/ w: G0 v2 D9 m+ }. D* I: _ ret = platform_device_register(&da850_evm_tl_leds_device);* {& W$ Y3 k( a0 U$ o" M' k: g# |
if (ret)
; k3 T. J' v* k# b, }& @: [) v pr_warning("Could not register som GPIO expander LEDS");$ C* }, p" j; y3 ^) V% d/ X5 c
else9 A5 Y2 r& P2 M$ ^. b! ]0 S4 v
printk(KERN_INFO "LED register sucessful!\n");" M$ Z! b3 o9 \/ ]" n5 g/ |
- P; T8 w7 v/ J! V5 i! f- k
return ret;3 A% g8 G+ ^1 m: c0 ?
}- B3 N# k. Y6 k! n/ b/ b' V" ?4 a* h6 {
U" ?& _5 O5 {# Tstatic void __exit led_platform_exit(void)& ]& H4 o/ ?% v
{+ c1 |* i9 d' K; C: {0 T, H
platform_device_unregister(&da850_evm_tl_leds_device);
5 K- a+ O2 A/ h! M3 H! m, Z/ [8 j! j7 f* ?! Z! L2 t1 W
printk(KERN_INFO "LED unregister!\n");
3 M' w4 c6 D3 a}$ D& s; @7 V8 ]8 q, s) h4 P) m
( M: D! d8 h& Z2 V8 |' t5 v, Z: C/ P/ F
module_init(led_platform_init);
3 _# \9 c8 `; P6 a8 D: p" E" wmodule_exit(led_platform_exit);0 D) o$ J' Y$ c+ j. r0 D! A
1 Y6 b2 O, O7 r) M
MODULE_DESCRIPTION("Led platform driver");: y/ }) V# _8 f- q' F
MODULE_AUTHOR("Tronlong");5 M. @9 K+ D: ~$ t8 q- c( E2 C* E
MODULE_LICENSE("GPL");' i( Y$ A) ~6 `. g4 o- ^; p
3 p u' p$ m" Q k7 ^ |
|