|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
2 x: L: E; j% R#include <linux/init.h>
# {8 h& R, m1 }5 f- L, E#include <linux/module.h>; F% L% i( Y. N$ d* z6 N3 G3 W" e( e
#include <linux/kernel.h>
7 Y8 J: P3 u, o. ?#include <linux/types.h>
! W- R, z! a1 I, Z#include <linux/gpio.h>
; _$ S2 a5 a$ e+ ?# }#include <linux/leds.h>
; r" {/ Y ~# t3 G$ A#include <linux/platform_device.h>
4 S3 v0 B5 G3 c( ~( D) U9 I- c) _+ i: S* |! d
#include <asm/mach-types.h>
" } I- N8 |- m& F6 U y: p& l#include <asm/mach/arch.h> P6 d, M# g0 J; [4 T
#include <mach/da8xx.h># T7 M# F B2 K$ @6 G4 h" ~
#include <mach/mux.h>
2 m: N' w7 d9 B4 w& A0 m$ g! Z
5 ]0 m* |% ?# n# J6 w#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)3 F0 w" k$ p8 I `- d) G3 V: P
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
' X) t" F6 O3 ]% H- c1 |9 L#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)( j3 M9 ^ n8 H4 ^" q
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
+ h3 l' G" m6 U" W
5 Z A" }8 f: v+ g/* assign the tl som board LED-GPIOs*/) e& {6 z9 q8 z6 r+ @' Y+ E1 p
static const short da850_evm_tl_user_led_pins[] = {9 H( J$ P j8 K6 ^+ v4 ?( f
/* These pins are definition at <mach/mux.h> file */
- z& |4 s& a4 |( P: M8 s DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,, e0 U; ~+ k: }. u
-1( r/ G- G5 ^' P
};1 E% _: L. A$ I" Q- U
2 p( U% q5 i; j: p
static struct gpio_led da850_evm_tl_leds[] = {
D5 X3 h7 H1 z4 T9 S {; y7 E4 J& ~+ v! [; u& c
.active_low = 0,7 d) A* p+ R! M4 e
.gpio = DA850_USER_LED0,
. {' ?: M2 O# a .name = "user_led0",
1 n8 o$ K8 H! a .default_trigger = "default-on",
2 h( q: N6 l* z% `6 V; _9 q },
E! E3 S, ~: a, E8 ? {/ D# q. _: X m8 p4 J
.active_low = 0,
& U0 a; T' Y9 T# _" w .gpio = DA850_USER_LED1,8 a, g) ?3 |) c3 F5 H6 {% d$ X
.name = "user_led1",
! `' k `6 A" K8 h! f) s .default_trigger = "default-on",
5 @: ]+ h/ }/ t; i9 M5 e },
$ Q" u8 Y% t( m- O4 Q: \$ w, b8 Q4 g {
: U, K* |* q# e, n. N( r .active_low = 0,
' {4 m6 ~! u; _4 w! {% n3 D .gpio = DA850_USER_LED2,
# B% `- i# a4 ` .name = "user_led2",
1 l! [$ X* H F5 Z1 M7 |/ e .default_trigger = "default-on",
/ i; F/ c$ G5 x4 p' P$ O& e2 M },2 D3 L+ \% m. g2 q7 l# k
{
: @# h. U& b( k; n# P4 v .active_low = 0,
' d Y1 |0 b, {7 b6 ~3 c+ a" W .gpio = DA850_USER_LED3,
* v0 t: Y( j5 h7 h2 t9 q1 r% `( ?: z .name = "user_led3",5 P* p# [# q& f" ?0 _" X( Y
.default_trigger = "default-on",
* q3 a& u/ g# w, d! ]* V },4 d, i. f* ]+ P
};/ ? S7 V( J. P$ H( g5 l
/ |! ?) r. y b9 ?0 f3 G
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = { }6 o/ d4 o/ A. W
.leds = da850_evm_tl_leds,3 U" `# r1 }$ ]/ r
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),4 N& n+ n$ g: L/ I# ? T* L
};3 P- g' }0 [ ~
) F" P7 C1 e) C( x0 q/ T$ t
static void led_dev_release(struct device *dev)! r; H; U) Z7 b% G' a2 e
{$ s5 d5 Q0 H5 G
};
# L% @2 B$ v. ~3 ^* j5 k3 }+ b+ h1 i9 Q) p% ^) V+ u4 W
static struct platform_device da850_evm_tl_leds_device = {
7 z, z8 [$ @) ^. M5 s" d0 m8 f .name = "leds-gpio",
% Y; I- p# c1 H( ? .id = 1,
3 g/ g& V5 p7 Y# \ .dev = {
J! `/ ~0 W6 R+ r# S .platform_data = &da850_evm_tl_leds_pdata,/ {+ s* O5 Z1 G: o$ u g! [! T
.release = led_dev_release,1 j+ ]' X# m- b, n6 S
}
+ n5 u- p! B6 e, r' q$ {- m};; P( B0 E: z! \- u \2 i: h" W
6 I/ s2 Q( ^6 C4 k
static int __init led_platform_init(void)- l- A8 h; w) E9 b
{, d4 i: y/ ~; ]& x4 P* X
int ret;
0 y8 A2 d" Z2 o, ~#if 0
' p, n3 d' |* V) x q ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);, f% d8 g; I# d( G+ u9 i/ N/ B+ k6 Y2 n
if (ret)
" {$ z6 {1 m& ^/ n4 R pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
9 L4 P: G: W6 U0 s% L "%d\n", ret);
8 f, y# d2 Z1 n#endif. Z, T" N/ ~) H$ |
ret = platform_device_register(&da850_evm_tl_leds_device);
. ]( P' \/ _" s1 G( ~6 `: V if (ret)
% z+ k/ q3 T/ T8 Q/ p' w7 y$ U8 R pr_warning("Could not register som GPIO expander LEDS");
3 X) Q3 \$ l0 A7 `' k7 f, i else
- s/ R7 S O! D9 q4 N1 B printk(KERN_INFO "LED register sucessful!\n");
) N6 Q# m) v6 e4 M+ W! \# \% {# g$ o5 x: {1 ]& g* b2 _
return ret;
. G3 n. a% Q; i- s7 z( s0 u}+ |& t, i0 {) W% ?1 b
0 g4 X+ ` n W( T# G: k4 k3 t
static void __exit led_platform_exit(void)* Z, c! Q' d3 V. a( M7 K
{
! r3 m& }7 h( q8 {5 ` platform_device_unregister(&da850_evm_tl_leds_device);/ f, y3 \) J% f0 v
/ B% ?% o5 p* y8 U i
printk(KERN_INFO "LED unregister!\n");
' L+ O% |, u0 u$ {8 I, N; m}
9 C% F$ X0 O4 Y' ]# H: M: u3 E/ b q4 k D4 C! u/ r
module_init(led_platform_init);" V" d% y2 u4 b
module_exit(led_platform_exit);
9 W- q& F0 k" B4 r
- w% X0 J9 T* X/ r- CMODULE_DESCRIPTION("Led platform driver");
7 x+ m* y, \& d H5 r* rMODULE_AUTHOR("Tronlong");
* m# E. ?; J1 FMODULE_LICENSE("GPL");- o4 \: t e( n/ z2 y
* ^2 i, P0 i, c6 |1 K4 g
|
|