|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
- g! z n, m+ O' [#include <linux/init.h>
* f d& T) e- [- S; C) |8 u#include <linux/module.h>
3 w) g2 d$ C* A( z4 V, e#include <linux/kernel.h>
, ^6 {& ^* p2 f0 V3 J# N- _3 F$ k#include <linux/types.h>
- E& @' o8 b0 c5 h/ @#include <linux/gpio.h>- D u8 t, H* z0 N4 D" V3 K) u
#include <linux/leds.h>
3 P6 V! O J" \1 K#include <linux/platform_device.h>7 E W* I% d0 ?
; j% a" j' z4 F$ k& ]4 \+ M
#include <asm/mach-types.h>$ l5 Q- L& ?( c; y7 h( o+ l) D
#include <asm/mach/arch.h>
/ O- u, c. Q9 w3 `& E#include <mach/da8xx.h>) r6 r7 o- Q! |( m; j& p6 d
#include <mach/mux.h>
`+ y5 W( z* i7 r# b
# x+ ~" m" u' K% F2 d#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
/ U: ?% w5 L7 x+ L! S#define DA850_USER_LED1 GPIO_TO_PIN(0, 5) m7 C' Z1 |) b) f' Y1 @+ P
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
& j* G# ~8 h9 o1 e ?% R#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)/ } b& M7 l" b2 n1 s: k2 E
: A9 ]0 \; I4 h( \- \: H/* assign the tl som board LED-GPIOs*/) V! M0 F6 Y- u7 i
static const short da850_evm_tl_user_led_pins[] = {
/ z, `0 t& o, D5 L, i /* These pins are definition at <mach/mux.h> file */
x! t k5 v/ u DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
; ?' }2 p( ^! m6 ~" { -1
7 N$ _! B) u$ Y( \2 _/ B; k3 `};
6 e' {& `5 K" ?- q/ J. {
6 p7 @0 J0 Y' t: Estatic struct gpio_led da850_evm_tl_leds[] = {4 h* ]# B7 D/ d
{: e+ E- b4 L: m5 Q7 P2 ^6 z
.active_low = 0,
7 E% ?4 g& w" N& z3 [ .gpio = DA850_USER_LED0,
! r8 n# L [3 }* Q0 R" T: F .name = "user_led0",+ J2 N$ K+ L h2 z/ {0 F( {3 u
.default_trigger = "default-on",
1 d8 `. I3 Y4 Y- o! h },
( M6 U. G* H8 H {
) z* L; C, w; Y. f5 a, w6 L; L .active_low = 0,
- T8 }$ I. |& m .gpio = DA850_USER_LED1,
* t' v6 A" @4 E: Y# t .name = "user_led1",
6 E: }0 n ?$ I+ M4 D .default_trigger = "default-on",; r& r; ]6 A+ J& p9 M
},7 i3 l8 F: {- J0 F/ U0 G
{( l# D% O9 H, P" _, `' M
.active_low = 0, ^7 W, T- G$ N+ Q; v& T
.gpio = DA850_USER_LED2,
4 B5 z# m! |5 u$ b- P+ K+ L .name = "user_led2",& T8 k3 s) q$ j# M/ a/ f
.default_trigger = "default-on",
5 w; _. n. n9 `, U# R0 l {/ W2 p },5 P- \: A# e/ ~ \1 U. m
{
, U$ [& u- G8 F O; q$ S .active_low = 0,: j1 ?, M# p) D$ }8 e0 E
.gpio = DA850_USER_LED3,$ ^- v$ W$ i( }: k$ C
.name = "user_led3", r2 c' ^* D& w, L e# g( B
.default_trigger = "default-on",- Y; `+ Z8 F& e) W0 E; _# v/ `
},- z) s5 d$ N' r8 |( c* c" b
};$ V+ t& \5 [% Q- Z W! i
% R" W! n- ]: c# ~, J6 O! R
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
4 G; g! _6 z. E' }1 w .leds = da850_evm_tl_leds,
$ T, ^5 a* H. d: g- C .num_leds = ARRAY_SIZE(da850_evm_tl_leds),
; ^" h m4 H+ Y6 n};
B' M' @- b- c. D7 k- y! {' r
5 X0 i7 A- X" j3 A. J/ w7 @% ]( g3 Rstatic void led_dev_release(struct device *dev)
. y+ r Z: @; D9 }% ^& D" v6 |6 z{
0 V7 T y% H! a) q2 }( k};
, {* B3 {; W( p3 s5 g1 o$ [! h$ x9 Z$ I7 m$ j- M3 o- c* k2 U1 l' k" z
static struct platform_device da850_evm_tl_leds_device = {. S2 N, j2 D# K+ I0 J) ]) J3 T) |
.name = "leds-gpio",2 `$ G' k9 K1 \
.id = 1,
. q7 `- K2 A/ Q .dev = {! L& F: X5 T1 ?! x' j3 [5 v8 a$ m
.platform_data = &da850_evm_tl_leds_pdata,
( b. a9 T$ b; ~' E! O+ v .release = led_dev_release,- e; y! t0 ]) n: y7 `
}+ ~& V5 ]' ?: M
};
# y9 _) U, d7 B& q" H9 X( z/ i& E' _2 w2 Z! S$ B/ F" X
static int __init led_platform_init(void)
& ^" z1 J) ?- Y1 c" l# k& X0 ^{5 F3 v+ a% a; [& M6 |- V# B
int ret;0 u F. i* u! z7 Z( L" |
#if 0: d5 f7 u) A4 ]8 C
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);2 B6 S9 J& b- ~; C( t; C; J8 J
if (ret)$ f v: _) l7 o: [! w
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
/ B2 S: c M$ M6 S6 ] "%d\n", ret);: f; a; o) J7 R- ^- e; T" s: O2 v
#endif q0 k( w* H1 l' O; G
ret = platform_device_register(&da850_evm_tl_leds_device);
6 g# S" B' A5 A; `( j if (ret)
& o: a: z$ R2 J/ } pr_warning("Could not register som GPIO expander LEDS");
3 C" E0 @8 k+ }: o* T4 m else. N1 D& Q, y$ S
printk(KERN_INFO "LED register sucessful!\n");) y) X) T. O* A9 _* C6 | i
* M/ q2 z2 r* {0 E1 I
return ret;
; W# L, A9 f2 M; ^9 d}3 y5 x3 Q J* S( T" u. I, S
6 h! @- g' `6 l+ n
static void __exit led_platform_exit(void)3 o$ K6 [2 |4 ]
{+ [1 m$ A. N( G1 K. Y- o' V
platform_device_unregister(&da850_evm_tl_leds_device);6 q* a) F2 a7 ~- x0 e
2 j U$ T9 c4 J) J
printk(KERN_INFO "LED unregister!\n");4 |8 B8 O4 N* k$ [2 s6 F! ? r
}- U- Z( v7 s3 K x4 p) g4 K
$ R) V5 m( Y% z! w7 fmodule_init(led_platform_init);
5 x( h' G0 c+ i! z) W8 fmodule_exit(led_platform_exit);
+ w0 w. ?, C! M/ |8 Z' G
9 u' k( T7 D+ T: S+ ~2 |% c0 MMODULE_DESCRIPTION("Led platform driver");
$ R5 @- L1 T3 B; VMODULE_AUTHOR("Tronlong");( x5 f" X& ?. d. j- C4 G: m
MODULE_LICENSE("GPL");
- {+ L: e D0 l( A/ H1 B$ g3 z2 a) ?
|
|