|
|
求大神给下面的程序做注解,请稍详细些,谢谢。; I' d% c1 U/ T7 V
#include <linux/init.h>
! G# J O5 K" X- J$ F#include <linux/module.h>" j* V f" i$ }
#include <linux/kernel.h>
3 E, Y! t9 Z ]! C#include <linux/types.h>" I Y( K- Y) ^. P& K& d$ r! h
#include <linux/gpio.h>* \1 e9 `: d. ~% h
#include <linux/leds.h>% n! v1 r p H4 x8 _
#include <linux/platform_device.h>5 f! g% y% o3 e7 s& x, h
8 H# ~0 {" Z. P: d8 m3 C5 U' G8 S#include <asm/mach-types.h>
+ n* z7 q/ e: [: ]0 Y& n, z#include <asm/mach/arch.h>7 ^2 u! w" K, |/ k( ?
#include <mach/da8xx.h> d8 i/ b4 J% Z- m( G# v; L
#include <mach/mux.h>
, U* @6 n7 m0 o& c. J- N: P6 n+ v$ c" Q" P2 |# B
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
& \' v) u! l0 E$ H#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
- i3 U$ `# s0 ]#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
' y: r8 k1 X+ ?7 W/ J( R4 Z3 k- P#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
; u% ^- r! Z! T1 b/ b
* |& Z+ N' Z# j! I4 d/* assign the tl som board LED-GPIOs*/
1 m* V3 L9 D6 `) d; Vstatic const short da850_evm_tl_user_led_pins[] = {3 C r4 Z( s/ m8 I: M
/* These pins are definition at <mach/mux.h> file */
) a' b( |3 r$ N: o DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,2 z+ `4 V a* k+ u6 T
-1
0 Z; y. F; F0 K5 r: w};
! Q' a6 `* N4 m! E4 r
' l5 G6 f$ k" d1 mstatic struct gpio_led da850_evm_tl_leds[] = { @$ d/ h3 }2 U! |5 Z* ]& {! I* w6 v
{
7 U/ n' ?3 b+ W0 K .active_low = 0,
( ?: h: j8 R& B+ `8 W .gpio = DA850_USER_LED0,4 X9 J$ H) L; l- S
.name = "user_led0",
( B* \$ z; b0 _- z# `1 P .default_trigger = "default-on",
6 F* \% c& h$ e$ f" h },
/ u& w3 h9 }" Y1 j9 a {
, U2 ~% N0 y; M1 } .active_low = 0,! n' s4 t7 I( N
.gpio = DA850_USER_LED1,9 T; ^8 x$ d) {
.name = "user_led1",
% e1 U( a: h# H/ k& s# C1 l7 r .default_trigger = "default-on"," O. \0 o: M# g" } B9 [4 V+ O+ C
},
( O3 O1 [" @: L/ H4 @; a {6 d; {1 k) t( F0 Q) u
.active_low = 0,
, C$ Y7 O7 r4 `, n .gpio = DA850_USER_LED2,/ m1 H0 |2 V- u. U( w, e7 O
.name = "user_led2",
( v% f, i/ d% r5 J& q- r& S1 b3 u. S .default_trigger = "default-on",. p. o1 j% b' o% t6 D" R* |; a
},
9 b. l3 @) U2 s {. s9 ]; I w0 V! b( k& h2 {
.active_low = 0,; N: X. m3 _8 d
.gpio = DA850_USER_LED3,
4 b& r8 m/ p1 h! T- Y8 h .name = "user_led3",
( Z# ]2 i# `! J7 _ .default_trigger = "default-on",, \5 M& E7 D! u/ x) _# W% u* c
},4 {0 Z+ e) s) p- v& n
};
4 y3 R |! r: D- i
2 Q: H1 V: W/ Z: S/ X1 }4 Ostatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
0 f$ h& N) Y7 q! @7 K: i; N! R8 S .leds = da850_evm_tl_leds,
9 i/ P; Z s" m$ \ .num_leds = ARRAY_SIZE(da850_evm_tl_leds),0 F% U2 F9 ]3 ]0 @9 D
};# w/ A; L4 e4 V
5 e8 i- L1 v. [. Sstatic void led_dev_release(struct device *dev)+ G# Z2 x) ]9 b& u0 `+ }7 z
{. M" l$ z" d! v/ f: N3 U
};
; ^' z9 h6 \/ n, q2 E' I& l( W# ~0 V7 x8 p- s$ X1 J, \* t! j- V5 A, ]
static struct platform_device da850_evm_tl_leds_device = {' h B3 N; n( f! o6 H* G
.name = "leds-gpio",- c4 {6 Y0 v- ?- u: H
.id = 1,( `: u' J2 p1 W. u0 P- ]
.dev = {# b6 f& a( k- @6 W z, O
.platform_data = &da850_evm_tl_leds_pdata,
+ }) C7 M8 h6 }2 h .release = led_dev_release,) ?& ^6 J2 z3 E1 N+ u' u
}* B( }4 C. w; j
};
* B6 r3 {+ a% S5 Z# ]
3 r2 n6 ~! Y6 ~' X0 n* W; [static int __init led_platform_init(void)* I# [' S5 T2 ]( V
{
" c9 g. M3 e% \) h. M4 p. y" x+ O, I B int ret;
4 z" O b% i! `& m# N#if 0* Y) c2 m/ Z7 B5 Z) y% N Y
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);' K7 \5 k; j: D
if (ret)7 ~! C" z2 z+ D! _6 s( t- L4 w
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
0 k( {4 W Q0 o "%d\n", ret);
# R# u3 O7 h& m: [#endif
F- T: u: F" U( c1 {* y( r; n ret = platform_device_register(&da850_evm_tl_leds_device); s/ j) Q0 V$ i! U
if (ret)
1 }. T- F, W6 B9 l- u& B% K pr_warning("Could not register som GPIO expander LEDS");
6 Y$ D5 S& A, w# M else
( `, o$ G& @* b" C$ }7 ? printk(KERN_INFO "LED register sucessful!\n");8 d/ _3 T4 A% o# e& ~: Z
( E; E: S1 o/ v8 C+ u+ `2 P
return ret;; @: R9 x! H4 ^. _, T- @+ E
}
: X6 D2 Q7 L5 a2 t& P! c, d. N, X* V) {% [$ K
static void __exit led_platform_exit(void)2 j/ v) P' w* C9 a
{* z0 n6 t: K5 K2 N
platform_device_unregister(&da850_evm_tl_leds_device);
5 y8 N2 I: |+ i' z' O4 O2 o
* w/ d1 C3 C8 q# y+ ~( H+ T printk(KERN_INFO "LED unregister!\n");( [' z! D2 S- j2 E
}! K0 A9 @. S- V+ n) z# \1 P q: D
7 X5 A1 U* _5 B5 M
module_init(led_platform_init);
% [2 M# e1 n0 [module_exit(led_platform_exit);$ l* I$ a2 G1 H) J$ `, M( B0 w# |
/ E: V8 _- m" i+ @# y. Z1 eMODULE_DESCRIPTION("Led platform driver");: G$ n' W0 D- q
MODULE_AUTHOR("Tronlong");
6 r+ P* c a1 U* IMODULE_LICENSE("GPL");
& S4 Q5 t0 s) l- x" `
. {# d4 M5 I. H" O, w. B5 b9 ? |
|