|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
6 Z8 @5 y7 F, H$ _2 c#include <linux/init.h>. ^, W# Z# E M4 |0 G, y- Z/ `; `
#include <linux/module.h>
4 y( m) ^) g8 g. S#include <linux/kernel.h>( K6 ?3 W9 K) |, q9 W3 R
#include <linux/types.h>2 H! I \9 L8 H0 G6 B
#include <linux/gpio.h>
% `+ ?/ B7 J/ X/ w' f#include <linux/leds.h>
. n C% [) B6 z#include <linux/platform_device.h>
5 \7 [* _" y: U7 v ^! ?
" w3 |/ V, r: Q; K* |, p# e#include <asm/mach-types.h>
/ k1 D7 j( A* p#include <asm/mach/arch.h>) P/ J0 o2 T% c4 ~& C
#include <mach/da8xx.h>
! H, K; w; U7 ^5 o; B#include <mach/mux.h>! y7 {: n3 ^( _2 M/ R1 \7 {
* l% v) E0 J: S2 ?
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
# V+ I1 Y% P4 x#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
, R- F( X0 c* u- M, W% ~& K#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)0 K- f2 b# P/ z
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2): b- \) Y+ s* Q
1 x* s7 v( }* @ k0 M- A
/* assign the tl som board LED-GPIOs*/) ]1 t0 t( `, k* m
static const short da850_evm_tl_user_led_pins[] = {. |( J6 |* ~2 y% Y: u
/* These pins are definition at <mach/mux.h> file */
3 p" a, h8 n3 Z2 L; k DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
; Q/ g5 }0 C1 n. S" `) h& {4 ? -1
, D: v( w A3 ]& G};, M# a% [) @6 i( f0 ~4 b$ g
~, w0 P% t3 K3 w* e' o" i$ H, istatic struct gpio_led da850_evm_tl_leds[] = {# o" D2 q% d/ A% R7 }) K2 {, c/ |
{
7 Y: \6 l A4 i6 B! V2 V u .active_low = 0,
3 @5 I* e& N. e3 b( y9 P9 y .gpio = DA850_USER_LED0,
4 W9 a: b+ G" j! ?* H+ N5 T- w .name = "user_led0",5 m9 T! u7 [9 V" C) `; T$ _- Q
.default_trigger = "default-on",2 V# @: N/ {! \1 Y* m- v! K
},
( j2 t1 v; ] z* G# v2 W* m: e4 l {9 I$ |6 W, g3 \4 e( P1 `+ K
.active_low = 0,. I3 Z- e& s6 q
.gpio = DA850_USER_LED1,
9 O. I0 f$ p" W& P. s, ? .name = "user_led1",7 z; H! B$ H5 e/ K* n
.default_trigger = "default-on",2 [) ~3 r9 e* H' [- x
},5 `& K/ {5 y: \' h
{( Z% ^5 `- D# z& o
.active_low = 0,5 r0 C x! s/ R% i
.gpio = DA850_USER_LED2,
" A# \$ n9 O" C4 ]1 T9 m7 }2 `: h .name = "user_led2",
9 }2 X0 r+ D" x: z$ n& k: c .default_trigger = "default-on",5 M9 h( N- U! W; r5 Z9 }
},1 D& i/ [1 Q F1 Z0 y
{
! \; L7 A1 q2 {& R/ |+ Z .active_low = 0,
; ~2 W' r4 d+ l- \9 J .gpio = DA850_USER_LED3,
- h0 Q6 Y3 K0 l2 d .name = "user_led3",
, o, d( X3 I2 ^& p .default_trigger = "default-on",: {9 M2 B& P5 X5 U
},
) O" @# ]5 I9 `4 G* a& i};* o1 T$ D* l! B5 s8 m- j2 y
; Q$ P% ` ]8 [1 L$ A
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
( B$ W1 n4 ]$ `. m1 h .leds = da850_evm_tl_leds,
( b' x7 S, q9 g .num_leds = ARRAY_SIZE(da850_evm_tl_leds),
4 ]& [* Q( h/ k; J& B' C, A};! P2 T5 Y9 |1 e* N+ p0 G
* ]( ?! ?9 b/ j0 E5 t" D
static void led_dev_release(struct device *dev)& z! P7 E3 H& O# ]" c
{! P0 n4 L- D$ t* d: s+ R
};
: D+ s4 M6 I7 p- P8 B
, n# ~7 `7 j/ [8 M2 H! w& @5 I; estatic struct platform_device da850_evm_tl_leds_device = {
3 w, M2 j2 h) z .name = "leds-gpio",2 \( D$ X- v6 i# j6 U5 z: _
.id = 1,7 S+ L5 W( V/ f5 k
.dev = {
7 k0 `* U h9 Z! e% i" B .platform_data = &da850_evm_tl_leds_pdata,
4 B3 H' @ N$ ]0 v9 H- X! O+ r I/ D. t .release = led_dev_release,6 p2 `' y$ J) a% s
}# {9 {8 I! m7 c/ ~, }0 e4 M
};
: H+ K" m/ E" m! ?, V
1 @5 ?$ a& v. F1 U# L; Y) [static int __init led_platform_init(void)8 Q/ l+ h v; h; o5 {
{
1 d8 e" A- S- c' r, b u+ f int ret;$ Z/ I( t8 Y" p
#if 08 t" r' {0 |7 Y: u
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
2 j. H* z+ l" W3 |2 I# _" ? if (ret)
) X/ P6 I; K; m" @: _8 H pr_warning("da850_evm_tl_leds_init : User LED mux failed :" F) ~' {1 I2 j
"%d\n", ret);
, {' K1 t3 M a#endif
; ]! a. f C2 a3 O5 `1 a ret = platform_device_register(&da850_evm_tl_leds_device);# v' f% v& ^: Y9 Q! o! s
if (ret)+ s0 a" V2 Y5 E7 ?9 L! T
pr_warning("Could not register som GPIO expander LEDS");
# v4 p, P% O7 }# R0 d" F# Z else
3 \0 F; t( m+ d printk(KERN_INFO "LED register sucessful!\n");1 Q- a" m( L' T
7 {9 J- h; N2 A' @ return ret;' }- b( z) R8 u8 S+ C
}! l- @0 ~+ t0 o, x( t
8 e$ Y) m! S- c2 L4 n' F5 ~) U
static void __exit led_platform_exit(void)7 q+ ]/ y$ @# n. ~0 Q5 C. P9 I
{
, Z$ N; y6 w7 }0 m! p8 I platform_device_unregister(&da850_evm_tl_leds_device);& M6 ]& r2 v$ }$ @+ p6 d
8 Z$ H/ H7 G& X) g; Q0 n
printk(KERN_INFO "LED unregister!\n");0 H) t6 g4 T5 y2 ^3 h
}& c" G2 m7 v, A3 \6 n. J5 D
. O- K2 m: S. S8 s+ P: [0 B
module_init(led_platform_init);
% t" r0 Z8 w* O1 dmodule_exit(led_platform_exit);
4 l$ S6 M: u3 `& F& x7 N- ^) X1 \) a
MODULE_DESCRIPTION("Led platform driver");
6 h \$ E7 r, x H% }3 aMODULE_AUTHOR("Tronlong");9 J5 ^$ x- Z8 c
MODULE_LICENSE("GPL");& F# p- E' t# @# l
! U9 Y4 i0 ?* s- ?0 B8 Y& Y |
|