|
|
求大神给下面的程序做注解,请稍详细些,谢谢。8 f' e1 k( O( w# O k
#include <linux/init.h>
( O$ e g5 `& L; D* K x' t#include <linux/module.h>5 y `) @+ C B1 `. w# ~
#include <linux/kernel.h>
( B: {! R2 ^. N7 P#include <linux/types.h>
* E4 p3 s8 l i3 C) e/ c- x#include <linux/gpio.h>6 t' |2 [4 w7 C+ N
#include <linux/leds.h>6 ?" C: |& g8 u/ @
#include <linux/platform_device.h>$ r" F. _- L' f t. [4 s- M' L- U0 h: R
+ N. P4 E8 G2 M" R0 e6 V#include <asm/mach-types.h>
4 b8 }$ Y* z; e5 }7 f0 } z#include <asm/mach/arch.h>
6 r9 m5 q9 O* s/ C% z2 a#include <mach/da8xx.h>
( {" S# w, u. F$ S u#include <mach/mux.h>
6 S9 Y, V/ T: V6 X( v
- a* L$ O6 a- b/ K/ [+ ~' C#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
0 B; n Q0 v$ F#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)1 Y2 L8 {& x# g8 i$ P
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
$ t |! _+ O0 z# J2 \#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
' R" ?. a4 B$ m7 q' x. A% o
! I8 r8 F. m; V/* assign the tl som board LED-GPIOs*/! A/ c; u& k/ a: ~; y) h N/ u/ `; r
static const short da850_evm_tl_user_led_pins[] = {
1 C4 ^6 `1 v, B# M1 k! K. S. G /* These pins are definition at <mach/mux.h> file */
* W/ H! i2 H- K( M5 X: w" W DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,$ B% p5 K) k! B5 {( U
-1# N- R& T$ q% I
};1 j8 d4 s% F0 z- L
* U2 K+ d& {, v" m2 {static struct gpio_led da850_evm_tl_leds[] = {
0 H t/ S% d3 g; n {" K ^$ c2 o5 L5 ?# h& `; s
.active_low = 0,9 [* F& [, d9 v" j; _3 B
.gpio = DA850_USER_LED0,
. k6 a. k9 X# F& t0 H o .name = "user_led0",
# }. E9 X S, ~* C v0 n .default_trigger = "default-on",
+ k& R2 H, F8 a- X' W- Y/ @ },! [- c3 q$ }9 q" n
{
9 q& i3 Z8 K) Y' n .active_low = 0,
g9 x0 k" X: R4 |: H4 e& X .gpio = DA850_USER_LED1,6 d! v7 N/ u& A8 m2 Y
.name = "user_led1",& D: O# u) i. B t, V" Z
.default_trigger = "default-on",( I' n2 {8 X% p! w
},- y2 L* |9 ?6 ~0 m. H
{
2 c9 w$ d# {) c" P9 d2 b- l .active_low = 0,
. M W x8 _4 v5 C+ Y0 A# R3 b .gpio = DA850_USER_LED2,
8 P) t( z" [$ F6 f) N .name = "user_led2",8 o/ m% z6 E4 ^$ C
.default_trigger = "default-on",
* s$ ^' e; w9 T1 p' o5 Z },
* O) V6 H9 M u7 } {
* i o. b# J) B9 U' P6 N' f2 W, f .active_low = 0,; J4 v$ k9 d' p, o
.gpio = DA850_USER_LED3,: }. Y5 T2 ^8 J* @8 k% G
.name = "user_led3",
" L: ^# L9 ?; p) r; }! ?- @ .default_trigger = "default-on",
0 {4 Y1 v. |3 h" U, U },
; ? ]# j3 C. ]. o2 ?& l};2 }/ w' }" x5 j" S; H1 l: ?6 u
8 _, a0 n+ |' X2 lstatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
! Y: J1 M$ v6 g9 B5 [: d& S .leds = da850_evm_tl_leds,- e& P5 i- O. p$ v# f
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),! Q3 {4 r/ X' p* T2 v
};
- A9 I O- @( t& B O1 N8 O( o" o6 k- {: n( K
static void led_dev_release(struct device *dev)
& y$ A' G3 ]) \3 `{
; w. n: N& ^% M$ P};
6 N- S4 X4 X2 L8 x) [/ U! p5 J' V% _( a* y0 Y9 `
static struct platform_device da850_evm_tl_leds_device = {
5 Z* O* n. \2 n* `- o. V5 p .name = "leds-gpio",& \8 n+ @! ^ g
.id = 1,! }: b# z; N% D3 V9 Y; w% I* T
.dev = {- u; v0 Q- f$ g' [
.platform_data = &da850_evm_tl_leds_pdata,0 Y/ e: _$ W, @
.release = led_dev_release,
& N5 j l* i0 G. I3 [; I9 M9 S }% L5 S+ u/ O2 c
};* q( P* S8 ?+ ~. { y
3 P0 P4 l1 C' e8 k4 c& nstatic int __init led_platform_init(void)$ W! ]7 O. ^% Q/ ]( i) J) m
{
9 k3 z& o/ w; x7 p; `- v1 s) _% X int ret;$ ^; t1 `$ j# O6 Q
#if 0
3 B( G5 _9 i, E ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
- U- D& f0 ?) Z2 E: ` if (ret). j9 `% H i$ o3 q4 m
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
* d B" R" m- b "%d\n", ret);$ L6 K+ P( k4 n# H* d5 F
#endif7 h3 J3 t' b/ G% C: ]! ]
ret = platform_device_register(&da850_evm_tl_leds_device);
! ]' V! ^0 R' v0 Y; |: ^ if (ret)
' t5 S" Y$ ?9 ?5 O9 k' C pr_warning("Could not register som GPIO expander LEDS");& \* B; b _( T9 q: { X# Y8 Z' e
else' L5 r- K1 Q j. \3 k2 O2 ~
printk(KERN_INFO "LED register sucessful!\n");6 i6 Z& a3 x2 l) r: n
1 V% Q9 |9 O+ i
return ret;. Y; M* P9 l) u* }0 m4 D3 m
}/ M' }8 i/ q- Z0 ^. ?* e
1 |( X$ D& H; K2 K% j3 tstatic void __exit led_platform_exit(void)# L0 X8 }% T8 i! c5 e0 f
{9 O" P8 C- t8 A) Q
platform_device_unregister(&da850_evm_tl_leds_device);/ |( J5 Z0 W9 I
% R8 y4 h* _6 Z- K9 m: z
printk(KERN_INFO "LED unregister!\n");
/ Q: g" p8 L, a: t+ f}) H" a1 ?: P: ^% f: a
' V6 t" A. M' J; Fmodule_init(led_platform_init);
* i! z1 Z) b7 b* x Mmodule_exit(led_platform_exit);- b" j ^9 }/ X ~$ J( ^" M, h5 p
2 s3 K" b8 j+ H! K5 z/ Z& k5 ^
MODULE_DESCRIPTION("Led platform driver");7 J# I9 C0 V5 z& u# P
MODULE_AUTHOR("Tronlong");
8 L) g, k- Z5 F, ]MODULE_LICENSE("GPL");9 t* }5 ], z! ^) K# }" F% K
9 J1 G4 V# }3 D# m# p
|
|