|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
& b2 b/ w5 M- \- P8 `8 O#include <linux/init.h>
/ G$ T: T$ N* f7 B$ z& ~) P#include <linux/module.h>9 _# ^6 @0 W% V+ r3 R S
#include <linux/kernel.h>
. W" @' v4 }2 l' |# `9 d#include <linux/types.h>
( `! F& I& N, r#include <linux/gpio.h>
5 Z! c" L: }% R) N: {) @#include <linux/leds.h>
: S6 m. A& t% W6 T& k#include <linux/platform_device.h>; q; r1 N1 K9 n) h/ G+ Y
X' S* Q! p L2 L3 O5 c( H
#include <asm/mach-types.h>' [+ v: s2 g3 U# b" ?. ~1 o1 k. t
#include <asm/mach/arch.h>' p7 u2 G" `! ~0 A M
#include <mach/da8xx.h># \% K: m. |; c: _* x
#include <mach/mux.h>; Q/ E0 t, _2 R) R- ]6 v! j
0 o( ^* K$ L2 Q% v) T
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)& B# y# h( e& ?% S" h0 {/ M; b0 {$ `) F7 a
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
/ z9 j9 v# D7 q+ T' O Q#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
% h4 M5 K2 R H! `( z O#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)! M% Z; }3 y" M! c W5 [
5 `2 u" C% E/ k3 k& \( [/ z/* assign the tl som board LED-GPIOs*/! F/ c" r$ r% n! w# f
static const short da850_evm_tl_user_led_pins[] = {& C+ _- X' u8 n& Y; N/ Z
/* These pins are definition at <mach/mux.h> file */4 A) |$ e9 s4 W4 ~7 H
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
2 V8 h0 E8 W' I -1
/ Y2 Z3 u2 G/ c* O' G& Z! X) K};
/ N# K3 w/ D# p9 T
1 B9 Y0 e. }4 j6 F, |0 z2 N) U# B% pstatic struct gpio_led da850_evm_tl_leds[] = {
4 R/ h; ^. L5 F4 Y {
! ], N# P0 e: d3 a, @; H; K0 o7 C .active_low = 0,
# c4 d* ~7 e. j: Z" I( p .gpio = DA850_USER_LED0,
; g& g) y* F9 q( { .name = "user_led0",
7 F J k1 a; ]$ v2 L9 q8 q .default_trigger = "default-on",
& ~& V1 v: R) j6 l },% H5 |, X8 J$ m) w4 E) z
{
( l+ s D2 A6 Y% M$ t; Y# k- z .active_low = 0,
( ^6 _" @" Y- [7 r' C! G9 B .gpio = DA850_USER_LED1,2 {* Y) ?: m- T9 p7 ]/ s8 u
.name = "user_led1",
. v5 h) e D+ C .default_trigger = "default-on",
L. j* |6 b- z: \. Y2 }; l7 y; b- B },
* J+ q1 U- l. H: r {0 {! O# e# [. ~8 e+ s
.active_low = 0,
' ]7 Z# {$ C( H% Q- a( a .gpio = DA850_USER_LED2,4 ~+ f6 F8 M4 ?+ c
.name = "user_led2",& D; N( z6 f1 }6 ^. @1 Z" c, l
.default_trigger = "default-on",
: \: T3 N0 R/ N$ `' } },1 d" P; W6 }3 w8 O' ]
{+ P! k/ f' Z3 O7 F5 E/ Q
.active_low = 0,* o+ M# Q% [. a2 P) m& O h! Y
.gpio = DA850_USER_LED3,
* y- [/ N! U: ~* o .name = "user_led3",5 u: Z8 t! P( ~
.default_trigger = "default-on",$ [) [: y* }4 d
},
7 ~1 m/ F/ {% U* j& [) z};
; e6 |) r6 ^6 a% i* H
: r+ Y( ]; u( @: Sstatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {+ n) ]( D y* a) E
.leds = da850_evm_tl_leds,5 V$ |6 ^: O/ K% t. g F
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),/ A% e3 p$ C/ `/ z0 i. u
};; k8 J& r7 j9 w1 p9 h9 g# j7 d6 I
! \; Q& K' F6 Z
static void led_dev_release(struct device *dev)
# E" {$ ]& F3 T{
1 K7 d1 D, X1 a3 T& d3 H* O& E};5 N( x, ?7 i& L9 c
7 f: D: I, k" k$ \- Lstatic struct platform_device da850_evm_tl_leds_device = {! v% W/ Z% g% d3 C4 ?5 L
.name = "leds-gpio",! X' Y' A( v3 J, h- W- o$ p$ b, T, H, {
.id = 1,( M. \! O9 h9 k/ I% s, m$ c
.dev = {1 m& u! B: p3 j
.platform_data = &da850_evm_tl_leds_pdata,/ u ^; A2 J* ^. G
.release = led_dev_release,6 t. _% t+ w) ?, R S
}( N$ v* _* o5 }, {5 F' v- |7 s
};9 {; j8 P" K5 D$ v3 P5 B
* H8 M( z: ?, D% H3 `static int __init led_platform_init(void)
" l9 x! R. L$ ?% v{
! j! H2 a5 m: `9 I7 Y4 E int ret;
2 q) Y; O* Q' m. _/ t* m% e* P#if 0
: Z6 U! M$ D) g0 l. a" [ ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);! s9 f! D1 ]) h1 x% W) r: g
if (ret)
- E8 ~, j! a j7 U- i2 l6 {8 Z6 ?) M pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
A; o) c. i! f# ^1 P "%d\n", ret);$ u7 ~/ m7 j; n; ^
#endif
3 w! S2 x- j: ^- Z/ v$ ^% _ ret = platform_device_register(&da850_evm_tl_leds_device);/ e J) ~$ ?/ [9 h5 j* F5 |- u0 m" k
if (ret)' E. x" m! Q( j( W7 X$ _$ S* f
pr_warning("Could not register som GPIO expander LEDS");$ v; c, U0 A$ J5 v& Q) k& w
else3 ~. M" R* X" M) I+ T
printk(KERN_INFO "LED register sucessful!\n");
. l# e6 p1 r7 p# w3 c& ]! {6 H) G# N% V$ R( ?
return ret;
" ^- c$ Y% Y ], K# l}
) p+ u' J" q- P! m: Q9 V i/ _# j# t( s
static void __exit led_platform_exit(void)
# i9 f/ `, Z5 D0 m& I+ p{! Z7 C8 O/ K h5 x2 D4 b
platform_device_unregister(&da850_evm_tl_leds_device);0 z9 W- d+ r( e: U, ]
* g! f% G" T1 q+ p
printk(KERN_INFO "LED unregister!\n");1 e! G) ]8 h w9 t3 p
}
0 u3 d% a( o' G
7 I, l, d, Y8 X6 u! v. E$ z4 P8 t" ?module_init(led_platform_init);
4 I1 j+ ^. N: z5 \0 Dmodule_exit(led_platform_exit);& A. z4 h, v! G, Q/ q6 z9 P
8 S2 U, d1 L9 `% Y* H) jMODULE_DESCRIPTION("Led platform driver");# R. ^4 U6 E9 E7 @
MODULE_AUTHOR("Tronlong");
8 g. A, Z+ h0 @& r" S6 o" I D7 T1 CMODULE_LICENSE("GPL");
4 c1 [2 R3 m3 s5 I
/ P+ p/ J( V( |3 Q2 p$ t7 D |
|