|
|
求大神给下面的程序做注解,请稍详细些,谢谢。# a3 S3 A7 Y0 [# Q3 e; N# _
#include <linux/init.h>
! {6 _4 n: i5 r* p' [. V, j ?9 F#include <linux/module.h>9 r0 b5 u( P# v4 g7 s- k0 m* F
#include <linux/kernel.h>
6 C% c8 }' m0 L# W# g#include <linux/types.h>
8 T( a, j$ _! x5 M$ D: F8 ^& Q#include <linux/gpio.h>4 ?8 m$ P/ Y6 \% a0 T7 D
#include <linux/leds.h>, F+ r: Y& Z" I4 I" t* S4 ^/ r
#include <linux/platform_device.h>
2 x& ^4 Q# R' }4 n0 U9 E' p1 r
# v/ e+ G4 u- D( o; n#include <asm/mach-types.h>4 [+ _, \' T( I6 w2 p
#include <asm/mach/arch.h>
) W# j& \( u/ G#include <mach/da8xx.h>
2 s8 e6 ^; c3 H3 P4 z( X* a) H#include <mach/mux.h>6 }" ~: c; w+ f4 a# D- @
% [2 C; T; U( Q! B1 n& d/ l
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
) R8 D; x9 _# ]! i2 U#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
5 B* x8 i# u2 q& u+ l#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
% g- d4 |! Z& _* a) W9 V6 S5 [1 h% q9 ?#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
1 V- E4 r& E) L* `% k" p2 t4 a0 F1 b8 E/ ~- r9 y
/* assign the tl som board LED-GPIOs*/
: {. s& J* \* v$ y% m1 d! Ustatic const short da850_evm_tl_user_led_pins[] = {; k$ X! t7 W4 d+ l3 o
/* These pins are definition at <mach/mux.h> file */9 V2 ^9 H* @: U1 {
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
( b/ U% [ m) ]% n0 z3 ? -1) _; ?4 I1 A6 x! t
};
8 Y5 S2 S; F$ P( l" a7 `# ~3 P2 c3 K8 U& }! S6 b" i0 t
static struct gpio_led da850_evm_tl_leds[] = {7 F( e& O4 b, U. A/ q; q' j2 L
{! L* P1 V0 h8 d. y$ i- S
.active_low = 0,
# ]! U% @; R5 H+ y; e4 ], |" g% ` .gpio = DA850_USER_LED0,
3 N+ ~! k9 a i, s" K5 N8 z .name = "user_led0",: d! U7 g. z7 [3 k. U
.default_trigger = "default-on",& p6 E6 t- D7 b- v
},
8 z) P q3 l* l {
* S; W9 X1 R- M" _% b4 e+ Q+ T" x .active_low = 0,# g# C0 n, G0 j. B! t
.gpio = DA850_USER_LED1,
^, b9 j2 U) `" r9 j1 x8 ]- @ .name = "user_led1",* H* r, Y! I- R3 Z& N- s
.default_trigger = "default-on",# P9 p7 E4 [! Z+ q9 d/ w
},
7 Z. O3 P- @9 X8 k% b3 N {
" g. c$ q$ x! ?$ { .active_low = 0,
N2 D" z& P: |& k" `- Q6 z2 i .gpio = DA850_USER_LED2,
$ R" n9 u, E; g .name = "user_led2",8 L" P0 M3 o5 \( a- f
.default_trigger = "default-on",; ]6 m6 y$ K2 P$ H7 W' ?9 }
},3 w. s0 W6 e) T+ V
{
. p+ V4 Z0 S9 N2 C1 p! R5 d .active_low = 0,' ?0 j! a4 N6 U" |& `& t5 t) V
.gpio = DA850_USER_LED3,1 q; n3 {8 m |- F. `
.name = "user_led3",' e, K: s) g3 i7 l1 N
.default_trigger = "default-on",! {7 B. g" v B+ @6 B
}," X* o/ B3 w: p* e6 @
};
: j1 c# L& q6 ^8 k, @- F- }- ~+ S7 ]9 a9 A' y
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {/ C$ {% q# S! ~
.leds = da850_evm_tl_leds,* f% ~! z" J# H: u
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),
* F5 Y8 ^9 W& U" {7 v% X};# w$ V8 y! Z! ?) W
4 e, V. a, F! H6 K: l+ {
static void led_dev_release(struct device *dev)
7 R, \+ g5 `0 Z, I0 ?% Z4 _. b' ^4 c{: D. h+ Z; ]6 l; v+ K' t! B% i0 W
};
1 `: K. t) y; V9 X* z0 E' l; f! j$ `( N% U- V, O! M+ @7 z0 Q
static struct platform_device da850_evm_tl_leds_device = {1 W6 T+ H' i& {0 h. P
.name = "leds-gpio",: D* z- O* r) U, l0 X
.id = 1,
9 I- @9 f$ j7 h! c; F .dev = {1 D2 W; ^' t; e9 u
.platform_data = &da850_evm_tl_leds_pdata,
( C! \1 L' d' x q( X& w( B) B! _ .release = led_dev_release,, [3 T) [& W+ V" Z% F; f
} [, Q4 Z5 r8 }5 |, y# G
};
8 u. p- Z3 C# A; ?% f+ N& W3 c& ^" N1 [' a8 p, I- J
static int __init led_platform_init(void)
* x" h) Q9 b+ T{
) L" ^# J* N- f5 M int ret;
' c" w$ q! \& D& s% G% K#if 0' j$ i0 Y9 p& ^
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);, U2 } J) f* J# L1 c% L
if (ret)' F0 n7 b+ r k$ f2 l3 H
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
7 h, T4 [; C, B \" Y! v- o "%d\n", ret);( n+ ?* C4 Q$ U$ e& J$ E2 F
#endif: q8 @% L4 G& h; `
ret = platform_device_register(&da850_evm_tl_leds_device);
: z. K% Z# }" J" Q if (ret), j( F( y6 V' m% J
pr_warning("Could not register som GPIO expander LEDS");
- M4 @; ]( o( v; d1 Q else
$ n4 k5 Q# H8 h0 ]: d2 n printk(KERN_INFO "LED register sucessful!\n");. F, I2 j1 r8 j
7 ?, z- ?9 l y) I. y2 w" I2 { return ret;, ~7 k; k5 X C( Q
}6 Y x1 H; Y. K$ m g4 R
4 S" a+ ] ? X$ v$ E
static void __exit led_platform_exit(void)' y; P/ l# J) o( g
{
' a, F: m* J. d' ~7 b0 A, s* C platform_device_unregister(&da850_evm_tl_leds_device);6 v+ M: Y5 H5 e& W J" G7 {4 b# R
& U( X( ?' ]) S; C# k printk(KERN_INFO "LED unregister!\n");
3 |6 x. t5 |- u}8 N1 ^9 u5 T1 o, E( O# W% y
+ o+ \8 F% R& n1 k2 M
module_init(led_platform_init);' p r4 u$ w* X0 D1 m# `/ p- @
module_exit(led_platform_exit);7 G/ o7 g$ s( m1 ?8 b
# b: t1 J) k" D( Q3 C
MODULE_DESCRIPTION("Led platform driver");
# B# O g1 J2 _4 w9 y- |# fMODULE_AUTHOR("Tronlong");) Q# b# ~, z5 U8 z x$ U8 [4 t) a6 I
MODULE_LICENSE("GPL");
/ z9 h# T9 ]; C3 W5 H0 F* g
- z+ h5 Q6 ^9 E( Q |
|