|
|
求大神给下面的程序做注解,请稍详细些,谢谢。6 c4 ^" S" i1 H8 }" Y2 \5 i
#include <linux/init.h>! I3 o) L( o) z; y( U! y- P3 G2 Q
#include <linux/module.h>
; M2 g: u7 J( ^7 q/ ~#include <linux/kernel.h>) ^ @7 R0 k2 L' X. Y2 T
#include <linux/types.h>
! ?* o; @& C8 P#include <linux/gpio.h>6 T8 q: H$ |) N$ ]
#include <linux/leds.h>
6 b7 h$ h% \8 d7 r#include <linux/platform_device.h>
( j; \# a! a7 G ^+ N- D, L# Y
3 T% _/ y* m) q$ t8 [#include <asm/mach-types.h>
6 i/ e. |& w) l* h5 m#include <asm/mach/arch.h>8 M y8 t8 B0 s u( }9 L
#include <mach/da8xx.h>
; c! k- _0 o7 H; w. f0 X#include <mach/mux.h>. ~( Q. x8 A4 Y" c2 y7 B
E7 z, A0 w9 Q6 E#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)5 ]4 |( c$ ~& v2 Y8 w% c+ Q
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)/ u2 U6 A/ t2 K. U
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
1 ?& g+ k) I, w+ L* [#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
* K# \- X8 r& t: N; e9 s! K( |* R) |
/* assign the tl som board LED-GPIOs*/% F K- T" y9 E) [( T2 o. `+ H0 u; j
static const short da850_evm_tl_user_led_pins[] = {1 |) V m [3 Z9 S' D% G
/* These pins are definition at <mach/mux.h> file */$ C# T9 c4 K# O. L
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,; o( G ?, I! y4 t2 m
-1
6 }& w. b1 Y" F- n};( Y4 m( j! h3 E% g* Z
7 A8 k/ l; f* estatic struct gpio_led da850_evm_tl_leds[] = {
) G* G, U/ ]1 L {. \, m1 E7 V3 A% H! H: ^
.active_low = 0,
% y( U8 w: g* m# y .gpio = DA850_USER_LED0,# S$ s" A$ p& c8 Q" O( E
.name = "user_led0",) P) @8 p! o. {1 A9 H9 U( `
.default_trigger = "default-on",4 m7 Y: B3 |( m, n/ t; B& C3 A: \
},
3 P4 y- S6 x) l {
' O9 P) E; J$ j$ P5 ~* W .active_low = 0,
9 A3 l* o: l" e+ {0 \ [8 i; l+ f" Z .gpio = DA850_USER_LED1,9 r) L" E; y5 r
.name = "user_led1",+ {7 @) u: [6 `0 `
.default_trigger = "default-on",
' r& e) {( F# J) E9 N2 y },
4 L% {+ e0 Q( e+ h1 E, [ {. i$ c, x- R z8 i& `
.active_low = 0,- y3 E x8 `. n& O; N" Y
.gpio = DA850_USER_LED2,
' F, t, l/ C( T& g A* @! ` .name = "user_led2",
9 j( u' b- @' F; B4 S .default_trigger = "default-on",4 F' w/ q9 @. }+ e& A& e
},
# I- k6 T1 t; T2 q( j% M" M, t {
+ P* Q ?+ b/ g8 z+ e8 Y2 Y& T- Z5 a# E .active_low = 0,
0 m, J) K( [: T7 w) T3 \ .gpio = DA850_USER_LED3,. J4 x- y( }5 r1 a+ Q7 [7 b
.name = "user_led3",1 C$ T2 f6 J N' ~- E ?. `- {2 C
.default_trigger = "default-on",
! }+ @+ V$ N5 a1 z6 z },8 Z m# s" e. ]3 J' Q
};6 ~8 W, \; n; k L v. i! R9 a* i" W5 K
+ \$ b8 V# a0 C4 [
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
_6 k |& C3 b. @. |0 Q .leds = da850_evm_tl_leds,7 |: w: U6 x" v: Y2 P
.num_leds = ARRAY_SIZE(da850_evm_tl_leds)," t( `% Y' i, E3 g% b
};. T- k+ H: H6 b6 b$ `# [- {
8 c" n" W2 {+ c. u& g
static void led_dev_release(struct device *dev)
, ]7 ?" I8 E" d! U6 A9 p& C" K{
2 Z9 t# z; ~' k( r! K$ j};( J& n% B! `& [
' [; t7 J) o7 mstatic struct platform_device da850_evm_tl_leds_device = {' P; f5 ]) A2 r
.name = "leds-gpio",& W6 V6 X1 i3 Y3 j; C, H! y
.id = 1,
# Q6 R& R( |9 u7 d .dev = {& r" {7 I( E0 }" Y2 {: T7 o
.platform_data = &da850_evm_tl_leds_pdata,
3 ~, _5 X. k E- k4 X$ E .release = led_dev_release,
" P1 s0 Z# y" U5 r }
7 q c% |! p, ^* q: J+ x};
8 H! k4 V; W* t6 o4 D+ n3 k6 A
4 G. Q1 T' |8 [" o; `4 C' Qstatic int __init led_platform_init(void)
2 n) }2 @8 M( `9 t$ d{
' K/ v4 G# b% Q* N int ret;+ k) v% R9 x1 Y `
#if 0
' _2 j# ^% b3 z# N4 \ ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);) i1 C% D1 W+ m
if (ret)
- [# P, C5 o5 }; b: u pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
) d0 J) a/ J7 c# z1 y "%d\n", ret);2 M& ?* x3 M$ n# ]# ^2 G+ \! a
#endif
2 z: s9 U( U. e) ] ret = platform_device_register(&da850_evm_tl_leds_device);
2 l! y! }* O) i7 B1 p# o if (ret)8 K9 i" E0 N5 u
pr_warning("Could not register som GPIO expander LEDS");
- a5 a- Z. l4 ~- |0 ^ else
+ c5 S/ S2 W/ J$ U# b printk(KERN_INFO "LED register sucessful!\n");( K$ ^1 {9 m! G3 t4 _( p* ?8 @ O
+ n3 o' O6 E5 A% g$ ^) c! K return ret;
|8 J* r) E2 ^' k7 `8 X}2 T0 f/ o ~# m, } N1 H, R e* K/ V
, P* w$ D( @, d
static void __exit led_platform_exit(void)
- e+ P# S p0 {; ]{
. Q/ ~5 S% ?( g1 A" @ platform_device_unregister(&da850_evm_tl_leds_device);
2 w* [: n/ w; K( R2 _3 `3 a
- P# {# i/ L5 a6 {; x printk(KERN_INFO "LED unregister!\n");) t% ]5 `: ?. Q \" C
}* t j( P) ~; R% @' D+ h
' }& b$ n) ]! z4 }( b
module_init(led_platform_init);
5 H' \! e5 P f3 u7 u7 Nmodule_exit(led_platform_exit);
7 q6 B$ n& I [* ~, @/ C- K1 O( R( G+ v- h' {( s% a% B/ W; B
MODULE_DESCRIPTION("Led platform driver");, v, D! z; y( s* d8 V' p
MODULE_AUTHOR("Tronlong");% n3 j' l+ \( ^ E
MODULE_LICENSE("GPL");& Y6 f+ L% N/ y6 {7 }! ]
! A) A) b6 ^! N# R/ A# R+ V+ ~/ e
|
|