|
|
求大神给下面的程序做注解,请稍详细些,谢谢。; S9 g6 Y% e, z9 @
#include <linux/init.h>3 X- ~1 c: _" i4 H( S& O7 h Q
#include <linux/module.h>! U7 w0 ^1 O# i5 \$ ]. E
#include <linux/kernel.h>
# P/ j, J5 P) K! ~4 l#include <linux/types.h>
- |. T' \6 L; S/ D5 B" t# E! ]#include <linux/gpio.h>" {) {4 M+ j% b( F$ |* T, t
#include <linux/leds.h>
* u5 e1 V$ O; \) u#include <linux/platform_device.h>
/ ~# p, y0 S- A7 }4 L" Q
$ i! u0 G, F- O& q7 U9 l7 c# a! G#include <asm/mach-types.h>! @7 V& w6 Q- ]2 s: |2 v* }" D
#include <asm/mach/arch.h> R- l% p) z ~* d4 T
#include <mach/da8xx.h>
1 R- [4 N M0 Z5 X) a#include <mach/mux.h>0 D$ ^# |( E" n3 e# r0 w4 e
' P* @* }( S+ L% f: ^, t# X#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)' |! G9 U" }6 y, v t
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)3 T. E/ O/ T& k1 h$ c- w
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)7 \2 c/ h, u; r7 s
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)8 V" M1 T8 s# k- g4 L
2 U4 X7 o% y& ^& N, Q# a; @* A- C/* assign the tl som board LED-GPIOs*/. @; v: @# {% W0 C
static const short da850_evm_tl_user_led_pins[] = {" p! c4 j3 ]# ~; d7 T7 X2 `
/* These pins are definition at <mach/mux.h> file */
: m9 r! p3 c1 z! @9 K DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
2 B5 R. u8 e; l: g! P -1
' Q: L1 q& v2 \& `% D};% M V/ V9 h: x! j2 o' v
; T1 N+ \+ m8 {2 S8 estatic struct gpio_led da850_evm_tl_leds[] = {% T* s% Q! F1 l+ y
{% Z' v, L6 w3 E2 l- X3 e: N
.active_low = 0,/ ^& [6 `9 W% B
.gpio = DA850_USER_LED0,3 Z" \! \) Z5 W
.name = "user_led0",: z. `! `$ O' {- `/ X j
.default_trigger = "default-on",9 k5 P$ @2 o! ~. o
},
2 G! M( c6 w3 y2 J3 |+ t {
3 \- n$ |+ N- N; s3 x5 y .active_low = 0,
! B$ T) n0 W8 x) [3 ]: ] \ .gpio = DA850_USER_LED1,
# M8 T" S" t' p9 [6 y( g .name = "user_led1",( ^' w" T) U3 `2 H* Y; U) X; @) n. i4 q
.default_trigger = "default-on", v) h, O: E+ ^ r& Q: o
},
0 i& B9 S& C' o& l3 K( s {! E/ y% @; ]2 }; S: M
.active_low = 0,# i4 r" G/ ^% l$ p8 C j5 \
.gpio = DA850_USER_LED2,
X) d d0 t5 b .name = "user_led2",
4 v3 n1 n7 P8 |' e1 { .default_trigger = "default-on",- g9 R8 v- Y, {! F$ S! h0 f& n
},
. i$ x/ |7 s( |! Q9 L {& a: _' R# r; h; k
.active_low = 0,
5 P$ W- v3 d5 s; M3 B+ p$ G .gpio = DA850_USER_LED3,
- F6 V1 @, m, F0 I .name = "user_led3",
! y% C! |) G- }1 g4 L) j3 X .default_trigger = "default-on",
! W; Q9 r6 G5 C+ B# C* E },6 |+ W* A$ t) ~, Z; I" p$ ? `: n
};: K8 b$ O: t$ L# r9 D2 `# X& H, n
5 j! Y/ S: z/ s$ a |; T
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {7 d: o; [( _4 E
.leds = da850_evm_tl_leds,4 G( o/ F% Q* K
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),2 Q" a1 v$ q4 N
};
" y* f# b$ w2 i7 n2 M, Q- Y+ G) X# @" ?4 Z" k+ _
static void led_dev_release(struct device *dev)
S: M7 a9 ]* d) B* V{! g+ [ ?. @7 B) f q
};
) A+ c' g6 F' _7 L! G8 Y; l. B, }8 c; @" F8 G* F$ x+ x. b. `
static struct platform_device da850_evm_tl_leds_device = {" t" e' D; }- X8 F" F) r
.name = "leds-gpio",; O8 k* m* V5 M' X) k$ S
.id = 1,
" N* p6 x0 f7 [& s, V .dev = {
+ E/ Z( m7 D. H2 C .platform_data = &da850_evm_tl_leds_pdata,/ K' ~9 ]# a1 ?9 B* V
.release = led_dev_release,+ S" t+ Y4 R) _
}
2 p! J7 g7 X0 G I* Z+ }2 ?4 i, a* o};
, k0 E. f9 u, e+ x
6 m: x0 \2 l( u4 Istatic int __init led_platform_init(void)
) s! `7 D" r! M5 E z% g8 h{
4 p( y; {, {3 L5 E7 j7 u& u int ret;
2 S1 D2 k9 H+ o6 O6 h/ l: l' z1 H#if 0
3 ^0 |! Y2 G' W" B T ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
2 {/ n- H* Y2 Q, K$ o$ O% B [ if (ret)
6 P, t4 i- K( I. N% P pr_warning("da850_evm_tl_leds_init : User LED mux failed :"8 {2 e& P# o1 [: v
"%d\n", ret); s1 {) C0 R$ c$ B" d- t3 E l9 q
#endif
( z+ h" b3 m9 G( a) I! j ret = platform_device_register(&da850_evm_tl_leds_device);
+ I& k) l2 x; Y* l& Y4 M4 N0 u$ g2 x if (ret)
: a+ M6 t- ~8 F/ U' O5 s pr_warning("Could not register som GPIO expander LEDS");- u5 J7 m/ T" X7 A- N
else
: s: M: J( Z: V! d printk(KERN_INFO "LED register sucessful!\n");
( d2 Z1 ]+ L' e1 f' v# Y( e; C$ {. L* `9 A6 m1 n6 G3 y, b
return ret;
$ C; j% m" W+ c5 t' S) k}0 t6 v+ w6 j; k, V7 ~1 C
& M; l# p& _- q& u0 Y( A1 C, ^static void __exit led_platform_exit(void)
* R4 {3 u6 g0 T. P{
- C4 t3 N! e* W) c platform_device_unregister(&da850_evm_tl_leds_device);. u# ~- R( i& X; I# t
- l' R, W: ~& V
printk(KERN_INFO "LED unregister!\n");3 N8 Q6 n* E8 E- t
}# I4 l {" s2 p
+ @# P! _# X b/ o- Q6 |6 l
module_init(led_platform_init);1 A; t* B* \; p% v: O9 P
module_exit(led_platform_exit);
$ N' b/ u5 y" G2 m
) _. Y6 S) V/ X- ~3 @* A7 W f4 xMODULE_DESCRIPTION("Led platform driver");, M/ k9 M6 Z: c7 s) j. E8 o# q
MODULE_AUTHOR("Tronlong");
# Y4 \, P% q6 CMODULE_LICENSE("GPL");
- d+ H2 \ L1 A2 T( Y
0 }1 O- M2 T" v5 f* g& o |
|