|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
7 D& S3 h3 r. l2 E# H$ U#include <linux/init.h>" O# H9 {2 u; c" G' O4 L
#include <linux/module.h>3 V* W; R& K2 [8 t
#include <linux/kernel.h>
# H4 j) n: s- I6 _#include <linux/types.h>) H. v9 g' t6 N( X8 z
#include <linux/gpio.h>, H' k0 m) V. r4 E- e8 S
#include <linux/leds.h>
8 K) l3 p8 l( i2 s2 g, @3 ]#include <linux/platform_device.h>
* `# M4 X( d" H+ P8 D
7 l0 I' j! l: ]8 T#include <asm/mach-types.h># Z5 p6 @1 q% m a! u" c
#include <asm/mach/arch.h>
/ k$ ?" u: J' U& @+ \% j' R( U3 q#include <mach/da8xx.h>
! I. }/ c r8 @#include <mach/mux.h>
4 L3 i" g! p+ m8 n/ S# ^8 y+ s( |( y3 D& M E. |! j0 v: h% C' i/ \8 n$ z: G
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
$ v. `9 b; l0 [4 H% [$ Q#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)7 P6 A5 p6 s* T. H0 K: x: e! _+ h
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)5 w: _( {$ X. m$ o8 Q8 Y6 b
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
2 i0 Z% C) b! X$ J8 Z' h- |8 i% b# Z- }. `: Q9 ~, k
/* assign the tl som board LED-GPIOs*/+ V/ d3 p8 L% z8 l; K. `
static const short da850_evm_tl_user_led_pins[] = {7 j& ]6 R! C: J( e5 j9 [
/* These pins are definition at <mach/mux.h> file */& E- w; m* m. `- S
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
* Y/ f' r3 k% l8 Y -1
, ]2 e" ` Y# d: S! q3 q};6 {& ^6 o3 D' {' S7 |( r
( |3 b2 |3 X* A6 C T
static struct gpio_led da850_evm_tl_leds[] = {# E& L1 I/ R3 {( T2 T
{9 N( \6 ^$ T$ w5 P, P8 C
.active_low = 0,. u; L8 Y: u; z. F; ]- k+ x4 j% l( z
.gpio = DA850_USER_LED0,4 n$ i* k) K6 Z3 d* |0 Y7 `, U) B
.name = "user_led0",% q7 W) _, c; X1 e) F
.default_trigger = "default-on",8 J) ~; g5 t7 M
},
* Y' K( F y( t* A {" u3 ]. r4 o3 F- h" J2 S
.active_low = 0,
- m# D, r3 K/ B. h& w% ] .gpio = DA850_USER_LED1,* r0 u9 U( T* M1 ^ n3 P
.name = "user_led1",
: a+ Q& X: m/ S+ x, Z0 X. E .default_trigger = "default-on", l- I0 t t% e6 v- [8 }
},
& w- ?) E6 n1 D7 u {
8 t2 x$ t6 {, \+ e .active_low = 0,
3 I5 Q7 w* N5 E) F2 d( e .gpio = DA850_USER_LED2,: @# Y8 J( n5 U% g- m
.name = "user_led2",
$ y, e6 {- q/ x7 l .default_trigger = "default-on",- v: p& `7 K# V; E8 H% G
},! n6 N! E$ a8 C2 B8 O4 O$ c \( d& \
{$ _" L' B. `% I+ i4 l
.active_low = 0,5 t3 [3 q2 _, \7 @6 E4 T
.gpio = DA850_USER_LED3,- Y- I8 D2 k1 e7 D' H: v4 f
.name = "user_led3",- Y' a0 z# Z1 v- }8 h& B- g, k
.default_trigger = "default-on",
5 J0 b6 L5 x4 C5 Z' w8 a },8 S! W. s1 p7 [) d
};. `# O& h1 u" S. D+ {0 _# e
; B" @4 F7 ]2 \static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {5 G t' I, M2 b; g) F; k
.leds = da850_evm_tl_leds," u' D) Y% {) e- M
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),8 s1 A- G4 y t6 Q6 G" A! P
};
2 P* E# `# O1 w" h
: Q. o/ [& H6 h8 Qstatic void led_dev_release(struct device *dev)$ F! F9 p6 Y/ q E$ U
{
7 X+ a; R W; W7 v9 f};7 _* v( }3 e/ R) Q* z
4 w( x1 u* g# _static struct platform_device da850_evm_tl_leds_device = {9 p6 X; u5 ^1 v5 V1 p
.name = "leds-gpio",
. w3 k6 ^. d8 T T .id = 1,
. `3 Z6 e( _& U% G3 c- Q .dev = {0 x K1 O6 A1 l% Q9 a- P0 H
.platform_data = &da850_evm_tl_leds_pdata,
6 Q- p- O Z3 i1 X .release = led_dev_release,# N6 L% P2 F/ S/ D' ^1 [
}5 N+ x/ k- T5 ^4 N1 _% o
};
( Y7 w8 O! h7 @; z0 c n# W! Q* ^1 \9 T8 q0 ]! Z
static int __init led_platform_init(void)
) Q# I- A+ n7 b{- c" x0 e$ d! L3 ]
int ret; a s {& L) Y- k3 A
#if 09 g. T" C P- t/ m" z
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);0 ]2 B$ m% `, P/ h
if (ret)
$ `3 \2 W5 l$ s/ q! k/ b pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
# }3 w" L( ^; m7 G4 \' o7 |9 J/ K, U "%d\n", ret);* A- T' p7 [# q4 i/ I5 E
#endif: Y* O: R2 W0 K% b- b1 G
ret = platform_device_register(&da850_evm_tl_leds_device);1 O8 T% l1 t9 h9 g+ T
if (ret)' r4 U' g( n, Z, X* ]7 ~
pr_warning("Could not register som GPIO expander LEDS");
! E% Y. D; T6 @; O+ G3 D8 M else
# M+ |; ?# T+ A printk(KERN_INFO "LED register sucessful!\n");
( e( D8 }8 V# ?; c! g; A2 P; q- H& _% a- O3 l5 W% _6 r X3 ~0 i
return ret;: V9 W8 G0 a% W: H% Y
}% X/ Q& n' G. A
$ ^& B5 F1 P; F9 G; n0 @static void __exit led_platform_exit(void)
0 s! K( @1 ^5 s* }{7 \( Y" H) F2 T
platform_device_unregister(&da850_evm_tl_leds_device);4 b6 Y: J" `4 i3 l4 |$ h
/ N$ _4 ?( P6 {' O
printk(KERN_INFO "LED unregister!\n");
" I+ c0 W& @- E7 y0 `( E5 q# B9 o$ Q; G) p}1 A: M9 o% \5 z+ e
, _! A% P2 m( A1 _) C1 h( n
module_init(led_platform_init);
% |' H- u5 |" K8 |: x. wmodule_exit(led_platform_exit);
6 Y* r2 M' C' Y: L4 r- L4 D: |. H X. ^" `) l3 [; v% |
MODULE_DESCRIPTION("Led platform driver");
% a* y: o4 u' yMODULE_AUTHOR("Tronlong");
* h5 R3 x( w' j8 IMODULE_LICENSE("GPL"); i' X' K# |8 Y7 q+ D
3 F# q; ?7 Q( b8 z8 Z5 D2 t6 k |
|