|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
' J( ~- z' H J3 d4 C+ V! Q#include <linux/init.h>* f. N: x0 r% k5 L/ G
#include <linux/module.h>
: ]; F8 |# r: ?% G2 e#include <linux/kernel.h>: D) ^+ v5 b, Y8 N1 [; E" O
#include <linux/types.h>0 x7 G% @' v1 ?" k
#include <linux/gpio.h>/ A, L; h" N" c1 E5 \' m% w
#include <linux/leds.h>7 F1 u, f! Y) p9 s& o3 {# _
#include <linux/platform_device.h>1 r. W0 F; ]: Y) y* F# q0 |; F# e
2 J5 A3 ^' |! c. @' @; ]% D
#include <asm/mach-types.h>6 `/ O- W6 m1 o- B7 @& ^" x& k& h$ n
#include <asm/mach/arch.h>
S( ^: ]0 ]# r e#include <mach/da8xx.h>
/ L. Z- }* ^; y3 e7 ^6 k#include <mach/mux.h>* y8 O4 q( f% }) D( L# o
; W0 a+ d( ]- M+ T#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
5 H, |5 M' q$ R* w( i#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
. E& j% U+ ]$ T! m& u" n3 s2 E#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
; R- z5 O$ E+ C4 d6 m! E) r#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)3 v2 |. J6 x" k+ u) w. T4 u& f
- x3 y' H# b/ a8 N0 P( W
/* assign the tl som board LED-GPIOs*/
* h6 Q/ P+ V x( C! ?static const short da850_evm_tl_user_led_pins[] = {
, ^1 |" i7 N) p& ~' B6 w" {% J /* These pins are definition at <mach/mux.h> file */
. n/ {" }: w0 d& E$ M DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
& Y6 z- B0 A9 I -12 p6 I- `, V9 m ^, I- M
};
# s& q; @9 H& H! Q8 R& ^: E T/ A1 H6 r
static struct gpio_led da850_evm_tl_leds[] = {5 F7 }# o; `1 k' A/ f7 W) \
{
& A2 Q3 X k3 p- [1 ?# I" @ .active_low = 0,
6 v7 U( D! I! @8 z .gpio = DA850_USER_LED0,
$ S+ W. e7 p- @ p6 |, O .name = "user_led0",: B# t% b8 d/ Q7 A" k# F3 ^7 s) M" J
.default_trigger = "default-on",
0 W' w5 n9 o& p! |4 I9 V },
" @: U# B5 ~/ V8 q$ P+ Z+ y4 ] {
# d1 ?) d/ s* n' `% m- G .active_low = 0,
4 z2 _4 T7 u6 h' j2 m4 ? .gpio = DA850_USER_LED1,+ @3 h% t# o3 G
.name = "user_led1",& d, D* t K: G) j
.default_trigger = "default-on",9 L$ s J+ y/ t0 L9 l/ Z6 K
},4 C5 N% j3 y) ~- Z. A
{
% q9 d& \/ X& M/ h% k .active_low = 0,8 T' n$ H" I9 V, { |) q" n
.gpio = DA850_USER_LED2, @/ @% @* j$ L3 f' L$ s2 t
.name = "user_led2",
; ]- x9 Q+ w2 E# e8 F .default_trigger = "default-on",
' \. l" ]4 L' O1 M- g( _ },8 l* X6 T: `9 ^0 [1 q7 L
{
" j. H( k+ W) f .active_low = 0,) {/ Y X7 g3 [. Y q
.gpio = DA850_USER_LED3," {& ]9 P* G( ~
.name = "user_led3",( `- k6 @ p% A* x3 ]6 t. A
.default_trigger = "default-on",) l7 R# P- [% Y- A8 S0 E
},3 w; a7 m6 O3 p, r; z" I# C: ]
};
9 h# z3 |( d- d2 A% R! [1 X
' D9 X; v% I2 T" W! h; Fstatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
, }0 L1 Y* O n* k2 ~1 S! X .leds = da850_evm_tl_leds,
2 J( ?# T2 U, [6 r% ^ .num_leds = ARRAY_SIZE(da850_evm_tl_leds),
; {: f ~% Z7 A) N};
1 S' z" B" L9 p- E, R5 @
8 m/ v4 @, B! c2 V% xstatic void led_dev_release(struct device *dev)9 @& _: Y: V l- `& v. P7 Q9 ]
{
% E' p- S U* v: O6 N};
; h! Q# c; @# @/ r# ~+ }9 |& u; p0 a: s- a- S* S, m
static struct platform_device da850_evm_tl_leds_device = {
0 q2 x x) z$ Z .name = "leds-gpio",5 u8 s9 C# [$ V/ ^8 K+ x/ v
.id = 1,
1 f) a, r' h* v' _5 q( i4 s .dev = {
9 f" |0 H- P$ R3 L e7 Y .platform_data = &da850_evm_tl_leds_pdata,
! F0 q8 f) b7 x1 f$ J: x9 s5 z .release = led_dev_release,
4 U/ S& d( j8 a- k1 Q0 L" L }
: Z* E4 C& F2 W7 j& L};. _# r x. w6 F3 H8 r4 d
" D. w3 r' {6 o6 tstatic int __init led_platform_init(void)
8 l( c& {, k0 T7 p$ n) G1 J& U{
# O* @, }. u1 J/ P& G* [: t int ret;
2 M& F! ~: Q7 D4 O; K+ H8 [#if 0( m/ E+ \5 W" {, D
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
) d N: E: X+ i. Y; G if (ret)
7 s7 X5 k: V0 b _- n1 @ pr_warning("da850_evm_tl_leds_init : User LED mux failed :"- d; M$ k# u! i- {9 \7 s
"%d\n", ret);
4 b) e' ?6 |) d. T% w2 G#endif
4 X: R E/ ]+ I: J. _& i1 { ret = platform_device_register(&da850_evm_tl_leds_device);- j) l8 O1 w+ Q4 C( I+ h' s
if (ret)
# A7 M! m. l# ~7 e0 v# @ pr_warning("Could not register som GPIO expander LEDS");
0 M3 } w/ ~/ h* I4 `1 Y" n$ t else
, O, G0 n5 t' B' ^$ } printk(KERN_INFO "LED register sucessful!\n");5 A3 Z0 |! e, X& O1 F+ n# J
3 z h5 h! [) R8 _* Y/ f0 w return ret;
" b7 q, O# k x' F1 p- L) W$ f7 u} U6 C% L- y# C. f6 W# ]% t- I
5 K9 [! f6 l% K
static void __exit led_platform_exit(void)
; @5 y$ x) |$ n6 j1 S+ e# l2 c3 {{
* Q: K5 I' D* W6 S" G1 |1 Y. q5 b platform_device_unregister(&da850_evm_tl_leds_device);
+ f8 W0 m" q1 {) W8 {2 t
4 G& ~2 E, z$ x) E) [) W4 | printk(KERN_INFO "LED unregister!\n");; ^* _, N* s& ]/ j$ u! A
}: r) `0 A! w0 R8 r# X7 d
: |3 ]5 }( e _2 nmodule_init(led_platform_init);! N8 }2 S* K% _
module_exit(led_platform_exit);7 s r3 e, l9 i& n! {- o" K0 W: Q5 V
- g# w& @, e+ M/ t+ A- ]
MODULE_DESCRIPTION("Led platform driver");
/ B/ s z# H( I. c; }5 M# dMODULE_AUTHOR("Tronlong");
! J- u+ [; E# U3 n! DMODULE_LICENSE("GPL");
6 q$ d+ {4 k' ?+ S+ m; y: c1 {3 E7 P
|
|