|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
$ y. {* w5 P$ f# @; r5 h; T#include <linux/init.h>
4 i3 N$ u. |2 o0 t7 o8 j#include <linux/module.h>3 V0 v$ z8 v, s8 Q9 I
#include <linux/kernel.h>
' \# I! r4 o) S% [#include <linux/types.h># x0 m; h9 D ~" M- q2 O6 D @% y
#include <linux/gpio.h>$ C/ Z" `3 k: C: ?! _
#include <linux/leds.h>3 Q9 c9 ?+ j0 s e
#include <linux/platform_device.h> M% }, }; c8 T+ T6 g, f
& d2 b1 ]2 Z$ w" m+ ]
#include <asm/mach-types.h>7 L. `0 x7 [- k# T: m$ j8 v2 {' v) b
#include <asm/mach/arch.h>
$ J- S' }2 A4 G& {. I#include <mach/da8xx.h>4 ?; Z1 A- U, K3 D; F: r. |" |8 m' i
#include <mach/mux.h>
: _; O) f1 h1 d) N3 p. K T* B/ m' h/ z7 L- W2 `4 V
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
% ^. v* ^9 B) e: S" A#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)" Q2 I# Z- ~. z( g& g, g; a+ H* j+ g
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
2 w- r/ G1 s6 W6 o. u5 c3 }0 z: r#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)! C- @ `- j' j; q8 V7 U0 o' R
7 B" D0 P0 v: |" d/* assign the tl som board LED-GPIOs*/8 j+ J G; K( ^7 V& o- o
static const short da850_evm_tl_user_led_pins[] = {" V+ A* f/ d8 K
/* These pins are definition at <mach/mux.h> file */
1 `# t/ n% Q- Y4 c6 k# ` DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
# u6 x- X5 K4 K+ o ~$ @! v2 T: b -1
% d& Y# l/ R( n& N# t};" I% u4 p/ ?& n
3 m/ }+ E [/ z7 p4 C1 vstatic struct gpio_led da850_evm_tl_leds[] = {
7 g; N; Q$ @% i% X {
4 @. \2 c0 w% q* j7 K+ m .active_low = 0,2 i& s3 `- I7 b! d p
.gpio = DA850_USER_LED0,4 J, z' X# n3 A5 e
.name = "user_led0",
2 b6 f& A% a3 t5 F .default_trigger = "default-on",% G0 f0 M6 m( M7 Z$ F! W2 A5 z! z
},
- v& l; t2 ^- n- D+ S0 N9 V- t" ` {
2 r0 M( b! d6 ]3 ]* d) Y3 ^5 W .active_low = 0,( a; ?' ?7 P( K
.gpio = DA850_USER_LED1,8 Z. I% ^3 A6 c# d
.name = "user_led1",
: N' R& U1 Z9 g3 }$ S .default_trigger = "default-on",
) m' ]6 m$ b L' V. V4 j+ v6 n' y },' P2 [* S; m2 _7 W. Y
{
2 l8 C Y. A: F* N- X .active_low = 0,
3 o1 g( P. F2 d p( ^ .gpio = DA850_USER_LED2,
$ P( J) ~8 p& v( o .name = "user_led2",
. ?+ y4 A3 S. z, s0 V3 t( K .default_trigger = "default-on",0 U7 |9 O# s. P; Q$ F
},
& V5 H, L* ]# j$ Q b1 w2 ?8 v/ o {
0 l2 ^/ U9 A0 I& `& |: i .active_low = 0,
1 {- K: S7 v8 M: `% U: K8 D6 ~ .gpio = DA850_USER_LED3,0 ^+ x/ u" s6 L9 y1 d$ P
.name = "user_led3"," l+ Y+ t) A0 q8 j0 w P' X
.default_trigger = "default-on",
. W6 G' d3 ^- ^; g+ S% z. W },
0 B; H. n. h" e6 H* p6 v/ x, B};4 E; {0 j+ W2 Z3 L9 H6 X1 j6 d
5 N" {, h: ?4 c' H8 f( A8 V
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {9 z. Y7 K1 v5 F7 i
.leds = da850_evm_tl_leds,; H6 L$ o5 E+ Q V, Q! c. D8 K
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),
+ N3 W! q R0 I. C1 E" ^5 U2 U};
/ ~; a0 h" ~! A: g* ~$ @9 Q3 u; b- Y/ ^7 t8 X6 U( o
static void led_dev_release(struct device *dev)0 E: e2 r# M3 S: t9 a
{4 y1 O/ l& ^+ I2 P+ l+ H
};0 n% W+ n) W' ]6 T/ y3 `- q
4 X& n' y X8 i& H4 Gstatic struct platform_device da850_evm_tl_leds_device = {# S# Y c% K& r
.name = "leds-gpio",
1 N k7 d4 u+ k* q, }3 L } .id = 1,1 Q. C- n: @1 }
.dev = {
2 Q ^0 v: Q! a9 B3 o .platform_data = &da850_evm_tl_leds_pdata, b X/ e& @3 f* V- b
.release = led_dev_release,
$ ~% K3 m- t+ y2 b) }$ j }
- j3 Z* G& m( R# S. x( S: W+ @};
+ i" j- D a% d g9 x$ z- c0 C* q# H2 T: ` _; D
static int __init led_platform_init(void)+ A1 L0 F! Q# f2 s P5 ?& ?
{2 l5 {! K/ m0 Z* [( D+ Q% r
int ret;
. @1 G: O& k6 y#if 0# G' c" S; G0 C. y7 \& K* r9 {' C
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
4 P# u* s$ Z, w7 s if (ret)
! K1 B4 {8 `. z* f. @' i3 b4 x pr_warning("da850_evm_tl_leds_init : User LED mux failed :": z: O* n4 N% Q1 G' K
"%d\n", ret);
1 a# j7 F0 N+ U) Z# T6 f& v" Q#endif1 _2 F* y* ?9 a! j2 W5 v
ret = platform_device_register(&da850_evm_tl_leds_device);% V& @2 `2 m; E0 @) o8 {8 \
if (ret)
2 S5 s. B0 I! l5 {$ C0 P pr_warning("Could not register som GPIO expander LEDS");
7 C/ c' X6 W* \0 D* T else
4 n: l+ d( Y8 [5 a5 B printk(KERN_INFO "LED register sucessful!\n");
) H x5 g5 Y Q: n6 L' h+ v6 p4 `/ ~* d8 n2 l+ l' g
return ret;' k; a! E1 ?8 E' w9 A* J; |
}
# b* Q0 a# C& x& M- ?# M* \7 @, {- Y
static void __exit led_platform_exit(void)8 Q6 |- a. m) I- S
{
7 C' c' `. j$ ^, d% F$ s platform_device_unregister(&da850_evm_tl_leds_device);4 E7 B4 R, A: \
0 Y0 C ^9 v7 [3 c {7 |
printk(KERN_INFO "LED unregister!\n");& ?5 i6 u; \: _" H# u+ T
}4 s# d+ L! y; D/ f7 G
$ z1 S( Q* j; M0 d
module_init(led_platform_init);
. w9 K, i1 H: F" Vmodule_exit(led_platform_exit);
2 x+ O7 I. r0 w7 w& t. l& V1 U9 f5 Z: W5 o" d
MODULE_DESCRIPTION("Led platform driver");
0 X# j; a7 u' o0 j+ |MODULE_AUTHOR("Tronlong");: L: {+ g5 I# v3 h9 O$ ^: o
MODULE_LICENSE("GPL");: ? b7 u" x" @# F
* C3 r( A2 a) x
|
|