|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
: G: `) A- B/ s7 }, {+ m/ K$ i#include <linux/init.h>6 p4 y5 j( G% j
#include <linux/module.h>: I' ? A+ y6 F$ V, p- }
#include <linux/kernel.h>5 D/ y! v& w, y: y
#include <linux/types.h> z$ v1 H8 z ^
#include <linux/gpio.h>
, T1 \: f( O' s8 u$ q! e2 }#include <linux/leds.h>
3 N2 H: s" q/ O K#include <linux/platform_device.h># l; O) t1 R' n5 A+ p: f
& s1 A8 J1 L, u+ g# m
#include <asm/mach-types.h>$ Y% @( p9 \9 A# l, W
#include <asm/mach/arch.h>
5 k/ I0 m; M* t# Y T#include <mach/da8xx.h>" ^( Q% W, l. }7 S! Q
#include <mach/mux.h>- m8 v! @) {/ y; S* G! A
4 B" u4 _: ^' G- _2 X#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)' W3 c( X9 G4 h& {2 X
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)- P' b7 r/ L; T: P8 z( w
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1). z* b1 P* z8 B) r2 j9 y/ x0 U
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
% d6 V) ^+ y! E" ?+ e0 f0 Z9 X& N( l$ G
/* assign the tl som board LED-GPIOs*/1 D# O3 Q. t" i5 d/ i/ r' m [1 X
static const short da850_evm_tl_user_led_pins[] = {
" ?, M3 e: q* M /* These pins are definition at <mach/mux.h> file */
8 j4 X: e1 ?- R* R7 g DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,' p; }) w& I, U. H
-18 D' p ]- R) G
};) c$ r7 {! J H! }3 H1 e
7 @2 k9 H, |& T
static struct gpio_led da850_evm_tl_leds[] = {! l+ [# J c& N2 ~9 O" x
{ m+ _. @$ F, z7 h) k
.active_low = 0,
4 M& l5 n+ M0 @+ z9 H .gpio = DA850_USER_LED0,
0 M- S: H( ]2 g) ^. I .name = "user_led0",) K3 ~4 Z: W! A! ?
.default_trigger = "default-on",
! r1 x( b! ^3 m9 X3 C2 Y' z# v' \" E },8 q8 j+ e( _# Q3 F: X
{9 g; c/ l/ v# M
.active_low = 0,* q2 r# l' p. |# f
.gpio = DA850_USER_LED1,# R0 K$ z+ W+ q7 P7 D- D
.name = "user_led1",
+ V! Z/ C# t) L) F6 @: I7 I .default_trigger = "default-on", }$ C' X+ G3 W0 p% l/ B$ T
},6 O' D; y8 ~- r+ Y# F
{
" H# I, b) d: g6 A .active_low = 0,
% ?2 t7 t: a/ m$ N, H .gpio = DA850_USER_LED2,
% y0 b3 q" P. W& S: u3 { .name = "user_led2",/ H2 i% m. |! b# T8 h [+ J
.default_trigger = "default-on",
2 k# ^: x+ ?! {8 D8 x5 w' H },3 L0 M+ f7 C7 ?0 k+ _/ p
{
# ]( n7 A, U" [3 Z, Z6 O+ n, g .active_low = 0,' U* z$ S! |' |( n- b6 S* G! n
.gpio = DA850_USER_LED3,
# W; v; r" x$ {1 C .name = "user_led3",1 q9 F4 H! i5 f0 _0 F' g
.default_trigger = "default-on",& ]) X, l ]* x
},
& D* C7 e( N3 d};9 u) y1 ^5 O3 e8 H( g
" s; ~2 o! H- a" h8 @static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
v% F% b" t0 y" n. N w .leds = da850_evm_tl_leds,/ X3 S/ y$ X3 r8 ]0 f8 f& Y
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),
9 c# j$ D' b! z& w4 o* T8 u1 z) O};1 ^8 Y. L/ f/ i) D5 E3 T1 Z
4 |) W/ C! [" o3 T" r- ?static void led_dev_release(struct device *dev)
: O1 |# W9 c6 E s) {8 V{
( T4 ]& _1 H& l/ z8 ^/ }};( N' h# o7 |. t) Y7 C5 @' Q% Y
6 D# o. C `0 ]- b5 Y( Kstatic struct platform_device da850_evm_tl_leds_device = {+ ^7 m+ D, |! x5 p+ D3 w
.name = "leds-gpio",
4 {5 y0 n9 D j! `. r Y/ H .id = 1,
1 }" w4 l4 w. _2 Z# e: | .dev = {) n1 @$ z5 p% ?4 k3 j
.platform_data = &da850_evm_tl_leds_pdata,
+ ~0 u, q/ r( a6 @. \ .release = led_dev_release,9 l' [ {6 j0 }
}1 z a8 W% @" u8 y8 b! z
};% T7 S: o2 C$ g }# r; \
) T* C* | X x5 Q0 i6 ]+ {static int __init led_platform_init(void)
2 ^* U* \( E( N+ [{5 u: _" ]1 O) l- p8 E& M; z
int ret;7 s( {6 a J" I
#if 0* h% u1 k1 N' Z1 N7 P& E
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
; }$ ^# n; T. r0 r& t4 k if (ret)
4 v2 A' ]6 U# g. Y pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
. F9 G( r3 Q. Y# W( v' E "%d\n", ret);
- }* m1 x2 _4 f7 p#endif
?5 r8 x' M0 a& Q. d- D0 E* Y ret = platform_device_register(&da850_evm_tl_leds_device);
. m3 j7 \/ k- Z9 d/ M8 ~! W: S if (ret)+ ?( o1 p/ w4 V# z( R3 d; f
pr_warning("Could not register som GPIO expander LEDS");1 i$ X$ L U M! `
else* G8 Y1 C7 a2 s2 A, u( k
printk(KERN_INFO "LED register sucessful!\n");
/ v" h0 [7 e0 e7 u y0 B, w: D3 N) {5 J' D. `1 B. [# x
return ret;- }3 E6 Y4 K: ^/ X8 ?& [
}$ C7 k/ r: r6 H: U7 j% {7 [
+ F2 k8 a4 D4 P! Xstatic void __exit led_platform_exit(void)6 M& |8 L$ B2 g2 W: f$ ?+ g
{
! F& s/ S- O2 B9 w3 r platform_device_unregister(&da850_evm_tl_leds_device);! o$ O6 V' ]& i* |) ]6 b L
# v; |5 x+ |/ W2 V: M printk(KERN_INFO "LED unregister!\n");1 o& Q. I2 L) Z" [: `2 f1 ]
}( i. F, b- }: M; o% o' M" q! P
) w& [' S1 ]8 ~4 Smodule_init(led_platform_init);0 {6 q# p d. x& c' l( q
module_exit(led_platform_exit);
' f9 e; w$ j: [# m% `+ T1 d0 P
8 \5 E& Z8 R) Y9 H% v3 _9 R F( sMODULE_DESCRIPTION("Led platform driver");1 R- B/ K2 U6 {0 h+ y: Y: e
MODULE_AUTHOR("Tronlong");* z6 r7 {0 B. K3 M$ N* Q
MODULE_LICENSE("GPL");- {* v# U/ V$ T' a' i# X
- w) R& P* e, k! j |
|