|
求大神给下面的程序做注解,请稍详细些,谢谢。
! I W% g0 s' Q& Y#include <linux/init.h>1 i! V( b) L! C' g o
#include <linux/module.h>. G2 y5 u8 r% Y2 l) I
#include <linux/kernel.h>
4 b% @7 C$ N4 L+ l- A#include <linux/types.h>
1 j" H/ T. A0 ^# m% F9 c#include <linux/gpio.h>
6 \ W; l; c2 u' z% n/ [) r#include <linux/leds.h> W1 ~) z& k3 o2 m% g
#include <linux/platform_device.h>
8 c) y% f, ?/ P# n) Y8 m
* T+ a' w5 [; b1 B8 T: l8 o#include <asm/mach-types.h>5 j7 V* u z: Q. V6 C. x* B' o- ?
#include <asm/mach/arch.h>* J% \/ `: g2 u' \1 s6 Q/ d
#include <mach/da8xx.h>+ r. ]6 r! R* Y% T6 u6 |) E
#include <mach/mux.h>% C7 W, w$ d1 Z' c; Q4 t
& h) g2 X3 n/ Q' ?9 L#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)* I% y! ~7 d6 V" }0 N5 ^+ x
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
2 C' I( I( W O3 [#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
" _" M3 V5 Z6 R#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
9 u1 b" n/ {7 ^( G; @4 I2 _, D0 }2 ]/ C* Q ?0 N8 g# L/ F+ d
/* assign the tl som board LED-GPIOs*/
3 q# U) F* D- B! ^6 w Jstatic const short da850_evm_tl_user_led_pins[] = {
( a. g) K/ G% G' a) {9 Z$ J /* These pins are definition at <mach/mux.h> file */0 h, z( t4 P* e* E h
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,1 U/ t; T& r# u) U ?: ^% s
-1
. w; g+ t1 ~. V1 m! ?- L! m4 `};. q( K$ J r% G" [& \% J% g
' S, b! P, w, E: S" `, ?2 {$ j6 ^
static struct gpio_led da850_evm_tl_leds[] = {
{0 Z7 o8 [: ]5 k3 z& p {
6 K" q' b/ l+ ^2 M7 I; G' b( G .active_low = 0,
- D/ D( N" e" D) P% ^! g .gpio = DA850_USER_LED0,+ N! B2 j9 h) N7 P
.name = "user_led0",0 Q+ I1 W, R: n. g& c4 Z$ e
.default_trigger = "default-on",
+ }& a. H) b8 L" B: P# K N },
+ |$ c# I$ j |9 Z {4 l: j2 v$ h D3 \) F7 R0 ?
.active_low = 0,
1 `3 L9 z' f' ?1 S5 z3 R% {3 A; e4 G& c .gpio = DA850_USER_LED1,3 r, ], g [% M
.name = "user_led1",. D6 K. O! e2 O. ~9 J
.default_trigger = "default-on",! ]8 W2 ]" A# b) |# C
}, B$ Q! c @) z+ ~ d" M
{" l- W7 }# I0 O# S5 z5 h2 O2 w
.active_low = 0,
# Y7 L( E1 l% u; \/ U .gpio = DA850_USER_LED2,
9 B$ f7 Q' f% P2 D: ~ .name = "user_led2",
' T; J, X' ~7 I* u' d .default_trigger = "default-on",5 B0 n9 c0 d- c! G; ~: D
},% k/ w0 ~4 A, m4 K3 g
{+ ]# W& n( e. c$ y/ T& }1 T' @- Q$ ?, U
.active_low = 0, e9 v3 N1 M: e! W1 J- i% i8 ?9 u
.gpio = DA850_USER_LED3,- W- D/ c6 o; v
.name = "user_led3",
5 A! {% L; Q% h" H .default_trigger = "default-on",
$ |8 n& D L2 i6 V( _/ G },
+ s9 X" ~( @+ Q* o};5 y/ O% R6 a2 }. z. {7 U
( E5 h' t9 _! U8 M* qstatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
2 Q- C+ n9 o$ K1 J! q .leds = da850_evm_tl_leds," D/ o# K9 s, D" d
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),
$ h) M$ d+ z; f2 T" g5 s, u/ M};- K- n- C& g9 j# W6 b
& J: D# x4 o. W# c3 i" Bstatic void led_dev_release(struct device *dev), B; A9 T! N" r7 k0 q( D4 P
{ G$ r" O8 o$ }2 e
};
. W* B$ h, m/ `0 D* o3 a- |! k, d) x* P, t2 V( }# x: ~# o4 e; O
static struct platform_device da850_evm_tl_leds_device = {
$ B3 Y2 Z4 [2 t2 D .name = "leds-gpio",. f; j4 Z: |# w5 V) D _! o t
.id = 1,
) W, M0 B; H/ E4 }$ @" ?+ b .dev = {
! S$ l3 `, ~) X+ |: _: N% D+ U' K .platform_data = &da850_evm_tl_leds_pdata,3 N: K' T" ]( Z2 i/ L! E) y
.release = led_dev_release,& w e! g; j6 O
}- B4 F: J" c$ J! n+ g' e. Y& e! N
};
- k0 d( R9 v7 W {
: x+ B; O! o* Vstatic int __init led_platform_init(void)
5 N0 v. u9 Z5 i: y9 |0 _{4 A' ^# u0 ]! ~
int ret;2 w B7 U* L) k2 i D4 c
#if 0
' d' n3 g0 Z& t1 q ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);, q' F2 p b5 M5 F9 |4 `
if (ret)7 b& F0 X% k, C* D. A
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"3 J3 J* I8 S* g$ X
"%d\n", ret);" I, Z1 a* ] `" m
#endif1 U: N* c' z2 x7 m0 }; i1 ?
ret = platform_device_register(&da850_evm_tl_leds_device);
; j. q2 D1 ~! E/ z" a" `- e- l9 p if (ret)& e4 Y F4 b; d( l2 B; m1 ^1 V
pr_warning("Could not register som GPIO expander LEDS");' C4 z I1 S5 b+ i
else
- a$ _8 g$ t* M4 D- D6 z2 J printk(KERN_INFO "LED register sucessful!\n");
- W% Y3 i& v, H
O$ T* Z2 l$ k/ e, M return ret;
/ `- ?! }" J( q5 V/ z' \}" a5 i2 H; w9 l9 ~
4 r8 a( K2 X w; V& U! G' m5 s
static void __exit led_platform_exit(void)$ n. q) u% c: X3 Z
{
8 W0 q B" m: P0 E; V platform_device_unregister(&da850_evm_tl_leds_device);
: h* }* t3 r" O
' ]& F6 @, t4 ^# s printk(KERN_INFO "LED unregister!\n");# \" D6 K1 C5 L
}9 J, ^0 V" N( Q6 G* J/ c
V0 J& @( _" R& g M ?9 P; ]module_init(led_platform_init);
$ |* D( M; Z2 l* s+ ]( m# P) ^module_exit(led_platform_exit);
0 M( a( H: [: \" t; h# X1 ]' \7 M4 s1 K
MODULE_DESCRIPTION("Led platform driver");5 E! k- ]9 [8 R8 h1 [
MODULE_AUTHOR("Tronlong");
5 N* A% K Y, i k& EMODULE_LICENSE("GPL");
" J1 T6 L; o0 y9 J0 C6 z( a
! X P( P8 k6 U/ J" w |
|