|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
4 x5 D j f8 `! x* S9 R+ o#include <linux/init.h>
2 I8 s- V% B( t#include <linux/module.h>2 A& d! Z+ y4 y9 b) K4 C/ l$ i' U [9 _" p
#include <linux/kernel.h>) d/ o* \' I7 x7 J, H" [
#include <linux/types.h>
% f: j H& c& o#include <linux/gpio.h>
: X+ H o* Y& O8 _: }' z#include <linux/leds.h>7 M. H+ n, k0 K! {( J, T
#include <linux/platform_device.h>
# G: j' f: f9 t% g& \. i2 _0 `! R3 [ J+ s5 ?8 q ?! q8 f5 q
#include <asm/mach-types.h>
6 o# V9 m8 s* I/ N) f6 q( ^6 p#include <asm/mach/arch.h>
5 O0 j9 u7 A p6 R#include <mach/da8xx.h>( k! c& {0 I: _$ D9 Y, A
#include <mach/mux.h>
1 F9 l3 N2 f7 Q" r2 x1 V# Q! C* A, t
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)+ E; Z6 m3 M: i$ q* W6 ?1 w, j
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5) ^. c: `: O+ C( p0 N# Y; K
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)" o' X9 |# l9 E j8 F, o$ s6 E
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
( T5 c9 A8 ^' D2 f
) E& k4 Q C4 ^9 w/* assign the tl som board LED-GPIOs*/# |% F3 \- |# x3 c
static const short da850_evm_tl_user_led_pins[] = {
! r) g8 F: j0 m4 |( A( S /* These pins are definition at <mach/mux.h> file */8 I. Q3 R+ ~8 d
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
' `0 B" ^/ ^$ k ~# q& @& M -1# U- V f$ f: Y' U; `' ?
};
4 }+ d# D7 Y9 O& |; R( U* R l {6 k- z7 v9 n# H' G# @
static struct gpio_led da850_evm_tl_leds[] = {
9 y- Q2 ?! h' {' |- I# [4 f' [ {$ A& T5 O' R" {$ I
.active_low = 0,4 ?% ]% {& ~% i* s# p9 W
.gpio = DA850_USER_LED0,
9 Y. d7 T t2 @3 G) t .name = "user_led0",7 M! u( N+ r. @7 j# B
.default_trigger = "default-on",
- e; u0 V" i* G5 N7 ~- c9 T },/ p; M9 O8 L' g# D+ h$ X4 u
{
! r& M! S& J) R1 U8 @4 G" t .active_low = 0,
4 Q8 ]4 g7 r; Y% P+ |' z8 j2 \* H .gpio = DA850_USER_LED1,
0 G% w6 B7 M: b7 M9 n& T .name = "user_led1",
1 {% P l |9 \" M5 g5 B3 o .default_trigger = "default-on",# B9 Y/ v. q+ s) f5 U
},
# e w2 ]. z( R8 Y( c K) [ {
8 i4 C- {; \, \ .active_low = 0,0 o7 l! _9 F- M- D9 F% C+ M
.gpio = DA850_USER_LED2,6 m8 w4 M* _5 g, a0 C) A9 ]
.name = "user_led2",
9 m( x! Z4 x5 k+ n& D' Z( ?/ z .default_trigger = "default-on",5 x$ K1 J* m! y' a" P; p) B, k
},; f' |4 E; B2 S! ?6 B
{
3 }, o5 C6 x- Z0 \ .active_low = 0,
& o% `. A7 d/ x .gpio = DA850_USER_LED3," A2 ^6 _/ a* n8 o2 A4 i- `% s
.name = "user_led3",
& p9 B/ m" K& J .default_trigger = "default-on",
M( f6 d( Q1 `# O( { },8 _1 n* V. o; P" E
};, i- c0 \' B+ ^. `, U9 M
0 D; ~2 o0 h0 u5 f9 m
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
0 B# ~2 C7 k) J' K% D6 y8 U8 Q7 ? .leds = da850_evm_tl_leds," p6 ?" Y6 O. l: F1 |& v
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),) B1 t6 B3 ]& \' G
};) {" P6 `" j. E+ e, f# b
" I- H) x4 y) P
static void led_dev_release(struct device *dev)
1 b5 T' P% K2 N7 d' \# d2 ]{( X# g/ J8 j! a+ o( N
};4 s6 S# b8 A8 G/ C* U H$ X
+ W& g$ a7 Q4 e, `* I% astatic struct platform_device da850_evm_tl_leds_device = {& @9 [; ^- q/ G8 \) l v7 Z( |7 k* U7 C
.name = "leds-gpio",
) q( W0 y" ^) Z4 k6 k$ F( B .id = 1,
& r( n/ x; d$ |$ q% r+ j .dev = {
/ ?- s( n+ D. p+ b! Y2 i .platform_data = &da850_evm_tl_leds_pdata,
5 l9 S, |1 m7 ^2 u9 a .release = led_dev_release,
* p1 S! R% r& R6 y8 e( p! P3 O }
' ?% U7 s" x& O& i; `4 ^8 e};; b% e' @5 U. a. W' R/ \" A
* C: |' J/ C4 G' r3 T& g
static int __init led_platform_init(void)7 A5 P% a# l% S# @3 Z
{ a3 S }5 Z. Y4 P y+ Q
int ret;2 E7 r# K# H$ O
#if 02 Q4 t! l& w9 N
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);& V6 X% Y3 h$ [% R6 Z6 Y
if (ret); \2 d5 V. D Q, _, z# u; T4 b
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"3 W5 f- t6 V& g5 l- e" t K
"%d\n", ret);# t, k& p2 h. q' I8 Z6 a5 l
#endif8 L: F% G' o% `% q1 {
ret = platform_device_register(&da850_evm_tl_leds_device);* n, c) {" m) O% L
if (ret)
3 g4 x O0 g. |- w" M; E. t% F pr_warning("Could not register som GPIO expander LEDS");
$ y# L, {: i1 {! U else4 M% r" W8 ]* d5 t4 p
printk(KERN_INFO "LED register sucessful!\n");
0 P8 g3 W: F* A G. x3 [2 G( ^5 y0 G
return ret;/ |* S5 G7 r! U- ?, N( Y
}
6 i& m9 u L% l$ Z- E8 q* A3 w K1 P1 T, X+ S8 L% O, A
static void __exit led_platform_exit(void)$ L4 g! F$ O- u
{; v* k8 [+ g* {
platform_device_unregister(&da850_evm_tl_leds_device);- O; K3 O- }7 |: @# e
" z p8 [- q6 j* m. Z( B printk(KERN_INFO "LED unregister!\n");
% t0 Y& W( L- l' C}
+ D$ X! o3 {* a; D4 e6 d3 I; g+ Q# P. F P) ~: g$ Q3 `
module_init(led_platform_init);
8 r4 s$ v5 u, T% p+ h( Lmodule_exit(led_platform_exit);6 {6 [9 h* }; y
4 J# `% t5 m4 X7 q( LMODULE_DESCRIPTION("Led platform driver");, r0 W, [5 S: Z% s9 Q
MODULE_AUTHOR("Tronlong");
9 @; W9 {' Y. sMODULE_LICENSE("GPL");
! q7 F. P5 V7 I% K- T$ i" A) s; _; \5 N0 H; k2 ]4 m- J3 `3 h! o; N
|
|