|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
/ e2 q4 P! d* ]#include <linux/init.h>' ]4 F! `7 p0 i& I$ T. P& ~2 V
#include <linux/module.h>( s9 G4 M' y, G' }, U/ q( Z
#include <linux/kernel.h>
- Q9 n& N0 Q$ ^#include <linux/types.h>& d/ z. ^6 I9 X: J+ I0 A
#include <linux/gpio.h>: q; }* c, m3 k! z
#include <linux/leds.h>" D2 N! g# U$ [' [. M' h9 |
#include <linux/platform_device.h>
8 i: [4 Q: { r2 X; Y4 g# {
% F' k' t" j$ r4 A# B#include <asm/mach-types.h>6 ^5 @5 G" u# ?) I0 ]4 j6 D8 I
#include <asm/mach/arch.h>
% |6 M; b; m/ ]$ E' ~#include <mach/da8xx.h>9 q# T& k5 X! ]! y+ G& x0 s
#include <mach/mux.h> C/ {2 y* u E w/ m6 k
; q E- n6 ]- g1 o* s& K/ C: L#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)( w8 D5 z0 B5 P3 |. R9 h
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
5 z, V0 c8 o# d* }2 \6 A#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
4 t* n" x4 Q h2 y* m#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
5 a _8 M2 G9 P3 n$ T0 u5 Z
5 z# b7 |* h0 Q( w7 T) |: R3 r/* assign the tl som board LED-GPIOs*/5 @8 a. t& Z2 E' s5 S
static const short da850_evm_tl_user_led_pins[] = {
& Z h; L. \# o8 P7 J /* These pins are definition at <mach/mux.h> file */
" o. Z6 K: l5 F8 m t DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,' y( O" d6 B9 O5 a/ n
-1! m2 e6 ]9 q/ M; g
};; w _- g$ |" n1 `8 m1 a6 u; m f
+ Z, j7 W, \" q# \) K* A6 r
static struct gpio_led da850_evm_tl_leds[] = {
" l! j9 G( b' X$ g# J { v {" X+ V# X [
.active_low = 0,
, N9 N! P7 }' o- [7 V( K* n$ l .gpio = DA850_USER_LED0,3 a5 ^5 t; z5 }( n5 Y" M" j
.name = "user_led0",# ~" ]9 L# k, r( i; n
.default_trigger = "default-on",
1 y% {& E+ R* N3 A+ n* ^" k" t },& n/ k3 V P% z( t/ U" v
{
$ Y2 v5 w/ M; K( f+ | .active_low = 0,
) F- z* ]7 Q! @% J$ E p .gpio = DA850_USER_LED1,
* _- U; g: L' l$ G( M& @ .name = "user_led1",
2 [5 {: o! O3 T: K .default_trigger = "default-on",* N$ Z& Y) v: i; T* G5 F9 y; b7 ?
},
! S7 l+ P; S0 y) z# z( j8 B {
- `& ]/ C5 o7 d$ t P! s .active_low = 0,
* j- R; l, p; q8 l .gpio = DA850_USER_LED2,) E8 ?, u; t; Q5 T1 O/ {
.name = "user_led2",
# N5 ?6 p/ X% _$ j; O .default_trigger = "default-on",
/ Q: r I1 L: n5 ?7 i. y1 z- b2 T2 M7 c },9 ]1 j; q( l! Q6 D1 |% L: K/ v
{" l8 g0 j7 z5 J' z5 r$ n/ B. h' C
.active_low = 0,
5 ?- t; R- i% z: h .gpio = DA850_USER_LED3," a3 v) ~7 F* _4 ~' v" Y! c! n/ q
.name = "user_led3",6 ] G7 n' R6 K; p8 L
.default_trigger = "default-on",6 \2 K0 r1 U* m4 S) Q8 t' f
},
+ @& ]: {7 S7 b6 m/ k6 H};* P3 l0 d4 B" [6 z- f
* ]& V1 u6 s( O* Z, ?4 O
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {; S0 {, `1 A1 i6 R/ d/ Y2 `8 N2 A' D
.leds = da850_evm_tl_leds,
, w7 G e: t$ Y r7 }/ ] .num_leds = ARRAY_SIZE(da850_evm_tl_leds),: s; O' w- ? y1 w" ?0 L
};- o/ Q( I/ E0 f" |4 T
* G1 G) M: V) [static void led_dev_release(struct device *dev)6 B+ X \$ i8 P3 w5 Z" ?
{4 U( e; e! m) K' L/ s( a7 s* N% I% C
};, G& v$ F% G0 f* P
X. n& B1 C z# M' q9 P/ s/ [
static struct platform_device da850_evm_tl_leds_device = {
% q7 X( P2 [0 Y4 c/ y n .name = "leds-gpio",
. s7 |6 J$ f0 ~7 I! a .id = 1,
' F6 \* M. V- g' |3 x" P0 ? .dev = {: Z5 C Z Q/ m2 r* I
.platform_data = &da850_evm_tl_leds_pdata,
( s( [/ U+ L- T9 S. ]$ K. [ .release = led_dev_release,/ s0 q2 C: g5 g& ?
}' M- Y6 a! m7 R) J7 R6 V
};& g8 k* ^* n/ ]4 S- s2 L" @3 k5 ~8 i
3 S5 x' U2 E+ k/ v4 Ostatic int __init led_platform_init(void)
/ Q K( f3 |( n, {$ a- v% M{
: l1 ]+ [) J; W, _$ ]) u int ret;
( o* O" U" U) M9 F$ I6 N#if 0
7 ^2 E- `5 { b: P: E ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
! K) r2 q/ l( ? if (ret)
- ~. r* s$ G' L9 [1 n* S7 H8 F* h pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
/ ^$ B. |( A( z" K: J "%d\n", ret);
: ^4 N; ?9 q- ?4 C! _#endif
4 K$ G% O8 L2 V8 s0 [/ X ret = platform_device_register(&da850_evm_tl_leds_device);
1 F" g. V# F' l" w if (ret)
8 n/ o% x: z9 {) F+ N pr_warning("Could not register som GPIO expander LEDS");
2 z5 c( o. [: I q7 b; ]% @( R$ R else
8 E! @' a# L5 H; u/ t printk(KERN_INFO "LED register sucessful!\n");1 z, Q( h: g( q% R% \, E3 x% [
; p* K J* T* n. @* D3 I! d- B& x
return ret;, w" s2 U& A* i# T" ]5 _7 O# q
}1 q$ E' m: _/ \8 [$ ]
3 e3 _) M- t0 [0 ], P l( R$ M
static void __exit led_platform_exit(void)
6 A6 \2 Z" U' ^{
y6 M: O" @/ R1 G3 z platform_device_unregister(&da850_evm_tl_leds_device);
4 Z/ s# \9 Z% @! K2 @ n/ X, _$ A0 E6 L: M
printk(KERN_INFO "LED unregister!\n");
2 I4 k: k) r/ ~( ~3 J}9 @0 ]0 t; b. P+ r7 ?( ]& O' G J0 v
- `% \# O# M/ a7 `% i) J: j; pmodule_init(led_platform_init);
7 V5 w% G$ R9 ]2 r$ |2 ymodule_exit(led_platform_exit);, B4 q# m4 ]$ m6 B- h, J
$ c/ F4 E+ B9 DMODULE_DESCRIPTION("Led platform driver");2 P+ @; n9 h7 G8 x; Z0 V
MODULE_AUTHOR("Tronlong");; p, v$ r6 G! q" S$ m" _, U1 e1 u
MODULE_LICENSE("GPL");
- `# T! y" N( @- u. x! X, \1 n/ @7 T& u1 V; y7 w
|
|