|
|
求大神给下面的程序做注解,请稍详细些,谢谢。* v$ ?) B: t3 G6 s7 _0 l
#include <linux/init.h>6 H* Y7 _* l0 @+ }# o+ C$ f
#include <linux/module.h>( V$ t/ `' V+ m& b+ E6 l
#include <linux/kernel.h>0 i5 O( |5 V0 Q( O* g
#include <linux/types.h>8 m1 T2 X) `9 p) q6 b; ?4 Z) j! @
#include <linux/gpio.h>4 B% Y# m7 ?; S
#include <linux/leds.h>
6 B& W2 |! j& }- l; |#include <linux/platform_device.h>( }: ^* J, G) f4 w/ D& m; ~+ F4 L
4 k1 O* S" _3 j4 ^
#include <asm/mach-types.h>- U6 Z1 y* E5 J* Y$ _7 ]: G
#include <asm/mach/arch.h>* P# E6 k2 H$ Q0 B
#include <mach/da8xx.h>
2 {* g9 ^% s' h6 ~6 I% A+ h#include <mach/mux.h>+ Z: w9 y2 Q1 w$ H
2 Q) w# d9 j3 K* `* x* f
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
% ], ^" e6 n1 R& B#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
& A4 `) E1 r0 \! s#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)1 b) |; t0 Z* }5 Q8 F- k
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
U; I" q1 }9 h8 J: d) X5 p7 q5 g
- Z' \3 i# @+ I. J/* assign the tl som board LED-GPIOs*/
9 v# i: N" ~3 D' k& v$ xstatic const short da850_evm_tl_user_led_pins[] = {
& ^9 s( a' N6 I! F- O) m1 f4 M/ Z$ U5 @ /* These pins are definition at <mach/mux.h> file */2 f4 X: k9 @- p3 `) g
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5," ~) }/ p; ^# }4 S
-1
. X8 @7 }6 J+ y: V. R};6 ?% M" Y5 t( ~ P1 h* P
/ [* y' ] l9 o2 G( c- H! K
static struct gpio_led da850_evm_tl_leds[] = {
& |- I% x" J- N2 `: X; ~" T+ W1 z& c {9 H/ N7 X" H5 k7 S
.active_low = 0,+ M2 j. h7 z# A6 p# |" B. G& Z& C
.gpio = DA850_USER_LED0,
8 w. i5 w7 k5 z0 a6 S .name = "user_led0",
: A9 `/ [4 i8 g .default_trigger = "default-on",
8 D3 b0 d) Y: X r O7 \8 J0 }( t: ] ` },
! d0 R, v" E8 H! H( e7 l; [ {5 r& [3 E" S4 ^: o. N4 t5 W
.active_low = 0,6 Q7 q5 r9 T, n2 I! H. T; c! ]. u3 ~
.gpio = DA850_USER_LED1,- W( i+ b! f9 f
.name = "user_led1",7 h6 _& n% Y( i1 D
.default_trigger = "default-on",& i5 h8 p! Q. E/ O
},6 ~$ \2 P" B3 \5 S' |' J8 M7 J
{) Z- T. V. V# S0 u; ?: E
.active_low = 0,) l- J! c2 Y q$ m' O. I: L
.gpio = DA850_USER_LED2,; t$ Q% y: t- j& N
.name = "user_led2",* Z' f) G* |8 i% v; v# ^; x* W0 W
.default_trigger = "default-on",2 m- D% W% e, _; o$ w' c) Q
},
/ Y& G1 E3 i$ F3 e' J {, J3 i( P" f& _/ n. M! w3 ?
.active_low = 0,
1 d, Y+ X) `1 o! X: _ .gpio = DA850_USER_LED3,4 m0 l- t. `+ R5 X; Y: \6 _. S+ o2 _
.name = "user_led3",7 h/ |# c+ p2 d
.default_trigger = "default-on",2 ^" c4 e2 J+ U, E& A" Q2 X$ g
},
+ D8 x" z" J f: f, B$ e};5 s( O* Z; q, y
1 t0 y: X% J+ C% T9 L- S
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
' O9 ~6 \: T6 S0 Z4 g( W .leds = da850_evm_tl_leds,
( `* v' Y" g0 E6 m2 J8 w/ X4 ~ .num_leds = ARRAY_SIZE(da850_evm_tl_leds),
- A+ i( a. C4 o9 Y6 Q1 O% o5 v};2 s5 f5 l* `, O4 M6 l
2 }/ s. n7 D- A$ y8 ^2 X7 Rstatic void led_dev_release(struct device *dev)
6 z2 ~; f8 y8 T7 b# J# C{: r# X: S; Y4 A* Z* x8 E3 }& ~9 A
};3 Y7 E _% x0 W: u$ S
6 a/ Q) ~0 p. M0 f+ ~4 o% S& Q
static struct platform_device da850_evm_tl_leds_device = {# x; b1 {. L6 I# C( H7 L' E
.name = "leds-gpio",
- D4 {. D% _. M0 A* F .id = 1,
' D; Y( i1 h# Y+ A: E, m/ { .dev = {
' q9 D" b: d( t- \ .platform_data = &da850_evm_tl_leds_pdata,
1 ?2 Y+ y( n0 w .release = led_dev_release,0 L! l$ K, w' r# Q( C& ?
}
- L# \+ }% {; _( W q' o: @};6 J* j9 ?7 u6 ]4 {
3 `6 \) k/ Z0 c6 L
static int __init led_platform_init(void)/ j4 F" } k, C, \# \+ B
{! q3 [5 R, h2 w f1 b( Q
int ret;
/ m8 a, z$ b* z7 _: X/ t+ d# d( _#if 0
0 W9 c1 I- P. |4 F# w ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);, }" G$ k C9 z, E5 a$ C1 z9 e' ?
if (ret)* G& s3 P; J2 p7 I7 \1 u9 B
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"/ T- _0 x I5 v8 D+ H$ M* _, `9 S7 ?
"%d\n", ret);" }9 v) w% [9 ?5 ? [2 a! _; Z
#endif
3 {* c8 K$ D1 {% s" ? ret = platform_device_register(&da850_evm_tl_leds_device);
! p7 _. C1 R! x _5 f2 F! [! { if (ret)$ T7 J; E# u. @
pr_warning("Could not register som GPIO expander LEDS");
* x9 E8 x/ Z% k" z else# a& I- }& G) ~
printk(KERN_INFO "LED register sucessful!\n");
; F& {2 w! @* k) a% Z
8 w+ x- q3 J. i return ret;5 R7 l) R: |5 n; ^# Y
}8 p( [- |1 q* f' a# j) a
0 `0 \7 F$ V$ @% Z+ M
static void __exit led_platform_exit(void)
; g( f. R) f/ y& e* ^{6 l( s/ L( i( y( n
platform_device_unregister(&da850_evm_tl_leds_device);8 w+ [, H5 i! |3 j( u9 e
; e+ g+ P! e0 t' x, l' n printk(KERN_INFO "LED unregister!\n");/ a0 R: A8 P/ e% k+ f
}( g4 R- A! T! x. A2 _. i8 M3 e+ k
+ g6 e% @/ H8 V8 Dmodule_init(led_platform_init);7 T* S. k0 J8 U, V& N: U# q' M
module_exit(led_platform_exit);
6 y z5 N$ D* ^: N5 P' n) h1 n0 B" R) S5 o# X/ I
MODULE_DESCRIPTION("Led platform driver");
- R8 N0 A) w, Y; l3 aMODULE_AUTHOR("Tronlong");
+ T: W( S/ e; f& d/ y2 m) a( MMODULE_LICENSE("GPL");
% m3 l- q- ]' L/ k( P0 j1 r6 C& [( C, e7 @" `
|
|