|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
" r4 z% e: v5 b6 f z# }+ A1 k4 |#include <linux/init.h>
5 p( Y8 i1 }4 U2 @! z# c# h#include <linux/module.h>
) [ c% i6 H8 C k6 l( `#include <linux/kernel.h>
5 H+ |( B- M' n: K#include <linux/types.h>
5 X) D5 P8 E5 K4 P N8 f#include <linux/gpio.h>
/ m6 M) x/ y4 [/ P#include <linux/leds.h>
) L+ {3 m. E7 h, N2 H#include <linux/platform_device.h>
7 {* X1 y1 D8 K) y# {5 f6 ]; R0 V* K3 n w1 N
#include <asm/mach-types.h>- Q7 ], L4 _5 y% O& Y
#include <asm/mach/arch.h>
! J$ m7 o8 _3 M0 u#include <mach/da8xx.h>
1 r" |7 p$ L3 G#include <mach/mux.h>
7 ]! x0 d& d3 U# d& K
1 W l2 J- t+ @#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
( u) t3 T! Q3 v: R) `#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)& H2 h& N1 B; z, M( X7 }
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
! ]% J9 N* J7 ]- V# g#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)* j) l7 `: ]. n$ Q- [" x
, Z' M- m* `6 D- F
/* assign the tl som board LED-GPIOs*/
" v+ x+ b1 h6 ^# O! S$ Xstatic const short da850_evm_tl_user_led_pins[] = {3 W) f: N! {9 `4 u
/* These pins are definition at <mach/mux.h> file */
/ ?1 p [: a2 M, ^ DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
5 W$ f+ f' c: s7 p! V: s -1
! o2 o/ U% c! D};" T- q/ l$ i t8 n' D z
% O$ U. i" _+ kstatic struct gpio_led da850_evm_tl_leds[] = {
6 H8 B' x2 J4 M! \. r4 n {
( I- x" r5 Z- m .active_low = 0,
3 f# v4 N% i' A* I% I( @ .gpio = DA850_USER_LED0,
" T0 }8 k( o$ z& y .name = "user_led0",
$ H0 U( P* u/ Z! s: q$ E% ^6 U .default_trigger = "default-on",
% ^0 v3 k6 S% O" @ },
, U/ y; j! w, E {" o6 e( T9 N/ q8 K7 h% F4 a Z
.active_low = 0,
4 G5 B+ f% G1 `6 g. A .gpio = DA850_USER_LED1," l( q) {: F0 h! n
.name = "user_led1",
2 E& A. u, u1 H+ l2 E2 o+ _ .default_trigger = "default-on",
, Q& m$ B3 T3 [) s# f# F. W7 m. ] },
5 v* }+ u' N+ h, b3 t& H+ { K {
3 ?/ b7 w! m2 H! L! v .active_low = 0,
) A8 o3 L9 e/ N& m, F" t .gpio = DA850_USER_LED2,. H( |* L. d$ i
.name = "user_led2",
8 W) V, e1 h+ ]: q" N4 a# k .default_trigger = "default-on",8 s' d; @: r" C4 g$ Y1 q
},
7 k8 y7 h$ z9 u" ? {( y: s6 g' E1 ?0 J
.active_low = 0,9 n. M' }* h( [- k
.gpio = DA850_USER_LED3,9 a: f( w& Q* f3 h
.name = "user_led3",
/ l: z# w( @ J# e! X .default_trigger = "default-on",
- J1 N5 M. ]; d y/ E1 L: v },2 P0 F& t* i f% ^
};
6 z/ }$ O$ n' `0 X# m" H4 C' |, Q- x
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {3 O# ^/ E' R4 Y1 i- n! u$ Q3 H
.leds = da850_evm_tl_leds,$ ?5 t6 |5 S3 e& C
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),8 `& u' j: V* k& ^/ Q
};/ G5 v& j0 G0 _4 f4 z
1 ]; p6 I( F/ r3 e9 B4 Q2 {1 ~
static void led_dev_release(struct device *dev)
. C- a. h9 K' V" t1 }& h+ G{
/ x, a0 \+ z& z" s7 C. ?};5 X% `4 w" Z' }4 t. z
9 k0 s9 z' N. T9 n; e, Sstatic struct platform_device da850_evm_tl_leds_device = {+ p7 z& n" V) W/ j+ D. K5 {
.name = "leds-gpio",7 e7 R, x) }0 J9 A% w! p$ y$ a: n
.id = 1,
$ W ~% s/ q- @( z2 p$ J$ d .dev = {5 P6 Z5 y. O: g& J( `5 U
.platform_data = &da850_evm_tl_leds_pdata,
# m) Z4 \$ P7 W m .release = led_dev_release,7 l8 q! G! m$ d J6 N5 E1 O- i
}
4 E% E# y; p$ T" \" \};3 R- N* ~( ?) W' C& J
; p1 O( N+ L1 v. i( J/ A6 q( g
static int __init led_platform_init(void)
. S' x3 ]' L) K# k+ a{, ~9 R x+ p6 |3 C( N- q
int ret;( g8 o5 D2 w7 ^* w" s9 g
#if 0
( N0 D( ^( Y4 y0 ?, N! n% V ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
1 t4 K( n4 ^8 r0 Z" C+ m' }% b if (ret): r: I4 i. M& x
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"* K7 O# |3 \ y* t. T% i
"%d\n", ret);
3 S- Z9 t; R: H#endif
; } j/ p# B/ ^ ret = platform_device_register(&da850_evm_tl_leds_device);
7 Z8 o% |* a1 S" r if (ret)
9 h& [& ~4 t# } N0 c* i pr_warning("Could not register som GPIO expander LEDS");2 }9 M0 m% z! d
else
, v2 `9 ]% Z) C; W printk(KERN_INFO "LED register sucessful!\n");1 Z. t4 ~2 w# Z" X
0 M7 U4 P) k, N7 [. n- L) `
return ret;% l, H, Y1 }$ ]3 I- s
}
, x3 v) _9 g( l2 ~2 K' |; a3 B/ p T0 i, |& _5 z, s3 T
static void __exit led_platform_exit(void)
- f) W6 O U3 \6 F5 R1 Q{
l' b; Z# o4 D* y# ]+ N4 E platform_device_unregister(&da850_evm_tl_leds_device);! i. D! W) f& n, K" \; s( \
2 E! X9 G/ S9 ^' o8 R
printk(KERN_INFO "LED unregister!\n");
C9 ? f& }' L, _) P}5 l a0 i- Z B6 G+ Z& U8 c& \
8 W% O4 c9 c* xmodule_init(led_platform_init);( P: R: x- |9 @# P; g2 `5 ~1 Z
module_exit(led_platform_exit);
: u$ N- D$ q# k3 ]
% v& W" h" e& W/ W0 v, @4 ]MODULE_DESCRIPTION("Led platform driver");
+ ]$ N6 g4 M# V- `: E6 A/ DMODULE_AUTHOR("Tronlong");$ f3 Q* Q& W& V: Z, ^0 q
MODULE_LICENSE("GPL");
4 X' x+ \3 W; p: F* v; ~% K' c- J
|
|