|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
; }+ D4 l# S: w#include <linux/init.h>6 F/ o% j7 e' A/ T$ x
#include <linux/module.h>) a' r% ~0 r' `4 @* M! l
#include <linux/kernel.h>4 Y& h, L$ T* P% Q% I7 \7 }3 j" m" a& o% R" O
#include <linux/types.h>
! b0 z9 C- q( N#include <linux/gpio.h> a" D4 o& X+ \! b, l. D- Q
#include <linux/leds.h>
! ^" h& o: F9 a6 E#include <linux/platform_device.h>
; A3 D( _2 j! Q2 d2 d' h
9 R! n2 e- K: ]#include <asm/mach-types.h>
: B, z1 q ~/ Q9 S+ d$ \9 V#include <asm/mach/arch.h>
- R! [ l$ D" E# _7 U$ q, y$ K#include <mach/da8xx.h>+ {" a: D8 K8 ]5 ~9 S) L
#include <mach/mux.h>
) m) l# ~+ V5 m" M( y8 d( G+ G2 T' h9 f. T; p, h% z
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)1 H+ K5 E& \+ E" V2 F# L* e4 R
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
% }, [) E- S. m$ m# y#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)* q) q; w8 h& \& U5 h6 _1 \8 u# u
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)3 t" S6 u* O: K9 L" `; n+ I- k% ^
1 D+ f7 q5 `8 p2 x/* assign the tl som board LED-GPIOs*/
( |& Q* _( r/ Y7 W$ f) q% {static const short da850_evm_tl_user_led_pins[] = {
& ~& V. _7 a0 ~# V$ w /* These pins are definition at <mach/mux.h> file */
9 [3 ]0 s5 \7 M- ?% n: | DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,6 G+ c. }! ]) ?& l6 }( @
-16 ?2 V6 R+ b/ m2 {
};) I# ~( u2 N' J5 {* W& N5 G
+ c. A. D, L) ?3 A9 w
static struct gpio_led da850_evm_tl_leds[] = {
! P% W: J& N& _9 G {
0 I. k9 Y5 Z$ X' C0 _ .active_low = 0,5 p' ~: A4 n9 U+ \8 a
.gpio = DA850_USER_LED0,+ O' c# J+ H, |6 T3 W) s
.name = "user_led0",& o; O- S8 Q% e* v1 ~4 r5 P' f
.default_trigger = "default-on",
9 n4 S2 Y" ~3 x+ Q },
) a" t- Q) _8 ]1 v) h {
, m) {# P% U: w7 y% ~& ~6 A' W .active_low = 0,9 O" x/ u% `2 A9 @3 L
.gpio = DA850_USER_LED1,- u# C: X* _6 O! I4 V
.name = "user_led1",
$ t8 k! e" I# x) a6 M .default_trigger = "default-on",
" D4 W# ~& @/ T9 m. ^ },1 M- u2 c7 _2 x' _, j, c9 G* k
{: t" M% ?; G* ^9 v
.active_low = 0,; O- @8 J, X' p
.gpio = DA850_USER_LED2," H; T+ @- z( h, K5 K0 z2 g
.name = "user_led2", [$ q7 H: x* j( i
.default_trigger = "default-on",
" L7 A& |+ R4 K% k( h" @1 Z0 M }," Q% s- O7 y4 c7 [
{0 S6 K/ `; H& j0 e% @" M9 m8 A
.active_low = 0,% i( b+ f/ T! W/ u+ R
.gpio = DA850_USER_LED3,6 n+ t0 w6 Z& Z& y# j) `. w
.name = "user_led3",7 \- X/ N8 K0 o5 p# [& M
.default_trigger = "default-on",
* t0 A0 T" }+ B }, K! G" h+ d8 @
};
2 n2 N3 n6 J( _
! r$ f4 q: o$ p3 |% L/ S7 qstatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {" a4 h6 ~1 N# m4 k
.leds = da850_evm_tl_leds,
7 Q5 b+ S- ~: D; S: P8 L .num_leds = ARRAY_SIZE(da850_evm_tl_leds),% T( }5 `" D# G; L
};0 ~. Z! W$ S1 M3 a
5 A c0 F8 [: Q2 i A2 ?
static void led_dev_release(struct device *dev)
1 k$ R* }- D' q+ J* o* z, Y{! {* S) \* W: U) K* [6 C7 d
};3 j5 O' q$ c# L5 n. B' V
3 y2 y4 K8 A7 a5 e) G/ i# z
static struct platform_device da850_evm_tl_leds_device = {) ?7 ~( L6 m; ?1 ^2 }
.name = "leds-gpio",; w4 v4 r" L% F( Q! l8 P$ U! w
.id = 1,& K6 s0 X. q8 \* m& y3 {* g
.dev = { a/ y$ q) s' a2 R! x
.platform_data = &da850_evm_tl_leds_pdata,, a5 p! {% w$ o* |" r
.release = led_dev_release,
2 h, d' N/ C5 M4 I7 @; ?" A' ]7 |; k }1 j; a+ c3 z( [. [' B1 K7 i
};; b. V% ? A2 @: S @" C) ?8 Q# P3 b
+ ]& `3 Y' I' l" k- M- ustatic int __init led_platform_init(void)& S, |3 V" v1 N1 Y
{
2 m/ Q; `+ g6 X. ] int ret;& Z6 X. Z2 v" B) L6 S; `
#if 0
$ t9 X- h" {" ] ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
5 c8 b+ L/ H9 z6 y& F if (ret)
: c+ [( g3 }6 A8 W$ y pr_warning("da850_evm_tl_leds_init : User LED mux failed :", P8 h" i) N) K( q: M
"%d\n", ret);, w4 X0 Y4 H+ v4 D& k2 y
#endif
; W' d; @7 M3 \' \ ret = platform_device_register(&da850_evm_tl_leds_device);
" K/ w' B% j/ c% @) r: T if (ret): C# m6 o2 b+ I# g
pr_warning("Could not register som GPIO expander LEDS");
# g7 S J8 s z7 W& }$ C5 ^% X; E else
5 I5 y2 m# k) v! y printk(KERN_INFO "LED register sucessful!\n");& a- p6 w4 T6 l
$ @3 P# Y6 }" r
return ret;
/ v9 u2 n5 y5 }3 Z& x5 i}
7 Y3 K2 E8 f5 q
0 u+ e+ a0 m; g$ D7 tstatic void __exit led_platform_exit(void)9 H2 I+ z% j" n1 l
{
j1 B5 s# P7 u1 n% [* V platform_device_unregister(&da850_evm_tl_leds_device);
6 v* u+ e8 {$ ?
; T( j7 m. I7 @0 x% P printk(KERN_INFO "LED unregister!\n");6 i1 b2 u9 L- R+ v
}/ M2 U# g. k2 \1 \1 E8 F' I
) m* l* t6 j9 \4 Qmodule_init(led_platform_init);
7 ]. E. B, t, |1 V/ ?' A- B: nmodule_exit(led_platform_exit);
% _3 k& Z& G( F4 \+ C4 X
4 F: L: a' p. z+ d2 } bMODULE_DESCRIPTION("Led platform driver");
% \5 {* q: X( c6 yMODULE_AUTHOR("Tronlong");7 W( G+ g! K$ y k! Q' r- q. W
MODULE_LICENSE("GPL");$ U$ k& C: e; b+ v
$ s; e5 c$ V8 ~4 h, [ L9 A$ _$ a |
|