|
|
求大神给下面的程序做注解,请稍详细些,谢谢。' ?" G4 O8 T5 l7 z* S& t, k
#include <linux/init.h>! H; O' n0 M7 L6 j
#include <linux/module.h>+ p+ x1 J9 t4 Y! @' I! u
#include <linux/kernel.h>
- k( x+ Z, h% p2 k( f#include <linux/types.h>3 ]; a) j; ]4 W
#include <linux/gpio.h>! y5 {( D5 |! h* _8 L1 g: j% s
#include <linux/leds.h>
9 p. _) Z+ K/ b! k) C#include <linux/platform_device.h>! z D- _0 [0 M, C F
2 u! E* h$ S2 a" H( K+ t#include <asm/mach-types.h>
f' L4 j: F# |6 b6 a, v2 S+ e#include <asm/mach/arch.h>; N- c/ T0 R" R% t; J. e& e
#include <mach/da8xx.h>
$ \( N) C# R$ W: u! z* w#include <mach/mux.h>. H5 I: U/ }8 H6 V( _+ E( k
! M& Y- y$ j" L0 p0 L- H
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)+ p2 X' ^9 Y" a
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)3 v1 z4 c3 ~9 W/ r6 M1 q/ S
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)# u Z! t* }, G# X: d
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)/ k7 f2 H+ r& c5 M R
4 z2 D- s ]3 S/ u/* assign the tl som board LED-GPIOs*/* _( c$ I$ N9 E
static const short da850_evm_tl_user_led_pins[] = {3 ?+ A7 J/ a3 S, q$ K) G8 }
/* These pins are definition at <mach/mux.h> file */
1 F; L) Z* X, h6 p* J DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,7 w% { U, R0 \
-1
+ ^$ X+ K$ m0 L};7 P( E, F7 \" u! I5 K- F
$ A, z1 W0 G& k. I8 S: k4 O5 J; Z9 a6 J
static struct gpio_led da850_evm_tl_leds[] = {
, s$ ?5 z w0 N {6 \$ K' |" B* b* Y3 M- m
.active_low = 0, b/ H- M3 k7 V6 @( N9 e5 g: A
.gpio = DA850_USER_LED0,7 f( i8 Q. S( H- e. }. D! c
.name = "user_led0",
* m" Y1 c1 R1 c .default_trigger = "default-on",/ R0 Z+ [0 ^$ Q$ _9 K
},; \8 W. L& s# K5 P) y. p. A
{ h1 r* V+ \; Y5 e
.active_low = 0,# G1 w5 f- Y3 O/ Q
.gpio = DA850_USER_LED1,
- j# c1 A! J7 I F% U .name = "user_led1",# _/ z+ a* y' x9 z
.default_trigger = "default-on",
) ?6 P$ Q) V6 g# X$ h. a9 u },. X; o4 l H1 `: N
{
/ A# e0 r _* b% V .active_low = 0,. T0 b9 g1 V/ V: s2 V% Q
.gpio = DA850_USER_LED2,6 I/ ]2 S8 ^+ `, Q" b
.name = "user_led2",$ \' \& Z; v: H! L# W% a) O
.default_trigger = "default-on",9 E; V, I) N6 S/ }+ Q1 n
},
' U+ n: Z; O _& T! v3 |) p {
. O( N9 n( h6 J0 N$ ~" B- U .active_low = 0,
, j7 b, _. c; X9 k: L% y .gpio = DA850_USER_LED3,
- T' Z; s: o- v% b: A2 [ .name = "user_led3",
5 A4 N* k" G6 H t _4 a2 } .default_trigger = "default-on",8 r# Y7 Y, Q8 @, b0 |+ t
},+ t" X% `: J, H6 g
};* u/ M$ L* n z
, m3 y$ O' a: E) Z( D: X7 Rstatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {' c) ^9 P* D+ f+ ~; C: X) O
.leds = da850_evm_tl_leds,. n/ g, D$ |& f
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),
( R. s$ W# }: q+ C3 s};, F8 j# h$ _, F1 {- f) }, T
: C, q3 c. H, X4 z! \/ ^- Y
static void led_dev_release(struct device *dev)) f# h5 B0 ]# k! B r
{" k- B: N2 x5 u) e+ G0 O
};
2 b: D6 [( P2 A" p) b4 w+ W
* v$ i* l N* K+ `: I( sstatic struct platform_device da850_evm_tl_leds_device = {
6 k& e/ E0 U5 j( z) F .name = "leds-gpio",+ d$ ^8 {7 W4 F* B
.id = 1,
1 A y2 h' }% X) D .dev = {2 p2 g0 o9 E. Z7 |0 b( s3 v. v
.platform_data = &da850_evm_tl_leds_pdata,! Y+ n. l/ t% b2 U
.release = led_dev_release, ?" I$ C9 |4 I, G% c) O
}
5 x* z. z2 H& g9 O};5 S) P. C& L) y% d, X4 q
9 E- _7 p% M$ `# Y5 N$ |5 Z- Gstatic int __init led_platform_init(void)/ a( E& P( x* }- g
{
# w! c5 ]$ e0 y. p int ret;
5 p {0 b& W* ^2 r% B#if 0 `$ \( v6 |6 ?2 g& ^
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
0 J, Q( K/ j- Q/ Z$ z if (ret)1 l Y- M& r) Y! n+ `6 ~
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"9 r; b+ F2 e% f, @2 S& x5 y& _
"%d\n", ret);
1 k( v0 {: j1 P0 n0 u$ Z/ A#endif
& B6 o3 z$ `8 v. ^: }& Q( Z ret = platform_device_register(&da850_evm_tl_leds_device);% ~9 X: I5 u3 P, p+ k
if (ret)
* Y8 u# e2 E$ d6 S pr_warning("Could not register som GPIO expander LEDS");
2 D0 i3 d7 A; W" o else- I \! j$ @5 G" f: D+ j
printk(KERN_INFO "LED register sucessful!\n");: \, e) x' s3 x! C/ T& ?/ f' y
7 n4 t0 `. {- _ return ret;5 o+ `! {( t6 K# Z6 z, j. ~2 u
}* s# Z8 `/ l2 n W
- I. V) v6 a; U7 A1 v* N
static void __exit led_platform_exit(void)
% B# m7 z( _; _5 O( O9 b) g{/ O0 p1 @% x% @% I0 S
platform_device_unregister(&da850_evm_tl_leds_device);% [& v4 F1 g" L# ~( ^
7 M- P6 A8 A* {7 R: a7 `
printk(KERN_INFO "LED unregister!\n");0 B9 Y4 ^% ~$ B$ ?$ x
}
+ X- G" B& s8 U! k# [5 k g N6 Q1 ~- c" q. p7 D* ]/ ]
module_init(led_platform_init);1 {4 F- ]5 d0 Y; l) c
module_exit(led_platform_exit);1 S2 Y& S; T3 _* v( l k$ c2 g) M
% o, U& I) D5 X+ MMODULE_DESCRIPTION("Led platform driver");8 V. j' w, X1 Y0 k8 p" f
MODULE_AUTHOR("Tronlong");
& c0 D) r1 r; h) R' Q% a7 vMODULE_LICENSE("GPL");7 I) n' \ q; Z8 D/ ^# B
! {8 q' k+ g5 G9 W) d5 p4 @; H" y
|
|