|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
$ c1 t( O6 z' Z- h) o# g- h: r% O#include <linux/init.h>
9 F3 g$ j5 r: E4 E" Z& ?7 b#include <linux/module.h>9 `% {- e, \1 K& u' A/ b% Z3 \
#include <linux/kernel.h>
" _8 a$ t' X9 Z0 b#include <linux/types.h>& {7 O( P( A+ v: v, {) ]
#include <linux/gpio.h>
. y) M. W6 ?8 s/ E( F#include <linux/leds.h>
! {* R& D/ Z; L+ @3 G#include <linux/platform_device.h>" B8 L" }- R# b1 s0 E7 g
( h& [- b9 l, l) |, m: E+ S
#include <asm/mach-types.h>0 h) Q. m' h0 m1 [; @- e
#include <asm/mach/arch.h>, [& z; w3 q6 A% _& I5 u
#include <mach/da8xx.h>
+ Q& ]! c1 x1 O5 z0 }% r! a. S#include <mach/mux.h>
. F: j2 W$ y: F- P9 N8 @8 a' E A- \ ?8 J6 F" R
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0); E1 M0 c9 F7 G& ? l% g- M
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
1 w0 h$ W/ f9 F- e3 d2 y#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
$ T+ L7 m4 G) W, z2 ^" {#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)- d0 T$ n+ z5 {: c0 [
5 Q) M* Y# m* x7 e6 L# d; G/* assign the tl som board LED-GPIOs*/
. }( s1 _* I5 H8 Hstatic const short da850_evm_tl_user_led_pins[] = {4 W9 t4 G5 W, v; @6 w# [: Y( R M1 C
/* These pins are definition at <mach/mux.h> file */; F! W+ }( C3 ?% T: g
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,3 z j3 d% `0 i r3 o8 U2 ~/ |) Z
-1. L: ]; {9 g' ^* o4 N B
};
' E9 F# `& C7 w- b, S) b# i! S' O- ?3 e0 M! N1 i
static struct gpio_led da850_evm_tl_leds[] = {; b7 f+ ? D' H. j H$ H6 h
{
. b7 J0 d; e9 |1 f) \0 s1 Z .active_low = 0,
+ b* l4 v+ i, D. b .gpio = DA850_USER_LED0,2 I; w! m! z7 x' t5 Y& r$ s9 r& m
.name = "user_led0",* E+ N7 Z. ` G* `" N
.default_trigger = "default-on",
. I! z' H- P' m$ q4 @" N },( s: t. ?1 s# ~1 r- l
{- Y4 P; G; H9 E$ C6 n; V9 J
.active_low = 0,; K5 q' u! x5 T6 \8 {1 `9 ^1 }$ {
.gpio = DA850_USER_LED1,
4 h: W6 E! I5 h% \, A- h .name = "user_led1",7 Z: h z# }! Y Z& T
.default_trigger = "default-on",0 m' l/ J( a8 u$ x
},4 H' z7 c/ k% q; R
{
! D: N+ n" `. U4 E- M( }' W7 P) z .active_low = 0,$ @/ ~0 y& A+ c7 r9 ^" N+ A
.gpio = DA850_USER_LED2,
3 O' [. H: Y; ~ _ .name = "user_led2",
' X& k. e( y1 v; e .default_trigger = "default-on",
7 a" v8 F, z( ?/ x8 ~( e3 U$ O },+ s1 J( |+ A+ m+ a
{
; \3 ~/ Z2 S' V' x' d6 l$ x .active_low = 0,* x& k# @% { {% l0 N! g, j
.gpio = DA850_USER_LED3,
4 K0 @ a% a3 ]0 V! _ .name = "user_led3",
+ J$ R2 P' P1 \ .default_trigger = "default-on",
. m$ }3 C# C$ E0 X& z3 R8 A/ x; Y; O },2 y* _, p4 P) [$ D @& }2 L3 C4 {
};- j/ Y7 O3 m; W5 t
0 D6 H# u4 v! E
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
: f9 G! i+ T. w .leds = da850_evm_tl_leds,
! y6 y. R( ^/ R4 T0 q .num_leds = ARRAY_SIZE(da850_evm_tl_leds),
8 n4 o( W; W5 n2 j9 [* L# D) t};. _% x! D' H6 r* H( k" ?* a
" u& ^: u$ w2 C8 zstatic void led_dev_release(struct device *dev)
( K- @/ y! @, _) c4 y9 H{
8 R& Z% d1 d, q( s};; v6 C g3 I- `! }" w% \
- u) e B4 I: J2 ?( a. p
static struct platform_device da850_evm_tl_leds_device = {" j+ T8 P6 {0 s0 C3 R5 r6 j
.name = "leds-gpio",
/ |* l+ O5 ~/ g- K& Q .id = 1, l" G1 w, B: s) p/ Y
.dev = {( U& g5 A! H$ ^9 e7 {
.platform_data = &da850_evm_tl_leds_pdata,
3 B/ _: b$ L) e2 D' L7 y- T .release = led_dev_release,5 k6 k' d# ]3 b J- ?9 {& h& b
}
3 S0 J& m P# s3 H" P7 z8 M};# j; F9 B- I/ D$ ^4 o% H$ O
" n% K3 n F5 ?% f6 Wstatic int __init led_platform_init(void)' i# \, _4 B! r {+ I6 Q
{2 S, ^ a7 X3 `; k
int ret;
6 {" d7 D, n+ B8 W% a#if 04 J% l( b) ], P# A8 ?
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
$ ]" i) W! _" e$ w1 K" y if (ret)
% u7 y" n0 W2 O pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
( P" U( r+ k$ { "%d\n", ret);" X/ G! q* j1 l1 H8 _' L
#endif
$ `1 W& U5 A$ ^3 v9 s' u) w ret = platform_device_register(&da850_evm_tl_leds_device);
* U3 ^/ C3 P' q. O9 s if (ret)
9 ^" K$ ~" z5 B5 L pr_warning("Could not register som GPIO expander LEDS");
1 t& F \$ q; a' K3 Z+ e5 K0 S' ^, ? else
. _+ l5 ^5 r2 J. [) f printk(KERN_INFO "LED register sucessful!\n");. g4 A8 u8 b2 R( c
4 }8 ^3 g2 f& D5 ~8 s, M& h+ g
return ret;
" G' ]: A! r& ?( x}
, h8 M$ k4 I/ h: z8 y3 g' d a. d- u' a, L4 a8 }; p
static void __exit led_platform_exit(void)
$ n+ M; h# D7 O{( s9 \ P1 W& z" R3 Q: a
platform_device_unregister(&da850_evm_tl_leds_device);
) E2 y2 N9 P1 |6 n: @
@" Y! ]: e3 O printk(KERN_INFO "LED unregister!\n");
# i9 f& r4 f5 f: W8 W3 f}, [! }7 O$ Z- N) l/ J3 x
) X! `/ V" W( p/ _
module_init(led_platform_init);0 a5 \" O- K' }
module_exit(led_platform_exit);4 |; k% I) z& o
9 [1 x a4 Q5 Y3 R5 J+ W
MODULE_DESCRIPTION("Led platform driver");
5 c" D5 Q, B/ _7 K' B" Y* t/ E" QMODULE_AUTHOR("Tronlong");0 H2 q1 l" m2 B
MODULE_LICENSE("GPL");
0 D1 w2 A# y3 z) D! E% H
a) [$ I" O! W! f" ? N |
|