|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
# R7 F' f2 R5 _" D4 N#include <linux/init.h>
$ i+ @1 R; g; [; D. [#include <linux/module.h>/ X" S% v1 t i
#include <linux/kernel.h>
( |9 a, B9 |; r( P#include <linux/types.h>
- e i |% R8 { W* i#include <linux/gpio.h>1 l; i q6 Y0 ^ h
#include <linux/leds.h>
( P0 i. {1 @1 g5 U. u2 W% B h7 ~! Q#include <linux/platform_device.h>0 P1 r8 n( r1 p7 T! |$ o. S( D# \
2 ?' L) P4 ?7 O* o2 N& r" B#include <asm/mach-types.h>/ c# y5 V5 v& j
#include <asm/mach/arch.h>
+ a& v: i5 V4 H) o3 S7 H#include <mach/da8xx.h>
4 u) |, f+ N5 a1 ]#include <mach/mux.h>& R. l" [* V$ W! t
+ J+ f4 `' f4 d9 P) A
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
+ M+ C2 {0 B. L0 v }: ?! G#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
* c0 X* K' A; H0 Q" V% Z7 `$ \#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)* h1 h8 y& _5 W3 K0 g% j8 D/ ~# Q+ w
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)5 b) ]" H3 ?3 o0 _% z' J
8 \8 ?2 T1 A4 N+ E
/* assign the tl som board LED-GPIOs*/$ x( p @8 W, B; f- z+ }6 s
static const short da850_evm_tl_user_led_pins[] = {
6 A+ N( @9 k% m" w% r9 P /* These pins are definition at <mach/mux.h> file */+ o$ `4 y& K2 F1 a* _, f% l
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
9 ]* e/ l- N/ L) b4 M -10 p# \& {( p1 J4 Z- J8 M
};8 a: s* X5 W7 a. U4 C* v
) h9 ^, n+ E) P+ [ {; S
static struct gpio_led da850_evm_tl_leds[] = {
; q2 n* O+ U9 }. D {, I9 N; l) k# C' {3 Y0 c
.active_low = 0,2 b6 @5 _& ?* l2 A* r v
.gpio = DA850_USER_LED0,4 W- ^: l: t1 |+ ~2 @# i) {
.name = "user_led0"," W4 k2 r1 j: L( U( P6 t# o
.default_trigger = "default-on",
- z% ^; x z, e3 J },% T: [- Q& X- S9 U
{$ r! [7 K8 E6 I
.active_low = 0,8 H2 I4 l8 o, f4 y4 L+ }# Z' d
.gpio = DA850_USER_LED1,: K8 W/ T. V+ a$ O. [% w
.name = "user_led1",& m/ Y" ]3 M6 T9 x6 P9 m
.default_trigger = "default-on", J0 c2 `& _, {# s+ p6 V
},
1 h( [% s+ t7 m. N2 j* e {
" q2 h- H4 N$ g3 X. m( o* f# b7 }) Y .active_low = 0,; u" t5 d1 R$ S
.gpio = DA850_USER_LED2, d7 G2 t$ y7 a6 s( I+ m+ e& p- P7 X
.name = "user_led2",
+ E5 q1 J! S- X! U/ t5 T .default_trigger = "default-on",# D4 C/ r/ `* T5 W
},2 d; n+ L9 S9 g: m, ~" d8 ~
{% D a/ R. K- }3 z% `3 C
.active_low = 0,0 B$ J/ r. \9 p) _
.gpio = DA850_USER_LED3,6 L7 I$ S& B, j/ |0 t/ t L+ q
.name = "user_led3",
1 T" ] a' }$ R* n+ P3 _ .default_trigger = "default-on",
; N- C. J! e/ p' W },
1 S9 |% Z, M& C9 T: V% @" U) p};
% J+ W6 l a5 }. z/ ~' _0 w% m$ F' d) y
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {% k- F" C5 ~, F: L- l7 n& K
.leds = da850_evm_tl_leds,
2 j( T; O( n$ Z# A+ Y* _ .num_leds = ARRAY_SIZE(da850_evm_tl_leds),
% c N8 I& T" O/ N};
- S* m7 d5 ^- C. Y: }- E) K" R; |) @: l5 v4 L4 `9 F% ^
static void led_dev_release(struct device *dev)' y! I* b( m: t# h0 f/ ~% D
{' ~1 s% x& N5 j- Q
};( a9 \3 Q9 @! h( Q
* C+ L* q( o7 b0 n5 p W% Y
static struct platform_device da850_evm_tl_leds_device = {
! h! W2 k8 x" J8 i .name = "leds-gpio",. V' Z/ b! `) u' Z1 Q2 x+ z
.id = 1,8 p: @+ O. ^1 W- T3 j' ~
.dev = {8 t* f# N9 ~# K- W/ j1 j! `* u/ Y) `) H
.platform_data = &da850_evm_tl_leds_pdata,8 I9 ~3 }/ l$ v' V
.release = led_dev_release,! a9 G3 p s* M2 c- O9 D; X
}" K& o6 S% j' a) Z8 b/ b7 d: J
};
6 w& q) `5 _& r% J2 S$ z0 m3 ~9 U) j" V8 |' C
static int __init led_platform_init(void)7 d U* N3 R' X2 Y( P- ~
{0 R- ]$ f% O9 ?: C4 C
int ret;
! V9 f' m+ h. e1 p( i( u* N8 N6 Z#if 0* W) S+ P7 s9 b
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);9 s! U9 M: n5 Y0 F" i: _2 Q
if (ret): }# z/ p# C3 X8 K
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"5 X3 o9 V5 i- I/ ^# t6 t
"%d\n", ret);
1 R5 S" s! ~0 Y L/ j+ f7 Z) K#endif
& z$ R6 Q! ~- Q. e ret = platform_device_register(&da850_evm_tl_leds_device);
m ^+ R. l3 B if (ret)
3 y( d+ A& ~0 u3 c u7 P pr_warning("Could not register som GPIO expander LEDS");
) O9 p$ ]" w: B) D5 W. P- r( Z else0 x% K; ]+ X/ R- |
printk(KERN_INFO "LED register sucessful!\n");- J' i0 k# N; J2 z
- @7 S1 Q' e. m4 T: e4 f
return ret;
9 v0 N% h Y1 T p, S8 N}
- J" m! j9 Y5 E6 c' D; ]1 [8 a
9 ?3 @, }8 E% l" S6 vstatic void __exit led_platform_exit(void)4 L* R- z! i5 X. Y" s" P
{% y) o2 F+ _. Z, F+ v
platform_device_unregister(&da850_evm_tl_leds_device);' S9 F0 Q1 d% Q8 ~0 U
9 z5 o6 `9 K+ v# Q$ U4 Y
printk(KERN_INFO "LED unregister!\n");9 A$ n2 x- f9 s
}
& x, @; W( f2 }. p5 W
$ \8 a7 u+ W: o0 Z1 }+ X3 ^4 Qmodule_init(led_platform_init);
* U1 M: M# E/ r, }module_exit(led_platform_exit);: W4 C# Z/ |4 f3 d+ x5 E7 A3 d
: l) ^% ]1 k* g; @" ]) A: dMODULE_DESCRIPTION("Led platform driver");
+ b& R5 B' n8 X7 i7 pMODULE_AUTHOR("Tronlong");/ N6 }" R5 N3 ^! n9 {2 j! D% ?
MODULE_LICENSE("GPL");1 w2 r% v! ?8 y& L" _$ H& i
9 m( _- T. e5 a/ _8 x) C+ O3 T% N |
|