|
|
求大神给下面的程序做注解,请稍详细些,谢谢。5 k% `- Q( X1 M( |, O/ W
#include <linux/init.h>+ ~# o6 m1 [9 `
#include <linux/module.h>
! ?+ c F1 i' j#include <linux/kernel.h>
* F a: q" X% f0 h- p9 n7 F#include <linux/types.h>
( Z, t: N& g0 E8 z) i#include <linux/gpio.h>3 m+ O. t, ~4 L7 q1 {4 D' A
#include <linux/leds.h>
+ Z; a5 J/ K$ N! d5 y- `& q#include <linux/platform_device.h>
& O6 L0 C9 X9 E7 S$ ?
. _$ U' z v; f, X& T( O: g9 Q#include <asm/mach-types.h>& a8 ~0 u4 i! }4 G& Z) ]
#include <asm/mach/arch.h>
3 @0 _( S7 a0 Y* K2 y#include <mach/da8xx.h>
0 m! q' `# c2 l- \4 u6 q#include <mach/mux.h>
7 a* P( B8 r7 F/ G; f$ ?3 V+ w9 f# Z8 K; X, ]+ Y# f0 g$ s
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)0 N0 ` Q' w! A* B. s9 F5 h
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)4 L+ f: u, h( ~8 `
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)! o) t3 ^9 g- X |- X
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)# J7 s: i; ~: @+ [
c1 v" t2 t. E! P+ C/* assign the tl som board LED-GPIOs*/
1 M5 k1 M$ p. Istatic const short da850_evm_tl_user_led_pins[] = {
3 V( y" ^ E) J; q8 K% V4 y# C /* These pins are definition at <mach/mux.h> file */
. N4 t) W$ K S3 g5 ^- W3 m DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
8 J Q: k, Y0 X9 a -13 l& Q" P# Y& Q# p! w6 q
};
0 K' l# l1 e+ X# W; ?+ ]% p' z/ {
0 T4 s( e2 W1 M7 Ustatic struct gpio_led da850_evm_tl_leds[] = { ^, W+ b+ d8 G2 z$ f* i/ \* t
{+ x+ y* k8 {) L; F- R- y; r
.active_low = 0,
. W: o; T: W" |% l2 K# j) k .gpio = DA850_USER_LED0,9 m. H: }- x8 ^, P
.name = "user_led0",
6 b" k: K0 ~/ m* c# x8 ?0 X .default_trigger = "default-on",7 W r, W9 S8 f ]& B! A: G: W
},
, i/ N9 v/ a6 n- G {
Y) z# ?" L, l; r( U8 h9 H3 C+ x .active_low = 0,
# ]: [6 j( z( J, w" M .gpio = DA850_USER_LED1,% O1 h( P1 d6 f5 X( q6 D# I
.name = "user_led1",* b# ]! r/ b7 U: `
.default_trigger = "default-on",4 ~+ i7 ?2 ]9 f. n
},
( S% o% o; Z% f- Q5 p {+ j7 ]) _* S2 g! s2 ^ H- O
.active_low = 0,; X0 G3 N/ f9 w3 s" l* x0 F# R8 Q
.gpio = DA850_USER_LED2,; {, X% f8 x5 W2 w
.name = "user_led2",
[1 ]3 H2 i- s) _- ]4 F) C; | .default_trigger = "default-on",* u4 G' P# T4 F1 s8 }
},* M! p0 v; N( K+ |. V
{0 X8 ]* v3 }0 W: r1 b
.active_low = 0,- F; L% K- ~+ z$ C8 s0 ^
.gpio = DA850_USER_LED3,; C0 j$ ^! \+ x) f4 }2 [
.name = "user_led3", R5 f8 T6 R0 ^, d! ]
.default_trigger = "default-on",
4 [8 A" }+ U% \. U7 t },9 M( e7 f6 ?6 ~0 E8 p
};- P* W& P G) q
/ R5 ~4 L( I) b ?+ o
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
3 N; n5 W5 x Q' k4 G/ ? .leds = da850_evm_tl_leds,
6 |- ~. M6 {. F7 d, C' z2 W .num_leds = ARRAY_SIZE(da850_evm_tl_leds),% v) Q9 b, ~5 _- v4 t
};
( ]2 [+ y, f. n" p( w9 N. w# W3 C |% D
static void led_dev_release(struct device *dev)' [. D3 o8 @2 ]8 P4 y
{1 b* s! t. r( L; ^
};% }& f F- a* U! x3 w+ |! p& `
+ w k) q! k0 Y s/ q
static struct platform_device da850_evm_tl_leds_device = {
/ h% V* J' X1 U6 Z- H. |# p' e .name = "leds-gpio",
. a( x; `& u7 }$ { .id = 1,
5 C8 j9 [: p( A1 R' k .dev = {) e p! ?- Y( ~& n1 S
.platform_data = &da850_evm_tl_leds_pdata,
4 `6 i& }( O# J% ?% Q, M; D: g1 s .release = led_dev_release,
' ^7 D* b& [( s# O+ s }
$ N- i6 O: l) @};
3 z* y7 m8 X" I# [. r j3 N' g% O0 J" _% M3 j6 \ `+ R
static int __init led_platform_init(void)
# ?* c6 Q L$ K- m7 x3 z: P{' \* \3 ^. {) x1 v2 t0 d
int ret;
9 `! C) C- e6 ~" |" z2 L4 }* Q#if 0% s0 d+ a5 p0 X% F- |4 P% r
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
$ c1 D j- ~7 n+ B if (ret)* |0 b7 X) i! Y4 \
pr_warning("da850_evm_tl_leds_init : User LED mux failed :", ?+ b$ d9 D3 V+ B0 w
"%d\n", ret);
/ f" L+ b! A$ r- D#endif
* z. Z. o8 i* C- M; z- V# I0 P/ ] ret = platform_device_register(&da850_evm_tl_leds_device);
# ^2 E* G( K; X( A if (ret)
3 S# F% }5 m$ ]" `; e% m pr_warning("Could not register som GPIO expander LEDS");
; W/ E3 v3 s+ Z( O0 n" y else8 N# {2 }. F J3 t3 n" q0 s- S2 v
printk(KERN_INFO "LED register sucessful!\n");/ x% `% c+ l* f8 e, `
5 G( s0 O9 P5 q) \% w5 v return ret; T" B# d% a$ f* B
}* E+ Y2 p7 \9 N4 V& x' s8 a
) |9 N& l0 Y% Y( F0 e/ N R! F
static void __exit led_platform_exit(void)
% R4 P* i3 ^4 X. L% u# S{( G- G4 ]8 ^/ P4 V
platform_device_unregister(&da850_evm_tl_leds_device);
B# o S: ~$ m" q8 A$ h- l
8 k- f9 o A1 z5 ]( _; u printk(KERN_INFO "LED unregister!\n");
. b" i* i: l% F0 K7 W- \' b# f/ T( r}' @5 o4 R, j. e9 W, ~
4 j6 Q1 {- X4 c# E) H- O. |. k4 |module_init(led_platform_init);) a: i% b: F# E# c# y0 \
module_exit(led_platform_exit);
1 U: @' C: V! [% z0 ?) r# Z! z: k, W
MODULE_DESCRIPTION("Led platform driver");
, N" B# X! L; u' SMODULE_AUTHOR("Tronlong");# S& i2 M0 B& W( G
MODULE_LICENSE("GPL");
2 a- k. r' A X0 B5 d5 x1 b. `, [* Q+ t9 k4 r
|
|