|
|
求大神给下面的程序做注解,请稍详细些,谢谢。" r" n/ ?( t( L' R2 Q+ d
#include <linux/init.h>$ L* }2 B% U$ {
#include <linux/module.h>
) o, H! e: ?" V; e, A+ l7 _#include <linux/kernel.h>
+ I, W- r6 f: n. O; S% [#include <linux/types.h>9 Q6 ?# f# k# J/ H! {: c: |
#include <linux/gpio.h>, M4 L* R1 C8 t5 m2 ]; A, G
#include <linux/leds.h>
* A" j! a$ \% `( M, G- }#include <linux/platform_device.h>
3 ^; X( M. E: J6 T# w
" g% z5 P9 L- Q- S. a x#include <asm/mach-types.h>) v. m, v1 k8 ^
#include <asm/mach/arch.h>
8 F* |. x. P/ o, r( ~( e# e#include <mach/da8xx.h>
2 c; @) T% a2 _' g#include <mach/mux.h>/ I6 R" `- `2 ~& N/ i8 _
5 T' B* ~8 e; D# X- A* ^
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)* c/ q' R5 z3 {5 u
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
. ]/ _0 w3 N0 T5 g#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
: o9 K- e8 v$ T* Z, R0 k* b" P#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
# E% X4 i( U( y: Q8 o x6 d3 o- x& x7 _; j+ O+ g
/* assign the tl som board LED-GPIOs*/$ y9 O7 q j9 P. x( `+ v) t. @
static const short da850_evm_tl_user_led_pins[] = {3 u& B& n/ d+ W+ k0 o
/* These pins are definition at <mach/mux.h> file */; `) g" G% l/ m( | v7 c) [- }
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
+ l' Z' Z; d4 ^* |5 a- o -1
4 W% k& E! v9 ]$ q9 M6 L};
& v+ P. F4 _" p8 p. L/ ~) b
% d2 r" r% u3 V, _% a: p4 A8 estatic struct gpio_led da850_evm_tl_leds[] = {
, ]( K+ `' \& { {
) n" Q: o- R1 j$ S .active_low = 0,
: u5 j+ y3 c3 p% M$ { .gpio = DA850_USER_LED0,
7 C" ~* `3 x! M0 g7 z' g# I9 @ .name = "user_led0",
7 z% O9 i( a8 ~3 z .default_trigger = "default-on",
( l3 Y$ O) D9 H; @9 e, y9 @7 K' t) c% } },
+ c: H3 N0 ]0 G e2 ]. }/ d3 r4 T {
9 R8 `. E. ]6 c# H, l, n# [ .active_low = 0,# o0 R: z! W2 h8 S* s7 }
.gpio = DA850_USER_LED1,2 f( n/ ?& K% ?" K
.name = "user_led1",
3 n5 Y9 D9 J! b .default_trigger = "default-on",6 L5 p0 J3 v( C% B2 k5 U
},6 Y, i' o5 x' `
{4 k. L a! _% I7 k9 Y
.active_low = 0,2 }+ F. O. z' w- O- p5 H6 E
.gpio = DA850_USER_LED2,
0 f, m7 X3 y# V1 q3 F" f .name = "user_led2",
1 ]) { {6 P9 [+ J) v+ w( Z .default_trigger = "default-on",
# m" P; F$ A! \ },' N9 `7 X" d) F) k6 g
{1 t% o7 P# o' e0 b' O2 n) i
.active_low = 0,( I9 o* l7 [, R# R
.gpio = DA850_USER_LED3,+ C5 S3 c7 N* V; e
.name = "user_led3",& h& r G% d' B' `
.default_trigger = "default-on",
7 ~0 t ^1 n0 l" X; b# d, S }," R v5 e# [5 C1 y
};
+ i* l9 Y9 B, U! y( }* f& l3 D4 ~8 Y* {( D. \
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
: |- `7 M8 S' I0 s- R. L; R .leds = da850_evm_tl_leds,4 Y1 ]# [1 O$ C4 [* J5 N
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),' a2 v' c9 \) U w
};
6 O; f; P/ J6 ?7 S4 [- I4 k
; K. Z' C- [0 _7 G* k, C7 Dstatic void led_dev_release(struct device *dev)
( G. G. n! C S( m& n/ e: C6 D{
I9 Z z, z' v};
# { ^, w# f m9 T
% i. f- A" S0 ^: v* P9 Wstatic struct platform_device da850_evm_tl_leds_device = {+ ^( p+ I4 S5 j: `) t
.name = "leds-gpio",5 u% X' C+ @3 t# B3 d) q6 Y, Q! _
.id = 1,9 S* G1 ?! b& w4 J
.dev = {
y) n/ f: a# ?, x0 i- ]! v" z% \ .platform_data = &da850_evm_tl_leds_pdata,
# g, D! x z# m .release = led_dev_release,
. g7 i% J- p, {- B }( s Y, u$ p9 ?( r5 G6 R' F
};
# B$ W9 T' X- P* s) Y# ]6 p1 u0 b G8 X. Z
static int __init led_platform_init(void)$ v7 Y: E. x* M6 [
{8 c+ f' M- v8 _, `- C. n& n
int ret;
- D0 Y: a* j3 s#if 0
0 m- Y. O, \& {3 `( j8 U V ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
, B* w+ k* w2 M- _% E+ y if (ret)
6 }" B8 K" Y6 e/ m& L0 Y. T pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
" V1 H5 m o2 M' j/ m; o$ C "%d\n", ret);
5 r& R2 D3 y6 N2 p# r6 I& m) e#endif2 S! G% k$ S' w* n+ c
ret = platform_device_register(&da850_evm_tl_leds_device);, C$ ^# K( R2 | ?; ?9 m, d9 ~
if (ret)9 K! r- H# t7 m, _3 t$ Y' x, u; A7 s
pr_warning("Could not register som GPIO expander LEDS");
/ u1 J0 ?' q4 ?+ l1 m5 ~) L else
: E0 N( f" C' A$ p printk(KERN_INFO "LED register sucessful!\n");
( G- ^3 f4 L- @- p$ c* e$ x5 O
/ h$ A5 j9 m) @. X. T return ret;
7 w( F6 D& f r2 r* C}" O2 t( R3 ?& ]% x3 W
4 A+ E2 J4 V# n/ z1 [( y vstatic void __exit led_platform_exit(void)
* \. v% g0 P! T{
# H6 X' G2 p7 f# h/ J platform_device_unregister(&da850_evm_tl_leds_device);# a' G6 L a* I% I% q$ m9 M
2 V% P4 \. \7 {! Y9 n: U: k' w
printk(KERN_INFO "LED unregister!\n");
+ O2 G& b" G8 V8 A" F/ T}
1 }; j8 `! u+ R4 [2 v
. L( }" m9 Z5 }module_init(led_platform_init);
) k5 z0 J0 K$ K" r T _module_exit(led_platform_exit);
# G" S6 r6 P8 G1 ?5 f u( o. c# T1 I' Q( g5 ]* k
MODULE_DESCRIPTION("Led platform driver");+ B$ k7 v& j5 F/ K" @5 w
MODULE_AUTHOR("Tronlong");
5 {, h6 H# _2 Y- A0 v% @$ k" ]8 ]MODULE_LICENSE("GPL");
- Z8 `. u- ^) W# l4 G! M
! K4 k- a: Y8 N |
|