|
|
求大神给下面的程序做注解,请稍详细些,谢谢。7 B+ [# A0 X0 e8 o
#include <linux/init.h>- V* s2 {6 M& a: w
#include <linux/module.h>3 a1 C1 H9 _6 s. C# s0 P% ?
#include <linux/kernel.h>
* \6 `' b1 Q7 I$ m) N5 @( F- B/ q#include <linux/types.h>+ P, ~* o0 c( \) E& m
#include <linux/gpio.h>
/ _, k& \9 r- |# ^7 y1 o#include <linux/leds.h>
* G9 F0 J x9 H8 V! T1 d" {#include <linux/platform_device.h>
& s; d8 G, r8 |$ n Q; u7 f; I
2 M: U5 L" g1 x" h( s- R# [7 G#include <asm/mach-types.h>
% d5 ]/ L8 l& E" A! I. n#include <asm/mach/arch.h>
3 ?4 _5 M$ ~2 E1 @$ v0 x#include <mach/da8xx.h>
( f8 l& u" m5 q2 e#include <mach/mux.h>
4 K4 f8 q% ^. O, x+ p7 q6 {
- s5 N2 I; w9 e/ f% D' \#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
$ } O# g9 X) s& G#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)5 U: N" N: G; ^
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
9 |& V& H* Z7 Z! q/ E$ ? D#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
8 z) f( j8 c1 k% o! k5 b: o6 q7 q2 Z* Z: ]
/* assign the tl som board LED-GPIOs*/: U. J7 N {" N1 _2 u
static const short da850_evm_tl_user_led_pins[] = {
8 M4 o1 `7 D6 b* `! U& v7 x /* These pins are definition at <mach/mux.h> file */5 I) f+ G2 R( i$ J, o$ Y5 t0 ^5 s6 Z
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,2 t7 }7 n# K9 n$ H, B/ ^
-1/ L% ~* G& K5 A" Q# \. f( b
};
6 x/ `/ ~' T" d$ U( B! ]
' [- O" t2 q/ w3 S' W7 E' ]static struct gpio_led da850_evm_tl_leds[] = {
; U( M3 L1 ~# u$ ] d+ c7 o {% {, e% M# z7 X& O% [% a
.active_low = 0,
' X' t3 o! ?+ h y% n .gpio = DA850_USER_LED0,
+ E! X. A- D* }/ F8 u! B .name = "user_led0",& y* _5 N5 @4 ~3 M5 o/ ]4 z# V
.default_trigger = "default-on",# `. V/ g% }% d8 [, L ^; A
},+ s2 p" m* m9 l) T$ `# T
{$ t8 C3 p' w* P
.active_low = 0,# N" F2 ~1 C) y% k" \8 t
.gpio = DA850_USER_LED1,+ V2 `0 l7 [0 J8 R ?
.name = "user_led1",, p; w7 ?- t! n
.default_trigger = "default-on",% Q" N) K9 l( t+ v2 {2 u2 q
},
! ^/ v1 A+ a/ \1 @* m" y Q {- S4 T0 C+ Z8 F* ^9 u
.active_low = 0,
( n6 q0 C' l5 b$ w1 X4 u7 W .gpio = DA850_USER_LED2,( j6 p) Y. u; _ k0 _: m2 U
.name = "user_led2",# l, k: d. d3 c! R& \8 q1 O: v$ l
.default_trigger = "default-on",
; ~6 a* g2 j8 Y! N' H },
3 n7 R; N( S, g) x& N" t7 e {3 m' M$ d. Y. \4 P
.active_low = 0,8 a' z3 J' u* U! G/ y8 \$ v
.gpio = DA850_USER_LED3,
$ c+ w, b* t: |, x2 x4 N+ } .name = "user_led3",
! w) \2 {- x# h- b: r J .default_trigger = "default-on",$ ]& e& {- s9 N
},
. x+ v) Y) V. j, A8 Q S};
) H* ~6 Z( C6 _7 T* f; y( ^
; {, e% Y; z- F* l7 Q! _2 ~static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
0 q- o1 e$ `; D2 X" o9 P5 e .leds = da850_evm_tl_leds,$ k0 Y# c0 O N1 n# w0 ?" G/ a
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),) W Y) K" o8 }# \7 L0 ~0 L
};4 a- I+ G; d/ W7 M p, I
D& a. Q( X) I1 ^static void led_dev_release(struct device *dev)0 |& x$ S, R/ L, M. W/ I% P! D. p
{
' F! d7 P5 ~; e! W};" y- q' Q9 m; }: n6 D. n
1 {( \; I- Z3 s( e1 E. `: ]: v/ ]
static struct platform_device da850_evm_tl_leds_device = {
4 l* A' t& H8 h6 J. D0 Z* {- k .name = "leds-gpio",
\! X4 M: e0 H5 ]+ \ .id = 1,
* V) O9 N! c& i7 S# G6 V$ Y! k .dev = {
% y/ e: t$ M- @5 v .platform_data = &da850_evm_tl_leds_pdata,4 ]. v# e" j6 O" i
.release = led_dev_release,2 J1 q9 e$ |4 p# p
}
- A3 `2 w5 o( U" l& F};
# m/ [; ]6 d v" D) i: K; ^
' B2 @5 P' w2 E5 e9 Q' Qstatic int __init led_platform_init(void)
. c( \' M( Y! t8 ~0 v, A: N{
: U! c% V! N4 @+ H; U int ret;1 W" B/ u. X1 z$ I6 W
#if 0 I7 e8 z" }5 w! t2 C: {
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
( V0 }$ n, Y; \: b if (ret)' R7 n# n' `8 C% g6 Y! g# X
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"* q% y( b8 x- I" b$ V
"%d\n", ret);% j3 d$ b3 r+ f' l
#endif |3 d% Q$ P' Y- e. p" M6 J& Q8 g' H0 q
ret = platform_device_register(&da850_evm_tl_leds_device);
1 L, r- |& S. t3 | x if (ret)# e# O1 u7 M' ]" A* S5 I# k
pr_warning("Could not register som GPIO expander LEDS");0 \1 K; J: @8 u
else
( y6 H+ M9 n4 F printk(KERN_INFO "LED register sucessful!\n");
. w( O) R1 w* p" b. m- a5 ?
6 Y5 Z( A" K. b* i A1 i' [$ V4 l return ret;* U0 O# b% @) w; k% q n4 h$ F
}; d: e* ^( v# o f9 G7 P
2 i2 k6 t8 w4 K3 x
static void __exit led_platform_exit(void)
$ r# \& C5 w* g+ ?; ?{5 ?8 c+ a1 M) b$ J
platform_device_unregister(&da850_evm_tl_leds_device);
$ I1 e0 g1 g& D( j j4 r& P; a# k! y) D
printk(KERN_INFO "LED unregister!\n");
5 E( x. d9 T+ m5 D {3 L}5 [& H' F3 }6 t" |. m
# B& d; m$ }* C; k- omodule_init(led_platform_init);
: ~$ R; M+ K: A% k! Omodule_exit(led_platform_exit);
9 n' n8 z$ B- x0 x) P0 e- E0 [$ G% S8 ~* Y* |2 q7 u# @6 h$ P% G+ C
MODULE_DESCRIPTION("Led platform driver");( m G J) t; `
MODULE_AUTHOR("Tronlong");+ R! [8 g& ^" [1 p$ Q
MODULE_LICENSE("GPL");- u4 I f* W* f; ~8 R: Z
! i" F; j" L9 w+ u6 a |
|